diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 36d892be1cffe1d0c48904ae21dc1c1daf7580ef..55be8df7935f3f2709cdbeeb5443a39004f464b7 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -9,6 +9,38 @@ and this project adheres to `Semantic Versioning`_.
 Unreleased
 ----------
 
+`2.10`_ - 2022-06-25
+--------------------
+
+Added
+~~~~~
+
+* Add Ukrainian locale (contributed by Sergiy Gorichenko from Fre(i)e Software GmbH).
+* Add third gender to gender choices
+* Add DataCheck to validate specific fields of specific models
+
+Changed
+~~~~~~~
+
+* Restructure group page and show more information about members.
+* django-two-factor-auth >= 1.14.0 is now required due to a
+  backwards-incompatible breakage in that library
+
+Fixed
+~~~~~~~
+
+* Password change view did not redirect to login when accessed unauthenticated.
+* Sorting icons were inlined into stylesheet
+* iOS devices used the favicon instead of the PWA icon when the PWA was added to the home screen.
+
+Changed
+~~~~~~~
+
+* Update icon choices for models to new icon set
+
+`2.9`_ - 2022-05-25
+-------------------
+
 Added
 ~~~~~
 
@@ -21,15 +53,25 @@ Fixed
 * The menu button used to be displayed twice on smaller screens.
 * The icons were loaded from external servers instead from local server.
 * Weekdays were not translated if system locales were missing
+
   * Added locales-all to base image and note to docs
+
 * The icons in the account menu were still the old ones.
 * 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.
-* [OAuth2] Resources which are protected with client credentials 
-  allowed access if no scopes were allowed.
+* [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.
 * Some OAuth2 views stopped working with long scope names.
+* Resetting password was impossible due to a missing rule
+* Language selection was broken when only one language was enabled in
+  preferences.
+
+Removed
+~~~~~~~
+
+* Remove option to limit available languages in preferences.
 
 Changed
 ~~~~~~~
@@ -38,7 +80,7 @@ Changed
 * [Dev] ActionForm now returns a proper return value from the executed action
 * Pin version of javascript dependencies
 
-2.8.1`_ - 2022-03-13
+`2.8.1`_ - 2022-03-13
 --------------------
 
 Changed
@@ -72,6 +114,7 @@ Changed
 Fixed
 ~~~~~
 
+* The user handbook was lacking images and instructions on PWA usage with the Safari browser.
 * The ``reset password`` button on the login site used to overflow the card on smaller devices.
 
 Deprecated
@@ -825,3 +868,5 @@ Fixed
 .. _2.7.4: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.7.4
 .. _2.8: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.8
 .. _2.8.1: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.8.1
+.. _2.9: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.9
+.. _2.10: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.10
diff --git a/aleksis/core/data_checks.py b/aleksis/core/data_checks.py
index d82c30d5ddf0b5ab11e7b1b5f8c2a595838c07e1..47194ece7a30b3bdf6a4fa6fc9624fd9851d2be9 100644
--- a/aleksis/core/data_checks.py
+++ b/aleksis/core/data_checks.py
@@ -3,8 +3,11 @@ from datetime import timedelta
 
 from django.apps import apps
 from django.contrib.contenttypes.models import ContentType
+from django.core.exceptions import ValidationError
+from django.db.models import Model
 from django.db.models.aggregates import Count
 from django.utils.functional import classproperty
+from django.utils.text import slugify
 from django.utils.translation import gettext as _
 
 import reversion
@@ -316,3 +319,31 @@ class BrokenDashboardWidgetDataCheck(DataCheck):
         for widget in broken_widgets:
             logging.info("Check DashboardWidget %s", widget)
             cls.register_result(widget)
+
+
+def field_validation_data_check_factory(app_name: str, model_name: str, field_name: str) -> type:
+    from django.apps import apps
+
+    class FieldValidationDataCheck(DataCheck):
+        name = f"field_validation_{slugify(model_name)}_{slugify(field_name)}"
+        verbose_name = _(
+            "Validate field %s of model %s." % (field_name, app_name + "." + model_name)
+        )
+        problem_name = _("The field %s couldn't be validated successfully." % field_name)
+        solve_options = {
+            IgnoreSolveOption.name: IgnoreSolveOption,
+        }
+
+        @classmethod
+        def check_data(cls):
+            model: Model = apps.get_model(app_name, model_name)
+            for obj in model.objects.all():
+                try:
+                    model._meta.get_field(field_name).validate(getattr(obj, field_name), obj)
+                except ValidationError as e:
+                    logging.info(f"Check {model_name} {obj}")
+                    cls.register_result(obj)
+
+    FieldValidationDataCheck.__name__ = model_name + "FieldValidationDataCheck"
+
+    return FieldValidationDataCheck
diff --git a/aleksis/core/forms.py b/aleksis/core/forms.py
index 3fb938822b093e250299a3fac04f0e0358e6f47a..b3c3493e7d5ee0ee7f9b0fe7d01258a5459f26cf 100644
--- a/aleksis/core/forms.py
+++ b/aleksis/core/forms.py
@@ -583,7 +583,7 @@ class AccountRegisterForm(SignupForm, ExtensibleForm):
             "short_name",
         ),
         Fieldset(
-            _("Adress data"),
+            _("Address data"),
             Row("street", "housenumber"),
             Row("postal_code", "place"),
         ),
diff --git a/aleksis/core/locale/ar/LC_MESSAGES/django.po b/aleksis/core/locale/ar/LC_MESSAGES/django.po
index ee356cc39b7d01a0aad1fd7fa3e0343f42da7a6c..df6153f7196d2535a19143cb11bfa43a0f831953 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: 2022-03-23 11:19+0100\n"
+"POT-Creation-Date: 2022-06-25 12:09+0200\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"
@@ -38,34 +38,62 @@ msgstr ""
 msgid "Home and mobile phone"
 msgstr ""
 
-#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:185
-#: aleksis/core/models.py:487 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:171
+#: 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
 msgid "Groups"
 msgstr ""
 
-#: aleksis/core/data_checks.py:56
+#: aleksis/core/data_checks.py:59
 msgid "Ignore problem"
 msgstr ""
 
-#: aleksis/core/data_checks.py:185
+#: aleksis/core/data_checks.py:188
 #, python-brace-format
 msgid "Solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/data_checks.py:291
+#: aleksis/core/data_checks.py:294
 msgid "Deactivate DashboardWidget"
 msgstr ""
 
-#: aleksis/core/data_checks.py:303
+#: aleksis/core/data_checks.py:306
 msgid "Ensure that there are no broken DashboardWidgets."
 msgstr ""
 
-#: aleksis/core/data_checks.py:304
+#: aleksis/core/data_checks.py:307
 msgid "The DashboardWidget was reported broken automatically."
 msgstr ""
 
+#: aleksis/core/data_checks.py:330
+#, python-format
+msgid "Validate field %s of model %s."
+msgstr ""
+
+#: aleksis/core/data_checks.py:332
+#, python-format
+msgid "The field %s couldn't be validated successfully."
+msgstr ""
+
+#: aleksis/core/feeds.py:52
+msgid "Birthday Calendar"
+msgstr ""
+
+#: aleksis/core/feeds.py:53
+msgid "A Calendar of Birthdays"
+msgstr ""
+
+#: aleksis/core/feeds.py:66
+#, python-format
+msgid "%(name)s's birthday"
+msgstr ""
+
+#: aleksis/core/feeds.py:71
+#, python-format
+msgid "%(name)s was born on %(birthday)s"
+msgstr ""
+
 #: 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
@@ -91,11 +119,11 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:713
+#: aleksis/core/filters.py:113 aleksis/core/models.py:720
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:486
+#: aleksis/core/filters.py:135 aleksis/core/models.py:493
 msgid "Group"
 msgstr ""
 
@@ -103,7 +131,7 @@ msgstr ""
 msgid "Base data"
 msgstr ""
 
-#: aleksis/core/forms.py:55
+#: aleksis/core/forms.py:55 aleksis/core/tables.py:47
 msgid "Address"
 msgstr ""
 
@@ -131,7 +159,7 @@ msgstr ""
 msgid "This username is already in use."
 msgstr ""
 
-#: aleksis/core/forms.py:153 aleksis/core/models.py:134
+#: aleksis/core/forms.py:153 aleksis/core/models.py:141
 msgid "School term"
 msgstr ""
 
@@ -140,7 +168,7 @@ msgid "Common data"
 msgstr ""
 
 #: aleksis/core/forms.py:155 aleksis/core/forms.py:207
-#: aleksis/core/menus.py:174 aleksis/core/models.py:157
+#: aleksis/core/menus.py:160 aleksis/core/models.py:164
 #: aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
@@ -150,18 +178,18 @@ msgstr ""
 msgid "Additional data"
 msgstr ""
 
-#: aleksis/core/forms.py:157 aleksis/core/models.py:210
-#: aleksis/core/models.py:539
+#: aleksis/core/forms.py:157 aleksis/core/models.py:217
+#: aleksis/core/models.py:546 aleksis/core/tables.py:46
 msgid "Photo"
 msgstr ""
 
 #: aleksis/core/forms.py:199 aleksis/core/forms.py:202
-#: aleksis/core/models.py:77
+#: aleksis/core/models.py:84
 msgid "Date"
 msgstr ""
 
 #: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:85
+#: aleksis/core/models.py:92
 msgid "Time"
 msgstr ""
 
@@ -197,11 +225,11 @@ msgstr ""
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:418 aleksis/core/models.py:185
+#: aleksis/core/forms.py:418 aleksis/core/models.py:192
 msgid "First name"
 msgstr ""
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:186
+#: aleksis/core/forms.py:419 aleksis/core/models.py:193
 msgid "Last name"
 msgstr ""
 
@@ -234,7 +262,7 @@ msgid "You must grant the permission to all objects and/or to some objects."
 msgstr ""
 
 #: aleksis/core/forms.py:586
-msgid "Adress data"
+msgid "Address data"
 msgstr ""
 
 #: aleksis/core/forms.py:598
@@ -281,138 +309,131 @@ msgstr ""
 msgid "No backup result found!"
 msgstr ""
 
-#: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6
+#: 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 ""
 
-#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:22
+#: aleksis/core/menus.py:13 aleksis/core/templates/account/signup.html:22
 #: aleksis/core/templates/socialaccount/signup.html:23
 msgid "Sign up"
 msgstr ""
 
-#: aleksis/core/menus.py:24 aleksis/core/templates/invitations/enter.html:7
+#: aleksis/core/menus.py:22 aleksis/core/templates/invitations/enter.html:7
 msgid "Accept invitation"
 msgstr ""
 
-#: aleksis/core/menus.py:33
+#: aleksis/core/menus.py:31
 msgid "Dashboard"
 msgstr ""
 
-#: aleksis/core/menus.py:41 aleksis/core/models.py:765
-#: 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
-msgid "Notifications"
-msgstr ""
-
-#: aleksis/core/menus.py:53
+#: aleksis/core/menus.py:39
 msgid "Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:61 aleksis/core/models.py:865
+#: aleksis/core/menus.py:47 aleksis/core/models.py:872
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
 msgstr ""
 
-#: aleksis/core/menus.py:72 aleksis/core/models.py:135
+#: aleksis/core/menus.py:58 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 ""
 
-#: aleksis/core/menus.py:83
+#: 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 ""
 
-#: aleksis/core/menus.py:94
+#: 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 ""
 
-#: aleksis/core/menus.py:105
+#: 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 ""
 
-#: aleksis/core/menus.py:116
+#: aleksis/core/menus.py:102
 msgid "Configuration"
 msgstr ""
 
-#: aleksis/core/menus.py:127 aleksis/core/templates/core/data_check/list.html:9
+#: 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 ""
 
-#: aleksis/core/menus.py:133 aleksis/core/templates/core/perms/list.html:13
+#: 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 ""
 
-#: aleksis/core/menus.py:144
+#: aleksis/core/menus.py:130
 msgid "Backend Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:152
+#: 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 ""
 
-#: aleksis/core/menus.py:165
+#: aleksis/core/menus.py:151
 msgid "People"
 msgstr ""
 
-#: aleksis/core/menus.py:196 aleksis/core/models.py:1099
+#: aleksis/core/menus.py:182 aleksis/core/models.py:1111
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
 msgstr ""
 
-#: aleksis/core/menus.py:207
+#: aleksis/core/menus.py:193
 msgid "Groups and child groups"
 msgstr ""
 
-#: aleksis/core/menus.py:218 aleksis/core/models.py:535
+#: aleksis/core/menus.py:204 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 ""
 
-#: aleksis/core/menus.py:229
+#: aleksis/core/menus.py:215
 msgid "Invite person"
 msgstr ""
 
-#: aleksis/core/menus.py:242
+#: 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 ""
 
-#: aleksis/core/menus.py:254
+#: aleksis/core/menus.py:240
 msgid "Stop impersonation"
 msgstr ""
 
-#: aleksis/core/menus.py:263
+#: aleksis/core/menus.py:249
 msgid "Account"
 msgstr ""
 
-#: aleksis/core/menus.py:272
+#: aleksis/core/menus.py:258
 #: aleksis/core/templates/dynamic_preferences/form.html:5
 msgid "Preferences"
 msgstr ""
 
-#: aleksis/core/menus.py:281
+#: aleksis/core/menus.py:267
 msgid "2FA"
 msgstr ""
 
-#: aleksis/core/menus.py:289
+#: 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
@@ -424,17 +445,21 @@ msgstr ""
 msgid "Change password"
 msgstr ""
 
-#: aleksis/core/menus.py:301
+#: aleksis/core/menus.py:287
 msgid "Third-party accounts"
 msgstr ""
 
-#: aleksis/core/menus.py:310
+#: 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 ""
 
-#: aleksis/core/menus.py:320
+#: aleksis/core/menus.py:305
+msgid "Calendar Feeds"
+msgstr ""
+
+#: aleksis/core/menus.py:318
 msgid "Logout"
 msgstr ""
 
@@ -442,559 +467,588 @@ msgstr ""
 msgid "Linked school term"
 msgstr ""
 
-#: aleksis/core/models.py:75
+#: aleksis/core/models.py:82
 msgid "Boolean (Yes/No)"
 msgstr ""
 
-#: aleksis/core/models.py:76
+#: aleksis/core/models.py:83
 msgid "Text (one line)"
 msgstr ""
 
-#: aleksis/core/models.py:78
+#: aleksis/core/models.py:85
 msgid "Date and time"
 msgstr ""
 
-#: aleksis/core/models.py:79
+#: aleksis/core/models.py:86
 msgid "Decimal number"
 msgstr ""
 
-#: aleksis/core/models.py:80 aleksis/core/models.py:203
+#: aleksis/core/models.py:87 aleksis/core/models.py:210
 msgid "E-mail address"
 msgstr ""
 
-#: aleksis/core/models.py:81
+#: aleksis/core/models.py:88
 msgid "Integer"
 msgstr ""
 
-#: aleksis/core/models.py:82
+#: aleksis/core/models.py:89
 msgid "IP address"
 msgstr ""
 
-#: aleksis/core/models.py:83
+#: aleksis/core/models.py:90
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr ""
 
-#: aleksis/core/models.py:84
+#: aleksis/core/models.py:91
 msgid "Text (multi-line)"
 msgstr ""
 
-#: aleksis/core/models.py:86
+#: aleksis/core/models.py:93
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:98 aleksis/core/models.py:1068
+#: aleksis/core/models.py:105 aleksis/core/models.py:1077
+#: aleksis/core/models.py:1384
 msgid "Name"
 msgstr ""
 
-#: aleksis/core/models.py:100
+#: aleksis/core/models.py:107
 msgid "Start date"
 msgstr ""
 
-#: aleksis/core/models.py:101
+#: aleksis/core/models.py:108
 msgid "End date"
 msgstr ""
 
-#: aleksis/core/models.py:120
+#: aleksis/core/models.py:127
 msgid "The start date must be earlier than the end date."
 msgstr ""
 
-#: aleksis/core/models.py:127
+#: aleksis/core/models.py:134
 msgid "There is already a school term for this time or a part of this time."
 msgstr ""
 
-#: aleksis/core/models.py:156 aleksis/core/models.py:1017
+#: aleksis/core/models.py:163 aleksis/core/models.py:1024
+#: aleksis/core/models.py:1381
 msgid "Person"
 msgstr ""
 
-#: aleksis/core/models.py:159
+#: aleksis/core/models.py:166
 msgid "Can view address"
 msgstr ""
 
-#: aleksis/core/models.py:160
+#: aleksis/core/models.py:167
 msgid "Can view contact details"
 msgstr ""
 
-#: aleksis/core/models.py:161
+#: aleksis/core/models.py:168
 msgid "Can view photo"
 msgstr ""
 
-#: aleksis/core/models.py:162
+#: aleksis/core/models.py:169
 msgid "Can view avatar image"
 msgstr ""
 
-#: aleksis/core/models.py:163
+#: aleksis/core/models.py:170
 msgid "Can view persons groups"
 msgstr ""
 
-#: aleksis/core/models.py:164
+#: aleksis/core/models.py:171
 msgid "Can view personal details"
 msgstr ""
 
-#: aleksis/core/models.py:174
+#: aleksis/core/models.py:181
 msgid "female"
 msgstr ""
 
-#: aleksis/core/models.py:174
+#: aleksis/core/models.py:181
 msgid "male"
 msgstr ""
 
-#: aleksis/core/models.py:182 aleksis/core/models.py:1271
+#: aleksis/core/models.py:181
+msgid "other"
+msgstr ""
+
+#: aleksis/core/models.py:189 aleksis/core/models.py:1283
 msgid "Linked user"
 msgstr ""
 
-#: aleksis/core/models.py:188
+#: aleksis/core/models.py:195
 msgid "Additional name(s)"
 msgstr ""
 
-#: aleksis/core/models.py:192 aleksis/core/models.py:504
+#: aleksis/core/models.py:199 aleksis/core/models.py:511
 msgid "Short name"
 msgstr ""
 
-#: aleksis/core/models.py:195
+#: aleksis/core/models.py:202
 msgid "Street"
 msgstr ""
 
-#: aleksis/core/models.py:196
+#: aleksis/core/models.py:203
 msgid "Street number"
 msgstr ""
 
-#: aleksis/core/models.py:197
+#: aleksis/core/models.py:204
 msgid "Postal code"
 msgstr ""
 
-#: aleksis/core/models.py:198
+#: aleksis/core/models.py:205
 msgid "Place"
 msgstr ""
 
-#: aleksis/core/models.py:200 aleksis/core/templates/core/person/full.html:160
+#: aleksis/core/models.py:207 aleksis/core/templates/core/person/full.html:160
 msgid "Home phone"
 msgstr ""
 
-#: aleksis/core/models.py:201 aleksis/core/templates/core/person/full.html:170
+#: aleksis/core/models.py:208 aleksis/core/templates/core/person/full.html:170
 msgid "Mobile phone"
 msgstr ""
 
-#: aleksis/core/models.py:205
+#: aleksis/core/models.py:212
 msgid "Date of birth"
 msgstr ""
 
-#: aleksis/core/models.py:206
+#: aleksis/core/models.py:213
 msgid "Place of birth"
 msgstr ""
 
-#: aleksis/core/models.py:207
+#: aleksis/core/models.py:214
 msgid "Sex"
 msgstr ""
 
-#: aleksis/core/models.py:214 aleksis/core/models.py:543
+#: 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 ""
 
-#: aleksis/core/models.py:219 aleksis/core/models.py:547
+#: aleksis/core/models.py:226 aleksis/core/models.py:554
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:222 aleksis/core/models.py:550
+#: aleksis/core/models.py:229 aleksis/core/models.py:557
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:227 aleksis/core/templates/core/person/full.html:235
+#: aleksis/core/models.py:234 aleksis/core/templates/core/person/full.html:235
 msgid "Guardians / Parents"
 msgstr ""
 
-#: aleksis/core/models.py:234
+#: aleksis/core/models.py:241
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:237 aleksis/core/models.py:717
-#: aleksis/core/models.py:741 aleksis/core/models.py:832
-#: aleksis/core/models.py:1092
+#: 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
 msgid "Description"
 msgstr ""
 
-#: aleksis/core/models.py:457
+#: aleksis/core/models.py:464
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:459
+#: aleksis/core/models.py:466
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:461
+#: aleksis/core/models.py:468
 msgid "Required"
 msgstr ""
 
-#: aleksis/core/models.py:462
+#: aleksis/core/models.py:469
 msgid "Help text / description"
 msgstr ""
 
-#: aleksis/core/models.py:468
+#: aleksis/core/models.py:475
 msgid "Addtitional field for groups"
 msgstr ""
 
-#: aleksis/core/models.py:469
+#: aleksis/core/models.py:476
 msgid "Addtitional fields for groups"
 msgstr ""
 
-#: aleksis/core/models.py:489
+#: aleksis/core/models.py:496
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:490
+#: aleksis/core/models.py:497
 msgid "Can view statistics about group."
 msgstr ""
 
-#: aleksis/core/models.py:502
+#: aleksis/core/models.py:509
 msgid "Long name"
 msgstr ""
 
-#: aleksis/core/models.py:512 aleksis/core/templates/core/group/full.html:85
+#: aleksis/core/models.py:519 aleksis/core/templates/core/group/full.html:105
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:515 aleksis/core/templates/core/group/full.html:82
+#: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:102
 msgid "Owners"
 msgstr ""
 
-#: aleksis/core/models.py:522 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 ""
 
-#: aleksis/core/models.py:530
+#: aleksis/core/models.py:537
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:716 aleksis/core/models.py:740
-#: aleksis/core/models.py:831
+#: aleksis/core/models.py:723 aleksis/core/models.py:747
+#: aleksis/core/models.py:838
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
 
-#: aleksis/core/models.py:719
+#: aleksis/core/models.py:726
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:725
+#: aleksis/core/models.py:732
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:726
+#: aleksis/core/models.py:733
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:732
+#: aleksis/core/models.py:739
 msgid "Sender"
 msgstr ""
 
-#: aleksis/core/models.py:737
+#: aleksis/core/models.py:744
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:742 aleksis/core/models.py:1069
+#: aleksis/core/models.py:749 aleksis/core/models.py:1078
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:744
+#: aleksis/core/models.py:751
 msgid "Send notification at"
 msgstr ""
 
-#: aleksis/core/models.py:746
+#: aleksis/core/models.py:753
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:747
+#: aleksis/core/models.py:754
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:764
+#: aleksis/core/models.py:771
 msgid "Notification"
 msgstr ""
 
-#: aleksis/core/models.py:833
+#: aleksis/core/models.py:772 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
+msgid "Notifications"
+msgstr ""
+
+#: aleksis/core/models.py:840
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:836
+#: aleksis/core/models.py:843
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:839
+#: aleksis/core/models.py:846
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:864
+#: aleksis/core/models.py:871
 msgid "Announcement"
 msgstr ""
 
-#: aleksis/core/models.py:902
+#: aleksis/core/models.py:909
 msgid "Announcement recipient"
 msgstr ""
 
-#: aleksis/core/models.py:903
+#: aleksis/core/models.py:910
 msgid "Announcement recipients"
 msgstr ""
 
-#: aleksis/core/models.py:925
+#: aleksis/core/models.py:932
 msgid "Widget Title"
 msgstr ""
 
-#: aleksis/core/models.py:926
+#: aleksis/core/models.py:933
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:927
+#: aleksis/core/models.py:934
 msgid "Widget is broken"
 msgstr ""
 
-#: aleksis/core/models.py:930
+#: aleksis/core/models.py:937
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:931
+#: aleksis/core/models.py:938
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:936
+#: aleksis/core/models.py:943
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:944
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:942
+#: aleksis/core/models.py:949
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:943
+#: aleksis/core/models.py:950
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:948
+#: aleksis/core/models.py:955
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:949
+#: aleksis/core/models.py:956
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:980
+#: aleksis/core/models.py:987
 msgid "Can edit default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:981
+#: aleksis/core/models.py:988
 msgid "Dashboard Widget"
 msgstr ""
 
-#: aleksis/core/models.py:982
+#: aleksis/core/models.py:989
 msgid "Dashboard Widgets"
 msgstr ""
 
-#: aleksis/core/models.py:988
+#: aleksis/core/models.py:995
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:989
+#: aleksis/core/models.py:996
 msgid "Icon URL"
 msgstr ""
 
-#: aleksis/core/models.py:995
+#: aleksis/core/models.py:1002
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:996
+#: aleksis/core/models.py:1003
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1002
+#: aleksis/core/models.py:1009
 msgid "Content"
 msgstr ""
 
-#: aleksis/core/models.py:1008
+#: aleksis/core/models.py:1015
 msgid "Static content widget"
 msgstr ""
 
-#: aleksis/core/models.py:1009
+#: aleksis/core/models.py:1016
 msgid "Static content widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1014
+#: aleksis/core/models.py:1021
 msgid "Dashboard widget"
 msgstr ""
 
-#: aleksis/core/models.py:1019
+#: aleksis/core/models.py:1026
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:1020
+#: aleksis/core/models.py:1027
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:1035
+#: aleksis/core/models.py:1042
 msgid "Dashboard widget order"
 msgstr ""
 
-#: aleksis/core/models.py:1036
+#: aleksis/core/models.py:1043
 msgid "Dashboard widget orders"
 msgstr ""
 
-#: aleksis/core/models.py:1042
+#: aleksis/core/models.py:1049
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1055
+#: aleksis/core/models.py:1062
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1056
+#: aleksis/core/models.py:1063
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1066
+#: aleksis/core/models.py:1075
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1070 aleksis/core/models.py:1318
+#: aleksis/core/models.py:1079 aleksis/core/models.py:1330
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1085
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1077
+#: aleksis/core/models.py:1086
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1091
+#: aleksis/core/models.py:1103
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1098 aleksis/core/templates/core/group/full.html:47
+#: aleksis/core/models.py:1110 aleksis/core/templates/core/group/full.html:50
 msgid "Group type"
 msgstr ""
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1124
 msgid "Can view system status"
 msgstr ""
 
-#: aleksis/core/models.py:1113
+#: aleksis/core/models.py:1125
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1114
+#: aleksis/core/models.py:1126
 msgid "Can impersonate"
 msgstr ""
 
-#: aleksis/core/models.py:1115
+#: aleksis/core/models.py:1127
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1116
+#: aleksis/core/models.py:1128
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1117
+#: aleksis/core/models.py:1129
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1118
+#: aleksis/core/models.py:1130
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1119
+#: aleksis/core/models.py:1131
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1132
 msgid "Can invite persons"
 msgstr ""
 
-#: aleksis/core/models.py:1156
+#: aleksis/core/models.py:1168
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1164
+#: aleksis/core/models.py:1176
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1165
+#: aleksis/core/models.py:1177
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1178
+#: aleksis/core/models.py:1190
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1179
+#: aleksis/core/models.py:1191
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1181
+#: aleksis/core/models.py:1193
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1182
+#: aleksis/core/models.py:1194
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1189
+#: aleksis/core/models.py:1201
 msgid "E-Mail address"
 msgstr ""
 
-#: aleksis/core/models.py:1221
+#: aleksis/core/models.py:1233
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1225
+#: aleksis/core/models.py:1237
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1227
+#: aleksis/core/models.py:1239
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1229
+#: aleksis/core/models.py:1241
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1236
+#: aleksis/core/models.py:1248
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1237
+#: aleksis/core/models.py:1249
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1242
+#: aleksis/core/models.py:1254
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1245
+#: aleksis/core/models.py:1257
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1257
+#: aleksis/core/models.py:1269
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1258
+#: aleksis/core/models.py:1270
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1274
+#: aleksis/core/models.py:1286
 msgid "Additional attributes"
 msgstr ""
 
-#: aleksis/core/models.py:1312
+#: aleksis/core/models.py:1324
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1322
+#: aleksis/core/models.py:1334
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
+#: aleksis/core/models.py:1383
+msgid "UUID"
+msgstr ""
+
+#: aleksis/core/models.py:1387
+msgid "Selected ICal feed"
+msgstr ""
+
+#: aleksis/core/models.py:1396
+msgid "Personal Calendar URL"
+msgstr ""
+
+#: aleksis/core/models.py:1397
+msgid "Personal Calendar URLs"
+msgstr ""
+
 #: aleksis/core/preferences.py:25
 msgid "General"
 msgstr ""
@@ -1139,94 +1193,94 @@ msgstr ""
 msgid "Allowed Grant Flows for OAuth applications"
 msgstr ""
 
-#: aleksis/core/preferences.py:344
-msgid "Available languages"
-msgstr ""
-
-#: aleksis/core/preferences.py:357
+#: aleksis/core/preferences.py:343
 msgid "Send emails if data checks detect problems"
 msgstr ""
 
-#: aleksis/core/preferences.py:368
+#: aleksis/core/preferences.py:354
 msgid "Email recipients for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:379
+#: aleksis/core/preferences.py:365
 msgid "Email recipient groups for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:388
+#: aleksis/core/preferences.py:374
 msgid "Show dashboard to users without login"
 msgstr ""
 
-#: aleksis/core/preferences.py:397
+#: aleksis/core/preferences.py:383
 msgid "Allow users to edit their dashboard"
 msgstr ""
 
-#: aleksis/core/preferences.py:408
+#: aleksis/core/preferences.py:394
 msgid "Fields on person model which are editable by themselves."
 msgstr ""
 
-#: aleksis/core/preferences.py:423
+#: aleksis/core/preferences.py:409
 msgid "Editable fields on person model which should trigger a notification on change"
 msgstr ""
 
-#: aleksis/core/preferences.py:437
+#: aleksis/core/preferences.py:423
 msgid "Contact for notification if a person changes their data"
 msgstr ""
 
-#: aleksis/core/preferences.py:448
+#: aleksis/core/preferences.py:434
 msgid "Prefer personal photos over avatars"
 msgstr ""
 
-#: aleksis/core/preferences.py:458
+#: aleksis/core/preferences.py:444
 msgid "PDF file expiration duration"
 msgstr ""
 
-#: aleksis/core/preferences.py:459
+#: aleksis/core/preferences.py:445
 msgid "in minutes"
 msgstr ""
 
-#: aleksis/core/preferences.py:469
+#: aleksis/core/preferences.py:455
 msgid "Automatically update the dashboard and its widgets"
 msgstr ""
 
-#: aleksis/core/preferences.py:479
+#: aleksis/core/preferences.py:465
 msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
-#: aleksis/core/preferences.py:489
+#: aleksis/core/preferences.py:475
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:540
+#: aleksis/core/settings.py:541
 msgid "English"
 msgstr ""
 
-#: aleksis/core/settings.py:541
+#: aleksis/core/settings.py:542
 msgid "German"
 msgstr ""
 
-#: aleksis/core/tables.py:24
+#: aleksis/core/settings.py:543
+msgid "Ukrainian"
+msgstr ""
+
+#: 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/group/full.html:26
 #: aleksis/core/templates/core/person/full.html:26
 #: aleksis/core/templates/core/person/full.html:86
 #: aleksis/core/templates/oauth2_provider/application/detail.html:17
 msgid "Edit"
 msgstr ""
 
-#: aleksis/core/tables.py:26 aleksis/core/tables.py:94
-#: aleksis/core/tables.py:138
+#: 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 ""
 
-#: 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
@@ -1265,7 +1319,7 @@ msgstr ""
 #: aleksis/core/templates/500.html:10
 msgid ""
 "An unexpected error has\n"
-"          occured."
+"          occurred."
 msgstr ""
 
 #: aleksis/core/templates/500.html:13
@@ -1519,7 +1573,7 @@ msgid "Publish new announcement"
 msgstr ""
 
 #: aleksis/core/templates/core/announcement/form.html:34
-msgid "Save und publish announcement"
+msgid "Save and publish announcement"
 msgstr ""
 
 #: aleksis/core/templates/core/announcement/list.html:19
@@ -1765,34 +1819,34 @@ msgstr ""
 msgid "Edit group"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:38
+#: aleksis/core/templates/core/group/full.html:40
 #: aleksis/core/templates/core/person/full.html:40
 #: aleksis/core/templates/core/person/full.html:100
 msgid "Change preferences"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:64
+#: aleksis/core/templates/core/group/full.html:68
 msgid "Statistics"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:67
+#: aleksis/core/templates/core/group/full.html:73
 msgid "Count of members"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:71
+#: aleksis/core/templates/core/group/full.html:81
 msgid "Average age"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:76
+#: aleksis/core/templates/core/group/full.html:90
 msgid "Age range"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:76
-msgid "years to"
-msgstr ""
-
-#: aleksis/core/templates/core/group/full.html:76
-msgid "years "
+#: aleksis/core/templates/core/group/full.html:93
+#, python-format
+msgid ""
+"\n"
+"              %(min)s years to %(max)s years\n"
+"            "
 msgstr ""
 
 #: aleksis/core/templates/core/group/list.html:14
@@ -1821,6 +1875,40 @@ msgstr ""
 msgid "Create group type"
 msgstr ""
 
+#: 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 ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: aleksis/core/templates/core/ical/ical_list.html:4
+#: aleksis/core/templates/core/ical/ical_list.html:5
+msgid "iCal Feeds"
+msgstr ""
+
+#: 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 ""
+
+#: aleksis/core/templates/core/ical/ical_list.html:14
+msgid "Your iCal URLs"
+msgstr ""
+
 #: aleksis/core/templates/core/index.html:4
 msgid "Home"
 msgstr ""
@@ -2094,11 +2182,11 @@ msgstr ""
 msgid "Unknown"
 msgstr ""
 
-#: aleksis/core/templates/core/partials/language_form.html:15
+#: aleksis/core/templates/core/partials/language_form.html:17
 msgid "Language"
 msgstr ""
 
-#: aleksis/core/templates/core/partials/language_form.html:27
+#: aleksis/core/templates/core/partials/language_form.html:29
 msgid "Select language"
 msgstr ""
 
@@ -2297,13 +2385,6 @@ msgstr ""
 msgid "Register OAuth2 Application"
 msgstr ""
 
-#: 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 ""
-
 #: aleksis/core/templates/oauth2_provider/application/detail.html:5
 msgid "OAuth2 Application"
 msgstr ""
@@ -3027,156 +3108,168 @@ msgstr ""
 msgid "Download PDF"
 msgstr ""
 
-#: aleksis/core/views.py:289
+#: aleksis/core/views.py:294
 msgid "The school term has been created."
 msgstr ""
 
-#: aleksis/core/views.py:301
+#: aleksis/core/views.py:306
 msgid "The school term has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:421
+#: aleksis/core/views.py:426
 msgid "The child groups were successfully saved."
 msgstr ""
 
-#: aleksis/core/views.py:440 aleksis/core/views.py:450
+#: aleksis/core/views.py:445 aleksis/core/views.py:455
 msgid "The person has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:500
+#: aleksis/core/views.py:505
 msgid "The group has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:597
+#: aleksis/core/views.py:602
 msgid "The announcement has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:613
+#: aleksis/core/views.py:618
 msgid "The announcement has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:681
+#: aleksis/core/views.py:686
 msgid "The requested preference registry does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:700
+#: aleksis/core/views.py:705
 msgid "The preferences have been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:724
+#: aleksis/core/views.py:729
 msgid "The person has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:738
+#: aleksis/core/views.py:743
 msgid "The group has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:770
-msgid "The additional_field has been saved."
+#: aleksis/core/views.py:775
+msgid "The additional field has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:804
+#: aleksis/core/views.py:809
 msgid "The additional field has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:829
+#: aleksis/core/views.py:834
 msgid "The group type has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:859
+#: aleksis/core/views.py:864
 msgid "The group type has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:892
+#: aleksis/core/views.py:897
 msgid "Progress: Run data checks"
 msgstr ""
 
-#: aleksis/core/views.py:893
+#: aleksis/core/views.py:898
 msgid "Run data checks …"
 msgstr ""
 
-#: aleksis/core/views.py:894
+#: aleksis/core/views.py:899
 msgid "The data checks were run successfully."
 msgstr ""
 
-#: aleksis/core/views.py:895
+#: aleksis/core/views.py:900
 msgid "There was a problem while running data checks."
 msgstr ""
 
-#: aleksis/core/views.py:911
+#: aleksis/core/views.py:916
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/views.py:921
+#: aleksis/core/views.py:926
 msgid "The requested solve option does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:953
+#: aleksis/core/views.py:958
 msgid "The dashboard widget has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:983
+#: aleksis/core/views.py:988
 msgid "The dashboard widget has been created."
 msgstr ""
 
-#: aleksis/core/views.py:993
+#: aleksis/core/views.py:998
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1064
+#: aleksis/core/views.py:1069
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1066
+#: aleksis/core/views.py:1071
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1142
+#: aleksis/core/views.py:1147
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1233
+#: aleksis/core/views.py:1238
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1243
+#: aleksis/core/views.py:1248
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1253
+#: aleksis/core/views.py:1258
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1263
+#: aleksis/core/views.py:1268
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1273
+#: aleksis/core/views.py:1278
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1341
+#: aleksis/core/views.py:1346
 msgid "The requested PDF file does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:1350 aleksis/core/views.py:1354
+#: aleksis/core/views.py:1355 aleksis/core/views.py:1359
 msgid "The requested task does not exist or is not accessible"
 msgstr ""
 
-#: aleksis/core/views.py:1406
+#: aleksis/core/views.py:1411
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1413
+#: aleksis/core/views.py:1418
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1484
+#: aleksis/core/views.py:1489
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1495
+#: aleksis/core/views.py:1500
 msgid "Person was already invited."
 msgstr ""
+
+#: aleksis/core/views.py:1600
+msgid "iCal feed updated successfully"
+msgstr ""
+
+#: aleksis/core/views.py:1610
+msgid "iCal feed deleted successfully"
+msgstr ""
+
+#: aleksis/core/views.py:1618
+msgid "iCal feed created successfully"
+msgstr ""
diff --git a/aleksis/core/locale/ar/LC_MESSAGES/djangojs.po b/aleksis/core/locale/ar/LC_MESSAGES/djangojs.po
index 31b839fb203db1208029422282b10d1fa3e95123..3defb67f9f4129276ebd5b1c61d84a8511b0fabe 100644
--- a/aleksis/core/locale/ar/LC_MESSAGES/djangojs.po
+++ b/aleksis/core/locale/ar/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-23 11:20+0100\n"
+"POT-Creation-Date: 2022-06-25 12:09+0200\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"
diff --git a/aleksis/core/locale/de_DE/LC_MESSAGES/django.po b/aleksis/core/locale/de_DE/LC_MESSAGES/django.po
index e39ddc518a4ec11696d1f0cb411139a7615e90c1..81042a036531800e661a8e7433bf2cb73103dffa 100644
--- a/aleksis/core/locale/de_DE/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/de_DE/LC_MESSAGES/django.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: AlekSIS (School Information System) 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-23 11:19+0100\n"
-"PO-Revision-Date: 2022-03-23 11:06+0000\n"
+"POT-Creation-Date: 2022-05-24 19:37+0200\n"
+"PO-Revision-Date: 2022-06-25 10:18+0000\n"
 "Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
 "Language-Team: German <https://translate.edugit.org/projects/aleksis/"
 "aleksis-core/de/>\n"
@@ -17,7 +17,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.8\n"
+"X-Generator: Weblate 4.12.1\n"
 
 #: aleksis/core/apps.py:166
 msgid "OpenID Connect scope"
@@ -39,34 +39,52 @@ msgstr "E-Mail-Adresse"
 msgid "Home and mobile phone"
 msgstr "Festnetz- und Mobilfunknummer"
 
-#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:185
-#: aleksis/core/models.py:487 aleksis/core/templates/core/group/list.html:8
+#: 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/templates/core/group/list.html:9
-#: aleksis/core/templates/core/person/full.html:246
+#: aleksis/core/templates/core/person/full.html:246 aleksis/core/models.py:494
 msgid "Groups"
 msgstr "Gruppen"
 
-#: aleksis/core/data_checks.py:56
+#: aleksis/core/data_checks.py:56 aleksis/core/data_checks.py:59
 msgid "Ignore problem"
 msgstr "Problem ignorieren"
 
-#: aleksis/core/data_checks.py:185
+#: aleksis/core/data_checks.py:185 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:291 aleksis/core/data_checks.py:294
 msgid "Deactivate DashboardWidget"
 msgstr "Dashboard-Widget deaktivieren"
 
-#: aleksis/core/data_checks.py:303
+#: aleksis/core/data_checks.py:303 aleksis/core/data_checks.py:306
 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:304 aleksis/core/data_checks.py:307
 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
+#, python-format
+msgid "%(name)s's birthday"
+msgstr "%(name)ss Geburtstag"
+
+#: aleksis/core/feeds.py:71
+#, python-format
+msgid "%(name)s was born on %(birthday)s"
+msgstr "%(name)s wurde am %(birthday)s geboren"
+
 #: 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
@@ -92,11 +110,13 @@ msgstr "Berechtigung"
 msgid "Content type"
 msgstr "Inhaltstyp"
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:713
+#: aleksis/core/filters.py:113 aleksis/core/models.py:715
+#: aleksis/core/models.py:720
 msgid "User"
 msgstr "Benutzer"
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:486
+#: aleksis/core/filters.py:135 aleksis/core/models.py:488
+#: aleksis/core/models.py:493
 msgid "Group"
 msgstr "Gruppe"
 
@@ -104,7 +124,7 @@ msgstr "Gruppe"
 msgid "Base data"
 msgstr "Basisdaten"
 
-#: aleksis/core/forms.py:55
+#: aleksis/core/forms.py:55 aleksis/core/tables.py:47
 msgid "Address"
 msgstr "Adresse"
 
@@ -126,13 +146,16 @@ 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:134
+#: aleksis/core/forms.py:153 aleksis/core/models.py:136
+#: aleksis/core/models.py:141
 msgid "School term"
 msgstr "Schuljahr"
 
@@ -141,9 +164,9 @@ msgid "Common data"
 msgstr "Allgemeine Daten"
 
 #: aleksis/core/forms.py:155 aleksis/core/forms.py:207
-#: aleksis/core/menus.py:174 aleksis/core/models.py:157
+#: 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/templates/core/person/list.html:9 aleksis/core/models.py:164
 msgid "Persons"
 msgstr "Personen"
 
@@ -151,18 +174,19 @@ msgstr "Personen"
 msgid "Additional data"
 msgstr "Zusätzliche Datne"
 
-#: aleksis/core/forms.py:157 aleksis/core/models.py:210
-#: aleksis/core/models.py:539
+#: aleksis/core/forms.py:157 aleksis/core/models.py:212
+#: aleksis/core/models.py:541 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:77
+#: aleksis/core/models.py:79 aleksis/core/models.py:84
 msgid "Date"
 msgstr "Datum"
 
 #: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:85
+#: aleksis/core/models.py:87 aleksis/core/models.py:92
 msgid "Time"
 msgstr "Zeit"
 
@@ -179,12 +203,17 @@ 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."
@@ -198,11 +227,13 @@ msgstr "Einladungscode"
 msgid "Please enter your invitation code."
 msgstr "Bitte geben Sie Ihren Einladungscode ein."
 
-#: aleksis/core/forms.py:418 aleksis/core/models.py:185
+#: aleksis/core/forms.py:418 aleksis/core/models.py:187
+#: aleksis/core/models.py:192
 msgid "First name"
 msgstr "Vorname"
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:186
+#: aleksis/core/forms.py:419 aleksis/core/models.py:188
+#: aleksis/core/models.py:193
 msgid "Last name"
 msgstr "Nachname"
 
@@ -220,22 +251,28 @@ 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."
+msgstr ""
+"Sie müssen die Berechtigung auf alle Objekte und/oder für einige Objekte "
+"vergeben."
 
 #: aleksis/core/forms.py:586
-msgid "Adress data"
+msgid "Address data"
 msgstr "Adressdaten"
 
 #: aleksis/core/forms.py:598
@@ -284,138 +321,135 @@ msgstr "Kein Backup gefunden!"
 msgid "No backup result found!"
 msgstr "Kein Backupergebnis gefunden!"
 
-#: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6
+#: 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:15 aleksis/core/templates/account/signup.html:22
+#: 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:24 aleksis/core/templates/invitations/enter.html:7
+#: aleksis/core/menus.py:22 aleksis/core/templates/invitations/enter.html:7
 msgid "Accept invitation"
 msgstr "Einladung akzeptieren"
 
-#: aleksis/core/menus.py:33
+#: aleksis/core/menus.py:31
 msgid "Dashboard"
 msgstr "Dashboard"
 
-#: aleksis/core/menus.py:41 aleksis/core/models.py:765
-#: 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
-msgid "Notifications"
-msgstr "Benachrichtigungen"
-
-#: aleksis/core/menus.py:53
+#: aleksis/core/menus.py:39
 msgid "Admin"
 msgstr "Admin"
 
-#: aleksis/core/menus.py:61 aleksis/core/models.py:865
+#: 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
 msgid "Announcements"
 msgstr "Ankündigungen"
 
-#: aleksis/core/menus.py:72 aleksis/core/models.py:135
+#: 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:83
+#: 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:94
+#: 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:105
+#: 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:116
+#: aleksis/core/menus.py:102
 msgid "Configuration"
 msgstr "Konfiguration"
 
-#: aleksis/core/menus.py:127 aleksis/core/templates/core/data_check/list.html:9
+#: 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:133 aleksis/core/templates/core/perms/list.html:13
+#: 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:144
+#: aleksis/core/menus.py:130
 msgid "Backend Admin"
 msgstr "Backend-Administration"
 
-#: aleksis/core/menus.py:152
+#: 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:165
+#: aleksis/core/menus.py:151
 msgid "People"
 msgstr "Leute"
 
-#: aleksis/core/menus.py:196 aleksis/core/models.py:1099
+#: 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:207
+#: aleksis/core/menus.py:193
 msgid "Groups and child groups"
 msgstr "Gruppen und Kindgruppen"
 
-#: aleksis/core/menus.py:218 aleksis/core/models.py:535
+#: 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:229
+#: aleksis/core/menus.py:215
 msgid "Invite person"
 msgstr "Person einladen"
 
-#: aleksis/core/menus.py:242
+#: 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:254
+#: aleksis/core/menus.py:240
 msgid "Stop impersonation"
 msgstr "Verkleidung beenden"
 
-#: aleksis/core/menus.py:263
+#: aleksis/core/menus.py:249
 msgid "Account"
 msgstr "Konto"
 
-#: aleksis/core/menus.py:272
+#: aleksis/core/menus.py:258
 #: aleksis/core/templates/dynamic_preferences/form.html:5
 msgid "Preferences"
 msgstr "Einstellungen"
 
-#: aleksis/core/menus.py:281
+#: aleksis/core/menus.py:267
 msgid "2FA"
 msgstr "2FA"
 
-#: aleksis/core/menus.py:289
+#: 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
@@ -427,17 +461,21 @@ msgstr "2FA"
 msgid "Change password"
 msgstr "Passwort ändern"
 
-#: aleksis/core/menus.py:301
+#: aleksis/core/menus.py:287
 msgid "Third-party accounts"
 msgstr "Drittanbieter-Konten"
 
-#: aleksis/core/menus.py:310
+#: 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:320
+#: aleksis/core/menus.py:305
+msgid "Calendar Feeds"
+msgstr "Kalender-Feeds"
+
+#: aleksis/core/menus.py:318
 msgid "Logout"
 msgstr "Abmelden"
 
@@ -445,558 +483,613 @@ msgstr "Abmelden"
 msgid "Linked school term"
 msgstr "Zugeordnetes Schuljahr"
 
-#: aleksis/core/models.py:75
+#: aleksis/core/models.py:77 aleksis/core/models.py:82
 msgid "Boolean (Yes/No)"
 msgstr "Boolean (Ja/Nein)"
 
-#: aleksis/core/models.py:76
+#: aleksis/core/models.py:78 aleksis/core/models.py:83
 msgid "Text (one line)"
 msgstr "Text (eine Zeile)"
 
-#: aleksis/core/models.py:78
+#: aleksis/core/models.py:80 aleksis/core/models.py:85
 msgid "Date and time"
 msgstr "Datum und Uhrzeit"
 
-#: aleksis/core/models.py:79
+#: aleksis/core/models.py:81 aleksis/core/models.py:86
 msgid "Decimal number"
 msgstr "Dezimalzahl"
 
-#: aleksis/core/models.py:80 aleksis/core/models.py:203
+#: 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:81
+#: aleksis/core/models.py:83 aleksis/core/models.py:88
 msgid "Integer"
 msgstr "Ganze Zahl"
 
-#: aleksis/core/models.py:82
+#: aleksis/core/models.py:84 aleksis/core/models.py:89
 msgid "IP address"
 msgstr "IP-Adresse"
 
-#: aleksis/core/models.py:83
+#: aleksis/core/models.py:85 aleksis/core/models.py:90
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr "Boolean oder leer (Ja/Nein/weder)"
 
-#: aleksis/core/models.py:84
+#: aleksis/core/models.py:86 aleksis/core/models.py:91
 msgid "Text (multi-line)"
 msgstr "Text (mehrzeilig)"
 
-#: aleksis/core/models.py:86
+#: aleksis/core/models.py:88 aleksis/core/models.py:93
 msgid "URL / Link"
 msgstr "URL / Link"
 
-#: aleksis/core/models.py:98 aleksis/core/models.py:1068
+#: 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
 msgid "Name"
 msgstr "Name"
 
-#: aleksis/core/models.py:100
+#: aleksis/core/models.py:102 aleksis/core/models.py:107
 msgid "Start date"
 msgstr "Startdatum"
 
-#: aleksis/core/models.py:101
+#: aleksis/core/models.py:103 aleksis/core/models.py:108
 msgid "End date"
 msgstr "Enddatum"
 
-#: aleksis/core/models.py:120
+#: aleksis/core/models.py:122 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:127
+#: aleksis/core/models.py:129 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:156 aleksis/core/models.py:1017
+#: 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
 msgid "Person"
 msgstr "Person"
 
-#: aleksis/core/models.py:159
+#: aleksis/core/models.py:161 aleksis/core/models.py:166
 msgid "Can view address"
 msgstr "Kann Adresse sehen"
 
-#: aleksis/core/models.py:160
+#: aleksis/core/models.py:162 aleksis/core/models.py:167
 msgid "Can view contact details"
 msgstr "Kann Kontaktdetails sehen"
 
-#: aleksis/core/models.py:161
+#: aleksis/core/models.py:163 aleksis/core/models.py:168
 msgid "Can view photo"
 msgstr "Kann Foto sehen"
 
-#: aleksis/core/models.py:162
+#: aleksis/core/models.py:164 aleksis/core/models.py:169
 msgid "Can view avatar image"
 msgstr "Kann Avatar-Bild sehen"
 
-#: aleksis/core/models.py:163
+#: aleksis/core/models.py:165 aleksis/core/models.py:170
 msgid "Can view persons groups"
 msgstr "Kann Gruppen einer Person sehen"
 
-#: aleksis/core/models.py:164
+#: aleksis/core/models.py:166 aleksis/core/models.py:171
 msgid "Can view personal details"
 msgstr "Kann persönliche Daten sehen"
 
-#: aleksis/core/models.py:174
+#: aleksis/core/models.py:176 aleksis/core/models.py:181
 msgid "female"
 msgstr "weiblich"
 
-#: aleksis/core/models.py:174
+#: aleksis/core/models.py:176 aleksis/core/models.py:181
 msgid "male"
 msgstr "männlich"
 
-#: aleksis/core/models.py:182 aleksis/core/models.py:1271
+#: aleksis/core/models.py:184 aleksis/core/models.py:1273
+#: aleksis/core/models.py:189 aleksis/core/models.py:1283
 msgid "Linked user"
 msgstr "Verknüpfter Benutzer"
 
-#: aleksis/core/models.py:188
+#: aleksis/core/models.py:190 aleksis/core/models.py:195
 msgid "Additional name(s)"
 msgstr "Zusätzliche Namen"
 
-#: aleksis/core/models.py:192 aleksis/core/models.py:504
+#: aleksis/core/models.py:194 aleksis/core/models.py:506
+#: aleksis/core/models.py:199 aleksis/core/models.py:511
 msgid "Short name"
 msgstr "Kurzname"
 
-#: aleksis/core/models.py:195
+#: aleksis/core/models.py:197 aleksis/core/models.py:202
 msgid "Street"
 msgstr "Straße"
 
-#: aleksis/core/models.py:196
+#: aleksis/core/models.py:198 aleksis/core/models.py:203
 msgid "Street number"
 msgstr "Hausnummer"
 
-#: aleksis/core/models.py:197
+#: aleksis/core/models.py:199 aleksis/core/models.py:204
 msgid "Postal code"
 msgstr "Postleitzahl"
 
-#: aleksis/core/models.py:198
+#: aleksis/core/models.py:200 aleksis/core/models.py:205
 msgid "Place"
 msgstr "Ort"
 
-#: aleksis/core/models.py:200 aleksis/core/templates/core/person/full.html:160
+#: 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:201 aleksis/core/templates/core/person/full.html:170
+#: 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:205
+#: aleksis/core/models.py:207 aleksis/core/models.py:212
 msgid "Date of birth"
 msgstr "Geburtsdatum"
 
-#: aleksis/core/models.py:206
+#: aleksis/core/models.py:208 aleksis/core/models.py:213
 msgid "Place of birth"
 msgstr "Geburtsort"
 
-#: aleksis/core/models.py:207
+#: aleksis/core/models.py:209 aleksis/core/models.py:214
 msgid "Sex"
 msgstr "Geschlecht"
 
-#: aleksis/core/models.py:214 aleksis/core/models.py:543
-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: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."
 
-#: aleksis/core/models.py:219 aleksis/core/models.py:547
+#: 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:222 aleksis/core/models.py:550
+#: 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:227 aleksis/core/templates/core/person/full.html:235
+#: 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:234
+#: aleksis/core/models.py:236 aleksis/core/models.py:241
 msgid "Primary group"
 msgstr "Primärgruppe"
 
-#: aleksis/core/models.py:237 aleksis/core/models.py:717
-#: aleksis/core/models.py:741 aleksis/core/models.py:832
-#: aleksis/core/models.py:1092
+#: 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
 msgid "Description"
 msgstr "Beschreibung"
 
-#: aleksis/core/models.py:457
+#: aleksis/core/models.py:459 aleksis/core/models.py:464
 msgid "Title of field"
 msgstr "Feldtitel"
 
-#: aleksis/core/models.py:459
+#: aleksis/core/models.py:461 aleksis/core/models.py:466
 msgid "Type of field"
 msgstr "Feldtyp"
 
-#: aleksis/core/models.py:461
+#: aleksis/core/models.py:463 aleksis/core/models.py:468
 msgid "Required"
 msgstr "Pflichtfeld"
 
-#: aleksis/core/models.py:462
+#: aleksis/core/models.py:464 aleksis/core/models.py:469
 msgid "Help text / description"
 msgstr "Hilfetext/Beschreibung"
 
-#: aleksis/core/models.py:468
+#: aleksis/core/models.py:470 aleksis/core/models.py:475
 msgid "Addtitional field for groups"
 msgstr "Zusätzliche Felder für Gruppen"
 
-#: aleksis/core/models.py:469
+#: aleksis/core/models.py:471 aleksis/core/models.py:476
 msgid "Addtitional fields for groups"
 msgstr "Zusätzliche Felder für Gruppen"
 
-#: aleksis/core/models.py:489
+#: aleksis/core/models.py:491 aleksis/core/models.py:496
 msgid "Can assign child groups to groups"
 msgstr "Kann Kindgruppen zu Gruppen zuordnen"
 
-#: aleksis/core/models.py:490
+#: aleksis/core/models.py:492 aleksis/core/models.py:497
 msgid "Can view statistics about group."
 msgstr "Kann Statistiken über Gruppen sehen."
 
-#: aleksis/core/models.py:502
+#: aleksis/core/models.py:504 aleksis/core/models.py:509
 msgid "Long name"
 msgstr "Langname"
 
-#: aleksis/core/models.py:512 aleksis/core/templates/core/group/full.html:85
+#: 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:515 aleksis/core/templates/core/group/full.html:82
+#: 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:522 aleksis/core/templates/core/group/full.html:55
+#: 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:530
+#: aleksis/core/models.py:532 aleksis/core/models.py:537
 msgid "Type of group"
 msgstr "Gruppentyp"
 
-#: aleksis/core/models.py:716 aleksis/core/models.py:740
-#: aleksis/core/models.py:831
+#: 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:723 aleksis/core/models.py:747
+#: aleksis/core/models.py:838
 msgid "Title"
 msgstr "Titel"
 
-#: aleksis/core/models.py:719
+#: aleksis/core/models.py:721 aleksis/core/models.py:726
 msgid "Application"
 msgstr "Anwendung"
 
-#: aleksis/core/models.py:725
+#: aleksis/core/models.py:727 aleksis/core/models.py:732
 msgid "Activity"
 msgstr "Aktivität"
 
-#: aleksis/core/models.py:726
+#: aleksis/core/models.py:728 aleksis/core/models.py:733
 msgid "Activities"
 msgstr "Aktivitäten"
 
-#: aleksis/core/models.py:732
+#: aleksis/core/models.py:734 aleksis/core/models.py:739
 msgid "Sender"
 msgstr "Absender"
 
-#: aleksis/core/models.py:737
+#: aleksis/core/models.py:739 aleksis/core/models.py:744
 msgid "Recipient"
 msgstr "Empfänger"
 
-#: aleksis/core/models.py:742 aleksis/core/models.py:1069
+#: 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:744
+#: aleksis/core/models.py:746 aleksis/core/models.py:751
 msgid "Send notification at"
 msgstr "Benachrichtigung schicken am"
 
-#: aleksis/core/models.py:746
+#: aleksis/core/models.py:748 aleksis/core/models.py:753
 msgid "Read"
 msgstr "Gelesen"
 
-#: aleksis/core/models.py:747
+#: aleksis/core/models.py:749 aleksis/core/models.py:754
 msgid "Sent"
 msgstr "Versandt"
 
-#: aleksis/core/models.py:764
+#: aleksis/core/models.py:766 aleksis/core/models.py:771
 msgid "Notification"
 msgstr "Benachrichtigung"
 
-#: aleksis/core/models.py:833
+#: 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
+msgid "Notifications"
+msgstr "Benachrichtigungen"
+
+#: aleksis/core/models.py:835 aleksis/core/models.py:840
 msgid "Link to detailed view"
 msgstr "Link zur detaillierten Ansicht"
 
-#: aleksis/core/models.py:836
+#: aleksis/core/models.py:838 aleksis/core/models.py:843
 msgid "Date and time from when to show"
 msgstr "Datum und Uhrzeit des Anzeigestarts"
 
-#: aleksis/core/models.py:839
+#: aleksis/core/models.py:841 aleksis/core/models.py:846
 msgid "Date and time until when to show"
 msgstr "Anzeigezeitraum"
 
-#: aleksis/core/models.py:864
+#: aleksis/core/models.py:866 aleksis/core/models.py:871
 msgid "Announcement"
 msgstr "Ankündigung"
 
-#: aleksis/core/models.py:902
+#: aleksis/core/models.py:904 aleksis/core/models.py:909
 msgid "Announcement recipient"
 msgstr "Empfänger der Ankündigung"
 
-#: aleksis/core/models.py:903
+#: aleksis/core/models.py:905 aleksis/core/models.py:910
 msgid "Announcement recipients"
 msgstr "Empfänger der Ankündigung"
 
-#: aleksis/core/models.py:925
+#: aleksis/core/models.py:927 aleksis/core/models.py:932
 msgid "Widget Title"
 msgstr "Widget-Titel"
 
-#: aleksis/core/models.py:926
+#: aleksis/core/models.py:928 aleksis/core/models.py:933
 msgid "Activate Widget"
 msgstr "Widget aktivieren"
 
-#: aleksis/core/models.py:927
+#: aleksis/core/models.py:929 aleksis/core/models.py:934
 msgid "Widget is broken"
 msgstr "Widget ist kaputt"
 
-#: aleksis/core/models.py:930
+#: aleksis/core/models.py:932 aleksis/core/models.py:937
 msgid "Size on mobile devices"
 msgstr "Größe auf Mobilgeräten"
 
-#: aleksis/core/models.py:931
+#: aleksis/core/models.py:933 aleksis/core/models.py:938
 msgid "<= 600 px, 12 columns"
 msgstr "<= 600 px, 12 Spalten"
 
-#: aleksis/core/models.py:936
+#: aleksis/core/models.py:938 aleksis/core/models.py:943
 msgid "Size on tablet devices"
 msgstr "Größe auf Tablets"
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:939 aleksis/core/models.py:944
 msgid "> 600 px, 12 columns"
 msgstr "> 600px, 12 Spalten"
 
-#: aleksis/core/models.py:942
+#: aleksis/core/models.py:944 aleksis/core/models.py:949
 msgid "Size on desktop devices"
 msgstr "Größe auf Desktopgeräten"
 
-#: aleksis/core/models.py:943
+#: aleksis/core/models.py:945 aleksis/core/models.py:950
 msgid "> 992 px, 12 columns"
 msgstr "> 992 px, 12 Spalten"
 
-#: aleksis/core/models.py:948
+#: aleksis/core/models.py:950 aleksis/core/models.py:955
 msgid "Size on large desktop devices"
 msgstr "Größe auf großen Desktopgeräten"
 
-#: aleksis/core/models.py:949
+#: aleksis/core/models.py:951 aleksis/core/models.py:956
 msgid "> 1200 px>, 12 columns"
 msgstr "> 1200 px, 12 Spalten"
 
-#: aleksis/core/models.py:980
+#: aleksis/core/models.py:982 aleksis/core/models.py:987
 msgid "Can edit default dashboard"
 msgstr "Kann Standarddashboard bearbeiten"
 
-#: aleksis/core/models.py:981
+#: aleksis/core/models.py:983 aleksis/core/models.py:988
 msgid "Dashboard Widget"
 msgstr "Dashboard-Widget"
 
-#: aleksis/core/models.py:982
+#: aleksis/core/models.py:984 aleksis/core/models.py:989
 msgid "Dashboard Widgets"
 msgstr "Dashboard-Widgets"
 
-#: aleksis/core/models.py:988
+#: aleksis/core/models.py:990 aleksis/core/models.py:995
 msgid "URL"
 msgstr "URL"
 
-#: aleksis/core/models.py:989
+#: aleksis/core/models.py:991 aleksis/core/models.py:996
 msgid "Icon URL"
 msgstr "Symbol-URL"
 
-#: aleksis/core/models.py:995
+#: aleksis/core/models.py:997 aleksis/core/models.py:1002
 msgid "External link widget"
 msgstr "Externer-Link-Widget"
 
-#: aleksis/core/models.py:996
+#: aleksis/core/models.py:998 aleksis/core/models.py:1003
 msgid "External link widgets"
 msgstr "Externer-Link-Widgets"
 
-#: aleksis/core/models.py:1002
+#: aleksis/core/models.py:1004 aleksis/core/models.py:1009
 msgid "Content"
 msgstr "Inhalt"
 
-#: aleksis/core/models.py:1008
+#: aleksis/core/models.py:1010 aleksis/core/models.py:1015
 msgid "Static content widget"
 msgstr "Statischer-Inhalt-Widget"
 
-#: aleksis/core/models.py:1009
+#: aleksis/core/models.py:1011 aleksis/core/models.py:1016
 msgid "Static content widgets"
 msgstr "Statischer-Inhalt-Widgets"
 
-#: aleksis/core/models.py:1014
+#: aleksis/core/models.py:1016 aleksis/core/models.py:1021
 msgid "Dashboard widget"
 msgstr "Dashboard-Widget"
 
-#: aleksis/core/models.py:1019
+#: aleksis/core/models.py:1021 aleksis/core/models.py:1026
 msgid "Order"
 msgstr "Reihenfolge"
 
-#: aleksis/core/models.py:1020
+#: aleksis/core/models.py:1022 aleksis/core/models.py:1027
 msgid "Part of the default dashboard"
 msgstr "Teil des Standarddashboards"
 
-#: aleksis/core/models.py:1035
+#: aleksis/core/models.py:1037 aleksis/core/models.py:1042
 msgid "Dashboard widget order"
 msgstr "Reihenfolge der Dashboard-Widgets"
 
-#: aleksis/core/models.py:1036
+#: aleksis/core/models.py:1038 aleksis/core/models.py:1043
 msgid "Dashboard widget orders"
 msgstr "Reihenfolgen der Dashboard-Widgets"
 
-#: aleksis/core/models.py:1042
+#: aleksis/core/models.py:1044 aleksis/core/models.py:1049
 msgid "Menu ID"
 msgstr "Menü-ID"
 
-#: aleksis/core/models.py:1055
+#: aleksis/core/models.py:1057 aleksis/core/models.py:1062
 msgid "Custom menu"
 msgstr "Benutzerdefiniertes Menü"
 
-#: aleksis/core/models.py:1056
+#: aleksis/core/models.py:1058 aleksis/core/models.py:1063
 msgid "Custom menus"
 msgstr "Benutzerdefinierte Menüs"
 
-#: aleksis/core/models.py:1066
+#: aleksis/core/models.py:1068 aleksis/core/models.py:1075
 msgid "Menu"
 msgstr "Menü"
 
-#: aleksis/core/models.py:1070 aleksis/core/models.py:1318
+#: 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
 msgid "Icon"
 msgstr "Symbol"
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1078 aleksis/core/models.py:1085
 msgid "Custom menu item"
 msgstr "Benutzerdefiniertes Menüelement"
 
-#: aleksis/core/models.py:1077
+#: aleksis/core/models.py:1079 aleksis/core/models.py:1086
 msgid "Custom menu items"
 msgstr "Benutzerdefinierte Menüelemente"
 
-#: aleksis/core/models.py:1091
+#: aleksis/core/models.py:1093 aleksis/core/models.py:1103
 msgid "Title of type"
 msgstr "Titel des Typs"
 
-#: aleksis/core/models.py:1098 aleksis/core/templates/core/group/full.html:47
+#: 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
 msgid "Group type"
 msgstr "Gruppentyp"
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1114 aleksis/core/models.py:1124
 msgid "Can view system status"
 msgstr "Kann Systemstatus sehen"
 
-#: aleksis/core/models.py:1113
+#: aleksis/core/models.py:1115 aleksis/core/models.py:1125
 msgid "Can manage data"
 msgstr "Kann Daten verwalten"
 
-#: aleksis/core/models.py:1114
+#: aleksis/core/models.py:1116 aleksis/core/models.py:1126
 msgid "Can impersonate"
 msgstr "Kann sich verkleiden"
 
-#: aleksis/core/models.py:1115
+#: aleksis/core/models.py:1117 aleksis/core/models.py:1127
 msgid "Can use search"
 msgstr "Kann Suche benutzen"
 
-#: aleksis/core/models.py:1116
+#: aleksis/core/models.py:1118 aleksis/core/models.py:1128
 msgid "Can change site preferences"
 msgstr "Kann Konfiguration ändern"
 
-#: aleksis/core/models.py:1117
+#: aleksis/core/models.py:1119 aleksis/core/models.py:1129
 msgid "Can change person preferences"
 msgstr "Kann Einstellungen einer Person verändern"
 
-#: aleksis/core/models.py:1118
+#: aleksis/core/models.py:1120 aleksis/core/models.py:1130
 msgid "Can change group preferences"
 msgstr "Kann Einstellungen einer Gruppe verändern"
 
-#: aleksis/core/models.py:1119
+#: aleksis/core/models.py:1121 aleksis/core/models.py:1131
 msgid "Can test PDF generation"
 msgstr "Kann die PDF-Generierung testen"
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1122 aleksis/core/models.py:1132
 msgid "Can invite persons"
 msgstr "Kann Personen einladen"
 
-#: aleksis/core/models.py:1156
+#: aleksis/core/models.py:1158 aleksis/core/models.py:1168
 msgid "Related data check task"
 msgstr "Zugehörige Datenprüfungsaufgabe"
 
-#: aleksis/core/models.py:1164
+#: aleksis/core/models.py:1166 aleksis/core/models.py:1176
 msgid "Issue solved"
 msgstr "Problem gelöst"
 
-#: aleksis/core/models.py:1165
+#: aleksis/core/models.py:1167 aleksis/core/models.py:1177
 msgid "Notification sent"
 msgstr "Benachrichtigung gesendet"
 
-#: aleksis/core/models.py:1178
+#: aleksis/core/models.py:1180 aleksis/core/models.py:1190
 msgid "Data check result"
 msgstr "Datenprüfungsergebnis"
 
-#: aleksis/core/models.py:1179
+#: aleksis/core/models.py:1181 aleksis/core/models.py:1191
 msgid "Data check results"
 msgstr "Datenprüfungsergebnisse"
 
-#: aleksis/core/models.py:1181
+#: aleksis/core/models.py:1183 aleksis/core/models.py:1193
 msgid "Can run data checks"
 msgstr "Kann Datenprüfungen ausführen"
 
-#: aleksis/core/models.py:1182
+#: aleksis/core/models.py:1184 aleksis/core/models.py:1194
 msgid "Can solve data check problems"
 msgstr "Kann Datenprüfungsprobleme lösen"
 
-#: aleksis/core/models.py:1189
+#: aleksis/core/models.py:1191 aleksis/core/models.py:1201
 msgid "E-Mail address"
 msgstr "E-Mail-Adresse"
 
-#: aleksis/core/models.py:1221
+#: aleksis/core/models.py:1223 aleksis/core/models.py:1233
 msgid "Owner"
 msgstr "Leiter"
 
-#: aleksis/core/models.py:1225
+#: aleksis/core/models.py:1227 aleksis/core/models.py:1237
 msgid "File expires at"
 msgstr "Datei abgelaufen am"
 
-#: aleksis/core/models.py:1227
+#: aleksis/core/models.py:1229 aleksis/core/models.py:1239
 msgid "Generated HTML file"
 msgstr "Generierte HTML-Datei"
 
-#: aleksis/core/models.py:1229
+#: aleksis/core/models.py:1231 aleksis/core/models.py:1241
 msgid "Generated PDF file"
 msgstr "Generierte PDF-Datei"
 
-#: aleksis/core/models.py:1236
+#: aleksis/core/models.py:1238 aleksis/core/models.py:1248
 msgid "PDF file"
 msgstr "PDF-Datei"
 
-#: aleksis/core/models.py:1237
+#: aleksis/core/models.py:1239 aleksis/core/models.py:1249
 msgid "PDF files"
 msgstr "PDF-Dateien"
 
-#: aleksis/core/models.py:1242
+#: aleksis/core/models.py:1244 aleksis/core/models.py:1254
 msgid "Task result"
 msgstr "Task-Ergebnis"
 
-#: aleksis/core/models.py:1245
+#: aleksis/core/models.py:1247 aleksis/core/models.py:1257
 msgid "Task user"
 msgstr "Task-Benutzer"
 
-#: aleksis/core/models.py:1257
+#: aleksis/core/models.py:1259 aleksis/core/models.py:1269
 msgid "Task user assignment"
 msgstr "Task-Benutzer-Zuordnung"
 
-#: aleksis/core/models.py:1258
+#: aleksis/core/models.py:1260 aleksis/core/models.py:1270
 msgid "Task user assignments"
 msgstr "Task-Benutzer-Zuordnungen"
 
-#: aleksis/core/models.py:1274
+#: aleksis/core/models.py:1276 aleksis/core/models.py:1286
 msgid "Additional attributes"
 msgstr "Zusätzliche Attribute"
 
-#: aleksis/core/models.py:1312
+#: aleksis/core/models.py:1314 aleksis/core/models.py:1324
 msgid "Allowed scopes that clients can request"
 msgstr "Erlaubte Scopes, die ein Client anfordern kann"
 
-#: aleksis/core/models.py:1322
-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:1324 aleksis/core/models.py:1334
+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:1377 aleksis/core/models.py:1387
+msgid "Selected ICal feed"
+msgstr "Ausgewählter iCal-Feed"
+
+#: aleksis/core/models.py:1386 aleksis/core/models.py:1396
+msgid "Personal Calendar URL"
+msgstr "Persönliche Kalender-URL"
+
+#: aleksis/core/models.py:1387 aleksis/core/models.py:1397
+msgid "Personal Calendar URLs"
+msgstr "Persönliche Kalender-URLs"
 
 #: aleksis/core/preferences.py:25
 msgid "General"
@@ -1099,8 +1192,11 @@ msgid "Automatically create new persons for new users"
 msgstr "Erstelle automatisch neue Personen für neue Benutzer"
 
 #: aleksis/core/preferences.py:241
-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"
+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
 msgid "Display name of the school"
@@ -1108,7 +1204,8 @@ msgstr "Sichtbarer Name der Schule"
 
 #: aleksis/core/preferences.py:263
 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
 msgid "Allow users to change their passwords"
@@ -1146,67 +1243,72 @@ msgstr "Erlaubte Grant Flows für OAuth-Anwendungen"
 msgid "Available languages"
 msgstr "Verfügbare Sprachen"
 
-#: aleksis/core/preferences.py:357
+#: aleksis/core/preferences.py:357 aleksis/core/preferences.py:343
 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:368 aleksis/core/preferences.py:354
 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:379 aleksis/core/preferences.py:365
 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:388 aleksis/core/preferences.py:374
 msgid "Show dashboard to users without login"
 msgstr "Zeige Dashboard für Benutzer ohne Login"
 
-#: aleksis/core/preferences.py:397
+#: aleksis/core/preferences.py:397 aleksis/core/preferences.py:383
 msgid "Allow users to edit their dashboard"
 msgstr "Erlaube Benutzern, ihr Dashboard zu bearbeiten"
 
-#: aleksis/core/preferences.py:408
+#: aleksis/core/preferences.py:408 aleksis/core/preferences.py:394
 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
-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:423 aleksis/core/preferences.py:409
+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:437 aleksis/core/preferences.py:423
 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:448 aleksis/core/preferences.py:434
 msgid "Prefer personal photos over avatars"
 msgstr "Persönliche Fotos Avataren vorziehen"
 
-#: aleksis/core/preferences.py:458
+#: aleksis/core/preferences.py:458 aleksis/core/preferences.py:444
 msgid "PDF file expiration duration"
 msgstr "PDF-Datei-Ablaufdauer"
 
-#: aleksis/core/preferences.py:459
+#: aleksis/core/preferences.py:459 aleksis/core/preferences.py:445
 msgid "in minutes"
 msgstr "in Minuten"
 
-#: aleksis/core/preferences.py:469
+#: aleksis/core/preferences.py:469 aleksis/core/preferences.py:455
 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:479 aleksis/core/preferences.py:465
 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:489 aleksis/core/preferences.py:475
 msgid "Country for phone number parsing"
 msgstr "Land für das Einlesen von Telefonnummern"
 
-#: aleksis/core/settings.py:540
+#: aleksis/core/settings.py:540 aleksis/core/settings.py:541
 msgid "English"
 msgstr "Englisch"
 
-#: aleksis/core/settings.py:541
+#: aleksis/core/settings.py:541 aleksis/core/settings.py:542
 msgid "German"
 msgstr "Deutsch"
 
@@ -1216,12 +1318,15 @@ msgstr "Deutsch"
 #: aleksis/core/templates/core/person/full.html:26
 #: aleksis/core/templates/core/person/full.html:86
 #: 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
 msgid "Actions"
 msgstr "Aktionen"
 
@@ -1234,6 +1339,9 @@ msgstr "Aktionen"
 #: 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"
 
@@ -1254,12 +1362,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"
-"            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"
 "          "
 
@@ -1271,7 +1381,8 @@ 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"
 "          "
 
@@ -1286,12 +1397,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"
-"            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"
 "          "
 
@@ -1310,11 +1423,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"
-"            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
@@ -1355,17 +1470,27 @@ 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: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?"
@@ -1384,11 +1509,13 @@ 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"
 "          "
 
@@ -1403,8 +1530,12 @@ 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 ""
@@ -1427,7 +1558,8 @@ 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"
 "          "
 
@@ -1439,12 +1571,16 @@ 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
@@ -1493,8 +1629,11 @@ 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_closed.html:5
 #: aleksis/core/templates/account/signup_closed.html:6
@@ -1513,7 +1652,8 @@ 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"
 "          "
 
@@ -1533,13 +1673,17 @@ 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
@@ -1553,7 +1697,8 @@ 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
@@ -1580,7 +1725,7 @@ msgid "Publish new announcement"
 msgstr "Neue Ankündigung veröffentlichen"
 
 #: aleksis/core/templates/core/announcement/form.html:34
-msgid "Save und publish announcement"
+msgid "Save and publish announcement"
 msgstr "Ankündigung speichern und veröffentlichen"
 
 #: aleksis/core/templates/core/announcement/list.html:19
@@ -1634,7 +1779,8 @@ 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"
 "          "
 
@@ -1730,29 +1876,42 @@ 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
@@ -1770,12 +1929,15 @@ msgstr "Standard-Dashboard"
 #: 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"
 "        "
 
@@ -1816,14 +1978,18 @@ 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"
 "          "
 
@@ -1860,22 +2026,27 @@ 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"
 
@@ -1913,6 +2084,45 @@ 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"
@@ -1920,13 +2130,16 @@ msgstr "Startseite"
 #: aleksis/core/templates/core/index.html:49
 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
@@ -1966,25 +2179,31 @@ 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"
+"              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"
+"              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"
+"              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® ist eine eingetragene Wortmarke des Open-Source-"
+"Projektes AlekSIS, vertreten durch den Teckids e.V.\n"
 "            "
 
 #: aleksis/core/templates/core/pages/about.html:30
@@ -2002,14 +2221,18 @@ 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"
+"              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"
+"              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"
 "            "
 
@@ -2059,11 +2282,13 @@ msgstr ""
 #: aleksis/core/templates/core/pages/progress.html:27
 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"
-"              Ohne aktiviertes JavaScript kann der Fortschritt leider nicht aktualisiert werden.\n"
+"              Ohne aktiviertes JavaScript kann der Fortschritt leider nicht "
+"aktualisiert werden.\n"
 "            "
 
 #: aleksis/core/templates/core/pages/progress.html:47
@@ -2082,11 +2307,13 @@ 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 "
+"thesite.\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
@@ -2104,11 +2331,13 @@ 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
@@ -2118,11 +2347,13 @@ 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
@@ -2172,11 +2403,13 @@ 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
@@ -2234,22 +2467,26 @@ 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"
+"            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"
+"            Ihr Administratorenkonto ist mit keiner Person verknüpft. "
+"Deshalb\n"
 "            wurde Ihr Konto mit einer Dummyperson verknüpft.\n"
 "          "
 
@@ -2262,8 +2499,10 @@ msgid ""
 "          "
 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"
+"            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"
 "          "
 
@@ -2390,8 +2629,12 @@ 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"
@@ -2449,13 +2692,6 @@ 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"
@@ -2526,7 +2762,8 @@ 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:"
+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
@@ -2536,7 +2773,9 @@ 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"
@@ -2557,14 +2796,19 @@ msgstr "Keine Internetverbindung."
 #: 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"
+"      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"
+"      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"
 "    "
 
@@ -2600,12 +2844,14 @@ 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"
 "          "
 
@@ -2620,7 +2866,8 @@ 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"
@@ -2629,12 +2876,15 @@ 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"
@@ -2650,11 +2900,15 @@ 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
@@ -2663,7 +2917,8 @@ 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
@@ -2711,7 +2966,9 @@ 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
@@ -2741,7 +2998,8 @@ 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
@@ -2751,21 +3009,25 @@ 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
@@ -2851,16 +3113,21 @@ 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
@@ -2904,7 +3171,9 @@ 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."
@@ -2913,7 +3182,8 @@ 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 ""
@@ -2925,7 +3195,8 @@ 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 ""
@@ -2949,14 +3220,19 @@ 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"
 "                    "
 
@@ -2987,11 +3263,13 @@ 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
@@ -3037,7 +3315,8 @@ msgid ""
 msgstr ""
 "\n"
 "        Sie sind dabei, Ihre Accountsicherheit auf das\n"
-"       nächste Level zu erhöhen. Bitte folgen Sie den Schritten im Wizard um die\n"
+"       nächste Level zu erhöhen. Bitte folgen Sie den Schritten im Wizard um "
+"die\n"
 "       Zwei-Faktor-Authentifizierug zu aktivieren.\n"
 "      "
 
@@ -3048,14 +3327,16 @@ 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 ""
@@ -3074,7 +3355,8 @@ 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
@@ -3092,11 +3374,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"
-"            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
@@ -3106,23 +3390,30 @@ 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
@@ -3147,11 +3438,13 @@ 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
@@ -3168,12 +3461,14 @@ 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"
 "        "
@@ -3191,8 +3486,12 @@ 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"
@@ -3272,7 +3571,8 @@ 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
@@ -3284,7 +3584,8 @@ 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"
 "      "
@@ -3317,169 +3618,248 @@ msgstr "Es ist ein Fehler beim Generieren der PDF-Datei aufgetreten."
 msgid "Download PDF"
 msgstr "PDF herunterladen"
 
-#: aleksis/core/views.py:289
+#: aleksis/core/views.py:292 aleksis/core/views.py:294
 msgid "The school term has been created."
 msgstr "Das Schuljahr wurde erstellt."
 
-#: aleksis/core/views.py:301
+#: aleksis/core/views.py:304 aleksis/core/views.py:306
 msgid "The school term has been saved."
 msgstr "Das Schuljahr wurde gespeichert."
 
-#: aleksis/core/views.py:421
+#: aleksis/core/views.py:424 aleksis/core/views.py:426
 msgid "The child groups were successfully saved."
 msgstr "Die Untergruppen wurden gespeichert."
 
-#: aleksis/core/views.py:440 aleksis/core/views.py:450
+#: aleksis/core/views.py:443 aleksis/core/views.py:453
+#: aleksis/core/views.py:445 aleksis/core/views.py:455
 msgid "The person has been saved."
 msgstr "Die Person wurde gespeichert."
 
-#: aleksis/core/views.py:500
+#: aleksis/core/views.py:503 aleksis/core/views.py:505
 msgid "The group has been saved."
 msgstr "Die Gruppe wurde gespeichert."
 
-#: aleksis/core/views.py:597
+#: aleksis/core/views.py:600 aleksis/core/views.py:602
 msgid "The announcement has been saved."
 msgstr "Die Ankündigung wurde gespeichert."
 
-#: aleksis/core/views.py:613
+#: aleksis/core/views.py:616 aleksis/core/views.py:618
 msgid "The announcement has been deleted."
 msgstr "Ankündigung wurde gelöscht."
 
-#: aleksis/core/views.py:681
+#: aleksis/core/views.py:684 aleksis/core/views.py:686
 msgid "The requested preference registry does not exist"
 msgstr "Das angeforderte Einstellungsregister existiert nicht"
 
-#: aleksis/core/views.py:700
+#: aleksis/core/views.py:703 aleksis/core/views.py:705
 msgid "The preferences have been saved successfully."
 msgstr "Die Einstellungen wurde gespeichert."
 
-#: aleksis/core/views.py:724
+#: aleksis/core/views.py:727 aleksis/core/views.py:729
 msgid "The person has been deleted."
 msgstr "Die Person wurde gelöscht."
 
-#: aleksis/core/views.py:738
+#: aleksis/core/views.py:741 aleksis/core/views.py:743
 msgid "The group has been deleted."
 msgstr "Die Gruppe wurde gelöscht."
 
-#: aleksis/core/views.py:770
+#: aleksis/core/views.py:773
 msgid "The additional_field has been saved."
 msgstr "Das zusätzliche Feld wurde gespeichert."
 
-#: aleksis/core/views.py:804
+#: aleksis/core/views.py:807 aleksis/core/views.py:809
 msgid "The additional field has been deleted."
 msgstr "Das zusätzliche Feld wurde gelöscht."
 
-#: aleksis/core/views.py:829
+#: aleksis/core/views.py:832 aleksis/core/views.py:834
 msgid "The group type has been saved."
 msgstr "Der Gruppentyp wurde gespeichert."
 
-#: aleksis/core/views.py:859
+#: aleksis/core/views.py:862 aleksis/core/views.py:864
 msgid "The group type has been deleted."
 msgstr "Der Gruppentyp wurde gelöscht."
 
-#: aleksis/core/views.py:892
+#: aleksis/core/views.py:895 aleksis/core/views.py:897
 msgid "Progress: Run data checks"
 msgstr "Fortschritt: Datenprüfungen ausführen"
 
-#: aleksis/core/views.py:893
+#: aleksis/core/views.py:896 aleksis/core/views.py:898
 msgid "Run data checks …"
 msgstr "Datenprüfungen laufen …"
 
-#: aleksis/core/views.py:894
+#: aleksis/core/views.py:897 aleksis/core/views.py:899
 msgid "The data checks were run successfully."
 msgstr "Die Datenprüfungen wurden erfolgreich ausgeführt."
 
-#: aleksis/core/views.py:895
+#: aleksis/core/views.py:898 aleksis/core/views.py:900
 msgid "There was a problem while running data checks."
 msgstr "Es gab ein Problem beim Ausführen der Datenprüfungen."
 
-#: aleksis/core/views.py:911
+#: aleksis/core/views.py:914 aleksis/core/views.py:916
 #, 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:921
+#: aleksis/core/views.py:924 aleksis/core/views.py:926
 msgid "The requested solve option does not exist"
 msgstr "Die angeforderte Lösungsoption existiert nicht"
 
-#: aleksis/core/views.py:953
+#: aleksis/core/views.py:956 aleksis/core/views.py:958
 msgid "The dashboard widget has been saved."
 msgstr "Das Dashboard-Widget wurde gespeichert."
 
-#: aleksis/core/views.py:983
+#: aleksis/core/views.py:986 aleksis/core/views.py:988
 msgid "The dashboard widget has been created."
 msgstr "Das Dashboard-Widget wurde erstellt."
 
-#: aleksis/core/views.py:993
+#: aleksis/core/views.py:996 aleksis/core/views.py:998
 msgid "The dashboard widget has been deleted."
 msgstr "Das Dashboard-Widget wurde gelöscht."
 
-#: aleksis/core/views.py:1064
+#: aleksis/core/views.py:1067 aleksis/core/views.py:1069
 msgid "Your dashboard configuration has been saved successfully."
 msgstr "Ihre Dashboardkonfiguration wurde erfolgreich gespeichert."
 
-#: aleksis/core/views.py:1066
+#: aleksis/core/views.py:1069 aleksis/core/views.py:1071
 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:1142
+#: aleksis/core/views.py:1145 aleksis/core/views.py:1147
 #, 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:1233
+#: aleksis/core/views.py:1236 aleksis/core/views.py:1238
 msgid "We have successfully assigned the permissions."
 msgstr "Wir haben die Berechtigungen erfolgreich zugewiesen."
 
-#: aleksis/core/views.py:1243
+#: aleksis/core/views.py:1246 aleksis/core/views.py:1248
 msgid "The global user permission has been deleted."
 msgstr "Die globale Benutzerberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1253
+#: aleksis/core/views.py:1256 aleksis/core/views.py:1258
 msgid "The global group permission has been deleted."
 msgstr "Die globale Gruppenberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1263
+#: aleksis/core/views.py:1266 aleksis/core/views.py:1268
 msgid "The object user permission has been deleted."
 msgstr "Die Objekt-Benutzerberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1273
+#: aleksis/core/views.py:1276 aleksis/core/views.py:1278
 msgid "The object group permission has been deleted."
 msgstr "Die Objekt-Gruppenberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1341
+#: 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:1350 aleksis/core/views.py:1354
+#: 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:1406
-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:1409 aleksis/core/views.py:1411
+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:1413
+#: aleksis/core/views.py:1416 aleksis/core/views.py:1418
 msgid "The third-party account has been successfully disconnected."
 msgstr "Das Drittanbieter-Konto wurde erfolgreich getrennt."
 
-#: aleksis/core/views.py:1484
-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:1487 aleksis/core/views.py:1489
+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:1495
+#: aleksis/core/views.py:1498 aleksis/core/views.py:1500
 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"
+
+#: aleksis/core/views.py:1608
+msgid "ICal feed deleted successfully"
+msgstr "Der iCal-Feed wurde erfolgreich gelöscht"
+
+#: aleksis/core/views.py:1616
+msgid "ICal feed created successfully"
+msgstr "Der iCal-Feed wurde erfolgreich erstellt"
+
+#: aleksis/core/data_checks.py:330
+#, python-format
+msgid "Validate field %s of model %s."
+msgstr "Feld %s von Model %s validieren."
+
+#: aleksis/core/data_checks.py:332
+#, python-format
+msgid "The field %s couldn't be validated successfully."
+msgstr "Das Feld %s konnte nicht erfolgreich validiert werden."
+
+#: aleksis/core/models.py:181
+msgid "other"
+msgstr "andere"
+
+#: aleksis/core/settings.py:543
+msgid "Ukrainian"
+msgstr "Ukrainisch"
+
+#: aleksis/core/templates/500.html:10
+msgid ""
+"An unexpected error has\n"
+"          occurred."
+msgstr ""
+"Ein unerwarteter Fehler ist\n"
+"            aufgetreten."
+
+#: 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/ical/ical_list.html:4
+#: aleksis/core/templates/core/ical/ical_list.html:5
+msgid "iCal Feeds"
+msgstr "iCal-Feeds"
+
+#: aleksis/core/views.py:775
+msgid "The additional field has been saved."
+msgstr "Das zusätzliche Feld wurde gespeichert."
+
+#: aleksis/core/views.py:1600
+msgid "iCal feed updated successfully"
+msgstr "Der iCal-Feed wurde erfolgreich aktualisiert"
+
+#: aleksis/core/views.py:1610
+msgid "iCal feed deleted successfully"
+msgstr "Der iCal-Feed wurde erfolgreich gelöscht"
+
+#: aleksis/core/views.py:1618
+msgid "iCal feed created successfully"
+msgstr "Der iCal-Feed wurde erfolgreich erstellt"
+
 #~ msgid "Me"
 #~ msgstr "Ich"
 
 #~ msgid "Logged in as"
 #~ msgstr "Angemeldet als"
 
-#~ msgid "Person was invited successfully."
-#~ msgstr "Person wurde erfolgreich eingeladen."
-
 #, python-brace-format
 #~ msgid "Last backup {time_gone_since_backup}!"
 #~ msgstr "Letztes Backup: {time_gone_since_backup}!"
@@ -3536,7 +3916,8 @@ msgstr "Person wurde bereits eingeladen."
 #~ "   <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"
 #~ " "
@@ -3555,8 +3936,12 @@ msgstr "Person wurde bereits eingeladen."
 #~ 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."
@@ -3565,8 +3950,12 @@ msgstr "Person wurde bereits eingeladen."
 #~ 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"
@@ -3588,7 +3977,9 @@ msgstr "Person wurde bereits eingeladen."
 
 #, 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"
@@ -3613,17 +4004,23 @@ msgstr "Person wurde bereits eingeladen."
 
 #~ 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"
@@ -3649,7 +4046,8 @@ msgstr "Person wurde bereits eingeladen."
 #~ "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"
@@ -3658,8 +4056,12 @@ msgstr "Person wurde bereits eingeladen."
 #~ 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."
@@ -3713,7 +4115,8 @@ msgstr "Person wurde bereits eingeladen."
 #~ "     "
 #~ 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"
 #~ "     "
 
@@ -3787,10 +4190,11 @@ msgstr "Person wurde bereits eingeladen."
 #~ 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 management"
 #~ msgid "School name"
 #~ msgstr "Schulverwaltung"
 
@@ -3848,7 +4252,8 @@ msgstr "Person wurde bereits eingeladen."
 #~ "    "
 #~ 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/de_DE/LC_MESSAGES/djangojs.po b/aleksis/core/locale/de_DE/LC_MESSAGES/djangojs.po
index c0b719bf0961c3f0c22071603f7df5b175571354..2298f9b2dd0bb495629e9b9174cdeceb7a7159bc 100644
--- a/aleksis/core/locale/de_DE/LC_MESSAGES/djangojs.po
+++ b/aleksis/core/locale/de_DE/LC_MESSAGES/djangojs.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-23 11:20+0100\n"
+"POT-Creation-Date: 2022-06-25 12:09+0200\n"
 "PO-Revision-Date: 2021-10-28 14:37+0000\n"
 "Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
 "Language-Team: German <https://translate.edugit.org/projects/aleksis/aleksis-core-js/de/>\n"
diff --git a/aleksis/core/locale/fr/LC_MESSAGES/django.po b/aleksis/core/locale/fr/LC_MESSAGES/django.po
index 231a5f739692d128aa759a0b397450df36c54169..b57a1588c4fb9a13d74200af11aa150a0f7b2c7d 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: 2022-03-23 11:19+0100\n"
+"POT-Creation-Date: 2022-06-25 12:09+0200\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"
@@ -40,8 +40,8 @@ msgstr "Détails de contact"
 msgid "Home and mobile phone"
 msgstr ""
 
-#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:185
-#: aleksis/core/models.py:487 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:171
+#: 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
 #, fuzzy
@@ -49,27 +49,55 @@ msgstr ""
 msgid "Groups"
 msgstr "Groupe"
 
-#: aleksis/core/data_checks.py:56
+#: aleksis/core/data_checks.py:59
 msgid "Ignore problem"
 msgstr ""
 
-#: aleksis/core/data_checks.py:185
+#: aleksis/core/data_checks.py:188
 #, python-brace-format
 msgid "Solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/data_checks.py:291
+#: aleksis/core/data_checks.py:294
 msgid "Deactivate DashboardWidget"
 msgstr ""
 
-#: aleksis/core/data_checks.py:303
+#: aleksis/core/data_checks.py:306
 msgid "Ensure that there are no broken DashboardWidgets."
 msgstr ""
 
-#: aleksis/core/data_checks.py:304
+#: aleksis/core/data_checks.py:307
 msgid "The DashboardWidget was reported broken automatically."
 msgstr ""
 
+#: aleksis/core/data_checks.py:330
+#, python-format
+msgid "Validate field %s of model %s."
+msgstr ""
+
+#: aleksis/core/data_checks.py:332
+#, python-format
+msgid "The field %s couldn't be validated successfully."
+msgstr ""
+
+#: aleksis/core/feeds.py:52
+msgid "Birthday Calendar"
+msgstr ""
+
+#: aleksis/core/feeds.py:53
+msgid "A Calendar of Birthdays"
+msgstr ""
+
+#: aleksis/core/feeds.py:66
+#, python-format
+msgid "%(name)s's birthday"
+msgstr ""
+
+#: aleksis/core/feeds.py:71
+#, python-format
+msgid "%(name)s was born on %(birthday)s"
+msgstr ""
+
 #: 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
@@ -97,11 +125,11 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:713
+#: aleksis/core/filters.py:113 aleksis/core/models.py:720
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:486
+#: aleksis/core/filters.py:135 aleksis/core/models.py:493
 msgid "Group"
 msgstr "groupe"
 
@@ -109,7 +137,7 @@ msgstr "groupe"
 msgid "Base data"
 msgstr ""
 
-#: aleksis/core/forms.py:55
+#: aleksis/core/forms.py:55 aleksis/core/tables.py:47
 msgid "Address"
 msgstr ""
 
@@ -141,7 +169,7 @@ msgstr ""
 msgid "This username is already in use."
 msgstr "Cet nom est deja en utilisation."
 
-#: aleksis/core/forms.py:153 aleksis/core/models.py:134
+#: aleksis/core/forms.py:153 aleksis/core/models.py:141
 msgid "School term"
 msgstr ""
 
@@ -152,7 +180,7 @@ msgid "Common data"
 msgstr "Détails de contact"
 
 #: aleksis/core/forms.py:155 aleksis/core/forms.py:207
-#: aleksis/core/menus.py:174 aleksis/core/models.py:157
+#: aleksis/core/menus.py:160 aleksis/core/models.py:164
 #: aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 #, fuzzy
@@ -166,18 +194,18 @@ msgstr "Personne"
 msgid "Additional data"
 msgstr "Détails de contact"
 
-#: aleksis/core/forms.py:157 aleksis/core/models.py:210
-#: aleksis/core/models.py:539
+#: aleksis/core/forms.py:157 aleksis/core/models.py:217
+#: aleksis/core/models.py:546 aleksis/core/tables.py:46
 msgid "Photo"
 msgstr ""
 
 #: aleksis/core/forms.py:199 aleksis/core/forms.py:202
-#: aleksis/core/models.py:77
+#: aleksis/core/models.py:84
 msgid "Date"
 msgstr "Date"
 
 #: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:85
+#: aleksis/core/models.py:92
 msgid "Time"
 msgstr ""
 
@@ -213,11 +241,11 @@ msgstr ""
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:418 aleksis/core/models.py:185
+#: aleksis/core/forms.py:418 aleksis/core/models.py:192
 msgid "First name"
 msgstr "Prénom"
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:186
+#: aleksis/core/forms.py:419 aleksis/core/models.py:193
 msgid "Last name"
 msgstr "Nom de famille"
 
@@ -250,7 +278,7 @@ msgid "You must grant the permission to all objects and/or to some objects."
 msgstr ""
 
 #: aleksis/core/forms.py:586
-msgid "Adress data"
+msgid "Address data"
 msgstr ""
 
 #: aleksis/core/forms.py:598
@@ -299,95 +327,88 @@ msgstr ""
 msgid "No backup result found!"
 msgstr ""
 
-#: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6
+#: 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 ""
 
-#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:22
+#: aleksis/core/menus.py:13 aleksis/core/templates/account/signup.html:22
 #: aleksis/core/templates/socialaccount/signup.html:23
 msgid "Sign up"
 msgstr ""
 
-#: aleksis/core/menus.py:24 aleksis/core/templates/invitations/enter.html:7
+#: aleksis/core/menus.py:22 aleksis/core/templates/invitations/enter.html:7
 msgid "Accept invitation"
 msgstr ""
 
-#: aleksis/core/menus.py:33
+#: aleksis/core/menus.py:31
 msgid "Dashboard"
 msgstr ""
 
-#: aleksis/core/menus.py:41 aleksis/core/models.py:765
-#: 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
-msgid "Notifications"
-msgstr ""
-
-#: aleksis/core/menus.py:53
+#: aleksis/core/menus.py:39
 msgid "Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:61 aleksis/core/models.py:865
+#: aleksis/core/menus.py:47 aleksis/core/models.py:872
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
 msgstr ""
 
-#: aleksis/core/menus.py:72 aleksis/core/models.py:135
+#: aleksis/core/menus.py:58 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 ""
 
-#: aleksis/core/menus.py:83
+#: 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 ""
 
-#: aleksis/core/menus.py:94
+#: 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 ""
 
-#: aleksis/core/menus.py:105
+#: 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 ""
 
-#: aleksis/core/menus.py:116
+#: aleksis/core/menus.py:102
 msgid "Configuration"
 msgstr ""
 
-#: aleksis/core/menus.py:127 aleksis/core/templates/core/data_check/list.html:9
+#: 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 ""
 
-#: aleksis/core/menus.py:133 aleksis/core/templates/core/perms/list.html:13
+#: 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 ""
 
-#: aleksis/core/menus.py:144
+#: aleksis/core/menus.py:130
 msgid "Backend Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:152
+#: 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 ""
 
-#: aleksis/core/menus.py:165
+#: aleksis/core/menus.py:151
 msgid "People"
 msgstr ""
 
-#: aleksis/core/menus.py:196 aleksis/core/models.py:1099
+#: aleksis/core/menus.py:182 aleksis/core/models.py:1111
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 #, fuzzy
@@ -395,46 +416,46 @@ msgstr ""
 msgid "Group types"
 msgstr "Groupe"
 
-#: aleksis/core/menus.py:207
+#: aleksis/core/menus.py:193
 msgid "Groups and child groups"
 msgstr ""
 
-#: aleksis/core/menus.py:218 aleksis/core/models.py:535
+#: aleksis/core/menus.py:204 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 ""
 
-#: aleksis/core/menus.py:229
+#: aleksis/core/menus.py:215
 #, fuzzy
 #| msgid "Contact details"
 msgid "Invite person"
 msgstr "Détails de contact"
 
-#: aleksis/core/menus.py:242
+#: 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 ""
 
-#: aleksis/core/menus.py:254
+#: aleksis/core/menus.py:240
 msgid "Stop impersonation"
 msgstr ""
 
-#: aleksis/core/menus.py:263
+#: aleksis/core/menus.py:249
 msgid "Account"
 msgstr ""
 
-#: aleksis/core/menus.py:272
+#: aleksis/core/menus.py:258
 #: aleksis/core/templates/dynamic_preferences/form.html:5
 msgid "Preferences"
 msgstr ""
 
-#: aleksis/core/menus.py:281
+#: aleksis/core/menus.py:267
 msgid "2FA"
 msgstr ""
 
-#: aleksis/core/menus.py:289
+#: 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
@@ -446,17 +467,21 @@ msgstr ""
 msgid "Change password"
 msgstr ""
 
-#: aleksis/core/menus.py:301
+#: aleksis/core/menus.py:287
 msgid "Third-party accounts"
 msgstr ""
 
-#: aleksis/core/menus.py:310
+#: 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 ""
 
-#: aleksis/core/menus.py:320
+#: aleksis/core/menus.py:305
+msgid "Calendar Feeds"
+msgstr ""
+
+#: aleksis/core/menus.py:318
 msgid "Logout"
 msgstr ""
 
@@ -464,597 +489,626 @@ msgstr ""
 msgid "Linked school term"
 msgstr ""
 
-#: aleksis/core/models.py:75
+#: aleksis/core/models.py:82
 msgid "Boolean (Yes/No)"
 msgstr ""
 
-#: aleksis/core/models.py:76
+#: aleksis/core/models.py:83
 msgid "Text (one line)"
 msgstr ""
 
-#: aleksis/core/models.py:78
+#: aleksis/core/models.py:85
 msgid "Date and time"
 msgstr ""
 
-#: aleksis/core/models.py:79
+#: aleksis/core/models.py:86
 msgid "Decimal number"
 msgstr ""
 
-#: aleksis/core/models.py:80 aleksis/core/models.py:203
+#: aleksis/core/models.py:87 aleksis/core/models.py:210
 msgid "E-mail address"
 msgstr ""
 
-#: aleksis/core/models.py:81
+#: aleksis/core/models.py:88
 msgid "Integer"
 msgstr ""
 
-#: aleksis/core/models.py:82
+#: aleksis/core/models.py:89
 msgid "IP address"
 msgstr ""
 
-#: aleksis/core/models.py:83
+#: aleksis/core/models.py:90
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr ""
 
-#: aleksis/core/models.py:84
+#: aleksis/core/models.py:91
 msgid "Text (multi-line)"
 msgstr ""
 
-#: aleksis/core/models.py:86
+#: aleksis/core/models.py:93
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:98 aleksis/core/models.py:1068
+#: aleksis/core/models.py:105 aleksis/core/models.py:1077
+#: aleksis/core/models.py:1384
 msgid "Name"
 msgstr ""
 
-#: aleksis/core/models.py:100
+#: aleksis/core/models.py:107
 #, fuzzy
 #| msgid "Contact details"
 msgid "Start date"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:101
+#: aleksis/core/models.py:108
 msgid "End date"
 msgstr ""
 
-#: aleksis/core/models.py:120
+#: aleksis/core/models.py:127
 msgid "The start date must be earlier than the end date."
 msgstr ""
 
-#: aleksis/core/models.py:127
+#: aleksis/core/models.py:134
 msgid "There is already a school term for this time or a part of this time."
 msgstr ""
 
-#: aleksis/core/models.py:156 aleksis/core/models.py:1017
+#: aleksis/core/models.py:163 aleksis/core/models.py:1024
+#: aleksis/core/models.py:1381
 msgid "Person"
 msgstr "Personne"
 
-#: aleksis/core/models.py:159
+#: aleksis/core/models.py:166
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view address"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:160
+#: aleksis/core/models.py:167
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view contact details"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:161
+#: aleksis/core/models.py:168
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view photo"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:162
+#: aleksis/core/models.py:169
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view avatar image"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:163
+#: aleksis/core/models.py:170
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view persons groups"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:164
+#: aleksis/core/models.py:171
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view personal details"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:174
+#: aleksis/core/models.py:181
 msgid "female"
 msgstr ""
 
-#: aleksis/core/models.py:174
+#: aleksis/core/models.py:181
 msgid "male"
 msgstr ""
 
-#: aleksis/core/models.py:182 aleksis/core/models.py:1271
+#: aleksis/core/models.py:181
+msgid "other"
+msgstr ""
+
+#: aleksis/core/models.py:189 aleksis/core/models.py:1283
 msgid "Linked user"
 msgstr ""
 
-#: aleksis/core/models.py:188
+#: aleksis/core/models.py:195
 msgid "Additional name(s)"
 msgstr ""
 
-#: aleksis/core/models.py:192 aleksis/core/models.py:504
+#: aleksis/core/models.py:199 aleksis/core/models.py:511
 #, fuzzy
 #| msgid "First name"
 msgid "Short name"
 msgstr "Prénom"
 
-#: aleksis/core/models.py:195
+#: aleksis/core/models.py:202
 msgid "Street"
 msgstr ""
 
-#: aleksis/core/models.py:196
+#: aleksis/core/models.py:203
 msgid "Street number"
 msgstr ""
 
-#: aleksis/core/models.py:197
+#: aleksis/core/models.py:204
 msgid "Postal code"
 msgstr ""
 
-#: aleksis/core/models.py:198
+#: aleksis/core/models.py:205
 msgid "Place"
 msgstr ""
 
-#: aleksis/core/models.py:200 aleksis/core/templates/core/person/full.html:160
+#: aleksis/core/models.py:207 aleksis/core/templates/core/person/full.html:160
 msgid "Home phone"
 msgstr ""
 
-#: aleksis/core/models.py:201 aleksis/core/templates/core/person/full.html:170
+#: aleksis/core/models.py:208 aleksis/core/templates/core/person/full.html:170
 msgid "Mobile phone"
 msgstr ""
 
-#: aleksis/core/models.py:205
+#: aleksis/core/models.py:212
 msgid "Date of birth"
 msgstr "Date d'anniversaire"
 
-#: aleksis/core/models.py:206
+#: aleksis/core/models.py:213
 #, fuzzy
 #| msgid "Date of birth"
 msgid "Place of birth"
 msgstr "Date d'anniversaire"
 
-#: aleksis/core/models.py:207
+#: aleksis/core/models.py:214
 msgid "Sex"
 msgstr "Sexe"
 
-#: aleksis/core/models.py:214 aleksis/core/models.py:543
+#: 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 ""
 
-#: aleksis/core/models.py:219 aleksis/core/models.py:547
+#: aleksis/core/models.py:226 aleksis/core/models.py:554
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:222 aleksis/core/models.py:550
+#: aleksis/core/models.py:229 aleksis/core/models.py:557
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:227 aleksis/core/templates/core/person/full.html:235
+#: aleksis/core/models.py:234 aleksis/core/templates/core/person/full.html:235
 msgid "Guardians / Parents"
 msgstr ""
 
-#: aleksis/core/models.py:234
+#: aleksis/core/models.py:241
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:237 aleksis/core/models.py:717
-#: aleksis/core/models.py:741 aleksis/core/models.py:832
-#: aleksis/core/models.py:1092
+#: 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
 msgid "Description"
 msgstr "Description"
 
-#: aleksis/core/models.py:457
+#: aleksis/core/models.py:464
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:459
+#: aleksis/core/models.py:466
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:461
+#: aleksis/core/models.py:468
 msgid "Required"
 msgstr ""
 
-#: aleksis/core/models.py:462
+#: aleksis/core/models.py:469
 #, fuzzy
 #| msgid "Description"
 msgid "Help text / description"
 msgstr "Description"
 
-#: aleksis/core/models.py:468
+#: aleksis/core/models.py:475
 msgid "Addtitional field for groups"
 msgstr ""
 
-#: aleksis/core/models.py:469
+#: aleksis/core/models.py:476
 msgid "Addtitional fields for groups"
 msgstr ""
 
-#: aleksis/core/models.py:489
+#: aleksis/core/models.py:496
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:490
+#: aleksis/core/models.py:497
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view statistics about group."
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:502
+#: aleksis/core/models.py:509
 #, fuzzy
 #| msgid "Last name"
 msgid "Long name"
 msgstr "Nom de famille"
 
-#: aleksis/core/models.py:512 aleksis/core/templates/core/group/full.html:85
+#: aleksis/core/models.py:519 aleksis/core/templates/core/group/full.html:105
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:515 aleksis/core/templates/core/group/full.html:82
+#: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:102
 msgid "Owners"
 msgstr "Propriétaires"
 
-#: aleksis/core/models.py:522 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 ""
 
-#: aleksis/core/models.py:530
+#: aleksis/core/models.py:537
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:716 aleksis/core/models.py:740
-#: aleksis/core/models.py:831
+#: aleksis/core/models.py:723 aleksis/core/models.py:747
+#: aleksis/core/models.py:838
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
 
-#: aleksis/core/models.py:719
+#: aleksis/core/models.py:726
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:725
+#: aleksis/core/models.py:732
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:726
+#: aleksis/core/models.py:733
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:732
+#: aleksis/core/models.py:739
 msgid "Sender"
 msgstr ""
 
-#: aleksis/core/models.py:737
+#: aleksis/core/models.py:744
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:742 aleksis/core/models.py:1069
+#: aleksis/core/models.py:749 aleksis/core/models.py:1078
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:744
+#: aleksis/core/models.py:751
 msgid "Send notification at"
 msgstr ""
 
-#: aleksis/core/models.py:746
+#: aleksis/core/models.py:753
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:747
+#: aleksis/core/models.py:754
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:764
+#: aleksis/core/models.py:771
 msgid "Notification"
 msgstr ""
 
-#: aleksis/core/models.py:833
+#: aleksis/core/models.py:772 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
+msgid "Notifications"
+msgstr ""
+
+#: aleksis/core/models.py:840
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:836
+#: aleksis/core/models.py:843
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:839
+#: aleksis/core/models.py:846
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:864
+#: aleksis/core/models.py:871
 msgid "Announcement"
 msgstr ""
 
-#: aleksis/core/models.py:902
+#: aleksis/core/models.py:909
 msgid "Announcement recipient"
 msgstr ""
 
-#: aleksis/core/models.py:903
+#: aleksis/core/models.py:910
 msgid "Announcement recipients"
 msgstr ""
 
-#: aleksis/core/models.py:925
+#: aleksis/core/models.py:932
 msgid "Widget Title"
 msgstr ""
 
-#: aleksis/core/models.py:926
+#: aleksis/core/models.py:933
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:927
+#: aleksis/core/models.py:934
 msgid "Widget is broken"
 msgstr ""
 
-#: aleksis/core/models.py:930
+#: aleksis/core/models.py:937
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:931
+#: aleksis/core/models.py:938
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:936
+#: aleksis/core/models.py:943
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:944
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:942
+#: aleksis/core/models.py:949
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:943
+#: aleksis/core/models.py:950
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:948
+#: aleksis/core/models.py:955
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:949
+#: aleksis/core/models.py:956
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:980
+#: aleksis/core/models.py:987
 msgid "Can edit default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:981
+#: aleksis/core/models.py:988
 msgid "Dashboard Widget"
 msgstr ""
 
-#: aleksis/core/models.py:982
+#: aleksis/core/models.py:989
 msgid "Dashboard Widgets"
 msgstr ""
 
-#: aleksis/core/models.py:988
+#: aleksis/core/models.py:995
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:989
+#: aleksis/core/models.py:996
 msgid "Icon URL"
 msgstr ""
 
-#: aleksis/core/models.py:995
+#: aleksis/core/models.py:1002
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:996
+#: aleksis/core/models.py:1003
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1002
+#: aleksis/core/models.py:1009
 msgid "Content"
 msgstr ""
 
-#: aleksis/core/models.py:1008
+#: aleksis/core/models.py:1015
 msgid "Static content widget"
 msgstr ""
 
-#: aleksis/core/models.py:1009
+#: aleksis/core/models.py:1016
 msgid "Static content widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1014
+#: aleksis/core/models.py:1021
 msgid "Dashboard widget"
 msgstr ""
 
-#: aleksis/core/models.py:1019
+#: aleksis/core/models.py:1026
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:1020
+#: aleksis/core/models.py:1027
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:1035
+#: aleksis/core/models.py:1042
 msgid "Dashboard widget order"
 msgstr ""
 
-#: aleksis/core/models.py:1036
+#: aleksis/core/models.py:1043
 msgid "Dashboard widget orders"
 msgstr ""
 
-#: aleksis/core/models.py:1042
+#: aleksis/core/models.py:1049
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1055
+#: aleksis/core/models.py:1062
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1056
+#: aleksis/core/models.py:1063
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1066
+#: aleksis/core/models.py:1075
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1070 aleksis/core/models.py:1318
+#: aleksis/core/models.py:1079 aleksis/core/models.py:1330
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1085
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1077
+#: aleksis/core/models.py:1086
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1091
+#: aleksis/core/models.py:1103
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1098 aleksis/core/templates/core/group/full.html:47
+#: aleksis/core/models.py:1110 aleksis/core/templates/core/group/full.html:50
 #, fuzzy
 #| msgid "Group"
 msgid "Group type"
 msgstr "Groupe"
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1124
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view system status"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1113
+#: aleksis/core/models.py:1125
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1114
+#: aleksis/core/models.py:1126
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can impersonate"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1115
+#: aleksis/core/models.py:1127
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1116
+#: aleksis/core/models.py:1128
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1117
+#: aleksis/core/models.py:1129
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1118
+#: aleksis/core/models.py:1130
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1119
+#: aleksis/core/models.py:1131
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1132
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can invite persons"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1156
+#: aleksis/core/models.py:1168
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1164
+#: aleksis/core/models.py:1176
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1165
+#: aleksis/core/models.py:1177
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1178
+#: aleksis/core/models.py:1190
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1179
+#: aleksis/core/models.py:1191
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1181
+#: aleksis/core/models.py:1193
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1182
+#: aleksis/core/models.py:1194
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1189
+#: aleksis/core/models.py:1201
 #, fuzzy
 #| msgid "Contact details"
 msgid "E-Mail address"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1221
+#: aleksis/core/models.py:1233
 #, fuzzy
 #| msgid "Owners"
 msgid "Owner"
 msgstr "Propriétaires"
 
-#: aleksis/core/models.py:1225
+#: aleksis/core/models.py:1237
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1227
+#: aleksis/core/models.py:1239
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1229
+#: aleksis/core/models.py:1241
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1236
+#: aleksis/core/models.py:1248
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1237
+#: aleksis/core/models.py:1249
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1242
+#: aleksis/core/models.py:1254
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1245
+#: aleksis/core/models.py:1257
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1257
+#: aleksis/core/models.py:1269
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1258
+#: aleksis/core/models.py:1270
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1274
+#: aleksis/core/models.py:1286
 #, fuzzy
 #| msgid "Contact details"
 msgid "Additional attributes"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1312
+#: aleksis/core/models.py:1324
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1322
+#: aleksis/core/models.py:1334
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
+#: aleksis/core/models.py:1383
+msgid "UUID"
+msgstr ""
+
+#: aleksis/core/models.py:1387
+msgid "Selected ICal feed"
+msgstr ""
+
+#: aleksis/core/models.py:1396
+msgid "Personal Calendar URL"
+msgstr ""
+
+#: aleksis/core/models.py:1397
+msgid "Personal Calendar URLs"
+msgstr ""
+
 #: aleksis/core/preferences.py:25
 msgid "General"
 msgstr ""
@@ -1207,94 +1261,94 @@ msgstr ""
 msgid "Allowed Grant Flows for OAuth applications"
 msgstr "Détails de contact"
 
-#: aleksis/core/preferences.py:344
-msgid "Available languages"
-msgstr ""
-
-#: aleksis/core/preferences.py:357
+#: aleksis/core/preferences.py:343
 msgid "Send emails if data checks detect problems"
 msgstr ""
 
-#: aleksis/core/preferences.py:368
+#: aleksis/core/preferences.py:354
 msgid "Email recipients for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:379
+#: aleksis/core/preferences.py:365
 msgid "Email recipient groups for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:388
+#: aleksis/core/preferences.py:374
 msgid "Show dashboard to users without login"
 msgstr ""
 
-#: aleksis/core/preferences.py:397
+#: aleksis/core/preferences.py:383
 msgid "Allow users to edit their dashboard"
 msgstr ""
 
-#: aleksis/core/preferences.py:408
+#: aleksis/core/preferences.py:394
 msgid "Fields on person model which are editable by themselves."
 msgstr ""
 
-#: aleksis/core/preferences.py:423
+#: aleksis/core/preferences.py:409
 msgid "Editable fields on person model which should trigger a notification on change"
 msgstr ""
 
-#: aleksis/core/preferences.py:437
+#: aleksis/core/preferences.py:423
 msgid "Contact for notification if a person changes their data"
 msgstr ""
 
-#: aleksis/core/preferences.py:448
+#: aleksis/core/preferences.py:434
 msgid "Prefer personal photos over avatars"
 msgstr ""
 
-#: aleksis/core/preferences.py:458
+#: aleksis/core/preferences.py:444
 msgid "PDF file expiration duration"
 msgstr ""
 
-#: aleksis/core/preferences.py:459
+#: aleksis/core/preferences.py:445
 msgid "in minutes"
 msgstr ""
 
-#: aleksis/core/preferences.py:469
+#: aleksis/core/preferences.py:455
 msgid "Automatically update the dashboard and its widgets"
 msgstr ""
 
-#: aleksis/core/preferences.py:479
+#: aleksis/core/preferences.py:465
 msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
-#: aleksis/core/preferences.py:489
+#: aleksis/core/preferences.py:475
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:540
+#: aleksis/core/settings.py:541
 msgid "English"
 msgstr ""
 
-#: aleksis/core/settings.py:541
+#: aleksis/core/settings.py:542
 msgid "German"
 msgstr ""
 
-#: aleksis/core/tables.py:24
+#: aleksis/core/settings.py:543
+msgid "Ukrainian"
+msgstr ""
+
+#: 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/group/full.html:26
 #: aleksis/core/templates/core/person/full.html:26
 #: aleksis/core/templates/core/person/full.html:86
 #: aleksis/core/templates/oauth2_provider/application/detail.html:17
 msgid "Edit"
 msgstr ""
 
-#: aleksis/core/tables.py:26 aleksis/core/tables.py:94
-#: aleksis/core/tables.py:138
+#: 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 ""
 
-#: 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
@@ -1333,7 +1387,7 @@ msgstr ""
 #: aleksis/core/templates/500.html:10
 msgid ""
 "An unexpected error has\n"
-"          occured."
+"          occurred."
 msgstr ""
 
 #: aleksis/core/templates/500.html:13
@@ -1587,7 +1641,7 @@ msgid "Publish new announcement"
 msgstr ""
 
 #: aleksis/core/templates/core/announcement/form.html:34
-msgid "Save und publish announcement"
+msgid "Save and publish announcement"
 msgstr ""
 
 #: aleksis/core/templates/core/announcement/list.html:19
@@ -1839,34 +1893,34 @@ msgstr ""
 msgid "Edit group"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:38
+#: aleksis/core/templates/core/group/full.html:40
 #: aleksis/core/templates/core/person/full.html:40
 #: aleksis/core/templates/core/person/full.html:100
 msgid "Change preferences"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:64
+#: aleksis/core/templates/core/group/full.html:68
 msgid "Statistics"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:67
+#: aleksis/core/templates/core/group/full.html:73
 msgid "Count of members"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:71
+#: aleksis/core/templates/core/group/full.html:81
 msgid "Average age"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:76
+#: aleksis/core/templates/core/group/full.html:90
 msgid "Age range"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:76
-msgid "years to"
-msgstr ""
-
-#: aleksis/core/templates/core/group/full.html:76
-msgid "years "
+#: aleksis/core/templates/core/group/full.html:93
+#, python-format
+msgid ""
+"\n"
+"              %(min)s years to %(max)s years\n"
+"            "
 msgstr ""
 
 #: aleksis/core/templates/core/group/list.html:14
@@ -1899,6 +1953,40 @@ msgstr "Groupe"
 msgid "Create group type"
 msgstr "Groupe"
 
+#: 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 ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: aleksis/core/templates/core/ical/ical_list.html:4
+#: aleksis/core/templates/core/ical/ical_list.html:5
+msgid "iCal Feeds"
+msgstr ""
+
+#: 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 ""
+
+#: aleksis/core/templates/core/ical/ical_list.html:14
+msgid "Your iCal URLs"
+msgstr ""
+
 #: aleksis/core/templates/core/index.html:4
 msgid "Home"
 msgstr ""
@@ -2174,11 +2262,11 @@ msgstr ""
 msgid "Unknown"
 msgstr ""
 
-#: aleksis/core/templates/core/partials/language_form.html:15
+#: aleksis/core/templates/core/partials/language_form.html:17
 msgid "Language"
 msgstr ""
 
-#: aleksis/core/templates/core/partials/language_form.html:27
+#: aleksis/core/templates/core/partials/language_form.html:29
 msgid "Select language"
 msgstr ""
 
@@ -2387,13 +2475,6 @@ msgstr ""
 msgid "Register OAuth2 Application"
 msgstr "Détails de contact"
 
-#: 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 ""
-
 #: aleksis/core/templates/oauth2_provider/application/detail.html:5
 #, fuzzy
 #| msgid "Contact details"
@@ -3127,162 +3208,174 @@ msgstr ""
 msgid "Download PDF"
 msgstr ""
 
-#: aleksis/core/views.py:289
+#: aleksis/core/views.py:294
 msgid "The school term has been created."
 msgstr ""
 
-#: aleksis/core/views.py:301
+#: aleksis/core/views.py:306
 msgid "The school term has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:421
+#: aleksis/core/views.py:426
 msgid "The child groups were successfully saved."
 msgstr ""
 
-#: aleksis/core/views.py:440 aleksis/core/views.py:450
+#: aleksis/core/views.py:445 aleksis/core/views.py:455
 msgid "The person has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:500
+#: aleksis/core/views.py:505
 msgid "The group has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:597
+#: aleksis/core/views.py:602
 msgid "The announcement has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:613
+#: aleksis/core/views.py:618
 msgid "The announcement has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:681
+#: aleksis/core/views.py:686
 msgid "The requested preference registry does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:700
+#: aleksis/core/views.py:705
 msgid "The preferences have been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:724
+#: aleksis/core/views.py:729
 msgid "The person has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:738
+#: aleksis/core/views.py:743
 msgid "The group has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:770
-msgid "The additional_field has been saved."
+#: aleksis/core/views.py:775
+msgid "The additional field has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:804
+#: aleksis/core/views.py:809
 msgid "The additional field has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:829
+#: aleksis/core/views.py:834
 msgid "The group type has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:859
+#: aleksis/core/views.py:864
 msgid "The group type has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:892
+#: aleksis/core/views.py:897
 msgid "Progress: Run data checks"
 msgstr ""
 
-#: aleksis/core/views.py:893
+#: aleksis/core/views.py:898
 msgid "Run data checks …"
 msgstr ""
 
-#: aleksis/core/views.py:894
+#: aleksis/core/views.py:899
 msgid "The data checks were run successfully."
 msgstr ""
 
-#: aleksis/core/views.py:895
+#: aleksis/core/views.py:900
 msgid "There was a problem while running data checks."
 msgstr ""
 
-#: aleksis/core/views.py:911
+#: aleksis/core/views.py:916
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/views.py:921
+#: aleksis/core/views.py:926
 msgid "The requested solve option does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:953
+#: aleksis/core/views.py:958
 msgid "The dashboard widget has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:983
+#: aleksis/core/views.py:988
 msgid "The dashboard widget has been created."
 msgstr ""
 
-#: aleksis/core/views.py:993
+#: aleksis/core/views.py:998
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1064
+#: aleksis/core/views.py:1069
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1066
+#: aleksis/core/views.py:1071
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1142
+#: aleksis/core/views.py:1147
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1233
+#: aleksis/core/views.py:1238
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1243
+#: aleksis/core/views.py:1248
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1253
+#: aleksis/core/views.py:1258
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1263
+#: aleksis/core/views.py:1268
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1273
+#: aleksis/core/views.py:1278
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1341
+#: aleksis/core/views.py:1346
 msgid "The requested PDF file does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:1350 aleksis/core/views.py:1354
+#: aleksis/core/views.py:1355 aleksis/core/views.py:1359
 msgid "The requested task does not exist or is not accessible"
 msgstr ""
 
-#: aleksis/core/views.py:1406
+#: aleksis/core/views.py:1411
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1413
+#: aleksis/core/views.py:1418
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1484
+#: aleksis/core/views.py:1489
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1495
+#: aleksis/core/views.py:1500
 #, fuzzy
 #| msgid "This username is already in use."
 msgid "Person was already invited."
 msgstr "Cet nom est deja en utilisation."
 
+#: aleksis/core/views.py:1600
+msgid "iCal feed updated successfully"
+msgstr ""
+
+#: aleksis/core/views.py:1610
+msgid "iCal feed deleted successfully"
+msgstr ""
+
+#: aleksis/core/views.py:1618
+msgid "iCal feed created successfully"
+msgstr ""
+
 #, fuzzy
 #~| msgid "Contact details"
 #~ msgid "Can link persons to accounts"
diff --git a/aleksis/core/locale/fr/LC_MESSAGES/djangojs.po b/aleksis/core/locale/fr/LC_MESSAGES/djangojs.po
index 0f31d087d69a8fca9b3573dfa6d977c8459eaf99..8b1f39f46181c3eb157a2316413bca33ad16015a 100644
--- a/aleksis/core/locale/fr/LC_MESSAGES/djangojs.po
+++ b/aleksis/core/locale/fr/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-23 11:20+0100\n"
+"POT-Creation-Date: 2022-06-25 12:09+0200\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"
diff --git a/aleksis/core/locale/la/LC_MESSAGES/django.po b/aleksis/core/locale/la/LC_MESSAGES/django.po
index fd7a3aa487f88448c539f5347f5700188a72d270..b75d5e04731de1445f993badba1509a713f9e474 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: 2022-03-23 11:19+0100\n"
+"POT-Creation-Date: 2022-06-25 12:09+0200\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"
@@ -44,36 +44,64 @@ msgstr "Inscriptio electronica"
 msgid "Home and mobile phone"
 msgstr "Numerus telephoni mobilis"
 
-#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:185
-#: aleksis/core/models.py:487 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:171
+#: 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
 msgid "Groups"
 msgstr "Greges"
 
-#: aleksis/core/data_checks.py:56
+#: aleksis/core/data_checks.py:59
 msgid "Ignore problem"
 msgstr ""
 
-#: aleksis/core/data_checks.py:185
+#: aleksis/core/data_checks.py:188
 #, python-brace-format
 msgid "Solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/data_checks.py:291
+#: aleksis/core/data_checks.py:294
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Deactivate DashboardWidget"
 msgstr "Forum"
 
-#: aleksis/core/data_checks.py:303
+#: aleksis/core/data_checks.py:306
 msgid "Ensure that there are no broken DashboardWidgets."
 msgstr ""
 
-#: aleksis/core/data_checks.py:304
+#: aleksis/core/data_checks.py:307
 msgid "The DashboardWidget was reported broken automatically."
 msgstr ""
 
+#: aleksis/core/data_checks.py:330
+#, python-format
+msgid "Validate field %s of model %s."
+msgstr ""
+
+#: aleksis/core/data_checks.py:332
+#, python-format
+msgid "The field %s couldn't be validated successfully."
+msgstr ""
+
+#: aleksis/core/feeds.py:52
+msgid "Birthday Calendar"
+msgstr ""
+
+#: aleksis/core/feeds.py:53
+msgid "A Calendar of Birthdays"
+msgstr ""
+
+#: aleksis/core/feeds.py:66
+#, python-format
+msgid "%(name)s's birthday"
+msgstr ""
+
+#: aleksis/core/feeds.py:71
+#, python-format
+msgid "%(name)s was born on %(birthday)s"
+msgstr ""
+
 #: 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
@@ -101,11 +129,11 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:713
+#: aleksis/core/filters.py:113 aleksis/core/models.py:720
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:486
+#: aleksis/core/filters.py:135 aleksis/core/models.py:493
 msgid "Group"
 msgstr "Grex"
 
@@ -113,7 +141,7 @@ msgstr "Grex"
 msgid "Base data"
 msgstr ""
 
-#: aleksis/core/forms.py:55
+#: aleksis/core/forms.py:55 aleksis/core/tables.py:47
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Address"
@@ -145,7 +173,7 @@ msgstr ""
 msgid "This username is already in use."
 msgstr ""
 
-#: aleksis/core/forms.py:153 aleksis/core/models.py:134
+#: aleksis/core/forms.py:153 aleksis/core/models.py:141
 msgid "School term"
 msgstr "Anus scolae"
 
@@ -156,7 +184,7 @@ msgid "Common data"
 msgstr "Adminstratio datarum"
 
 #: aleksis/core/forms.py:155 aleksis/core/forms.py:207
-#: aleksis/core/menus.py:174 aleksis/core/models.py:157
+#: aleksis/core/menus.py:160 aleksis/core/models.py:164
 #: aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
@@ -168,18 +196,18 @@ msgstr "personae"
 msgid "Additional data"
 msgstr "addita nomines"
 
-#: aleksis/core/forms.py:157 aleksis/core/models.py:210
-#: aleksis/core/models.py:539
+#: aleksis/core/forms.py:157 aleksis/core/models.py:217
+#: aleksis/core/models.py:546 aleksis/core/tables.py:46
 msgid "Photo"
 msgstr "Photographia"
 
 #: aleksis/core/forms.py:199 aleksis/core/forms.py:202
-#: aleksis/core/models.py:77
+#: aleksis/core/models.py:84
 msgid "Date"
 msgstr "dies"
 
 #: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:85
+#: aleksis/core/models.py:92
 msgid "Time"
 msgstr "tempus"
 
@@ -215,11 +243,11 @@ msgstr ""
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:418 aleksis/core/models.py:185
+#: aleksis/core/forms.py:418 aleksis/core/models.py:192
 msgid "First name"
 msgstr "Primus nomen"
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:186
+#: aleksis/core/forms.py:419 aleksis/core/models.py:193
 msgid "Last name"
 msgstr "Secondus nomen"
 
@@ -258,7 +286,7 @@ msgstr ""
 #: aleksis/core/forms.py:586
 #, fuzzy
 #| msgid "E-mail address"
-msgid "Adress data"
+msgid "Address data"
 msgstr "Inscriptio electronica"
 
 #: aleksis/core/forms.py:598
@@ -309,51 +337,44 @@ msgstr ""
 msgid "No backup result found!"
 msgstr ""
 
-#: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6
+#: 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 "nomen profiteri"
 
-#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:22
+#: aleksis/core/menus.py:13 aleksis/core/templates/account/signup.html:22
 #: aleksis/core/templates/socialaccount/signup.html:23
 msgid "Sign up"
 msgstr ""
 
-#: aleksis/core/menus.py:24 aleksis/core/templates/invitations/enter.html:7
+#: aleksis/core/menus.py:22 aleksis/core/templates/invitations/enter.html:7
 #, fuzzy
 #| msgid "Edit school information"
 msgid "Accept invitation"
 msgstr "Muta informationes scolae"
 
-#: aleksis/core/menus.py:33
+#: aleksis/core/menus.py:31
 msgid "Dashboard"
 msgstr "Forum"
 
-#: aleksis/core/menus.py:41 aleksis/core/models.py:765
-#: 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
-msgid "Notifications"
-msgstr "Nuntii"
-
-#: aleksis/core/menus.py:53
+#: aleksis/core/menus.py:39
 msgid "Admin"
 msgstr "Administratio"
 
-#: aleksis/core/menus.py:61 aleksis/core/models.py:865
+#: aleksis/core/menus.py:47 aleksis/core/models.py:872
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
 msgstr "Nuntii"
 
-#: aleksis/core/menus.py:72 aleksis/core/models.py:135
+#: aleksis/core/menus.py:58 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 "ani scolae"
 
-#: aleksis/core/menus.py:83
+#: aleksis/core/menus.py:69
 #: aleksis/core/templates/core/dashboard_widget/list.html:8
 #: aleksis/core/templates/core/dashboard_widget/list.html:9
 #, fuzzy
@@ -361,41 +382,41 @@ msgstr "ani scolae"
 msgid "Dashboard widgets"
 msgstr "Forum"
 
-#: aleksis/core/menus.py:94
+#: 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 "Adminstratio datarum"
 
-#: aleksis/core/menus.py:105
+#: 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 "Status systemae"
 
-#: aleksis/core/menus.py:116
+#: aleksis/core/menus.py:102
 #, fuzzy
 #| msgid "Notification"
 msgid "Configuration"
 msgstr "Nuntius"
 
-#: aleksis/core/menus.py:127 aleksis/core/templates/core/data_check/list.html:9
+#: aleksis/core/menus.py:113 aleksis/core/templates/core/data_check/list.html:9
 #: aleksis/core/templates/core/data_check/list.html:10
 #, fuzzy
 #| msgid "System status"
 msgid "Data checks"
 msgstr "Status systemae"
 
-#: aleksis/core/menus.py:133 aleksis/core/templates/core/perms/list.html:13
+#: 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 ""
 
-#: aleksis/core/menus.py:144
+#: aleksis/core/menus.py:130
 msgid "Backend Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:152
+#: aleksis/core/menus.py:138
 #: aleksis/core/templates/oauth2_provider/application/list.html:5
 #: aleksis/core/templates/oauth2_provider/application/list.html:6
 #, fuzzy
@@ -403,11 +424,11 @@ msgstr ""
 msgid "OAuth2 Applications"
 msgstr "Nuntii"
 
-#: aleksis/core/menus.py:165
+#: aleksis/core/menus.py:151
 msgid "People"
 msgstr "Personae"
 
-#: aleksis/core/menus.py:196 aleksis/core/models.py:1099
+#: aleksis/core/menus.py:182 aleksis/core/models.py:1111
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 #, fuzzy
@@ -415,11 +436,11 @@ msgstr "Personae"
 msgid "Group types"
 msgstr "Greges"
 
-#: aleksis/core/menus.py:207
+#: aleksis/core/menus.py:193
 msgid "Groups and child groups"
 msgstr ""
 
-#: aleksis/core/menus.py:218 aleksis/core/models.py:535
+#: aleksis/core/menus.py:204 aleksis/core/models.py:542
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 #, fuzzy
@@ -427,36 +448,36 @@ msgstr ""
 msgid "Additional fields"
 msgstr "addita nomines"
 
-#: aleksis/core/menus.py:229
+#: aleksis/core/menus.py:215
 #, fuzzy
 #| msgid "Stop impersonation"
 msgid "Invite person"
 msgstr "Simulandum aliquem finire"
 
-#: aleksis/core/menus.py:242
+#: 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 ""
 
-#: aleksis/core/menus.py:254
+#: aleksis/core/menus.py:240
 msgid "Stop impersonation"
 msgstr "Simulandum aliquem finire"
 
-#: aleksis/core/menus.py:263
+#: aleksis/core/menus.py:249
 msgid "Account"
 msgstr ""
 
-#: aleksis/core/menus.py:272
+#: aleksis/core/menus.py:258
 #: aleksis/core/templates/dynamic_preferences/form.html:5
 msgid "Preferences"
 msgstr ""
 
-#: aleksis/core/menus.py:281
+#: aleksis/core/menus.py:267
 msgid "2FA"
 msgstr ""
 
-#: aleksis/core/menus.py:289
+#: 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
@@ -468,13 +489,13 @@ msgstr ""
 msgid "Change password"
 msgstr ""
 
-#: aleksis/core/menus.py:301
+#: aleksis/core/menus.py:287
 #, fuzzy
 #| msgid "Persons and accounts"
 msgid "Third-party accounts"
 msgstr "Personae et computi"
 
-#: aleksis/core/menus.py:310
+#: aleksis/core/menus.py:296
 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5
 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6
 #, fuzzy
@@ -482,7 +503,11 @@ msgstr "Personae et computi"
 msgid "Authorized applications"
 msgstr "Nuntii"
 
-#: aleksis/core/menus.py:320
+#: aleksis/core/menus.py:305
+msgid "Calendar Feeds"
+msgstr ""
+
+#: aleksis/core/menus.py:318
 msgid "Logout"
 msgstr "nomen retractare"
 
@@ -492,629 +517,658 @@ msgstr "nomen retractare"
 msgid "Linked school term"
 msgstr "Muta anum scolae"
 
-#: aleksis/core/models.py:75
+#: aleksis/core/models.py:82
 msgid "Boolean (Yes/No)"
 msgstr ""
 
-#: aleksis/core/models.py:76
+#: aleksis/core/models.py:83
 msgid "Text (one line)"
 msgstr ""
 
-#: aleksis/core/models.py:78
+#: aleksis/core/models.py:85
 msgid "Date and time"
 msgstr "Dies et hora"
 
-#: aleksis/core/models.py:79
+#: aleksis/core/models.py:86
 msgid "Decimal number"
 msgstr ""
 
-#: aleksis/core/models.py:80 aleksis/core/models.py:203
+#: aleksis/core/models.py:87 aleksis/core/models.py:210
 msgid "E-mail address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:81
+#: aleksis/core/models.py:88
 msgid "Integer"
 msgstr ""
 
-#: aleksis/core/models.py:82
+#: aleksis/core/models.py:89
 #, fuzzy
 #| msgid "E-mail address"
 msgid "IP address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:83
+#: aleksis/core/models.py:90
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr ""
 
-#: aleksis/core/models.py:84
+#: aleksis/core/models.py:91
 msgid "Text (multi-line)"
 msgstr ""
 
-#: aleksis/core/models.py:86
+#: aleksis/core/models.py:93
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:98 aleksis/core/models.py:1068
+#: aleksis/core/models.py:105 aleksis/core/models.py:1077
+#: aleksis/core/models.py:1384
 msgid "Name"
 msgstr "Nomen"
 
-#: aleksis/core/models.py:100
+#: aleksis/core/models.py:107
 msgid "Start date"
 msgstr ""
 
-#: aleksis/core/models.py:101
+#: aleksis/core/models.py:108
 msgid "End date"
 msgstr ""
 
-#: aleksis/core/models.py:120
+#: aleksis/core/models.py:127
 msgid "The start date must be earlier than the end date."
 msgstr ""
 
-#: aleksis/core/models.py:127
+#: aleksis/core/models.py:134
 msgid "There is already a school term for this time or a part of this time."
 msgstr ""
 
-#: aleksis/core/models.py:156 aleksis/core/models.py:1017
+#: aleksis/core/models.py:163 aleksis/core/models.py:1024
+#: aleksis/core/models.py:1381
 msgid "Person"
 msgstr "Persona"
 
-#: aleksis/core/models.py:159
+#: aleksis/core/models.py:166
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Can view address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:160
+#: aleksis/core/models.py:167
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Can view contact details"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:161
+#: aleksis/core/models.py:168
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Can view photo"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:162
+#: aleksis/core/models.py:169
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Can view avatar image"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:163
+#: aleksis/core/models.py:170
 #, fuzzy
 #| msgid "Persons and accounts"
 msgid "Can view persons groups"
 msgstr "Personae et computi"
 
-#: aleksis/core/models.py:164
+#: aleksis/core/models.py:171
 #, fuzzy
 #| msgid "Stop impersonation"
 msgid "Can view personal details"
 msgstr "Simulandum aliquem finire"
 
-#: aleksis/core/models.py:174
+#: aleksis/core/models.py:181
 msgid "female"
 msgstr "femininum"
 
-#: aleksis/core/models.py:174
+#: aleksis/core/models.py:181
 msgid "male"
 msgstr "maskulinum"
 
-#: aleksis/core/models.py:182 aleksis/core/models.py:1271
+#: aleksis/core/models.py:181
+msgid "other"
+msgstr ""
+
+#: aleksis/core/models.py:189 aleksis/core/models.py:1283
 msgid "Linked user"
 msgstr ""
 
-#: aleksis/core/models.py:188
+#: aleksis/core/models.py:195
 msgid "Additional name(s)"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:192 aleksis/core/models.py:504
+#: aleksis/core/models.py:199 aleksis/core/models.py:511
 msgid "Short name"
 msgstr "Breve nomen"
 
-#: aleksis/core/models.py:195
+#: aleksis/core/models.py:202
 msgid "Street"
 msgstr "Via"
 
-#: aleksis/core/models.py:196
+#: aleksis/core/models.py:203
 msgid "Street number"
 msgstr "Numerus domini"
 
-#: aleksis/core/models.py:197
+#: aleksis/core/models.py:204
 msgid "Postal code"
 msgstr "Numerus directorius"
 
-#: aleksis/core/models.py:198
+#: aleksis/core/models.py:205
 msgid "Place"
 msgstr "Urbs"
 
-#: aleksis/core/models.py:200 aleksis/core/templates/core/person/full.html:160
+#: aleksis/core/models.py:207 aleksis/core/templates/core/person/full.html:160
 msgid "Home phone"
 msgstr "Numerus telephoni domi"
 
-#: aleksis/core/models.py:201 aleksis/core/templates/core/person/full.html:170
+#: aleksis/core/models.py:208 aleksis/core/templates/core/person/full.html:170
 msgid "Mobile phone"
 msgstr "Numerus telephoni mobilis"
 
-#: aleksis/core/models.py:205
+#: aleksis/core/models.py:212
 msgid "Date of birth"
 msgstr "Dies natalis"
 
-#: aleksis/core/models.py:206
+#: aleksis/core/models.py:213
 #, fuzzy
 #| msgid "Date of birth"
 msgid "Place of birth"
 msgstr "Dies natalis"
 
-#: aleksis/core/models.py:207
+#: aleksis/core/models.py:214
 msgid "Sex"
 msgstr "Genus"
 
-#: aleksis/core/models.py:214 aleksis/core/models.py:543
+#: 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 ""
 
-#: aleksis/core/models.py:219 aleksis/core/models.py:547
+#: aleksis/core/models.py:226 aleksis/core/models.py:554
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:222 aleksis/core/models.py:550
+#: aleksis/core/models.py:229 aleksis/core/models.py:557
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:227 aleksis/core/templates/core/person/full.html:235
+#: aleksis/core/models.py:234 aleksis/core/templates/core/person/full.html:235
 msgid "Guardians / Parents"
 msgstr "Parentes"
 
-#: aleksis/core/models.py:234
+#: aleksis/core/models.py:241
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:237 aleksis/core/models.py:717
-#: aleksis/core/models.py:741 aleksis/core/models.py:832
-#: aleksis/core/models.py:1092
+#: 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
 msgid "Description"
 msgstr "Descriptio"
 
-#: aleksis/core/models.py:457
+#: aleksis/core/models.py:464
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:459
+#: aleksis/core/models.py:466
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:461
+#: aleksis/core/models.py:468
 msgid "Required"
 msgstr ""
 
-#: aleksis/core/models.py:462
+#: aleksis/core/models.py:469
 #, fuzzy
 #| msgid "Site description"
 msgid "Help text / description"
 msgstr "Descriptio paginae"
 
-#: aleksis/core/models.py:468
+#: aleksis/core/models.py:475
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Addtitional field for groups"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:469
+#: aleksis/core/models.py:476
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Addtitional fields for groups"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:489
+#: aleksis/core/models.py:496
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:490
+#: aleksis/core/models.py:497
 #, fuzzy
 #| msgid "Persons and accounts"
 msgid "Can view statistics about group."
 msgstr "Personae et computi"
 
-#: aleksis/core/models.py:502
+#: aleksis/core/models.py:509
 #, fuzzy
 #| msgid "Last name"
 msgid "Long name"
 msgstr "Secondus nomen"
 
-#: aleksis/core/models.py:512 aleksis/core/templates/core/group/full.html:85
+#: aleksis/core/models.py:519 aleksis/core/templates/core/group/full.html:105
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:515 aleksis/core/templates/core/group/full.html:82
+#: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:102
 msgid "Owners"
 msgstr ""
 
-#: aleksis/core/models.py:522 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 ""
 
-#: aleksis/core/models.py:530
+#: aleksis/core/models.py:537
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:716 aleksis/core/models.py:740
-#: aleksis/core/models.py:831
+#: aleksis/core/models.py:723 aleksis/core/models.py:747
+#: aleksis/core/models.py:838
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr "Titulus"
 
-#: aleksis/core/models.py:719
+#: aleksis/core/models.py:726
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:725
+#: aleksis/core/models.py:732
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:726
+#: aleksis/core/models.py:733
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:732
+#: aleksis/core/models.py:739
 msgid "Sender"
 msgstr "Mittens"
 
-#: aleksis/core/models.py:737
+#: aleksis/core/models.py:744
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:742 aleksis/core/models.py:1069
+#: aleksis/core/models.py:749 aleksis/core/models.py:1078
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:744
+#: aleksis/core/models.py:751
 #, fuzzy
 #| msgid "Notification"
 msgid "Send notification at"
 msgstr "Nuntius"
 
-#: aleksis/core/models.py:746
+#: aleksis/core/models.py:753
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:747
+#: aleksis/core/models.py:754
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:764
+#: aleksis/core/models.py:771
 #, fuzzy
 #| msgid "Notifications"
 msgid "Notification"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:833
+#: aleksis/core/models.py:772 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
+msgid "Notifications"
+msgstr "Nuntii"
+
+#: aleksis/core/models.py:840
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:836
+#: aleksis/core/models.py:843
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:839
+#: aleksis/core/models.py:846
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:864
+#: aleksis/core/models.py:871
 #, fuzzy
 #| msgid "Announcements"
 msgid "Announcement"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:902
+#: aleksis/core/models.py:909
 #, fuzzy
 #| msgid "Announcements"
 msgid "Announcement recipient"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:903
+#: aleksis/core/models.py:910
 #, fuzzy
 #| msgid "Announcements"
 msgid "Announcement recipients"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:925
+#: aleksis/core/models.py:932
 #, fuzzy
 #| msgid "Site title"
 msgid "Widget Title"
 msgstr "Titulus paginae"
 
-#: aleksis/core/models.py:926
+#: aleksis/core/models.py:933
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:927
+#: aleksis/core/models.py:934
 #, fuzzy
 #| msgid "Site title"
 msgid "Widget is broken"
 msgstr "Titulus paginae"
 
-#: aleksis/core/models.py:930
+#: aleksis/core/models.py:937
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:931
+#: aleksis/core/models.py:938
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:936
+#: aleksis/core/models.py:943
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:944
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:942
+#: aleksis/core/models.py:949
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:943
+#: aleksis/core/models.py:950
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:948
+#: aleksis/core/models.py:955
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:949
+#: aleksis/core/models.py:956
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:980
+#: aleksis/core/models.py:987
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Can edit default dashboard"
 msgstr "Forum"
 
-#: aleksis/core/models.py:981
+#: aleksis/core/models.py:988
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard Widget"
 msgstr "Forum"
 
-#: aleksis/core/models.py:982
+#: aleksis/core/models.py:989
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard Widgets"
 msgstr "Forum"
 
-#: aleksis/core/models.py:988
+#: aleksis/core/models.py:995
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:989
+#: aleksis/core/models.py:996
 #, fuzzy
 #| msgid "Icon"
 msgid "Icon URL"
 msgstr "Nota"
 
-#: aleksis/core/models.py:995
+#: aleksis/core/models.py:1002
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:996
+#: aleksis/core/models.py:1003
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1002
+#: aleksis/core/models.py:1009
 msgid "Content"
 msgstr ""
 
-#: aleksis/core/models.py:1008
+#: aleksis/core/models.py:1015
 msgid "Static content widget"
 msgstr ""
 
-#: aleksis/core/models.py:1009
+#: aleksis/core/models.py:1016
 msgid "Static content widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1014
+#: aleksis/core/models.py:1021
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard widget"
 msgstr "Forum"
 
-#: aleksis/core/models.py:1019
+#: aleksis/core/models.py:1026
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:1020
+#: aleksis/core/models.py:1027
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:1035
+#: aleksis/core/models.py:1042
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard widget order"
 msgstr "Forum"
 
-#: aleksis/core/models.py:1036
+#: aleksis/core/models.py:1043
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard widget orders"
 msgstr "Forum"
 
-#: aleksis/core/models.py:1042
+#: aleksis/core/models.py:1049
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1055
+#: aleksis/core/models.py:1062
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1056
+#: aleksis/core/models.py:1063
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1066
+#: aleksis/core/models.py:1075
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1070 aleksis/core/models.py:1318
+#: aleksis/core/models.py:1079 aleksis/core/models.py:1330
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr "Nota"
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1085
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1077
+#: aleksis/core/models.py:1086
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1091
+#: aleksis/core/models.py:1103
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1098 aleksis/core/templates/core/group/full.html:47
+#: aleksis/core/models.py:1110 aleksis/core/templates/core/group/full.html:50
 #, fuzzy
 #| msgid "Group"
 msgid "Group type"
 msgstr "Grex"
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1124
 #, fuzzy
 #| msgid "System status"
 msgid "Can view system status"
 msgstr "Status systemae"
 
-#: aleksis/core/models.py:1113
+#: aleksis/core/models.py:1125
 #, fuzzy
 #| msgid "Data management"
 msgid "Can manage data"
 msgstr "Adminstratio datarum"
 
-#: aleksis/core/models.py:1114
+#: aleksis/core/models.py:1126
 #, fuzzy
 #| msgid "Stop impersonation"
 msgid "Can impersonate"
 msgstr "Simulandum aliquem finire"
 
-#: aleksis/core/models.py:1115
+#: aleksis/core/models.py:1127
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1116
+#: aleksis/core/models.py:1128
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1117
+#: aleksis/core/models.py:1129
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1118
+#: aleksis/core/models.py:1130
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1119
+#: aleksis/core/models.py:1131
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1132
 #, fuzzy
 #| msgid "Stop impersonation"
 msgid "Can invite persons"
 msgstr "Simulandum aliquem finire"
 
-#: aleksis/core/models.py:1156
+#: aleksis/core/models.py:1168
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1164
+#: aleksis/core/models.py:1176
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1165
+#: aleksis/core/models.py:1177
 #, fuzzy
 #| msgid "Notifications"
 msgid "Notification sent"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:1178
+#: aleksis/core/models.py:1190
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1179
+#: aleksis/core/models.py:1191
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1181
+#: aleksis/core/models.py:1193
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1182
+#: aleksis/core/models.py:1194
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1189
+#: aleksis/core/models.py:1201
 #, fuzzy
 #| msgid "E-mail address"
 msgid "E-Mail address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:1221
+#: aleksis/core/models.py:1233
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1225
+#: aleksis/core/models.py:1237
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1227
+#: aleksis/core/models.py:1239
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1229
+#: aleksis/core/models.py:1241
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1236
+#: aleksis/core/models.py:1248
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1237
+#: aleksis/core/models.py:1249
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1242
+#: aleksis/core/models.py:1254
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1245
+#: aleksis/core/models.py:1257
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1257
+#: aleksis/core/models.py:1269
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1258
+#: aleksis/core/models.py:1270
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1274
+#: aleksis/core/models.py:1286
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Additional attributes"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:1312
+#: aleksis/core/models.py:1324
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1322
+#: aleksis/core/models.py:1334
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
+#: aleksis/core/models.py:1383
+msgid "UUID"
+msgstr ""
+
+#: aleksis/core/models.py:1387
+msgid "Selected ICal feed"
+msgstr ""
+
+#: aleksis/core/models.py:1396
+msgid "Personal Calendar URL"
+msgstr ""
+
+#: aleksis/core/models.py:1397
+msgid "Personal Calendar URLs"
+msgstr ""
+
 #: aleksis/core/preferences.py:25
 msgid "General"
 msgstr ""
@@ -1275,96 +1329,96 @@ msgstr ""
 msgid "Allowed Grant Flows for OAuth applications"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/preferences.py:344
-msgid "Available languages"
-msgstr ""
-
-#: aleksis/core/preferences.py:357
+#: aleksis/core/preferences.py:343
 msgid "Send emails if data checks detect problems"
 msgstr ""
 
-#: aleksis/core/preferences.py:368
+#: aleksis/core/preferences.py:354
 msgid "Email recipients for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:379
+#: aleksis/core/preferences.py:365
 msgid "Email recipient groups for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:388
+#: aleksis/core/preferences.py:374
 msgid "Show dashboard to users without login"
 msgstr ""
 
-#: aleksis/core/preferences.py:397
+#: aleksis/core/preferences.py:383
 msgid "Allow users to edit their dashboard"
 msgstr ""
 
-#: aleksis/core/preferences.py:408
+#: aleksis/core/preferences.py:394
 msgid "Fields on person model which are editable by themselves."
 msgstr ""
 
-#: aleksis/core/preferences.py:423
+#: aleksis/core/preferences.py:409
 msgid "Editable fields on person model which should trigger a notification on change"
 msgstr ""
 
-#: aleksis/core/preferences.py:437
+#: aleksis/core/preferences.py:423
 msgid "Contact for notification if a person changes their data"
 msgstr ""
 
-#: aleksis/core/preferences.py:448
+#: aleksis/core/preferences.py:434
 msgid "Prefer personal photos over avatars"
 msgstr ""
 
-#: aleksis/core/preferences.py:458
+#: aleksis/core/preferences.py:444
 msgid "PDF file expiration duration"
 msgstr ""
 
-#: aleksis/core/preferences.py:459
+#: aleksis/core/preferences.py:445
 msgid "in minutes"
 msgstr ""
 
-#: aleksis/core/preferences.py:469
+#: aleksis/core/preferences.py:455
 msgid "Automatically update the dashboard and its widgets"
 msgstr ""
 
-#: aleksis/core/preferences.py:479
+#: aleksis/core/preferences.py:465
 msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
-#: aleksis/core/preferences.py:489
+#: aleksis/core/preferences.py:475
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:540
+#: aleksis/core/settings.py:541
 msgid "English"
 msgstr "Britannicus"
 
-#: aleksis/core/settings.py:541
+#: aleksis/core/settings.py:542
 msgid "German"
 msgstr "Germanus"
 
-#: aleksis/core/tables.py:24
+#: aleksis/core/settings.py:543
+msgid "Ukrainian"
+msgstr ""
+
+#: 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/group/full.html:26
 #: aleksis/core/templates/core/person/full.html:26
 #: aleksis/core/templates/core/person/full.html:86
 #: aleksis/core/templates/oauth2_provider/application/detail.html:17
 msgid "Edit"
 msgstr ""
 
-#: aleksis/core/tables.py:26 aleksis/core/tables.py:94
-#: aleksis/core/tables.py:138
+#: aleksis/core/tables.py:27 aleksis/core/tables.py:148
+#: aleksis/core/tables.py:192
 #: aleksis/core/templates/core/announcement/list.html:22
 #, fuzzy
 #| msgid "Notifications"
 msgid "Actions"
 msgstr "Nuntii"
 
-#: 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
@@ -1403,7 +1457,7 @@ msgstr ""
 #: aleksis/core/templates/500.html:10
 msgid ""
 "An unexpected error has\n"
-"          occured."
+"          occurred."
 msgstr ""
 
 #: aleksis/core/templates/500.html:13
@@ -1673,7 +1727,7 @@ msgstr "Quis nuntium videatne?"
 #: aleksis/core/templates/core/announcement/form.html:34
 #, fuzzy
 #| msgid "Who should see the announcement?"
-msgid "Save und publish announcement"
+msgid "Save and publish announcement"
 msgstr "Quis nuntium videatne?"
 
 #: aleksis/core/templates/core/announcement/list.html:19
@@ -1935,36 +1989,36 @@ msgstr ""
 msgid "Edit group"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:38
+#: aleksis/core/templates/core/group/full.html:40
 #: aleksis/core/templates/core/person/full.html:40
 #: aleksis/core/templates/core/person/full.html:100
 msgid "Change preferences"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:64
+#: aleksis/core/templates/core/group/full.html:68
 #, fuzzy
 #| msgid "System status"
 msgid "Statistics"
 msgstr "Status systemae"
 
-#: aleksis/core/templates/core/group/full.html:67
+#: aleksis/core/templates/core/group/full.html:73
 msgid "Count of members"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:71
+#: aleksis/core/templates/core/group/full.html:81
 msgid "Average age"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:76
+#: aleksis/core/templates/core/group/full.html:90
 msgid "Age range"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:76
-msgid "years to"
-msgstr ""
-
-#: aleksis/core/templates/core/group/full.html:76
-msgid "years "
+#: aleksis/core/templates/core/group/full.html:93
+#, python-format
+msgid ""
+"\n"
+"              %(min)s years to %(max)s years\n"
+"            "
 msgstr ""
 
 #: aleksis/core/templates/core/group/list.html:14
@@ -1997,6 +2051,40 @@ msgstr "Grex"
 msgid "Create group type"
 msgstr "Grex"
 
+#: 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 ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: aleksis/core/templates/core/ical/ical_list.html:4
+#: aleksis/core/templates/core/ical/ical_list.html:5
+msgid "iCal Feeds"
+msgstr ""
+
+#: 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 ""
+
+#: aleksis/core/templates/core/ical/ical_list.html:14
+msgid "Your iCal URLs"
+msgstr ""
+
 #: aleksis/core/templates/core/index.html:4
 msgid "Home"
 msgstr ""
@@ -2288,11 +2376,11 @@ msgstr ""
 msgid "Unknown"
 msgstr ""
 
-#: aleksis/core/templates/core/partials/language_form.html:15
+#: aleksis/core/templates/core/partials/language_form.html:17
 msgid "Language"
 msgstr ""
 
-#: aleksis/core/templates/core/partials/language_form.html:27
+#: aleksis/core/templates/core/partials/language_form.html:29
 msgid "Select language"
 msgstr ""
 
@@ -2505,13 +2593,6 @@ msgstr ""
 msgid "Register OAuth2 Application"
 msgstr "Nuntii"
 
-#: 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 ""
-
 #: aleksis/core/templates/oauth2_provider/application/detail.html:5
 #, fuzzy
 #| msgid "Notifications"
@@ -3258,162 +3339,176 @@ msgstr ""
 msgid "Download PDF"
 msgstr ""
 
-#: aleksis/core/views.py:289
+#: aleksis/core/views.py:294
 msgid "The school term has been created."
 msgstr ""
 
-#: aleksis/core/views.py:301
+#: aleksis/core/views.py:306
 msgid "The school term has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:421
+#: aleksis/core/views.py:426
 msgid "The child groups were successfully saved."
 msgstr ""
 
-#: aleksis/core/views.py:440 aleksis/core/views.py:450
+#: aleksis/core/views.py:445 aleksis/core/views.py:455
 msgid "The person has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:500
+#: aleksis/core/views.py:505
 msgid "The group has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:597
+#: aleksis/core/views.py:602
 msgid "The announcement has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:613
+#: aleksis/core/views.py:618
 msgid "The announcement has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:681
+#: aleksis/core/views.py:686
 msgid "The requested preference registry does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:700
+#: aleksis/core/views.py:705
 msgid "The preferences have been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:724
+#: aleksis/core/views.py:729
 msgid "The person has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:738
+#: aleksis/core/views.py:743
 msgid "The group has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:770
-msgid "The additional_field has been saved."
-msgstr ""
+#: aleksis/core/views.py:775
+#, fuzzy
+#| msgid "Additional name(s)"
+msgid "The additional field has been saved."
+msgstr "addita nomines"
 
-#: aleksis/core/views.py:804
+#: aleksis/core/views.py:809
 msgid "The additional field has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:829
+#: aleksis/core/views.py:834
 msgid "The group type has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:859
+#: aleksis/core/views.py:864
 msgid "The group type has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:892
+#: aleksis/core/views.py:897
 msgid "Progress: Run data checks"
 msgstr ""
 
-#: aleksis/core/views.py:893
+#: aleksis/core/views.py:898
 #, fuzzy
 #| msgid "System status"
 msgid "Run data checks …"
 msgstr "Status systemae"
 
-#: aleksis/core/views.py:894
+#: aleksis/core/views.py:899
 msgid "The data checks were run successfully."
 msgstr ""
 
-#: aleksis/core/views.py:895
+#: aleksis/core/views.py:900
 msgid "There was a problem while running data checks."
 msgstr ""
 
-#: aleksis/core/views.py:911
+#: aleksis/core/views.py:916
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/views.py:921
+#: aleksis/core/views.py:926
 msgid "The requested solve option does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:953
+#: aleksis/core/views.py:958
 msgid "The dashboard widget has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:983
+#: aleksis/core/views.py:988
 msgid "The dashboard widget has been created."
 msgstr ""
 
-#: aleksis/core/views.py:993
+#: aleksis/core/views.py:998
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1064
+#: aleksis/core/views.py:1069
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1066
+#: aleksis/core/views.py:1071
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1142
+#: aleksis/core/views.py:1147
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1233
+#: aleksis/core/views.py:1238
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1243
+#: aleksis/core/views.py:1248
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1253
+#: aleksis/core/views.py:1258
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1263
+#: aleksis/core/views.py:1268
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1273
+#: aleksis/core/views.py:1278
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1341
+#: aleksis/core/views.py:1346
 msgid "The requested PDF file does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:1350 aleksis/core/views.py:1354
+#: aleksis/core/views.py:1355 aleksis/core/views.py:1359
 msgid "The requested task does not exist or is not accessible"
 msgstr ""
 
-#: aleksis/core/views.py:1406
+#: aleksis/core/views.py:1411
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1413
+#: aleksis/core/views.py:1418
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1484
+#: aleksis/core/views.py:1489
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1495
+#: aleksis/core/views.py:1500
 msgid "Person was already invited."
 msgstr ""
 
+#: aleksis/core/views.py:1600
+msgid "iCal feed updated successfully"
+msgstr ""
+
+#: aleksis/core/views.py:1610
+msgid "iCal feed deleted successfully"
+msgstr ""
+
+#: aleksis/core/views.py:1618
+msgid "iCal feed created successfully"
+msgstr ""
+
 #, fuzzy
 #~| msgid "Street number"
 #~ msgid "home number"
diff --git a/aleksis/core/locale/la/LC_MESSAGES/djangojs.po b/aleksis/core/locale/la/LC_MESSAGES/djangojs.po
index f3df4c3fc6d2848a739ddd1faac44cb9048c97b2..26f9dbd80e1c93710efaf2abf60ffd0754e043b6 100644
--- a/aleksis/core/locale/la/LC_MESSAGES/djangojs.po
+++ b/aleksis/core/locale/la/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-23 11:20+0100\n"
+"POT-Creation-Date: 2022-06-25 12:09+0200\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"
diff --git a/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po b/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po
index 71dc8727c985e991974f2700347f6fb37e4f7b47..c5d7f44167fc0d9207afcc857d56d3fecb23e834 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: 2022-03-23 11:19+0100\n"
+"POT-Creation-Date: 2022-06-25 12:09+0200\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"
@@ -37,34 +37,62 @@ msgstr ""
 msgid "Home and mobile phone"
 msgstr ""
 
-#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:185
-#: aleksis/core/models.py:487 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:171
+#: 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
 msgid "Groups"
 msgstr ""
 
-#: aleksis/core/data_checks.py:56
+#: aleksis/core/data_checks.py:59
 msgid "Ignore problem"
 msgstr ""
 
-#: aleksis/core/data_checks.py:185
+#: aleksis/core/data_checks.py:188
 #, python-brace-format
 msgid "Solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/data_checks.py:291
+#: aleksis/core/data_checks.py:294
 msgid "Deactivate DashboardWidget"
 msgstr ""
 
-#: aleksis/core/data_checks.py:303
+#: aleksis/core/data_checks.py:306
 msgid "Ensure that there are no broken DashboardWidgets."
 msgstr ""
 
-#: aleksis/core/data_checks.py:304
+#: aleksis/core/data_checks.py:307
 msgid "The DashboardWidget was reported broken automatically."
 msgstr ""
 
+#: aleksis/core/data_checks.py:330
+#, python-format
+msgid "Validate field %s of model %s."
+msgstr ""
+
+#: aleksis/core/data_checks.py:332
+#, python-format
+msgid "The field %s couldn't be validated successfully."
+msgstr ""
+
+#: aleksis/core/feeds.py:52
+msgid "Birthday Calendar"
+msgstr ""
+
+#: aleksis/core/feeds.py:53
+msgid "A Calendar of Birthdays"
+msgstr ""
+
+#: aleksis/core/feeds.py:66
+#, python-format
+msgid "%(name)s's birthday"
+msgstr ""
+
+#: aleksis/core/feeds.py:71
+#, python-format
+msgid "%(name)s was born on %(birthday)s"
+msgstr ""
+
 #: 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
@@ -90,11 +118,11 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:713
+#: aleksis/core/filters.py:113 aleksis/core/models.py:720
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:486
+#: aleksis/core/filters.py:135 aleksis/core/models.py:493
 msgid "Group"
 msgstr ""
 
@@ -102,7 +130,7 @@ msgstr ""
 msgid "Base data"
 msgstr ""
 
-#: aleksis/core/forms.py:55
+#: aleksis/core/forms.py:55 aleksis/core/tables.py:47
 msgid "Address"
 msgstr ""
 
@@ -130,7 +158,7 @@ msgstr ""
 msgid "This username is already in use."
 msgstr ""
 
-#: aleksis/core/forms.py:153 aleksis/core/models.py:134
+#: aleksis/core/forms.py:153 aleksis/core/models.py:141
 msgid "School term"
 msgstr ""
 
@@ -139,7 +167,7 @@ msgid "Common data"
 msgstr ""
 
 #: aleksis/core/forms.py:155 aleksis/core/forms.py:207
-#: aleksis/core/menus.py:174 aleksis/core/models.py:157
+#: aleksis/core/menus.py:160 aleksis/core/models.py:164
 #: aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
@@ -149,18 +177,18 @@ msgstr ""
 msgid "Additional data"
 msgstr ""
 
-#: aleksis/core/forms.py:157 aleksis/core/models.py:210
-#: aleksis/core/models.py:539
+#: aleksis/core/forms.py:157 aleksis/core/models.py:217
+#: aleksis/core/models.py:546 aleksis/core/tables.py:46
 msgid "Photo"
 msgstr ""
 
 #: aleksis/core/forms.py:199 aleksis/core/forms.py:202
-#: aleksis/core/models.py:77
+#: aleksis/core/models.py:84
 msgid "Date"
 msgstr ""
 
 #: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:85
+#: aleksis/core/models.py:92
 msgid "Time"
 msgstr ""
 
@@ -196,11 +224,11 @@ msgstr ""
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:418 aleksis/core/models.py:185
+#: aleksis/core/forms.py:418 aleksis/core/models.py:192
 msgid "First name"
 msgstr ""
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:186
+#: aleksis/core/forms.py:419 aleksis/core/models.py:193
 msgid "Last name"
 msgstr ""
 
@@ -233,7 +261,7 @@ msgid "You must grant the permission to all objects and/or to some objects."
 msgstr ""
 
 #: aleksis/core/forms.py:586
-msgid "Adress data"
+msgid "Address data"
 msgstr ""
 
 #: aleksis/core/forms.py:598
@@ -280,138 +308,131 @@ msgstr ""
 msgid "No backup result found!"
 msgstr ""
 
-#: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6
+#: 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 ""
 
-#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:22
+#: aleksis/core/menus.py:13 aleksis/core/templates/account/signup.html:22
 #: aleksis/core/templates/socialaccount/signup.html:23
 msgid "Sign up"
 msgstr ""
 
-#: aleksis/core/menus.py:24 aleksis/core/templates/invitations/enter.html:7
+#: aleksis/core/menus.py:22 aleksis/core/templates/invitations/enter.html:7
 msgid "Accept invitation"
 msgstr ""
 
-#: aleksis/core/menus.py:33
+#: aleksis/core/menus.py:31
 msgid "Dashboard"
 msgstr ""
 
-#: aleksis/core/menus.py:41 aleksis/core/models.py:765
-#: 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
-msgid "Notifications"
-msgstr ""
-
-#: aleksis/core/menus.py:53
+#: aleksis/core/menus.py:39
 msgid "Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:61 aleksis/core/models.py:865
+#: aleksis/core/menus.py:47 aleksis/core/models.py:872
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
 msgstr ""
 
-#: aleksis/core/menus.py:72 aleksis/core/models.py:135
+#: aleksis/core/menus.py:58 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 ""
 
-#: aleksis/core/menus.py:83
+#: 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 ""
 
-#: aleksis/core/menus.py:94
+#: 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 ""
 
-#: aleksis/core/menus.py:105
+#: 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 ""
 
-#: aleksis/core/menus.py:116
+#: aleksis/core/menus.py:102
 msgid "Configuration"
 msgstr ""
 
-#: aleksis/core/menus.py:127 aleksis/core/templates/core/data_check/list.html:9
+#: 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 ""
 
-#: aleksis/core/menus.py:133 aleksis/core/templates/core/perms/list.html:13
+#: 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 ""
 
-#: aleksis/core/menus.py:144
+#: aleksis/core/menus.py:130
 msgid "Backend Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:152
+#: 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 ""
 
-#: aleksis/core/menus.py:165
+#: aleksis/core/menus.py:151
 msgid "People"
 msgstr ""
 
-#: aleksis/core/menus.py:196 aleksis/core/models.py:1099
+#: aleksis/core/menus.py:182 aleksis/core/models.py:1111
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
 msgstr ""
 
-#: aleksis/core/menus.py:207
+#: aleksis/core/menus.py:193
 msgid "Groups and child groups"
 msgstr ""
 
-#: aleksis/core/menus.py:218 aleksis/core/models.py:535
+#: aleksis/core/menus.py:204 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 ""
 
-#: aleksis/core/menus.py:229
+#: aleksis/core/menus.py:215
 msgid "Invite person"
 msgstr ""
 
-#: aleksis/core/menus.py:242
+#: 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 ""
 
-#: aleksis/core/menus.py:254
+#: aleksis/core/menus.py:240
 msgid "Stop impersonation"
 msgstr ""
 
-#: aleksis/core/menus.py:263
+#: aleksis/core/menus.py:249
 msgid "Account"
 msgstr ""
 
-#: aleksis/core/menus.py:272
+#: aleksis/core/menus.py:258
 #: aleksis/core/templates/dynamic_preferences/form.html:5
 msgid "Preferences"
 msgstr ""
 
-#: aleksis/core/menus.py:281
+#: aleksis/core/menus.py:267
 msgid "2FA"
 msgstr ""
 
-#: aleksis/core/menus.py:289
+#: 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
@@ -423,17 +444,21 @@ msgstr ""
 msgid "Change password"
 msgstr ""
 
-#: aleksis/core/menus.py:301
+#: aleksis/core/menus.py:287
 msgid "Third-party accounts"
 msgstr ""
 
-#: aleksis/core/menus.py:310
+#: 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 ""
 
-#: aleksis/core/menus.py:320
+#: aleksis/core/menus.py:305
+msgid "Calendar Feeds"
+msgstr ""
+
+#: aleksis/core/menus.py:318
 msgid "Logout"
 msgstr ""
 
@@ -441,559 +466,588 @@ msgstr ""
 msgid "Linked school term"
 msgstr ""
 
-#: aleksis/core/models.py:75
+#: aleksis/core/models.py:82
 msgid "Boolean (Yes/No)"
 msgstr ""
 
-#: aleksis/core/models.py:76
+#: aleksis/core/models.py:83
 msgid "Text (one line)"
 msgstr ""
 
-#: aleksis/core/models.py:78
+#: aleksis/core/models.py:85
 msgid "Date and time"
 msgstr ""
 
-#: aleksis/core/models.py:79
+#: aleksis/core/models.py:86
 msgid "Decimal number"
 msgstr ""
 
-#: aleksis/core/models.py:80 aleksis/core/models.py:203
+#: aleksis/core/models.py:87 aleksis/core/models.py:210
 msgid "E-mail address"
 msgstr ""
 
-#: aleksis/core/models.py:81
+#: aleksis/core/models.py:88
 msgid "Integer"
 msgstr ""
 
-#: aleksis/core/models.py:82
+#: aleksis/core/models.py:89
 msgid "IP address"
 msgstr ""
 
-#: aleksis/core/models.py:83
+#: aleksis/core/models.py:90
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr ""
 
-#: aleksis/core/models.py:84
+#: aleksis/core/models.py:91
 msgid "Text (multi-line)"
 msgstr ""
 
-#: aleksis/core/models.py:86
+#: aleksis/core/models.py:93
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:98 aleksis/core/models.py:1068
+#: aleksis/core/models.py:105 aleksis/core/models.py:1077
+#: aleksis/core/models.py:1384
 msgid "Name"
 msgstr ""
 
-#: aleksis/core/models.py:100
+#: aleksis/core/models.py:107
 msgid "Start date"
 msgstr ""
 
-#: aleksis/core/models.py:101
+#: aleksis/core/models.py:108
 msgid "End date"
 msgstr ""
 
-#: aleksis/core/models.py:120
+#: aleksis/core/models.py:127
 msgid "The start date must be earlier than the end date."
 msgstr ""
 
-#: aleksis/core/models.py:127
+#: aleksis/core/models.py:134
 msgid "There is already a school term for this time or a part of this time."
 msgstr ""
 
-#: aleksis/core/models.py:156 aleksis/core/models.py:1017
+#: aleksis/core/models.py:163 aleksis/core/models.py:1024
+#: aleksis/core/models.py:1381
 msgid "Person"
 msgstr ""
 
-#: aleksis/core/models.py:159
+#: aleksis/core/models.py:166
 msgid "Can view address"
 msgstr ""
 
-#: aleksis/core/models.py:160
+#: aleksis/core/models.py:167
 msgid "Can view contact details"
 msgstr ""
 
-#: aleksis/core/models.py:161
+#: aleksis/core/models.py:168
 msgid "Can view photo"
 msgstr ""
 
-#: aleksis/core/models.py:162
+#: aleksis/core/models.py:169
 msgid "Can view avatar image"
 msgstr ""
 
-#: aleksis/core/models.py:163
+#: aleksis/core/models.py:170
 msgid "Can view persons groups"
 msgstr ""
 
-#: aleksis/core/models.py:164
+#: aleksis/core/models.py:171
 msgid "Can view personal details"
 msgstr ""
 
-#: aleksis/core/models.py:174
+#: aleksis/core/models.py:181
 msgid "female"
 msgstr ""
 
-#: aleksis/core/models.py:174
+#: aleksis/core/models.py:181
 msgid "male"
 msgstr ""
 
-#: aleksis/core/models.py:182 aleksis/core/models.py:1271
+#: aleksis/core/models.py:181
+msgid "other"
+msgstr ""
+
+#: aleksis/core/models.py:189 aleksis/core/models.py:1283
 msgid "Linked user"
 msgstr ""
 
-#: aleksis/core/models.py:188
+#: aleksis/core/models.py:195
 msgid "Additional name(s)"
 msgstr ""
 
-#: aleksis/core/models.py:192 aleksis/core/models.py:504
+#: aleksis/core/models.py:199 aleksis/core/models.py:511
 msgid "Short name"
 msgstr ""
 
-#: aleksis/core/models.py:195
+#: aleksis/core/models.py:202
 msgid "Street"
 msgstr ""
 
-#: aleksis/core/models.py:196
+#: aleksis/core/models.py:203
 msgid "Street number"
 msgstr ""
 
-#: aleksis/core/models.py:197
+#: aleksis/core/models.py:204
 msgid "Postal code"
 msgstr ""
 
-#: aleksis/core/models.py:198
+#: aleksis/core/models.py:205
 msgid "Place"
 msgstr ""
 
-#: aleksis/core/models.py:200 aleksis/core/templates/core/person/full.html:160
+#: aleksis/core/models.py:207 aleksis/core/templates/core/person/full.html:160
 msgid "Home phone"
 msgstr ""
 
-#: aleksis/core/models.py:201 aleksis/core/templates/core/person/full.html:170
+#: aleksis/core/models.py:208 aleksis/core/templates/core/person/full.html:170
 msgid "Mobile phone"
 msgstr ""
 
-#: aleksis/core/models.py:205
+#: aleksis/core/models.py:212
 msgid "Date of birth"
 msgstr ""
 
-#: aleksis/core/models.py:206
+#: aleksis/core/models.py:213
 msgid "Place of birth"
 msgstr ""
 
-#: aleksis/core/models.py:207
+#: aleksis/core/models.py:214
 msgid "Sex"
 msgstr ""
 
-#: aleksis/core/models.py:214 aleksis/core/models.py:543
+#: 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 ""
 
-#: aleksis/core/models.py:219 aleksis/core/models.py:547
+#: aleksis/core/models.py:226 aleksis/core/models.py:554
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:222 aleksis/core/models.py:550
+#: aleksis/core/models.py:229 aleksis/core/models.py:557
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:227 aleksis/core/templates/core/person/full.html:235
+#: aleksis/core/models.py:234 aleksis/core/templates/core/person/full.html:235
 msgid "Guardians / Parents"
 msgstr ""
 
-#: aleksis/core/models.py:234
+#: aleksis/core/models.py:241
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:237 aleksis/core/models.py:717
-#: aleksis/core/models.py:741 aleksis/core/models.py:832
-#: aleksis/core/models.py:1092
+#: 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
 msgid "Description"
 msgstr ""
 
-#: aleksis/core/models.py:457
+#: aleksis/core/models.py:464
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:459
+#: aleksis/core/models.py:466
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:461
+#: aleksis/core/models.py:468
 msgid "Required"
 msgstr ""
 
-#: aleksis/core/models.py:462
+#: aleksis/core/models.py:469
 msgid "Help text / description"
 msgstr ""
 
-#: aleksis/core/models.py:468
+#: aleksis/core/models.py:475
 msgid "Addtitional field for groups"
 msgstr ""
 
-#: aleksis/core/models.py:469
+#: aleksis/core/models.py:476
 msgid "Addtitional fields for groups"
 msgstr ""
 
-#: aleksis/core/models.py:489
+#: aleksis/core/models.py:496
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:490
+#: aleksis/core/models.py:497
 msgid "Can view statistics about group."
 msgstr ""
 
-#: aleksis/core/models.py:502
+#: aleksis/core/models.py:509
 msgid "Long name"
 msgstr ""
 
-#: aleksis/core/models.py:512 aleksis/core/templates/core/group/full.html:85
+#: aleksis/core/models.py:519 aleksis/core/templates/core/group/full.html:105
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:515 aleksis/core/templates/core/group/full.html:82
+#: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:102
 msgid "Owners"
 msgstr ""
 
-#: aleksis/core/models.py:522 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 ""
 
-#: aleksis/core/models.py:530
+#: aleksis/core/models.py:537
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:716 aleksis/core/models.py:740
-#: aleksis/core/models.py:831
+#: aleksis/core/models.py:723 aleksis/core/models.py:747
+#: aleksis/core/models.py:838
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
 
-#: aleksis/core/models.py:719
+#: aleksis/core/models.py:726
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:725
+#: aleksis/core/models.py:732
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:726
+#: aleksis/core/models.py:733
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:732
+#: aleksis/core/models.py:739
 msgid "Sender"
 msgstr ""
 
-#: aleksis/core/models.py:737
+#: aleksis/core/models.py:744
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:742 aleksis/core/models.py:1069
+#: aleksis/core/models.py:749 aleksis/core/models.py:1078
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:744
+#: aleksis/core/models.py:751
 msgid "Send notification at"
 msgstr ""
 
-#: aleksis/core/models.py:746
+#: aleksis/core/models.py:753
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:747
+#: aleksis/core/models.py:754
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:764
+#: aleksis/core/models.py:771
 msgid "Notification"
 msgstr ""
 
-#: aleksis/core/models.py:833
+#: aleksis/core/models.py:772 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
+msgid "Notifications"
+msgstr ""
+
+#: aleksis/core/models.py:840
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:836
+#: aleksis/core/models.py:843
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:839
+#: aleksis/core/models.py:846
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:864
+#: aleksis/core/models.py:871
 msgid "Announcement"
 msgstr ""
 
-#: aleksis/core/models.py:902
+#: aleksis/core/models.py:909
 msgid "Announcement recipient"
 msgstr ""
 
-#: aleksis/core/models.py:903
+#: aleksis/core/models.py:910
 msgid "Announcement recipients"
 msgstr ""
 
-#: aleksis/core/models.py:925
+#: aleksis/core/models.py:932
 msgid "Widget Title"
 msgstr ""
 
-#: aleksis/core/models.py:926
+#: aleksis/core/models.py:933
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:927
+#: aleksis/core/models.py:934
 msgid "Widget is broken"
 msgstr ""
 
-#: aleksis/core/models.py:930
+#: aleksis/core/models.py:937
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:931
+#: aleksis/core/models.py:938
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:936
+#: aleksis/core/models.py:943
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:944
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:942
+#: aleksis/core/models.py:949
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:943
+#: aleksis/core/models.py:950
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:948
+#: aleksis/core/models.py:955
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:949
+#: aleksis/core/models.py:956
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:980
+#: aleksis/core/models.py:987
 msgid "Can edit default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:981
+#: aleksis/core/models.py:988
 msgid "Dashboard Widget"
 msgstr ""
 
-#: aleksis/core/models.py:982
+#: aleksis/core/models.py:989
 msgid "Dashboard Widgets"
 msgstr ""
 
-#: aleksis/core/models.py:988
+#: aleksis/core/models.py:995
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:989
+#: aleksis/core/models.py:996
 msgid "Icon URL"
 msgstr ""
 
-#: aleksis/core/models.py:995
+#: aleksis/core/models.py:1002
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:996
+#: aleksis/core/models.py:1003
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1002
+#: aleksis/core/models.py:1009
 msgid "Content"
 msgstr ""
 
-#: aleksis/core/models.py:1008
+#: aleksis/core/models.py:1015
 msgid "Static content widget"
 msgstr ""
 
-#: aleksis/core/models.py:1009
+#: aleksis/core/models.py:1016
 msgid "Static content widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1014
+#: aleksis/core/models.py:1021
 msgid "Dashboard widget"
 msgstr ""
 
-#: aleksis/core/models.py:1019
+#: aleksis/core/models.py:1026
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:1020
+#: aleksis/core/models.py:1027
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:1035
+#: aleksis/core/models.py:1042
 msgid "Dashboard widget order"
 msgstr ""
 
-#: aleksis/core/models.py:1036
+#: aleksis/core/models.py:1043
 msgid "Dashboard widget orders"
 msgstr ""
 
-#: aleksis/core/models.py:1042
+#: aleksis/core/models.py:1049
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1055
+#: aleksis/core/models.py:1062
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1056
+#: aleksis/core/models.py:1063
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1066
+#: aleksis/core/models.py:1075
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1070 aleksis/core/models.py:1318
+#: aleksis/core/models.py:1079 aleksis/core/models.py:1330
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1085
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1077
+#: aleksis/core/models.py:1086
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1091
+#: aleksis/core/models.py:1103
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1098 aleksis/core/templates/core/group/full.html:47
+#: aleksis/core/models.py:1110 aleksis/core/templates/core/group/full.html:50
 msgid "Group type"
 msgstr ""
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1124
 msgid "Can view system status"
 msgstr ""
 
-#: aleksis/core/models.py:1113
+#: aleksis/core/models.py:1125
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1114
+#: aleksis/core/models.py:1126
 msgid "Can impersonate"
 msgstr ""
 
-#: aleksis/core/models.py:1115
+#: aleksis/core/models.py:1127
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1116
+#: aleksis/core/models.py:1128
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1117
+#: aleksis/core/models.py:1129
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1118
+#: aleksis/core/models.py:1130
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1119
+#: aleksis/core/models.py:1131
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1132
 msgid "Can invite persons"
 msgstr ""
 
-#: aleksis/core/models.py:1156
+#: aleksis/core/models.py:1168
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1164
+#: aleksis/core/models.py:1176
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1165
+#: aleksis/core/models.py:1177
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1178
+#: aleksis/core/models.py:1190
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1179
+#: aleksis/core/models.py:1191
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1181
+#: aleksis/core/models.py:1193
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1182
+#: aleksis/core/models.py:1194
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1189
+#: aleksis/core/models.py:1201
 msgid "E-Mail address"
 msgstr ""
 
-#: aleksis/core/models.py:1221
+#: aleksis/core/models.py:1233
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1225
+#: aleksis/core/models.py:1237
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1227
+#: aleksis/core/models.py:1239
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1229
+#: aleksis/core/models.py:1241
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1236
+#: aleksis/core/models.py:1248
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1237
+#: aleksis/core/models.py:1249
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1242
+#: aleksis/core/models.py:1254
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1245
+#: aleksis/core/models.py:1257
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1257
+#: aleksis/core/models.py:1269
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1258
+#: aleksis/core/models.py:1270
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1274
+#: aleksis/core/models.py:1286
 msgid "Additional attributes"
 msgstr ""
 
-#: aleksis/core/models.py:1312
+#: aleksis/core/models.py:1324
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1322
+#: aleksis/core/models.py:1334
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
+#: aleksis/core/models.py:1383
+msgid "UUID"
+msgstr ""
+
+#: aleksis/core/models.py:1387
+msgid "Selected ICal feed"
+msgstr ""
+
+#: aleksis/core/models.py:1396
+msgid "Personal Calendar URL"
+msgstr ""
+
+#: aleksis/core/models.py:1397
+msgid "Personal Calendar URLs"
+msgstr ""
+
 #: aleksis/core/preferences.py:25
 msgid "General"
 msgstr ""
@@ -1138,94 +1192,94 @@ msgstr ""
 msgid "Allowed Grant Flows for OAuth applications"
 msgstr ""
 
-#: aleksis/core/preferences.py:344
-msgid "Available languages"
-msgstr ""
-
-#: aleksis/core/preferences.py:357
+#: aleksis/core/preferences.py:343
 msgid "Send emails if data checks detect problems"
 msgstr ""
 
-#: aleksis/core/preferences.py:368
+#: aleksis/core/preferences.py:354
 msgid "Email recipients for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:379
+#: aleksis/core/preferences.py:365
 msgid "Email recipient groups for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:388
+#: aleksis/core/preferences.py:374
 msgid "Show dashboard to users without login"
 msgstr ""
 
-#: aleksis/core/preferences.py:397
+#: aleksis/core/preferences.py:383
 msgid "Allow users to edit their dashboard"
 msgstr ""
 
-#: aleksis/core/preferences.py:408
+#: aleksis/core/preferences.py:394
 msgid "Fields on person model which are editable by themselves."
 msgstr ""
 
-#: aleksis/core/preferences.py:423
+#: aleksis/core/preferences.py:409
 msgid "Editable fields on person model which should trigger a notification on change"
 msgstr ""
 
-#: aleksis/core/preferences.py:437
+#: aleksis/core/preferences.py:423
 msgid "Contact for notification if a person changes their data"
 msgstr ""
 
-#: aleksis/core/preferences.py:448
+#: aleksis/core/preferences.py:434
 msgid "Prefer personal photos over avatars"
 msgstr ""
 
-#: aleksis/core/preferences.py:458
+#: aleksis/core/preferences.py:444
 msgid "PDF file expiration duration"
 msgstr ""
 
-#: aleksis/core/preferences.py:459
+#: aleksis/core/preferences.py:445
 msgid "in minutes"
 msgstr ""
 
-#: aleksis/core/preferences.py:469
+#: aleksis/core/preferences.py:455
 msgid "Automatically update the dashboard and its widgets"
 msgstr ""
 
-#: aleksis/core/preferences.py:479
+#: aleksis/core/preferences.py:465
 msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
-#: aleksis/core/preferences.py:489
+#: aleksis/core/preferences.py:475
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:540
+#: aleksis/core/settings.py:541
 msgid "English"
 msgstr ""
 
-#: aleksis/core/settings.py:541
+#: aleksis/core/settings.py:542
 msgid "German"
 msgstr ""
 
-#: aleksis/core/tables.py:24
+#: aleksis/core/settings.py:543
+msgid "Ukrainian"
+msgstr ""
+
+#: 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/group/full.html:26
 #: aleksis/core/templates/core/person/full.html:26
 #: aleksis/core/templates/core/person/full.html:86
 #: aleksis/core/templates/oauth2_provider/application/detail.html:17
 msgid "Edit"
 msgstr ""
 
-#: aleksis/core/tables.py:26 aleksis/core/tables.py:94
-#: aleksis/core/tables.py:138
+#: 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 ""
 
-#: 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
@@ -1264,7 +1318,7 @@ msgstr ""
 #: aleksis/core/templates/500.html:10
 msgid ""
 "An unexpected error has\n"
-"          occured."
+"          occurred."
 msgstr ""
 
 #: aleksis/core/templates/500.html:13
@@ -1518,7 +1572,7 @@ msgid "Publish new announcement"
 msgstr ""
 
 #: aleksis/core/templates/core/announcement/form.html:34
-msgid "Save und publish announcement"
+msgid "Save and publish announcement"
 msgstr ""
 
 #: aleksis/core/templates/core/announcement/list.html:19
@@ -1764,34 +1818,34 @@ msgstr ""
 msgid "Edit group"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:38
+#: aleksis/core/templates/core/group/full.html:40
 #: aleksis/core/templates/core/person/full.html:40
 #: aleksis/core/templates/core/person/full.html:100
 msgid "Change preferences"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:64
+#: aleksis/core/templates/core/group/full.html:68
 msgid "Statistics"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:67
+#: aleksis/core/templates/core/group/full.html:73
 msgid "Count of members"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:71
+#: aleksis/core/templates/core/group/full.html:81
 msgid "Average age"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:76
+#: aleksis/core/templates/core/group/full.html:90
 msgid "Age range"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:76
-msgid "years to"
-msgstr ""
-
-#: aleksis/core/templates/core/group/full.html:76
-msgid "years "
+#: aleksis/core/templates/core/group/full.html:93
+#, python-format
+msgid ""
+"\n"
+"              %(min)s years to %(max)s years\n"
+"            "
 msgstr ""
 
 #: aleksis/core/templates/core/group/list.html:14
@@ -1820,6 +1874,40 @@ msgstr ""
 msgid "Create group type"
 msgstr ""
 
+#: 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 ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: aleksis/core/templates/core/ical/ical_list.html:4
+#: aleksis/core/templates/core/ical/ical_list.html:5
+msgid "iCal Feeds"
+msgstr ""
+
+#: 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 ""
+
+#: aleksis/core/templates/core/ical/ical_list.html:14
+msgid "Your iCal URLs"
+msgstr ""
+
 #: aleksis/core/templates/core/index.html:4
 msgid "Home"
 msgstr ""
@@ -2093,11 +2181,11 @@ msgstr ""
 msgid "Unknown"
 msgstr ""
 
-#: aleksis/core/templates/core/partials/language_form.html:15
+#: aleksis/core/templates/core/partials/language_form.html:17
 msgid "Language"
 msgstr ""
 
-#: aleksis/core/templates/core/partials/language_form.html:27
+#: aleksis/core/templates/core/partials/language_form.html:29
 msgid "Select language"
 msgstr ""
 
@@ -2296,13 +2384,6 @@ msgstr ""
 msgid "Register OAuth2 Application"
 msgstr ""
 
-#: 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 ""
-
 #: aleksis/core/templates/oauth2_provider/application/detail.html:5
 msgid "OAuth2 Application"
 msgstr ""
@@ -3022,159 +3103,171 @@ msgstr ""
 msgid "Download PDF"
 msgstr ""
 
-#: aleksis/core/views.py:289
+#: aleksis/core/views.py:294
 msgid "The school term has been created."
 msgstr ""
 
-#: aleksis/core/views.py:301
+#: aleksis/core/views.py:306
 msgid "The school term has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:421
+#: aleksis/core/views.py:426
 msgid "The child groups were successfully saved."
 msgstr ""
 
-#: aleksis/core/views.py:440 aleksis/core/views.py:450
+#: aleksis/core/views.py:445 aleksis/core/views.py:455
 msgid "The person has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:500
+#: aleksis/core/views.py:505
 msgid "The group has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:597
+#: aleksis/core/views.py:602
 msgid "The announcement has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:613
+#: aleksis/core/views.py:618
 msgid "The announcement has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:681
+#: aleksis/core/views.py:686
 msgid "The requested preference registry does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:700
+#: aleksis/core/views.py:705
 msgid "The preferences have been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:724
+#: aleksis/core/views.py:729
 msgid "The person has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:738
+#: aleksis/core/views.py:743
 msgid "The group has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:770
-msgid "The additional_field has been saved."
+#: aleksis/core/views.py:775
+msgid "The additional field has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:804
+#: aleksis/core/views.py:809
 msgid "The additional field has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:829
+#: aleksis/core/views.py:834
 msgid "The group type has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:859
+#: aleksis/core/views.py:864
 msgid "The group type has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:892
+#: aleksis/core/views.py:897
 msgid "Progress: Run data checks"
 msgstr ""
 
-#: aleksis/core/views.py:893
+#: aleksis/core/views.py:898
 msgid "Run data checks …"
 msgstr ""
 
-#: aleksis/core/views.py:894
+#: aleksis/core/views.py:899
 msgid "The data checks were run successfully."
 msgstr ""
 
-#: aleksis/core/views.py:895
+#: aleksis/core/views.py:900
 msgid "There was a problem while running data checks."
 msgstr ""
 
-#: aleksis/core/views.py:911
+#: aleksis/core/views.py:916
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/views.py:921
+#: aleksis/core/views.py:926
 msgid "The requested solve option does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:953
+#: aleksis/core/views.py:958
 msgid "The dashboard widget has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:983
+#: aleksis/core/views.py:988
 msgid "The dashboard widget has been created."
 msgstr ""
 
-#: aleksis/core/views.py:993
+#: aleksis/core/views.py:998
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1064
+#: aleksis/core/views.py:1069
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1066
+#: aleksis/core/views.py:1071
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1142
+#: aleksis/core/views.py:1147
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1233
+#: aleksis/core/views.py:1238
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1243
+#: aleksis/core/views.py:1248
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1253
+#: aleksis/core/views.py:1258
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1263
+#: aleksis/core/views.py:1268
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1273
+#: aleksis/core/views.py:1278
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1341
+#: aleksis/core/views.py:1346
 msgid "The requested PDF file does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:1350 aleksis/core/views.py:1354
+#: aleksis/core/views.py:1355 aleksis/core/views.py:1359
 msgid "The requested task does not exist or is not accessible"
 msgstr ""
 
-#: aleksis/core/views.py:1406
+#: aleksis/core/views.py:1411
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1413
+#: aleksis/core/views.py:1418
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1484
+#: aleksis/core/views.py:1489
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1495
+#: aleksis/core/views.py:1500
 msgid "Person was already invited."
 msgstr ""
 
+#: aleksis/core/views.py:1600
+msgid "iCal feed updated successfully"
+msgstr ""
+
+#: aleksis/core/views.py:1610
+msgid "iCal feed deleted successfully"
+msgstr ""
+
+#: aleksis/core/views.py:1618
+msgid "iCal feed created successfully"
+msgstr ""
+
 #~ msgid "Norwegian (bokmål)"
 #~ msgstr "Norsk (bokmål)"
diff --git a/aleksis/core/locale/nb_NO/LC_MESSAGES/djangojs.po b/aleksis/core/locale/nb_NO/LC_MESSAGES/djangojs.po
index f3df4c3fc6d2848a739ddd1faac44cb9048c97b2..26f9dbd80e1c93710efaf2abf60ffd0754e043b6 100644
--- a/aleksis/core/locale/nb_NO/LC_MESSAGES/djangojs.po
+++ b/aleksis/core/locale/nb_NO/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-23 11:20+0100\n"
+"POT-Creation-Date: 2022-06-25 12:09+0200\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"
diff --git a/aleksis/core/locale/ru/LC_MESSAGES/django.po b/aleksis/core/locale/ru/LC_MESSAGES/django.po
index b2b7031722e061ea2bbf974779f8e95456846337..e05911859e2338d616b787247a1b51583805284e 100644
--- a/aleksis/core/locale/ru/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/ru/LC_MESSAGES/django.po
@@ -3,88 +3,89 @@
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
-#, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-04-23 12:58+0000\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"
-"Language: \n"
+"POT-Creation-Date: 2022-05-24 19:37+0200\n"
+"PO-Revision-Date: 2022-06-22 19:58+0000\n"
+"Last-Translator: Serhii Horichenko <m@sgg.im>\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"
+"X-Generator: Weblate 4.12.1\n"
 
 #: aleksis/core/apps.py:166
 msgid "OpenID Connect scope"
-msgstr ""
+msgstr "Граница действия OpenID Connect"
 
 #: aleksis/core/apps.py:167
 msgid "Given name, family name, link to profile and picture if existing."
-msgstr ""
+msgstr "Имя, фамилия, ссылка на профиль и фото, если есть."
 
 #: aleksis/core/apps.py:168
 msgid "Full home postal address"
-msgstr ""
+msgstr "Полный домашний почтовый адрес"
 
 #: aleksis/core/apps.py:169
 msgid "Email address"
-msgstr ""
+msgstr "Адрес эл.почты"
 
 #: aleksis/core/apps.py:170
 msgid "Home and mobile phone"
-msgstr ""
+msgstr "Домашний и мобильный телефоны"
 
 #: 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/templates/core/group/list.html:9
 #: aleksis/core/templates/core/person/full.html:246
 msgid "Groups"
-msgstr ""
+msgstr "Группы"
 
 #: aleksis/core/data_checks.py:56
 msgid "Ignore problem"
-msgstr ""
+msgstr "Игнорировать проблему"
 
 #: aleksis/core/data_checks.py:185
 #, python-brace-format
 msgid "Solve option '{solve_option_obj.verbose_name}' "
-msgstr ""
+msgstr "Вариант решения '{solve_option_obj.verbose_name}' "
 
 #: aleksis/core/data_checks.py:291
 msgid "Deactivate DashboardWidget"
-msgstr ""
+msgstr "Отключить виджет информпанели"
 
 #: aleksis/core/data_checks.py:303
 msgid "Ensure that there are no broken DashboardWidgets."
-msgstr ""
+msgstr "Убедитесь в отсутствии сбойных виджетов на информапанели."
 
 #: aleksis/core/data_checks.py:304
 msgid "The DashboardWidget was reported broken automatically."
-msgstr ""
+msgstr "Виджет информпанели сообщил о сбое в автоматическом режиме."
 
 #: aleksis/core/feeds.py:52
 msgid "Birthday Calendar"
-msgstr ""
+msgstr "Календарь Дней Рождения"
 
 #: aleksis/core/feeds.py:53
 msgid "A Calendar of Birthdays"
-msgstr ""
+msgstr "Календарь Дней Рождения"
 
 #: aleksis/core/feeds.py:66
 #, python-format
 msgid "%(name)s's birthday"
-msgstr ""
+msgstr "%(name)s отмечает День Рождения"
 
 #: aleksis/core/feeds.py:71
 #, python-format
 msgid "%(name)s was born on %(birthday)s"
-msgstr ""
+msgstr "%(name)s родился(-лась) %(birthday)s"
 
 #: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:139
 #: aleksis/core/templates/core/base.html:140
@@ -93,337 +94,339 @@ msgstr ""
 #: aleksis/core/templates/search/search.html:7
 #: aleksis/core/templates/search/search.html:22
 msgid "Search"
-msgstr ""
+msgstr "Поиск"
 
 #: aleksis/core/filters.py:59
 msgid "Search by name"
-msgstr ""
+msgstr "Поиск по имени"
 
 #: aleksis/core/filters.py:71
 msgid "Search by contact details"
-msgstr ""
+msgstr "Поиск по контактным данным"
 
 #: aleksis/core/filters.py:92
 msgid "Permission"
-msgstr ""
+msgstr "Разрешение"
 
 #: aleksis/core/filters.py:100
 msgid "Content type"
-msgstr ""
+msgstr "Тип содержимого"
 
 #: aleksis/core/filters.py:113 aleksis/core/models.py:715
 msgid "User"
-msgstr ""
+msgstr "Пользователь"
 
 #: aleksis/core/filters.py:135 aleksis/core/models.py:488
 msgid "Group"
-msgstr ""
+msgstr "Группа"
 
 #: aleksis/core/forms.py:50 aleksis/core/forms.py:581
 msgid "Base data"
-msgstr ""
+msgstr "Основные данные"
 
 #: aleksis/core/forms.py:55
 msgid "Address"
-msgstr ""
+msgstr "Адрес"
 
 #: aleksis/core/forms.py:56 aleksis/core/forms.py:590
 msgid "Contact data"
-msgstr ""
+msgstr "Контактные данные"
 
 #: aleksis/core/forms.py:58
 msgid "Advanced personal data"
-msgstr ""
+msgstr "Дополнительные личные данные"
 
 #: aleksis/core/forms.py:106
 msgid "New user"
-msgstr ""
+msgstr "Новый пользователь"
 
 #: aleksis/core/forms.py:106
 msgid "Create a new account"
-msgstr ""
+msgstr "Создать новую учётную запись"
 
 #: aleksis/core/forms.py:132
 msgid "You cannot set a new username when also selecting an existing user."
-msgstr ""
+msgstr "После выбора существующего пользователя создать новый логин нельзя."
 
 #: aleksis/core/forms.py:136
 msgid "This username is already in use."
-msgstr ""
+msgstr "Этот логин уже занят."
 
 #: aleksis/core/forms.py:153 aleksis/core/models.py:136
 msgid "School term"
-msgstr ""
+msgstr "Учебный год"
 
 #: aleksis/core/forms.py:154
 msgid "Common data"
-msgstr ""
+msgstr "Общие данные"
 
 #: 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
 msgid "Persons"
-msgstr ""
+msgstr "Люди"
 
 #: aleksis/core/forms.py:156 aleksis/core/forms.py:592
 msgid "Additional data"
-msgstr ""
+msgstr "Дополнительные данные"
 
 #: aleksis/core/forms.py:157 aleksis/core/models.py:212
 #: aleksis/core/models.py:541
 msgid "Photo"
-msgstr ""
+msgstr "Фото"
 
 #: aleksis/core/forms.py:199 aleksis/core/forms.py:202
 #: aleksis/core/models.py:79
 msgid "Date"
-msgstr ""
+msgstr "Дата"
 
 #: aleksis/core/forms.py:200 aleksis/core/forms.py:203
 #: aleksis/core/models.py:87
 msgid "Time"
-msgstr ""
+msgstr "Время"
 
 #: aleksis/core/forms.py:233
 msgid "From when until when should the announcement be displayed?"
-msgstr ""
+msgstr "С какого и по какое время это объявление должно отображаться?"
 
 #: aleksis/core/forms.py:236
 msgid "Who should see the announcement?"
-msgstr ""
+msgstr "Кто должен видеть это объявление?"
 
 #: aleksis/core/forms.py:237
 msgid "Write your announcement:"
-msgstr ""
+msgstr "Напишите свое объявление:"
 
 #: aleksis/core/forms.py:276
-msgid "You are not allowed to create announcements which are only valid in the past."
-msgstr ""
+msgid ""
+"You are not allowed to create announcements which are only valid in the past."
+msgstr "Объявления для прошлого Вам создавать не разрешено."
 
 #: aleksis/core/forms.py:280
 msgid "The from date and time must be earlier then the until date and time."
-msgstr ""
+msgstr "Дата и время начала должны быть до даты и времени окончания."
 
 #: aleksis/core/forms.py:289
 msgid "You need at least one recipient."
-msgstr ""
+msgstr "Нужен хотя бы один получатель."
 
 #: aleksis/core/forms.py:398
 msgid "Invitation code"
-msgstr ""
+msgstr "Код приглашения"
 
 #: aleksis/core/forms.py:399
 msgid "Please enter your invitation code."
-msgstr ""
+msgstr "Укажите, пожалуйста, код приглашения."
 
 #: aleksis/core/forms.py:418 aleksis/core/models.py:187
 msgid "First name"
-msgstr ""
+msgstr "Имя"
 
 #: aleksis/core/forms.py:419 aleksis/core/models.py:188
 msgid "Last name"
-msgstr ""
+msgstr "Фамилия"
 
 #: aleksis/core/forms.py:428
 msgid "A person is using this e-mail address"
-msgstr ""
+msgstr "Этот эл.адрес кем-то используется"
 
 #: aleksis/core/forms.py:456
 msgid "Who should get the permission?"
-msgstr ""
+msgstr "Кто должен получить такое разрешение?"
 
 #: aleksis/core/forms.py:457
 msgid "On what?"
-msgstr ""
+msgstr "В случае чего?"
 
 #: aleksis/core/forms.py:483
 msgid "Select objects which the permission should be granted for:"
-msgstr ""
+msgstr "Отметьте объекты, к которым будет предоставлен доступ:"
 
 #: aleksis/core/forms.py:486
 msgid "Grant the permission for all objects"
-msgstr ""
+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 and/or to some objects."
-msgstr ""
+msgstr "Вы должны предоставить доступ ко всем и/или к некоторым объектам."
 
 #: aleksis/core/forms.py:586
-msgid "Adress data"
-msgstr ""
+msgid "Address data"
+msgstr "Подробности адреса"
 
 #: aleksis/core/forms.py:598
 msgid "Account data"
-msgstr ""
+msgstr "Данные учётной записи"
 
 #: aleksis/core/forms.py:605
 msgid "Password"
-msgstr ""
+msgstr "Пароль"
 
 #: aleksis/core/forms.py:608
 msgid "Password (again)"
-msgstr ""
+msgstr "Пароль (ещё раз)"
 
 #: aleksis/core/forms.py:728
 msgid "The selected action does not exist."
-msgstr ""
+msgstr "Выбранное действие не существует."
 
 #: aleksis/core/forms.py:739
 msgid "You do not have permission to run {} on all selected objects."
-msgstr ""
+msgstr "У Вас нет разрешения на запуск {} на всех выбранных объектах."
 
 #: aleksis/core/forms.py:795
 msgid "No valid selection."
-msgstr ""
+msgstr "Неправильный выбор."
 
 #: aleksis/core/health_checks.py:21
 msgid "There are unresolved data problems."
-msgstr ""
+msgstr "Имеются нерешённые проблемы с данными."
 
 #: aleksis/core/health_checks.py:40
 msgid "Error accessing backup storage: {}"
-msgstr ""
+msgstr "Ошибка доступа к резервному хранилищу: {}"
 
 #: aleksis/core/health_checks.py:50
 msgid "Last backup {}!"
-msgstr ""
+msgstr "Последняя резервная копия {}!"
 
 #: aleksis/core/health_checks.py:52
 msgid "No backup found!"
-msgstr ""
+msgstr "Резервная копия не найдена!"
 
 #: aleksis/core/health_checks.py:79
 msgid "No backup result found!"
-msgstr ""
+msgstr "Результат резервного копирования не найден!"
 
 #: 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 ""
+msgstr "Войти"
 
 #: aleksis/core/menus.py:13 aleksis/core/templates/account/signup.html:22
 #: aleksis/core/templates/socialaccount/signup.html:23
 msgid "Sign up"
-msgstr ""
+msgstr "Зарегистрироваться"
 
 #: aleksis/core/menus.py:22 aleksis/core/templates/invitations/enter.html:7
 msgid "Accept invitation"
-msgstr ""
+msgstr "Принять приглашение"
 
 #: aleksis/core/menus.py:31
 msgid "Dashboard"
-msgstr ""
+msgstr "Информпанель"
 
 #: aleksis/core/menus.py:39
 msgid "Admin"
-msgstr ""
+msgstr "Админ"
 
 #: 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
 msgid "Announcements"
-msgstr ""
+msgstr "Объявление"
 
 #: 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
 msgid "School terms"
-msgstr ""
+msgstr "Учебный год"
 
 #: 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 ""
+msgstr "Виджеты информпанели"
 
 #: 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 ""
+msgstr "Управление данными"
 
 #: 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 ""
+msgstr "Состояние системы"
 
 #: aleksis/core/menus.py:102
 msgid "Configuration"
-msgstr ""
+msgstr "Конфигурация"
 
 #: 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 ""
+msgstr "Проверки данных"
 
 #: 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 ""
+msgstr "Управление разрешениями"
 
 #: aleksis/core/menus.py:130
 msgid "Backend Admin"
-msgstr ""
+msgstr "Администрирование бекенда"
 
 #: 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 ""
+msgstr "Приложения OAuth2"
 
 #: aleksis/core/menus.py:151
 msgid "People"
-msgstr ""
+msgstr "Люди"
 
 #: 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
 msgid "Group types"
-msgstr ""
+msgstr "Типы групп"
 
 #: aleksis/core/menus.py:193
 msgid "Groups and child groups"
-msgstr ""
+msgstr "Группы и дочерние группы"
 
 #: 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
 msgid "Additional fields"
-msgstr ""
+msgstr "Дополнительные поля"
 
 #: aleksis/core/menus.py:215
 msgid "Invite person"
-msgstr ""
+msgstr "Пригласить знакомого"
 
 #: 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 ""
+msgstr "Определить дочерние группы к группе"
 
 #: aleksis/core/menus.py:240
 msgid "Stop impersonation"
-msgstr ""
+msgstr "Остановить прикрытие"
 
 #: aleksis/core/menus.py:249
 msgid "Account"
-msgstr ""
+msgstr "Учётная запись"
 
 #: aleksis/core/menus.py:258
 #: aleksis/core/templates/dynamic_preferences/form.html:5
 msgid "Preferences"
-msgstr ""
+msgstr "Свойства"
 
 #: aleksis/core/menus.py:267
 msgid "2FA"
-msgstr ""
+msgstr "2FA"
 
 #: aleksis/core/menus.py:275
 #: aleksis/core/templates/account/password_change.html:5
@@ -435,611 +438,616 @@ msgstr ""
 #: 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 ""
+msgstr "Сменить пароль"
 
 #: aleksis/core/menus.py:287
 msgid "Third-party accounts"
-msgstr ""
+msgstr "Учётные записи третих сторон"
 
 #: 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 ""
+msgstr "Авторизованные приложения"
 
 #: aleksis/core/menus.py:305
 msgid "Calendar Feeds"
-msgstr ""
+msgstr "Ленты календарей"
 
 #: aleksis/core/menus.py:318
 msgid "Logout"
-msgstr ""
+msgstr "Выйти"
 
 #: aleksis/core/mixins.py:511
 msgid "Linked school term"
-msgstr ""
+msgstr "Связанный учебный год"
 
 #: aleksis/core/models.py:77
 msgid "Boolean (Yes/No)"
-msgstr ""
+msgstr "Булево (Да/Нет)"
 
 #: aleksis/core/models.py:78
 msgid "Text (one line)"
-msgstr ""
+msgstr "Текст (одна строка)"
 
 #: aleksis/core/models.py:80
 msgid "Date and time"
-msgstr ""
+msgstr "Дата и время"
 
 #: aleksis/core/models.py:81
 msgid "Decimal number"
-msgstr ""
+msgstr "Десятичное число"
 
 #: aleksis/core/models.py:82 aleksis/core/models.py:205
 msgid "E-mail address"
-msgstr ""
+msgstr "Адрес эл.почты"
 
 #: aleksis/core/models.py:83
 msgid "Integer"
-msgstr ""
+msgstr "Целое"
 
 #: aleksis/core/models.py:84
 msgid "IP address"
-msgstr ""
+msgstr "IP адрес"
 
 #: aleksis/core/models.py:85
 msgid "Boolean or empty (Yes/No/Neither)"
-msgstr ""
+msgstr "Булево или пустое (Да/Нет/Ничего)"
 
 #: aleksis/core/models.py:86
 msgid "Text (multi-line)"
-msgstr ""
+msgstr "Текст (многострочный)"
 
 #: aleksis/core/models.py:88
 msgid "URL / Link"
-msgstr ""
+msgstr "URL / Ссылка"
 
 #: aleksis/core/models.py:100 aleksis/core/models.py:1070
 #: aleksis/core/models.py:1374
 msgid "Name"
-msgstr ""
+msgstr "Имя"
 
 #: aleksis/core/models.py:102
 msgid "Start date"
-msgstr ""
+msgstr "Дата начала"
 
 #: aleksis/core/models.py:103
 msgid "End date"
-msgstr ""
+msgstr "Дата окончания"
 
 #: aleksis/core/models.py:122
 msgid "The start date must be earlier than the end date."
-msgstr ""
+msgstr "Дата начала должна быть ранее даты окончания."
 
 #: aleksis/core/models.py:129
 msgid "There is already a school term for this time or a part of this time."
-msgstr ""
+msgstr "На это время или на его часть уже запланирован учебный год."
 
 #: aleksis/core/models.py:158 aleksis/core/models.py:1019
 #: aleksis/core/models.py:1371
 msgid "Person"
-msgstr ""
+msgstr "Лицо"
 
 #: aleksis/core/models.py:161
 msgid "Can view address"
-msgstr ""
+msgstr "Может видеть адрес"
 
 #: aleksis/core/models.py:162
 msgid "Can view contact details"
-msgstr ""
+msgstr "Может видеть контактные данные"
 
 #: aleksis/core/models.py:163
 msgid "Can view photo"
-msgstr ""
+msgstr "Может видеть фото"
 
 #: aleksis/core/models.py:164
 msgid "Can view avatar image"
-msgstr ""
+msgstr "Может видеть аватар"
 
 #: aleksis/core/models.py:165
 msgid "Can view persons groups"
-msgstr ""
+msgstr "Может видеть группы лиц"
 
 #: aleksis/core/models.py:166
 msgid "Can view personal details"
-msgstr ""
+msgstr "Может видеть личные данные"
 
 #: aleksis/core/models.py:176
 msgid "female"
-msgstr ""
+msgstr "жен"
 
 #: aleksis/core/models.py:176
 msgid "male"
-msgstr ""
+msgstr "муж"
 
 #: aleksis/core/models.py:184 aleksis/core/models.py:1273
 msgid "Linked user"
-msgstr ""
+msgstr "Связанный пользователь"
 
 #: aleksis/core/models.py:190
 msgid "Additional name(s)"
-msgstr ""
+msgstr "Дополнительные имена"
 
 #: aleksis/core/models.py:194 aleksis/core/models.py:506
 msgid "Short name"
-msgstr ""
+msgstr "Короткое имя"
 
 #: aleksis/core/models.py:197
 msgid "Street"
-msgstr ""
+msgstr "Улица"
 
 #: aleksis/core/models.py:198
 msgid "Street number"
-msgstr ""
+msgstr "Номер дома"
 
 #: aleksis/core/models.py:199
 msgid "Postal code"
-msgstr ""
+msgstr "Почтовый индекс"
 
 #: aleksis/core/models.py:200
 msgid "Place"
-msgstr ""
+msgstr "Город/место"
 
 #: aleksis/core/models.py:202 aleksis/core/templates/core/person/full.html:160
 msgid "Home phone"
-msgstr ""
+msgstr "Домашний телефон"
 
 #: aleksis/core/models.py:203 aleksis/core/templates/core/person/full.html:170
 msgid "Mobile phone"
-msgstr ""
+msgstr "Мобильный телефон"
 
 #: aleksis/core/models.py:207
 msgid "Date of birth"
-msgstr ""
+msgstr "Дата рождения"
 
 #: aleksis/core/models.py:208
 msgid "Place of birth"
-msgstr ""
+msgstr "Место рождения"
 
 #: aleksis/core/models.py:209
 msgid "Sex"
-msgstr ""
+msgstr "Пол"
 
 #: aleksis/core/models.py:216 aleksis/core/models.py:545
-msgid "This is an official photo, used for official documents and for internal use cases."
+msgid ""
+"This is an official photo, used for official documents and for internal use "
+"cases."
 msgstr ""
+"Это официальное фото, которое используется для документов и внутренних нужд."
 
 #: aleksis/core/models.py:221 aleksis/core/models.py:549
 msgid "Display picture / Avatar"
-msgstr ""
+msgstr "Отобразить фото/аватар"
 
 #: aleksis/core/models.py:224 aleksis/core/models.py:552
 msgid "This is a picture or an avatar for public display."
-msgstr ""
+msgstr "Это фото или аватар для общего отображения."
 
 #: aleksis/core/models.py:229 aleksis/core/templates/core/person/full.html:235
 msgid "Guardians / Parents"
-msgstr ""
+msgstr "Опекуны / Родители"
 
 #: aleksis/core/models.py:236
 msgid "Primary group"
-msgstr ""
+msgstr "Основная группа"
 
 #: 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
 msgid "Description"
-msgstr ""
+msgstr "Описание"
 
 #: aleksis/core/models.py:459
 msgid "Title of field"
-msgstr ""
+msgstr "Название поля"
 
-#: aleksis/core/models.py:461
+#: aleksis/core/models.py:461 aleksis/core/models.py:466
 msgid "Type of field"
 msgstr ""
 
 #: aleksis/core/models.py:463
 msgid "Required"
-msgstr ""
+msgstr "Необходимое"
 
 #: aleksis/core/models.py:464
 msgid "Help text / description"
-msgstr ""
+msgstr "Вспомогательный текст / описание"
 
 #: aleksis/core/models.py:470
 msgid "Addtitional field for groups"
-msgstr ""
+msgstr "Дополнительное поле для групп"
 
 #: aleksis/core/models.py:471
 msgid "Addtitional fields for groups"
-msgstr ""
+msgstr "Дополнительные поля для групп"
 
 #: aleksis/core/models.py:491
 msgid "Can assign child groups to groups"
-msgstr ""
+msgstr "Может определять дочерние группы в группы"
 
 #: aleksis/core/models.py:492
 msgid "Can view statistics about group."
-msgstr ""
+msgstr "Может видеть статистику группы."
 
 #: aleksis/core/models.py:504
 msgid "Long name"
-msgstr ""
+msgstr "Длинное имя"
 
 #: aleksis/core/models.py:514 aleksis/core/templates/core/group/full.html:85
 msgid "Members"
-msgstr ""
+msgstr "Участники"
 
 #: aleksis/core/models.py:517 aleksis/core/templates/core/group/full.html:82
 msgid "Owners"
-msgstr ""
+msgstr "Владельцы"
 
 #: aleksis/core/models.py:524 aleksis/core/templates/core/group/full.html:55
 msgid "Parent groups"
-msgstr ""
+msgstr "Родительские группы"
 
 #: aleksis/core/models.py:532
 msgid "Type of group"
-msgstr ""
+msgstr "Тип группы"
 
 #: aleksis/core/models.py:718 aleksis/core/models.py:742
 #: aleksis/core/models.py:833
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
-msgstr ""
+msgstr "Название"
 
 #: aleksis/core/models.py:721
 msgid "Application"
-msgstr ""
+msgstr "Приложение"
 
 #: aleksis/core/models.py:727
 msgid "Activity"
-msgstr ""
+msgstr "Активность"
 
 #: aleksis/core/models.py:728
 msgid "Activities"
-msgstr ""
+msgstr "Активности"
 
 #: aleksis/core/models.py:734
 msgid "Sender"
-msgstr ""
+msgstr "Отправитель"
 
 #: aleksis/core/models.py:739
 msgid "Recipient"
-msgstr ""
+msgstr "Получатель"
 
 #: aleksis/core/models.py:744 aleksis/core/models.py:1071
 msgid "Link"
-msgstr ""
+msgstr "Ссылка"
 
 #: aleksis/core/models.py:746
 msgid "Send notification at"
-msgstr ""
+msgstr "Отправить уведомление в"
 
 #: aleksis/core/models.py:748
 msgid "Read"
-msgstr ""
+msgstr "Читать"
 
 #: aleksis/core/models.py:749
 msgid "Sent"
-msgstr ""
+msgstr "Отправлено"
 
 #: aleksis/core/models.py:766
 msgid "Notification"
-msgstr ""
+msgstr "Уведомление"
 
 #: 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
 msgid "Notifications"
-msgstr ""
+msgstr "Уведомления"
 
 #: aleksis/core/models.py:835
 msgid "Link to detailed view"
-msgstr ""
+msgstr "Ссылка на подробный обзор"
 
 #: aleksis/core/models.py:838
 msgid "Date and time from when to show"
-msgstr ""
+msgstr "Дата и время, с которого показывать"
 
 #: aleksis/core/models.py:841
 msgid "Date and time until when to show"
-msgstr ""
+msgstr "Дата и время, по какое показывать"
 
 #: aleksis/core/models.py:866
 msgid "Announcement"
-msgstr ""
+msgstr "Объявление"
 
 #: aleksis/core/models.py:904
 msgid "Announcement recipient"
-msgstr ""
+msgstr "Получатель объявления"
 
 #: aleksis/core/models.py:905
 msgid "Announcement recipients"
-msgstr ""
+msgstr "Получатели объявления"
 
 #: aleksis/core/models.py:927
 msgid "Widget Title"
-msgstr ""
+msgstr "Название виджета"
 
 #: aleksis/core/models.py:928
 msgid "Activate Widget"
-msgstr ""
+msgstr "Активировать виджет"
 
 #: aleksis/core/models.py:929
 msgid "Widget is broken"
-msgstr ""
+msgstr "Виджет поломался"
 
 #: aleksis/core/models.py:932
 msgid "Size on mobile devices"
-msgstr ""
+msgstr "Размер на мобильных"
 
 #: aleksis/core/models.py:933
 msgid "<= 600 px, 12 columns"
-msgstr ""
+msgstr "<= 600 пикс, 12 столбцов"
 
 #: aleksis/core/models.py:938
 msgid "Size on tablet devices"
-msgstr ""
+msgstr "Размер на планшетах"
 
 #: aleksis/core/models.py:939
 msgid "> 600 px, 12 columns"
-msgstr ""
+msgstr "> 600 пикс, 12 столбцов"
 
 #: aleksis/core/models.py:944
 msgid "Size on desktop devices"
-msgstr ""
+msgstr "Размер на ПК"
 
 #: aleksis/core/models.py:945
 msgid "> 992 px, 12 columns"
-msgstr ""
+msgstr "> 992 пикс, 12 столбцов"
 
 #: aleksis/core/models.py:950
 msgid "Size on large desktop devices"
-msgstr ""
+msgstr "Размер для больших экранов"
 
 #: aleksis/core/models.py:951
 msgid "> 1200 px>, 12 columns"
-msgstr ""
+msgstr "> 1200 пикс, 12 столбцов"
 
 #: aleksis/core/models.py:982
 msgid "Can edit default dashboard"
-msgstr ""
+msgstr "Может редактировать типовую/стандартную информпанель"
 
 #: aleksis/core/models.py:983
 msgid "Dashboard Widget"
-msgstr ""
+msgstr "Виджет информпанели"
 
 #: aleksis/core/models.py:984
 msgid "Dashboard Widgets"
-msgstr ""
+msgstr "Виджеты информпанели"
 
-#: aleksis/core/models.py:990
+#: aleksis/core/models.py:990 aleksis/core/models.py:995
 msgid "URL"
 msgstr ""
 
 #: aleksis/core/models.py:991
 msgid "Icon URL"
-msgstr ""
+msgstr "Иконка URL"
 
 #: aleksis/core/models.py:997
 msgid "External link widget"
-msgstr ""
+msgstr "Внешняя ссылка на виджет"
 
 #: aleksis/core/models.py:998
 msgid "External link widgets"
-msgstr ""
+msgstr "Внешние ссылки на виджеты"
 
 #: aleksis/core/models.py:1004
 msgid "Content"
-msgstr ""
+msgstr "Содержимое"
 
 #: aleksis/core/models.py:1010
 msgid "Static content widget"
-msgstr ""
+msgstr "Виджет с постоянным содержимым"
 
 #: aleksis/core/models.py:1011
 msgid "Static content widgets"
-msgstr ""
+msgstr "Виджеты с постоянным содержимым"
 
 #: aleksis/core/models.py:1016
 msgid "Dashboard widget"
-msgstr ""
+msgstr "Виджет информпанели"
 
 #: aleksis/core/models.py:1021
 msgid "Order"
-msgstr ""
+msgstr "Порядок"
 
 #: aleksis/core/models.py:1022
 msgid "Part of the default dashboard"
-msgstr ""
+msgstr "Часть типовой информпанели"
 
 #: aleksis/core/models.py:1037
 msgid "Dashboard widget order"
-msgstr ""
+msgstr "Порядок виджета на информпанели"
 
 #: aleksis/core/models.py:1038
 msgid "Dashboard widget orders"
-msgstr ""
+msgstr "Порядок виджетов на информпанели"
 
-#: aleksis/core/models.py:1044
+#: aleksis/core/models.py:1044 aleksis/core/models.py:1049
 msgid "Menu ID"
 msgstr ""
 
 #: aleksis/core/models.py:1057
 msgid "Custom menu"
-msgstr ""
+msgstr "Пользовательское меню"
 
 #: aleksis/core/models.py:1058
 msgid "Custom menus"
-msgstr ""
+msgstr "Пользовательские меню"
 
 #: aleksis/core/models.py:1068
 msgid "Menu"
-msgstr ""
+msgstr "Меню"
 
 #: aleksis/core/models.py:1072 aleksis/core/models.py:1320
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
-msgstr ""
+msgstr "Иконка"
 
 #: aleksis/core/models.py:1078
 msgid "Custom menu item"
-msgstr ""
+msgstr "Пункт пользовательского меню"
 
 #: aleksis/core/models.py:1079
 msgid "Custom menu items"
-msgstr ""
+msgstr "Пункты пользовательского меню"
 
 #: aleksis/core/models.py:1093
 msgid "Title of type"
-msgstr ""
+msgstr "Название типа"
 
 #: aleksis/core/models.py:1100 aleksis/core/templates/core/group/full.html:47
 msgid "Group type"
-msgstr ""
+msgstr "Тип группы"
 
 #: aleksis/core/models.py:1114
 msgid "Can view system status"
-msgstr ""
+msgstr "Может просматривать состояние системы"
 
 #: aleksis/core/models.py:1115
 msgid "Can manage data"
-msgstr ""
+msgstr "Может управлять данными"
 
 #: aleksis/core/models.py:1116
 msgid "Can impersonate"
-msgstr ""
+msgstr "Может маскироваться"
 
 #: aleksis/core/models.py:1117
 msgid "Can use search"
-msgstr ""
+msgstr "Может использовать поиск"
 
 #: aleksis/core/models.py:1118
 msgid "Can change site preferences"
-msgstr ""
+msgstr "Может менять свойства сайта"
 
 #: aleksis/core/models.py:1119
 msgid "Can change person preferences"
-msgstr ""
+msgstr "Может менять персональные свойства"
 
 #: aleksis/core/models.py:1120
 msgid "Can change group preferences"
-msgstr ""
+msgstr "Может менять свойства группы"
 
 #: aleksis/core/models.py:1121
 msgid "Can test PDF generation"
-msgstr ""
+msgstr "Может генерировать тестовые PDF"
 
 #: aleksis/core/models.py:1122
 msgid "Can invite persons"
-msgstr ""
+msgstr "Может приглашать других"
 
-#: aleksis/core/models.py:1158
+#: aleksis/core/models.py:1158 aleksis/core/models.py:1168
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1166
+#: aleksis/core/models.py:1166 aleksis/core/models.py:1176
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1167
+#: aleksis/core/models.py:1167 aleksis/core/models.py:1177
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1180
+#: aleksis/core/models.py:1180 aleksis/core/models.py:1190
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1181
+#: aleksis/core/models.py:1181 aleksis/core/models.py:1191
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1183
+#: aleksis/core/models.py:1183 aleksis/core/models.py:1193
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1184
+#: aleksis/core/models.py:1184 aleksis/core/models.py:1194
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1191
+#: aleksis/core/models.py:1191 aleksis/core/models.py:1201
 msgid "E-Mail address"
 msgstr ""
 
-#: aleksis/core/models.py:1223
+#: aleksis/core/models.py:1223 aleksis/core/models.py:1233
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1227
+#: aleksis/core/models.py:1227 aleksis/core/models.py:1237
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1229
+#: aleksis/core/models.py:1229 aleksis/core/models.py:1239
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1231
+#: aleksis/core/models.py:1231 aleksis/core/models.py:1241
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1238
+#: aleksis/core/models.py:1238 aleksis/core/models.py:1248
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1239
+#: aleksis/core/models.py:1239 aleksis/core/models.py:1249
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1244
+#: aleksis/core/models.py:1244 aleksis/core/models.py:1254
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1247
+#: aleksis/core/models.py:1247 aleksis/core/models.py:1257
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1259
+#: aleksis/core/models.py:1259 aleksis/core/models.py:1269
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1260
+#: aleksis/core/models.py:1260 aleksis/core/models.py:1270
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1276
+#: aleksis/core/models.py:1276 aleksis/core/models.py:1286
 msgid "Additional attributes"
 msgstr ""
 
-#: aleksis/core/models.py:1314
+#: aleksis/core/models.py:1314 aleksis/core/models.py:1324
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1324
-msgid "This image will be shown as icon in the authorization flow. It should be squared."
+#: aleksis/core/models.py:1324 aleksis/core/models.py:1334
+msgid ""
+"This image will be shown as icon in the authorization flow. It should be "
+"squared."
 msgstr ""
 
-#: aleksis/core/models.py:1373
+#: aleksis/core/models.py:1373 aleksis/core/models.py:1383
 msgid "UUID"
 msgstr ""
 
-#: aleksis/core/models.py:1377
+#: aleksis/core/models.py:1377 aleksis/core/models.py:1387
 msgid "Selected ICal feed"
 msgstr ""
 
-#: aleksis/core/models.py:1386
+#: aleksis/core/models.py:1386 aleksis/core/models.py:1396
 msgid "Personal Calendar URL"
 msgstr ""
 
-#: aleksis/core/models.py:1387
+#: aleksis/core/models.py:1387 aleksis/core/models.py:1397
 msgid "Personal Calendar URLs"
 msgstr ""
 
 #: aleksis/core/preferences.py:25
 msgid "General"
-msgstr ""
+msgstr "Общее"
 
 #: aleksis/core/preferences.py:26
 msgid "School"
@@ -1138,7 +1146,8 @@ msgid "Automatically create new persons for new users"
 msgstr ""
 
 #: aleksis/core/preferences.py:241
-msgid "Automatically link existing persons to new users by their e-mail address"
+msgid ""
+"Automatically link existing persons to new users by their e-mail address"
 msgstr ""
 
 #: aleksis/core/preferences.py:252
@@ -1185,67 +1194,68 @@ msgstr ""
 msgid "Available languages"
 msgstr ""
 
-#: aleksis/core/preferences.py:357
+#: aleksis/core/preferences.py:357 aleksis/core/preferences.py:343
 msgid "Send emails if data checks detect problems"
 msgstr ""
 
-#: aleksis/core/preferences.py:368
+#: aleksis/core/preferences.py:368 aleksis/core/preferences.py:354
 msgid "Email recipients for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:379
+#: aleksis/core/preferences.py:379 aleksis/core/preferences.py:365
 msgid "Email recipient groups for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:388
+#: aleksis/core/preferences.py:388 aleksis/core/preferences.py:374
 msgid "Show dashboard to users without login"
 msgstr ""
 
-#: aleksis/core/preferences.py:397
+#: aleksis/core/preferences.py:397 aleksis/core/preferences.py:383
 msgid "Allow users to edit their dashboard"
 msgstr ""
 
-#: aleksis/core/preferences.py:408
+#: aleksis/core/preferences.py:408 aleksis/core/preferences.py:394
 msgid "Fields on person model which are editable by themselves."
 msgstr ""
 
-#: aleksis/core/preferences.py:423
-msgid "Editable fields on person model which should trigger a notification on change"
+#: aleksis/core/preferences.py:423 aleksis/core/preferences.py:409
+msgid ""
+"Editable fields on person model which should trigger a notification on change"
 msgstr ""
 
-#: aleksis/core/preferences.py:437
+#: aleksis/core/preferences.py:437 aleksis/core/preferences.py:423
 msgid "Contact for notification if a person changes their data"
 msgstr ""
 
-#: aleksis/core/preferences.py:448
+#: aleksis/core/preferences.py:448 aleksis/core/preferences.py:434
 msgid "Prefer personal photos over avatars"
 msgstr ""
 
-#: aleksis/core/preferences.py:458
+#: aleksis/core/preferences.py:458 aleksis/core/preferences.py:444
 msgid "PDF file expiration duration"
 msgstr ""
 
-#: aleksis/core/preferences.py:459
+#: aleksis/core/preferences.py:459 aleksis/core/preferences.py:445
 msgid "in minutes"
 msgstr ""
 
-#: aleksis/core/preferences.py:469
+#: aleksis/core/preferences.py:469 aleksis/core/preferences.py:455
 msgid "Automatically update the dashboard and its widgets"
 msgstr ""
 
-#: aleksis/core/preferences.py:479
+#: aleksis/core/preferences.py:479 aleksis/core/preferences.py:465
 msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
-#: aleksis/core/preferences.py:489
+#: aleksis/core/preferences.py:489 aleksis/core/preferences.py:475
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:540
+#: aleksis/core/settings.py:540 aleksis/core/settings.py:541
 msgid "English"
 msgstr ""
 
-#: aleksis/core/settings.py:541
+#: aleksis/core/settings.py:541 aleksis/core/settings.py:542
 msgid "German"
 msgstr ""
 
@@ -1256,13 +1266,13 @@ msgstr ""
 #: aleksis/core/templates/core/person/full.html:86
 #: aleksis/core/templates/oauth2_provider/application/detail.html:17
 msgid "Edit"
-msgstr ""
+msgstr "Редактировать"
 
 #: aleksis/core/tables.py:26 aleksis/core/tables.py:94
 #: aleksis/core/tables.py:138
 #: aleksis/core/templates/core/announcement/list.html:22
 msgid "Actions"
-msgstr ""
+msgstr "Действия"
 
 #: aleksis/core/tables.py:61 aleksis/core/tables.py:62
 #: aleksis/core/tables.py:76 aleksis/core/tables.py:92
@@ -1274,7 +1284,7 @@ msgstr ""
 #: aleksis/core/templates/core/person/full.html:93
 #: aleksis/core/templates/oauth2_provider/application/detail.html:21
 msgid "Delete"
-msgstr ""
+msgstr "Удалить"
 
 #: aleksis/core/templates/403.html:14 aleksis/core/templates/500.html:10
 #: aleksis/core/templates/oauth2_provider/authorize.html:54
@@ -1291,7 +1301,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 ""
@@ -1313,7 +1324,8 @@ 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 ""
@@ -1331,7 +1343,8 @@ 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 ""
 
@@ -1369,12 +1382,16 @@ 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."
+msgid ""
+"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an e-mail "
+"address for user %(user_display)s."
 msgstr ""
 
 #: 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>."
+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 ""
 
 #: aleksis/core/templates/account/password_change.html:12
@@ -1398,7 +1415,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 ""
 
@@ -1413,7 +1431,9 @@ 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."
+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
@@ -1443,7 +1463,8 @@ 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 ""
@@ -1487,7 +1508,8 @@ 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>."
+msgid ""
+"Already have an account? Then please <a href=\"%(login_url)s\">sign in</a>."
 msgstr ""
 
 #: aleksis/core/templates/account/signup_closed.html:5
@@ -1523,8 +1545,10 @@ 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 ""
 
@@ -1561,7 +1585,7 @@ msgid "Publish new announcement"
 msgstr ""
 
 #: aleksis/core/templates/core/announcement/form.html:34
-msgid "Save und publish announcement"
+msgid "Save and publish announcement"
 msgstr ""
 
 #: aleksis/core/templates/core/announcement/list.html:19
@@ -1628,7 +1652,7 @@ msgstr ""
 #: aleksis/core/templates/core/dashboard_widget/list.html:22
 #, python-format
 msgid "Create %(name)s"
-msgstr ""
+msgstr "Создать %(name)s"
 
 #: aleksis/core/templates/core/dashboard_widget/list.html:32
 #: aleksis/core/templates/core/edit_dashboard.html:8
@@ -1702,8 +1726,10 @@ 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 ""
@@ -1711,9 +1737,12 @@ msgstr ""
 #: 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 ""
 
@@ -1732,7 +1761,8 @@ 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 ""
@@ -1743,7 +1773,7 @@ msgstr ""
 
 #: aleksis/core/templates/core/group/child_groups.html:35
 msgid "Clear all filters"
-msgstr ""
+msgstr "Очистить фильтры"
 
 #: aleksis/core/templates/core/group/child_groups.html:39
 msgid "Currently selected groups"
@@ -1771,8 +1801,10 @@ 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 ""
@@ -1783,19 +1815,19 @@ msgstr ""
 #: aleksis/core/templates/two_factor/_wizard_actions.html:15
 #: aleksis/core/templates/two_factor/_wizard_actions.html:20
 msgid "Back"
-msgstr ""
+msgstr "Назад"
 
 #: aleksis/core/templates/core/group/child_groups.html:99
 #: aleksis/core/templates/core/group/child_groups.html:134
 #: aleksis/core/templates/two_factor/_wizard_actions.html:26
 msgid "Next"
-msgstr ""
+msgstr "Следующий"
 
 #: aleksis/core/templates/core/group/child_groups.html:106
 #: aleksis/core/templates/core/group/child_groups.html:141
 #: aleksis/core/templates/core/partials/save_button.html:3
 msgid "Save"
-msgstr ""
+msgstr "Сохранить"
 
 #: aleksis/core/templates/core/group/child_groups.html:112
 #: aleksis/core/templates/core/group/child_groups.html:147
@@ -1810,22 +1842,26 @@ msgstr ""
 #: 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 ""
 
 #: aleksis/core/templates/core/group/full.html:64
 msgid "Statistics"
-msgstr ""
+msgstr "Статистика"
 
 #: aleksis/core/templates/core/group/full.html:67
+#: aleksis/core/templates/core/group/full.html:73
 msgid "Count of members"
 msgstr ""
 
 #: aleksis/core/templates/core/group/full.html:71
+#: aleksis/core/templates/core/group/full.html:81
 msgid "Average age"
 msgstr ""
 
 #: aleksis/core/templates/core/group/full.html:76
+#: aleksis/core/templates/core/group/full.html:90
 msgid "Age range"
 msgstr ""
 
@@ -1848,7 +1884,7 @@ msgstr ""
 #: aleksis/core/templates/core/group/list.html:24
 #: aleksis/core/templates/core/person/list.html:28
 msgid "Clear"
-msgstr ""
+msgstr "Очистить"
 
 #: aleksis/core/templates/core/group/list.html:28
 msgid "Selected groups"
@@ -1876,7 +1912,7 @@ msgstr ""
 #: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:24
 #: aleksis/core/templates/two_factor/_wizard_actions.html:6
 msgid "Cancel"
-msgstr ""
+msgstr "Отменить"
 
 #: aleksis/core/templates/core/ical/ical_edit.html:4
 #: aleksis/core/templates/core/ical/ical_edit.html:5
@@ -1890,7 +1926,9 @@ msgid "ICal Feeds"
 msgstr ""
 
 #: 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."
+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 ""
 
 #: aleksis/core/templates/core/ical/ical_list.html:14
@@ -1904,7 +1942,8 @@ msgstr ""
 #: aleksis/core/templates/core/index.html:49
 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 ""
@@ -1946,8 +1985,10 @@ msgstr ""
 #: 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"
+"              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 ""
@@ -1955,7 +1996,8 @@ msgstr ""
 #: 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"
+"              AlekSIS® is a registered trademark of the AlekSIS open source "
+"project, represented by Teckids e.V.\n"
 "            "
 msgstr ""
 
@@ -1974,8 +2016,10 @@ msgstr ""
 #: 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"
+"              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 ""
@@ -2020,7 +2064,8 @@ msgstr ""
 #: aleksis/core/templates/core/pages/progress.html:27
 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 ""
 
@@ -2040,7 +2085,8 @@ msgstr ""
 #: 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 "
+"thesite.\n"
 "              "
 msgstr ""
 
@@ -2059,7 +2105,8 @@ 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 ""
 
@@ -2070,7 +2117,8 @@ 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 ""
 
@@ -2121,7 +2169,8 @@ msgstr ""
 #: 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 ""
 
@@ -2171,17 +2220,20 @@ msgid "Unknown"
 msgstr ""
 
 #: aleksis/core/templates/core/partials/language_form.html:15
+#: aleksis/core/templates/core/partials/language_form.html:17
 msgid "Language"
 msgstr ""
 
 #: aleksis/core/templates/core/partials/language_form.html:27
+#: aleksis/core/templates/core/partials/language_form.html:29
 msgid "Select language"
 msgstr ""
 
 #: aleksis/core/templates/core/partials/no_person.html:12
 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 ""
@@ -2206,7 +2258,7 @@ msgstr ""
 
 #: aleksis/core/templates/core/perms/assign.html:26
 msgid "Assign"
-msgstr ""
+msgstr "Назначить"
 
 #: aleksis/core/templates/core/perms/list.html:21
 msgid "Assign a new permission"
@@ -2214,7 +2266,7 @@ msgstr ""
 
 #: aleksis/core/templates/core/perms/list.html:25
 msgid "Select"
-msgstr ""
+msgstr "Отметить"
 
 #: aleksis/core/templates/core/perms/list.html:34
 msgid "Global (user)"
@@ -2263,7 +2315,7 @@ msgstr ""
 
 #: aleksis/core/templates/core/person/full.html:121
 msgid "Contact details"
-msgstr ""
+msgstr "Контактные данные"
 
 #: aleksis/core/templates/core/person/full.html:220
 msgid "This person didn't upload a personal photo."
@@ -2318,7 +2370,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
@@ -2474,8 +2528,10 @@ msgstr ""
 #: 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"
+"      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 ""
@@ -2512,7 +2568,8 @@ 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 ""
@@ -2558,7 +2615,9 @@ 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 ""
 
@@ -2642,14 +2701,16 @@ 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 ""
 
 #: 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 ""
 
@@ -2730,8 +2791,10 @@ 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 ""
@@ -2781,7 +2844,8 @@ 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 ""
@@ -2789,7 +2853,8 @@ 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 ""
@@ -2805,9 +2870,12 @@ 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 ""
 
@@ -2838,7 +2906,8 @@ 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 ""
 
@@ -2887,7 +2956,8 @@ msgstr ""
 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 ""
@@ -2911,7 +2981,8 @@ 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 ""
 
@@ -2925,9 +2996,12 @@ msgstr ""
 #: 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 ""
@@ -2949,7 +3023,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 ""
 
@@ -2967,7 +3042,8 @@ 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 ""
@@ -2985,7 +3061,9 @@ 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?"
+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
@@ -3092,47 +3170,48 @@ msgstr ""
 msgid "Download PDF"
 msgstr ""
 
-#: aleksis/core/views.py:292
+#: aleksis/core/views.py:292 aleksis/core/views.py:294
 msgid "The school term has been created."
 msgstr ""
 
-#: aleksis/core/views.py:304
+#: aleksis/core/views.py:304 aleksis/core/views.py:306
 msgid "The school term has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:424
+#: aleksis/core/views.py:424 aleksis/core/views.py:426
 msgid "The child groups were successfully saved."
 msgstr ""
 
 #: aleksis/core/views.py:443 aleksis/core/views.py:453
+#: aleksis/core/views.py:445 aleksis/core/views.py:455
 msgid "The person has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:503
+#: aleksis/core/views.py:503 aleksis/core/views.py:505
 msgid "The group has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:600
+#: aleksis/core/views.py:600 aleksis/core/views.py:602
 msgid "The announcement has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:616
+#: aleksis/core/views.py:616 aleksis/core/views.py:618
 msgid "The announcement has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:684
+#: aleksis/core/views.py:684 aleksis/core/views.py:686
 msgid "The requested preference registry does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:703
+#: aleksis/core/views.py:703 aleksis/core/views.py:705
 msgid "The preferences have been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:727
+#: aleksis/core/views.py:727 aleksis/core/views.py:729
 msgid "The person has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:741
+#: aleksis/core/views.py:741 aleksis/core/views.py:743
 msgid "The group has been deleted."
 msgstr ""
 
@@ -3140,109 +3219,114 @@ msgstr ""
 msgid "The additional_field has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:807
+#: aleksis/core/views.py:807 aleksis/core/views.py:809
 msgid "The additional field has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:832
+#: aleksis/core/views.py:832 aleksis/core/views.py:834
 msgid "The group type has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:862
+#: aleksis/core/views.py:862 aleksis/core/views.py:864
 msgid "The group type has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:895
+#: aleksis/core/views.py:895 aleksis/core/views.py:897
 msgid "Progress: Run data checks"
 msgstr ""
 
-#: aleksis/core/views.py:896
+#: aleksis/core/views.py:896 aleksis/core/views.py:898
 msgid "Run data checks …"
 msgstr ""
 
-#: aleksis/core/views.py:897
+#: aleksis/core/views.py:897 aleksis/core/views.py:899
 msgid "The data checks were run successfully."
 msgstr ""
 
-#: aleksis/core/views.py:898
+#: aleksis/core/views.py:898 aleksis/core/views.py:900
 msgid "There was a problem while running data checks."
 msgstr ""
 
-#: aleksis/core/views.py:914
+#: aleksis/core/views.py:914 aleksis/core/views.py:916
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/views.py:924
+#: aleksis/core/views.py:924 aleksis/core/views.py:926
 msgid "The requested solve option does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:956
+#: aleksis/core/views.py:956 aleksis/core/views.py:958
 msgid "The dashboard widget has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:986
+#: aleksis/core/views.py:986 aleksis/core/views.py:988
 msgid "The dashboard widget has been created."
 msgstr ""
 
-#: aleksis/core/views.py:996
+#: aleksis/core/views.py:996 aleksis/core/views.py:998
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1067
+#: aleksis/core/views.py:1067 aleksis/core/views.py:1069
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1069
+#: aleksis/core/views.py:1069 aleksis/core/views.py:1071
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1145
+#: aleksis/core/views.py:1145 aleksis/core/views.py:1147
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1236
+#: aleksis/core/views.py:1236 aleksis/core/views.py:1238
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1246
+#: aleksis/core/views.py:1246 aleksis/core/views.py:1248
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1256
+#: aleksis/core/views.py:1256 aleksis/core/views.py:1258
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1266
+#: aleksis/core/views.py:1266 aleksis/core/views.py:1268
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1276
+#: aleksis/core/views.py:1276 aleksis/core/views.py:1278
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1344
+#: aleksis/core/views.py:1344 aleksis/core/views.py:1346
 msgid "The requested PDF file does not exist"
 msgstr ""
 
 #: 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 ""
 
-#: aleksis/core/views.py:1409
-msgid "The third-party account could not be disconnected because it is the only login method available."
+#: aleksis/core/views.py:1409 aleksis/core/views.py:1411
+msgid ""
+"The third-party account could not be disconnected because it is the only "
+"login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1416
+#: aleksis/core/views.py:1416 aleksis/core/views.py:1418
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1487
-msgid "Person was invited successfully and an email with further instructions has been send to them."
+#: aleksis/core/views.py:1487 aleksis/core/views.py:1489
+msgid ""
+"Person was invited successfully and an email with further instructions has "
+"been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1498
+#: aleksis/core/views.py:1498 aleksis/core/views.py:1500
 msgid "Person was already invited."
 msgstr ""
 
@@ -3257,3 +3341,56 @@ msgstr ""
 #: aleksis/core/views.py:1616
 msgid "ICal feed created successfully"
 msgstr ""
+
+#: aleksis/core/data_checks.py:330
+#, python-format
+msgid "Validate field %s of model %s."
+msgstr ""
+
+#: aleksis/core/data_checks.py:332
+#, python-format
+msgid "The field %s couldn't be validated successfully."
+msgstr ""
+
+#: aleksis/core/models.py:181
+msgid "other"
+msgstr ""
+
+#: aleksis/core/settings.py:543
+msgid "Ukrainian"
+msgstr ""
+
+#: aleksis/core/templates/500.html:10
+msgid ""
+"An unexpected error has\n"
+"          occurred."
+msgstr ""
+
+#: aleksis/core/templates/core/group/full.html:93
+#, python-format
+msgid ""
+"\n"
+"              %(min)s years to %(max)s years\n"
+"            "
+msgstr ""
+
+#: aleksis/core/templates/core/ical/ical_list.html:4
+#: aleksis/core/templates/core/ical/ical_list.html:5
+msgid "iCal Feeds"
+msgstr ""
+
+#: aleksis/core/views.py:775
+msgid "The additional field has been saved."
+msgstr ""
+
+#: aleksis/core/views.py:1600
+msgid "iCal feed updated successfully"
+msgstr ""
+
+#: aleksis/core/views.py:1610
+msgid "iCal feed deleted successfully"
+msgstr ""
+
+#: aleksis/core/views.py:1618
+msgid "iCal feed created successfully"
+msgstr ""
diff --git a/aleksis/core/locale/ru/LC_MESSAGES/djangojs.po b/aleksis/core/locale/ru/LC_MESSAGES/djangojs.po
index d6da3e02221f450be360e4dfc522f83e32df5a60..1fa3254633c1db138c12b13fcf7f674c2a4499b2 100644
--- a/aleksis/core/locale/ru/LC_MESSAGES/djangojs.po
+++ b/aleksis/core/locale/ru/LC_MESSAGES/djangojs.po
@@ -3,34 +3,33 @@
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
-#, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-04-23 12:58+0000\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"
-"Language: \n"
+"POT-Creation-Date: 2022-06-25 12:09+0200\n"
+"PO-Revision-Date: 2022-06-03 01:59+0000\n"
+"Last-Translator: Serhii Horichenko <m@sgg.im>\n"
+"Language-Team: Russian <https://translate.edugit.org/projects/aleksis/aleksis-core-js/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/static/js/main.js:66
 msgid "Today"
-msgstr ""
+msgstr "Сегодня"
 
 #: aleksis/core/static/js/main.js:67
 msgid "Cancel"
-msgstr ""
+msgstr "Отменить"
 
 #: aleksis/core/static/js/main.js:68
 msgid "OK"
-msgstr ""
+msgstr "OK"
 
 #: aleksis/core/static/js/main.js:195
 msgid "This page may contain outdated information since there is no internet connection."
-msgstr ""
+msgstr "Из-за отсутствия интернета эта страница можеть отображать устаревшую информацию."
diff --git a/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po b/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po
index d5a2d5f0647e2460b313fb20d6cca3d9059a3d8b..c6ea389cc19f7b8da9cd26512cca741c38b41311 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: 2022-03-23 11:19+0100\n"
+"POT-Creation-Date: 2022-06-25 12:09+0200\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"
@@ -37,34 +37,62 @@ msgstr ""
 msgid "Home and mobile phone"
 msgstr ""
 
-#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:185
-#: aleksis/core/models.py:487 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:171
+#: 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
 msgid "Groups"
 msgstr ""
 
-#: aleksis/core/data_checks.py:56
+#: aleksis/core/data_checks.py:59
 msgid "Ignore problem"
 msgstr ""
 
-#: aleksis/core/data_checks.py:185
+#: aleksis/core/data_checks.py:188
 #, python-brace-format
 msgid "Solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/data_checks.py:291
+#: aleksis/core/data_checks.py:294
 msgid "Deactivate DashboardWidget"
 msgstr ""
 
-#: aleksis/core/data_checks.py:303
+#: aleksis/core/data_checks.py:306
 msgid "Ensure that there are no broken DashboardWidgets."
 msgstr ""
 
-#: aleksis/core/data_checks.py:304
+#: aleksis/core/data_checks.py:307
 msgid "The DashboardWidget was reported broken automatically."
 msgstr ""
 
+#: aleksis/core/data_checks.py:330
+#, python-format
+msgid "Validate field %s of model %s."
+msgstr ""
+
+#: aleksis/core/data_checks.py:332
+#, python-format
+msgid "The field %s couldn't be validated successfully."
+msgstr ""
+
+#: aleksis/core/feeds.py:52
+msgid "Birthday Calendar"
+msgstr ""
+
+#: aleksis/core/feeds.py:53
+msgid "A Calendar of Birthdays"
+msgstr ""
+
+#: aleksis/core/feeds.py:66
+#, python-format
+msgid "%(name)s's birthday"
+msgstr ""
+
+#: aleksis/core/feeds.py:71
+#, python-format
+msgid "%(name)s was born on %(birthday)s"
+msgstr ""
+
 #: 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
@@ -90,11 +118,11 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:713
+#: aleksis/core/filters.py:113 aleksis/core/models.py:720
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:486
+#: aleksis/core/filters.py:135 aleksis/core/models.py:493
 msgid "Group"
 msgstr ""
 
@@ -102,7 +130,7 @@ msgstr ""
 msgid "Base data"
 msgstr ""
 
-#: aleksis/core/forms.py:55
+#: aleksis/core/forms.py:55 aleksis/core/tables.py:47
 msgid "Address"
 msgstr ""
 
@@ -130,7 +158,7 @@ msgstr ""
 msgid "This username is already in use."
 msgstr ""
 
-#: aleksis/core/forms.py:153 aleksis/core/models.py:134
+#: aleksis/core/forms.py:153 aleksis/core/models.py:141
 msgid "School term"
 msgstr ""
 
@@ -139,7 +167,7 @@ msgid "Common data"
 msgstr ""
 
 #: aleksis/core/forms.py:155 aleksis/core/forms.py:207
-#: aleksis/core/menus.py:174 aleksis/core/models.py:157
+#: aleksis/core/menus.py:160 aleksis/core/models.py:164
 #: aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
@@ -149,18 +177,18 @@ msgstr ""
 msgid "Additional data"
 msgstr ""
 
-#: aleksis/core/forms.py:157 aleksis/core/models.py:210
-#: aleksis/core/models.py:539
+#: aleksis/core/forms.py:157 aleksis/core/models.py:217
+#: aleksis/core/models.py:546 aleksis/core/tables.py:46
 msgid "Photo"
 msgstr ""
 
 #: aleksis/core/forms.py:199 aleksis/core/forms.py:202
-#: aleksis/core/models.py:77
+#: aleksis/core/models.py:84
 msgid "Date"
 msgstr ""
 
 #: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:85
+#: aleksis/core/models.py:92
 msgid "Time"
 msgstr ""
 
@@ -196,11 +224,11 @@ msgstr ""
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:418 aleksis/core/models.py:185
+#: aleksis/core/forms.py:418 aleksis/core/models.py:192
 msgid "First name"
 msgstr ""
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:186
+#: aleksis/core/forms.py:419 aleksis/core/models.py:193
 msgid "Last name"
 msgstr ""
 
@@ -233,7 +261,7 @@ msgid "You must grant the permission to all objects and/or to some objects."
 msgstr ""
 
 #: aleksis/core/forms.py:586
-msgid "Adress data"
+msgid "Address data"
 msgstr ""
 
 #: aleksis/core/forms.py:598
@@ -280,138 +308,131 @@ msgstr ""
 msgid "No backup result found!"
 msgstr ""
 
-#: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6
+#: 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 ""
 
-#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:22
+#: aleksis/core/menus.py:13 aleksis/core/templates/account/signup.html:22
 #: aleksis/core/templates/socialaccount/signup.html:23
 msgid "Sign up"
 msgstr ""
 
-#: aleksis/core/menus.py:24 aleksis/core/templates/invitations/enter.html:7
+#: aleksis/core/menus.py:22 aleksis/core/templates/invitations/enter.html:7
 msgid "Accept invitation"
 msgstr ""
 
-#: aleksis/core/menus.py:33
+#: aleksis/core/menus.py:31
 msgid "Dashboard"
 msgstr ""
 
-#: aleksis/core/menus.py:41 aleksis/core/models.py:765
-#: 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
-msgid "Notifications"
-msgstr ""
-
-#: aleksis/core/menus.py:53
+#: aleksis/core/menus.py:39
 msgid "Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:61 aleksis/core/models.py:865
+#: aleksis/core/menus.py:47 aleksis/core/models.py:872
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
 msgstr ""
 
-#: aleksis/core/menus.py:72 aleksis/core/models.py:135
+#: aleksis/core/menus.py:58 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 ""
 
-#: aleksis/core/menus.py:83
+#: 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 ""
 
-#: aleksis/core/menus.py:94
+#: 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 ""
 
-#: aleksis/core/menus.py:105
+#: 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 ""
 
-#: aleksis/core/menus.py:116
+#: aleksis/core/menus.py:102
 msgid "Configuration"
 msgstr ""
 
-#: aleksis/core/menus.py:127 aleksis/core/templates/core/data_check/list.html:9
+#: 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 ""
 
-#: aleksis/core/menus.py:133 aleksis/core/templates/core/perms/list.html:13
+#: 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 ""
 
-#: aleksis/core/menus.py:144
+#: aleksis/core/menus.py:130
 msgid "Backend Admin"
 msgstr ""
 
-#: aleksis/core/menus.py:152
+#: 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 ""
 
-#: aleksis/core/menus.py:165
+#: aleksis/core/menus.py:151
 msgid "People"
 msgstr ""
 
-#: aleksis/core/menus.py:196 aleksis/core/models.py:1099
+#: aleksis/core/menus.py:182 aleksis/core/models.py:1111
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
 msgstr ""
 
-#: aleksis/core/menus.py:207
+#: aleksis/core/menus.py:193
 msgid "Groups and child groups"
 msgstr ""
 
-#: aleksis/core/menus.py:218 aleksis/core/models.py:535
+#: aleksis/core/menus.py:204 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 ""
 
-#: aleksis/core/menus.py:229
+#: aleksis/core/menus.py:215
 msgid "Invite person"
 msgstr ""
 
-#: aleksis/core/menus.py:242
+#: 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 ""
 
-#: aleksis/core/menus.py:254
+#: aleksis/core/menus.py:240
 msgid "Stop impersonation"
 msgstr ""
 
-#: aleksis/core/menus.py:263
+#: aleksis/core/menus.py:249
 msgid "Account"
 msgstr ""
 
-#: aleksis/core/menus.py:272
+#: aleksis/core/menus.py:258
 #: aleksis/core/templates/dynamic_preferences/form.html:5
 msgid "Preferences"
 msgstr ""
 
-#: aleksis/core/menus.py:281
+#: aleksis/core/menus.py:267
 msgid "2FA"
 msgstr ""
 
-#: aleksis/core/menus.py:289
+#: 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
@@ -423,17 +444,21 @@ msgstr ""
 msgid "Change password"
 msgstr ""
 
-#: aleksis/core/menus.py:301
+#: aleksis/core/menus.py:287
 msgid "Third-party accounts"
 msgstr ""
 
-#: aleksis/core/menus.py:310
+#: 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 ""
 
-#: aleksis/core/menus.py:320
+#: aleksis/core/menus.py:305
+msgid "Calendar Feeds"
+msgstr ""
+
+#: aleksis/core/menus.py:318
 msgid "Logout"
 msgstr ""
 
@@ -441,559 +466,588 @@ msgstr ""
 msgid "Linked school term"
 msgstr ""
 
-#: aleksis/core/models.py:75
+#: aleksis/core/models.py:82
 msgid "Boolean (Yes/No)"
 msgstr ""
 
-#: aleksis/core/models.py:76
+#: aleksis/core/models.py:83
 msgid "Text (one line)"
 msgstr ""
 
-#: aleksis/core/models.py:78
+#: aleksis/core/models.py:85
 msgid "Date and time"
 msgstr ""
 
-#: aleksis/core/models.py:79
+#: aleksis/core/models.py:86
 msgid "Decimal number"
 msgstr ""
 
-#: aleksis/core/models.py:80 aleksis/core/models.py:203
+#: aleksis/core/models.py:87 aleksis/core/models.py:210
 msgid "E-mail address"
 msgstr ""
 
-#: aleksis/core/models.py:81
+#: aleksis/core/models.py:88
 msgid "Integer"
 msgstr ""
 
-#: aleksis/core/models.py:82
+#: aleksis/core/models.py:89
 msgid "IP address"
 msgstr ""
 
-#: aleksis/core/models.py:83
+#: aleksis/core/models.py:90
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr ""
 
-#: aleksis/core/models.py:84
+#: aleksis/core/models.py:91
 msgid "Text (multi-line)"
 msgstr ""
 
-#: aleksis/core/models.py:86
+#: aleksis/core/models.py:93
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:98 aleksis/core/models.py:1068
+#: aleksis/core/models.py:105 aleksis/core/models.py:1077
+#: aleksis/core/models.py:1384
 msgid "Name"
 msgstr ""
 
-#: aleksis/core/models.py:100
+#: aleksis/core/models.py:107
 msgid "Start date"
 msgstr ""
 
-#: aleksis/core/models.py:101
+#: aleksis/core/models.py:108
 msgid "End date"
 msgstr ""
 
-#: aleksis/core/models.py:120
+#: aleksis/core/models.py:127
 msgid "The start date must be earlier than the end date."
 msgstr ""
 
-#: aleksis/core/models.py:127
+#: aleksis/core/models.py:134
 msgid "There is already a school term for this time or a part of this time."
 msgstr ""
 
-#: aleksis/core/models.py:156 aleksis/core/models.py:1017
+#: aleksis/core/models.py:163 aleksis/core/models.py:1024
+#: aleksis/core/models.py:1381
 msgid "Person"
 msgstr ""
 
-#: aleksis/core/models.py:159
+#: aleksis/core/models.py:166
 msgid "Can view address"
 msgstr ""
 
-#: aleksis/core/models.py:160
+#: aleksis/core/models.py:167
 msgid "Can view contact details"
 msgstr ""
 
-#: aleksis/core/models.py:161
+#: aleksis/core/models.py:168
 msgid "Can view photo"
 msgstr ""
 
-#: aleksis/core/models.py:162
+#: aleksis/core/models.py:169
 msgid "Can view avatar image"
 msgstr ""
 
-#: aleksis/core/models.py:163
+#: aleksis/core/models.py:170
 msgid "Can view persons groups"
 msgstr ""
 
-#: aleksis/core/models.py:164
+#: aleksis/core/models.py:171
 msgid "Can view personal details"
 msgstr ""
 
-#: aleksis/core/models.py:174
+#: aleksis/core/models.py:181
 msgid "female"
 msgstr ""
 
-#: aleksis/core/models.py:174
+#: aleksis/core/models.py:181
 msgid "male"
 msgstr ""
 
-#: aleksis/core/models.py:182 aleksis/core/models.py:1271
+#: aleksis/core/models.py:181
+msgid "other"
+msgstr ""
+
+#: aleksis/core/models.py:189 aleksis/core/models.py:1283
 msgid "Linked user"
 msgstr ""
 
-#: aleksis/core/models.py:188
+#: aleksis/core/models.py:195
 msgid "Additional name(s)"
 msgstr ""
 
-#: aleksis/core/models.py:192 aleksis/core/models.py:504
+#: aleksis/core/models.py:199 aleksis/core/models.py:511
 msgid "Short name"
 msgstr ""
 
-#: aleksis/core/models.py:195
+#: aleksis/core/models.py:202
 msgid "Street"
 msgstr ""
 
-#: aleksis/core/models.py:196
+#: aleksis/core/models.py:203
 msgid "Street number"
 msgstr ""
 
-#: aleksis/core/models.py:197
+#: aleksis/core/models.py:204
 msgid "Postal code"
 msgstr ""
 
-#: aleksis/core/models.py:198
+#: aleksis/core/models.py:205
 msgid "Place"
 msgstr ""
 
-#: aleksis/core/models.py:200 aleksis/core/templates/core/person/full.html:160
+#: aleksis/core/models.py:207 aleksis/core/templates/core/person/full.html:160
 msgid "Home phone"
 msgstr ""
 
-#: aleksis/core/models.py:201 aleksis/core/templates/core/person/full.html:170
+#: aleksis/core/models.py:208 aleksis/core/templates/core/person/full.html:170
 msgid "Mobile phone"
 msgstr ""
 
-#: aleksis/core/models.py:205
+#: aleksis/core/models.py:212
 msgid "Date of birth"
 msgstr ""
 
-#: aleksis/core/models.py:206
+#: aleksis/core/models.py:213
 msgid "Place of birth"
 msgstr ""
 
-#: aleksis/core/models.py:207
+#: aleksis/core/models.py:214
 msgid "Sex"
 msgstr ""
 
-#: aleksis/core/models.py:214 aleksis/core/models.py:543
+#: 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 ""
 
-#: aleksis/core/models.py:219 aleksis/core/models.py:547
+#: aleksis/core/models.py:226 aleksis/core/models.py:554
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:222 aleksis/core/models.py:550
+#: aleksis/core/models.py:229 aleksis/core/models.py:557
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:227 aleksis/core/templates/core/person/full.html:235
+#: aleksis/core/models.py:234 aleksis/core/templates/core/person/full.html:235
 msgid "Guardians / Parents"
 msgstr ""
 
-#: aleksis/core/models.py:234
+#: aleksis/core/models.py:241
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:237 aleksis/core/models.py:717
-#: aleksis/core/models.py:741 aleksis/core/models.py:832
-#: aleksis/core/models.py:1092
+#: 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
 msgid "Description"
 msgstr ""
 
-#: aleksis/core/models.py:457
+#: aleksis/core/models.py:464
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:459
+#: aleksis/core/models.py:466
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:461
+#: aleksis/core/models.py:468
 msgid "Required"
 msgstr ""
 
-#: aleksis/core/models.py:462
+#: aleksis/core/models.py:469
 msgid "Help text / description"
 msgstr ""
 
-#: aleksis/core/models.py:468
+#: aleksis/core/models.py:475
 msgid "Addtitional field for groups"
 msgstr ""
 
-#: aleksis/core/models.py:469
+#: aleksis/core/models.py:476
 msgid "Addtitional fields for groups"
 msgstr ""
 
-#: aleksis/core/models.py:489
+#: aleksis/core/models.py:496
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:490
+#: aleksis/core/models.py:497
 msgid "Can view statistics about group."
 msgstr ""
 
-#: aleksis/core/models.py:502
+#: aleksis/core/models.py:509
 msgid "Long name"
 msgstr ""
 
-#: aleksis/core/models.py:512 aleksis/core/templates/core/group/full.html:85
+#: aleksis/core/models.py:519 aleksis/core/templates/core/group/full.html:105
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:515 aleksis/core/templates/core/group/full.html:82
+#: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:102
 msgid "Owners"
 msgstr ""
 
-#: aleksis/core/models.py:522 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 ""
 
-#: aleksis/core/models.py:530
+#: aleksis/core/models.py:537
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:716 aleksis/core/models.py:740
-#: aleksis/core/models.py:831
+#: aleksis/core/models.py:723 aleksis/core/models.py:747
+#: aleksis/core/models.py:838
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
 
-#: aleksis/core/models.py:719
+#: aleksis/core/models.py:726
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:725
+#: aleksis/core/models.py:732
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:726
+#: aleksis/core/models.py:733
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:732
+#: aleksis/core/models.py:739
 msgid "Sender"
 msgstr ""
 
-#: aleksis/core/models.py:737
+#: aleksis/core/models.py:744
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:742 aleksis/core/models.py:1069
+#: aleksis/core/models.py:749 aleksis/core/models.py:1078
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:744
+#: aleksis/core/models.py:751
 msgid "Send notification at"
 msgstr ""
 
-#: aleksis/core/models.py:746
+#: aleksis/core/models.py:753
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:747
+#: aleksis/core/models.py:754
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:764
+#: aleksis/core/models.py:771
 msgid "Notification"
 msgstr ""
 
-#: aleksis/core/models.py:833
+#: aleksis/core/models.py:772 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
+msgid "Notifications"
+msgstr ""
+
+#: aleksis/core/models.py:840
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:836
+#: aleksis/core/models.py:843
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:839
+#: aleksis/core/models.py:846
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:864
+#: aleksis/core/models.py:871
 msgid "Announcement"
 msgstr ""
 
-#: aleksis/core/models.py:902
+#: aleksis/core/models.py:909
 msgid "Announcement recipient"
 msgstr ""
 
-#: aleksis/core/models.py:903
+#: aleksis/core/models.py:910
 msgid "Announcement recipients"
 msgstr ""
 
-#: aleksis/core/models.py:925
+#: aleksis/core/models.py:932
 msgid "Widget Title"
 msgstr ""
 
-#: aleksis/core/models.py:926
+#: aleksis/core/models.py:933
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:927
+#: aleksis/core/models.py:934
 msgid "Widget is broken"
 msgstr ""
 
-#: aleksis/core/models.py:930
+#: aleksis/core/models.py:937
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:931
+#: aleksis/core/models.py:938
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:936
+#: aleksis/core/models.py:943
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:944
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:942
+#: aleksis/core/models.py:949
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:943
+#: aleksis/core/models.py:950
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:948
+#: aleksis/core/models.py:955
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:949
+#: aleksis/core/models.py:956
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:980
+#: aleksis/core/models.py:987
 msgid "Can edit default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:981
+#: aleksis/core/models.py:988
 msgid "Dashboard Widget"
 msgstr ""
 
-#: aleksis/core/models.py:982
+#: aleksis/core/models.py:989
 msgid "Dashboard Widgets"
 msgstr ""
 
-#: aleksis/core/models.py:988
+#: aleksis/core/models.py:995
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:989
+#: aleksis/core/models.py:996
 msgid "Icon URL"
 msgstr ""
 
-#: aleksis/core/models.py:995
+#: aleksis/core/models.py:1002
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:996
+#: aleksis/core/models.py:1003
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1002
+#: aleksis/core/models.py:1009
 msgid "Content"
 msgstr ""
 
-#: aleksis/core/models.py:1008
+#: aleksis/core/models.py:1015
 msgid "Static content widget"
 msgstr ""
 
-#: aleksis/core/models.py:1009
+#: aleksis/core/models.py:1016
 msgid "Static content widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1014
+#: aleksis/core/models.py:1021
 msgid "Dashboard widget"
 msgstr ""
 
-#: aleksis/core/models.py:1019
+#: aleksis/core/models.py:1026
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:1020
+#: aleksis/core/models.py:1027
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:1035
+#: aleksis/core/models.py:1042
 msgid "Dashboard widget order"
 msgstr ""
 
-#: aleksis/core/models.py:1036
+#: aleksis/core/models.py:1043
 msgid "Dashboard widget orders"
 msgstr ""
 
-#: aleksis/core/models.py:1042
+#: aleksis/core/models.py:1049
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1055
+#: aleksis/core/models.py:1062
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1056
+#: aleksis/core/models.py:1063
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1066
+#: aleksis/core/models.py:1075
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1070 aleksis/core/models.py:1318
+#: aleksis/core/models.py:1079 aleksis/core/models.py:1330
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1085
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1077
+#: aleksis/core/models.py:1086
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1091
+#: aleksis/core/models.py:1103
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1098 aleksis/core/templates/core/group/full.html:47
+#: aleksis/core/models.py:1110 aleksis/core/templates/core/group/full.html:50
 msgid "Group type"
 msgstr ""
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1124
 msgid "Can view system status"
 msgstr ""
 
-#: aleksis/core/models.py:1113
+#: aleksis/core/models.py:1125
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1114
+#: aleksis/core/models.py:1126
 msgid "Can impersonate"
 msgstr ""
 
-#: aleksis/core/models.py:1115
+#: aleksis/core/models.py:1127
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1116
+#: aleksis/core/models.py:1128
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1117
+#: aleksis/core/models.py:1129
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1118
+#: aleksis/core/models.py:1130
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1119
+#: aleksis/core/models.py:1131
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1132
 msgid "Can invite persons"
 msgstr ""
 
-#: aleksis/core/models.py:1156
+#: aleksis/core/models.py:1168
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1164
+#: aleksis/core/models.py:1176
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1165
+#: aleksis/core/models.py:1177
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1178
+#: aleksis/core/models.py:1190
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1179
+#: aleksis/core/models.py:1191
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1181
+#: aleksis/core/models.py:1193
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1182
+#: aleksis/core/models.py:1194
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1189
+#: aleksis/core/models.py:1201
 msgid "E-Mail address"
 msgstr ""
 
-#: aleksis/core/models.py:1221
+#: aleksis/core/models.py:1233
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1225
+#: aleksis/core/models.py:1237
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1227
+#: aleksis/core/models.py:1239
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1229
+#: aleksis/core/models.py:1241
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1236
+#: aleksis/core/models.py:1248
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1237
+#: aleksis/core/models.py:1249
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1242
+#: aleksis/core/models.py:1254
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1245
+#: aleksis/core/models.py:1257
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1257
+#: aleksis/core/models.py:1269
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1258
+#: aleksis/core/models.py:1270
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1274
+#: aleksis/core/models.py:1286
 msgid "Additional attributes"
 msgstr ""
 
-#: aleksis/core/models.py:1312
+#: aleksis/core/models.py:1324
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1322
+#: aleksis/core/models.py:1334
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
+#: aleksis/core/models.py:1383
+msgid "UUID"
+msgstr ""
+
+#: aleksis/core/models.py:1387
+msgid "Selected ICal feed"
+msgstr ""
+
+#: aleksis/core/models.py:1396
+msgid "Personal Calendar URL"
+msgstr ""
+
+#: aleksis/core/models.py:1397
+msgid "Personal Calendar URLs"
+msgstr ""
+
 #: aleksis/core/preferences.py:25
 msgid "General"
 msgstr ""
@@ -1138,94 +1192,94 @@ msgstr ""
 msgid "Allowed Grant Flows for OAuth applications"
 msgstr ""
 
-#: aleksis/core/preferences.py:344
-msgid "Available languages"
-msgstr ""
-
-#: aleksis/core/preferences.py:357
+#: aleksis/core/preferences.py:343
 msgid "Send emails if data checks detect problems"
 msgstr ""
 
-#: aleksis/core/preferences.py:368
+#: aleksis/core/preferences.py:354
 msgid "Email recipients for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:379
+#: aleksis/core/preferences.py:365
 msgid "Email recipient groups for data checks problem emails"
 msgstr ""
 
-#: aleksis/core/preferences.py:388
+#: aleksis/core/preferences.py:374
 msgid "Show dashboard to users without login"
 msgstr ""
 
-#: aleksis/core/preferences.py:397
+#: aleksis/core/preferences.py:383
 msgid "Allow users to edit their dashboard"
 msgstr ""
 
-#: aleksis/core/preferences.py:408
+#: aleksis/core/preferences.py:394
 msgid "Fields on person model which are editable by themselves."
 msgstr ""
 
-#: aleksis/core/preferences.py:423
+#: aleksis/core/preferences.py:409
 msgid "Editable fields on person model which should trigger a notification on change"
 msgstr ""
 
-#: aleksis/core/preferences.py:437
+#: aleksis/core/preferences.py:423
 msgid "Contact for notification if a person changes their data"
 msgstr ""
 
-#: aleksis/core/preferences.py:448
+#: aleksis/core/preferences.py:434
 msgid "Prefer personal photos over avatars"
 msgstr ""
 
-#: aleksis/core/preferences.py:458
+#: aleksis/core/preferences.py:444
 msgid "PDF file expiration duration"
 msgstr ""
 
-#: aleksis/core/preferences.py:459
+#: aleksis/core/preferences.py:445
 msgid "in minutes"
 msgstr ""
 
-#: aleksis/core/preferences.py:469
+#: aleksis/core/preferences.py:455
 msgid "Automatically update the dashboard and its widgets"
 msgstr ""
 
-#: aleksis/core/preferences.py:479
+#: aleksis/core/preferences.py:465
 msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
-#: aleksis/core/preferences.py:489
+#: aleksis/core/preferences.py:475
 msgid "Country for phone number parsing"
 msgstr ""
 
-#: aleksis/core/settings.py:540
+#: aleksis/core/settings.py:541
 msgid "English"
 msgstr ""
 
-#: aleksis/core/settings.py:541
+#: aleksis/core/settings.py:542
 msgid "German"
 msgstr ""
 
-#: aleksis/core/tables.py:24
+#: aleksis/core/settings.py:543
+msgid "Ukrainian"
+msgstr ""
+
+#: 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/group/full.html:26
 #: aleksis/core/templates/core/person/full.html:26
 #: aleksis/core/templates/core/person/full.html:86
 #: aleksis/core/templates/oauth2_provider/application/detail.html:17
 msgid "Edit"
 msgstr ""
 
-#: aleksis/core/tables.py:26 aleksis/core/tables.py:94
-#: aleksis/core/tables.py:138
+#: 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 ""
 
-#: 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
@@ -1264,7 +1318,7 @@ msgstr ""
 #: aleksis/core/templates/500.html:10
 msgid ""
 "An unexpected error has\n"
-"          occured."
+"          occurred."
 msgstr ""
 
 #: aleksis/core/templates/500.html:13
@@ -1518,7 +1572,7 @@ msgid "Publish new announcement"
 msgstr ""
 
 #: aleksis/core/templates/core/announcement/form.html:34
-msgid "Save und publish announcement"
+msgid "Save and publish announcement"
 msgstr ""
 
 #: aleksis/core/templates/core/announcement/list.html:19
@@ -1764,34 +1818,34 @@ msgstr ""
 msgid "Edit group"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:38
+#: aleksis/core/templates/core/group/full.html:40
 #: aleksis/core/templates/core/person/full.html:40
 #: aleksis/core/templates/core/person/full.html:100
 msgid "Change preferences"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:64
+#: aleksis/core/templates/core/group/full.html:68
 msgid "Statistics"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:67
+#: aleksis/core/templates/core/group/full.html:73
 msgid "Count of members"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:71
+#: aleksis/core/templates/core/group/full.html:81
 msgid "Average age"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:76
+#: aleksis/core/templates/core/group/full.html:90
 msgid "Age range"
 msgstr ""
 
-#: aleksis/core/templates/core/group/full.html:76
-msgid "years to"
-msgstr ""
-
-#: aleksis/core/templates/core/group/full.html:76
-msgid "years "
+#: aleksis/core/templates/core/group/full.html:93
+#, python-format
+msgid ""
+"\n"
+"              %(min)s years to %(max)s years\n"
+"            "
 msgstr ""
 
 #: aleksis/core/templates/core/group/list.html:14
@@ -1820,6 +1874,40 @@ msgstr ""
 msgid "Create group type"
 msgstr ""
 
+#: 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 ""
+
+#: 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 ""
+
+#: 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 ""
+
+#: aleksis/core/templates/core/ical/ical_list.html:4
+#: aleksis/core/templates/core/ical/ical_list.html:5
+msgid "iCal Feeds"
+msgstr ""
+
+#: 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 ""
+
+#: aleksis/core/templates/core/ical/ical_list.html:14
+msgid "Your iCal URLs"
+msgstr ""
+
 #: aleksis/core/templates/core/index.html:4
 msgid "Home"
 msgstr ""
@@ -2093,11 +2181,11 @@ msgstr ""
 msgid "Unknown"
 msgstr ""
 
-#: aleksis/core/templates/core/partials/language_form.html:15
+#: aleksis/core/templates/core/partials/language_form.html:17
 msgid "Language"
 msgstr ""
 
-#: aleksis/core/templates/core/partials/language_form.html:27
+#: aleksis/core/templates/core/partials/language_form.html:29
 msgid "Select language"
 msgstr ""
 
@@ -2296,13 +2384,6 @@ msgstr ""
 msgid "Register OAuth2 Application"
 msgstr ""
 
-#: 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 ""
-
 #: aleksis/core/templates/oauth2_provider/application/detail.html:5
 msgid "OAuth2 Application"
 msgstr ""
@@ -3022,156 +3103,168 @@ msgstr ""
 msgid "Download PDF"
 msgstr ""
 
-#: aleksis/core/views.py:289
+#: aleksis/core/views.py:294
 msgid "The school term has been created."
 msgstr ""
 
-#: aleksis/core/views.py:301
+#: aleksis/core/views.py:306
 msgid "The school term has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:421
+#: aleksis/core/views.py:426
 msgid "The child groups were successfully saved."
 msgstr ""
 
-#: aleksis/core/views.py:440 aleksis/core/views.py:450
+#: aleksis/core/views.py:445 aleksis/core/views.py:455
 msgid "The person has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:500
+#: aleksis/core/views.py:505
 msgid "The group has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:597
+#: aleksis/core/views.py:602
 msgid "The announcement has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:613
+#: aleksis/core/views.py:618
 msgid "The announcement has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:681
+#: aleksis/core/views.py:686
 msgid "The requested preference registry does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:700
+#: aleksis/core/views.py:705
 msgid "The preferences have been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:724
+#: aleksis/core/views.py:729
 msgid "The person has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:738
+#: aleksis/core/views.py:743
 msgid "The group has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:770
-msgid "The additional_field has been saved."
+#: aleksis/core/views.py:775
+msgid "The additional field has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:804
+#: aleksis/core/views.py:809
 msgid "The additional field has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:829
+#: aleksis/core/views.py:834
 msgid "The group type has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:859
+#: aleksis/core/views.py:864
 msgid "The group type has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:892
+#: aleksis/core/views.py:897
 msgid "Progress: Run data checks"
 msgstr ""
 
-#: aleksis/core/views.py:893
+#: aleksis/core/views.py:898
 msgid "Run data checks …"
 msgstr ""
 
-#: aleksis/core/views.py:894
+#: aleksis/core/views.py:899
 msgid "The data checks were run successfully."
 msgstr ""
 
-#: aleksis/core/views.py:895
+#: aleksis/core/views.py:900
 msgid "There was a problem while running data checks."
 msgstr ""
 
-#: aleksis/core/views.py:911
+#: aleksis/core/views.py:916
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/views.py:921
+#: aleksis/core/views.py:926
 msgid "The requested solve option does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:953
+#: aleksis/core/views.py:958
 msgid "The dashboard widget has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:983
+#: aleksis/core/views.py:988
 msgid "The dashboard widget has been created."
 msgstr ""
 
-#: aleksis/core/views.py:993
+#: aleksis/core/views.py:998
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1064
+#: aleksis/core/views.py:1069
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1066
+#: aleksis/core/views.py:1071
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1142
+#: aleksis/core/views.py:1147
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1233
+#: aleksis/core/views.py:1238
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1243
+#: aleksis/core/views.py:1248
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1253
+#: aleksis/core/views.py:1258
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1263
+#: aleksis/core/views.py:1268
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1273
+#: aleksis/core/views.py:1278
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1341
+#: aleksis/core/views.py:1346
 msgid "The requested PDF file does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:1350 aleksis/core/views.py:1354
+#: aleksis/core/views.py:1355 aleksis/core/views.py:1359
 msgid "The requested task does not exist or is not accessible"
 msgstr ""
 
-#: aleksis/core/views.py:1406
+#: aleksis/core/views.py:1411
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1413
+#: aleksis/core/views.py:1418
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1484
+#: aleksis/core/views.py:1489
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1495
+#: aleksis/core/views.py:1500
 msgid "Person was already invited."
 msgstr ""
+
+#: aleksis/core/views.py:1600
+msgid "iCal feed updated successfully"
+msgstr ""
+
+#: aleksis/core/views.py:1610
+msgid "iCal feed deleted successfully"
+msgstr ""
+
+#: aleksis/core/views.py:1618
+msgid "iCal feed created successfully"
+msgstr ""
diff --git a/aleksis/core/locale/tr_TR/LC_MESSAGES/djangojs.po b/aleksis/core/locale/tr_TR/LC_MESSAGES/djangojs.po
index f3df4c3fc6d2848a739ddd1faac44cb9048c97b2..26f9dbd80e1c93710efaf2abf60ffd0754e043b6 100644
--- a/aleksis/core/locale/tr_TR/LC_MESSAGES/djangojs.po
+++ b/aleksis/core/locale/tr_TR/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-23 11:20+0100\n"
+"POT-Creation-Date: 2022-06-25 12:09+0200\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"
diff --git a/aleksis/core/locale/uk/LC_MESSAGES/django.po b/aleksis/core/locale/uk/LC_MESSAGES/django.po
index 319c980c3d781e1c6bfb89b8dbd54945d8abc736..a899f2f66625d855cf22f99aaa9f4e6b311a37bc 100644
--- a/aleksis/core/locale/uk/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/uk/LC_MESSAGES/django.po
@@ -3,89 +3,90 @@
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
-#, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-04-23 12:58+0000\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"
-"Language: \n"
+"POT-Creation-Date: 2022-05-24 19:37+0200\n"
+"PO-Revision-Date: 2022-06-25 10:18+0000\n"
+"Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\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:166
 msgid "OpenID Connect scope"
-msgstr ""
+msgstr "Межа дії OpenID Connect"
 
 #: aleksis/core/apps.py:167
 msgid "Given name, family name, link to profile and picture if existing."
-msgstr ""
+msgstr "Ім'я, прізвище, посилання на профіль та фото, якщо є в наявності."
 
 #: aleksis/core/apps.py:168
 msgid "Full home postal address"
-msgstr ""
+msgstr "Повна домашня поштова адреса"
 
 #: aleksis/core/apps.py:169
 msgid "Email address"
-msgstr ""
+msgstr "Ел.адреса"
 
 #: aleksis/core/apps.py:170
 msgid "Home and mobile phone"
-msgstr ""
+msgstr "Домашній та мобільний телефони"
 
 #: 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/templates/core/group/list.html:9
-#: aleksis/core/templates/core/person/full.html:246
+#: aleksis/core/templates/core/person/full.html:246 aleksis/core/models.py:494
 msgid "Groups"
-msgstr ""
+msgstr "Групи"
 
-#: aleksis/core/data_checks.py:56
+#: aleksis/core/data_checks.py:56 aleksis/core/data_checks.py:59
 msgid "Ignore problem"
-msgstr ""
+msgstr "Ігнорувати проблему"
 
-#: aleksis/core/data_checks.py:185
+#: aleksis/core/data_checks.py:185 aleksis/core/data_checks.py:188
 #, python-brace-format
 msgid "Solve option '{solve_option_obj.verbose_name}' "
-msgstr ""
+msgstr "Варіант розв'язання '{solve_option_obj.verbose_name}' "
 
-#: aleksis/core/data_checks.py:291
+#: aleksis/core/data_checks.py:291 aleksis/core/data_checks.py:294
 msgid "Deactivate DashboardWidget"
-msgstr ""
+msgstr "Вимкнути віджет інформпанелі"
 
-#: aleksis/core/data_checks.py:303
+#: aleksis/core/data_checks.py:303 aleksis/core/data_checks.py:306
 msgid "Ensure that there are no broken DashboardWidgets."
-msgstr ""
+msgstr "Переконайтеся у відсутності збійних віджетів на інформпанелі."
 
-#: aleksis/core/data_checks.py:304
+#: aleksis/core/data_checks.py:304 aleksis/core/data_checks.py:307
 msgid "The DashboardWidget was reported broken automatically."
-msgstr ""
+msgstr "Віджет інформпанелі повідомив про збій в автоматичному режимі."
 
 #: aleksis/core/feeds.py:52
 msgid "Birthday Calendar"
-msgstr ""
+msgstr "Календар Днів Народження"
 
 #: aleksis/core/feeds.py:53
 msgid "A Calendar of Birthdays"
-msgstr ""
+msgstr "Календар Днів Народження"
 
 #: aleksis/core/feeds.py:66
 #, python-format
 msgid "%(name)s's birthday"
-msgstr ""
+msgstr "%(name)s має День Народження"
 
 #: aleksis/core/feeds.py:71
 #, python-format
 msgid "%(name)s was born on %(birthday)s"
-msgstr ""
+msgstr "%(name)s народився(-лася) %(birthday)s"
 
 #: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:139
 #: aleksis/core/templates/core/base.html:140
@@ -94,337 +95,350 @@ msgstr ""
 #: aleksis/core/templates/search/search.html:7
 #: aleksis/core/templates/search/search.html:22
 msgid "Search"
-msgstr ""
+msgstr "Пошук"
 
 #: aleksis/core/filters.py:59
 msgid "Search by name"
-msgstr ""
+msgstr "Пошук за ім'ям"
 
 #: aleksis/core/filters.py:71
 msgid "Search by contact details"
-msgstr ""
+msgstr "Пошук за контактними даними"
 
 #: aleksis/core/filters.py:92
 msgid "Permission"
-msgstr ""
+msgstr "Дозвіл"
 
 #: aleksis/core/filters.py:100
 msgid "Content type"
-msgstr ""
+msgstr "Тип змісту"
 
 #: aleksis/core/filters.py:113 aleksis/core/models.py:715
+#: aleksis/core/models.py:720
 msgid "User"
-msgstr ""
+msgstr "Користувач"
 
 #: aleksis/core/filters.py:135 aleksis/core/models.py:488
+#: aleksis/core/models.py:493
 msgid "Group"
-msgstr ""
+msgstr "Група"
 
 #: aleksis/core/forms.py:50 aleksis/core/forms.py:581
 msgid "Base data"
-msgstr ""
+msgstr "Основні дані"
 
-#: aleksis/core/forms.py:55
+#: aleksis/core/forms.py:55 aleksis/core/tables.py:47
 msgid "Address"
-msgstr ""
+msgstr "Адреса"
 
 #: aleksis/core/forms.py:56 aleksis/core/forms.py:590
 msgid "Contact data"
-msgstr ""
+msgstr "Контактні дані"
 
 #: aleksis/core/forms.py:58
 msgid "Advanced personal data"
-msgstr ""
+msgstr "Додаткові особисті дані"
 
 #: aleksis/core/forms.py:106
 msgid "New user"
-msgstr ""
+msgstr "Новий користувач"
 
 #: aleksis/core/forms.py:106
 msgid "Create a new account"
-msgstr ""
+msgstr "Створити новий обліковий запис"
 
 #: aleksis/core/forms.py:132
 msgid "You cannot set a new username when also selecting an existing user."
-msgstr ""
+msgstr "Обравши вже існуючого користувача неможливо створити новий логін."
 
 #: aleksis/core/forms.py:136
 msgid "This username is already in use."
-msgstr ""
+msgstr "Такий логін вже зайнятий."
 
 #: aleksis/core/forms.py:153 aleksis/core/models.py:136
+#: aleksis/core/models.py:141
 msgid "School term"
-msgstr ""
+msgstr "Навчальний рік"
 
 #: aleksis/core/forms.py:154
 msgid "Common data"
-msgstr ""
+msgstr "Загальні дані"
 
 #: 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/templates/core/person/list.html:9 aleksis/core/models.py:164
 msgid "Persons"
-msgstr ""
+msgstr "Особи"
 
 #: aleksis/core/forms.py:156 aleksis/core/forms.py:592
 msgid "Additional data"
-msgstr ""
+msgstr "Додаткові дані"
 
 #: aleksis/core/forms.py:157 aleksis/core/models.py:212
-#: aleksis/core/models.py:541
+#: aleksis/core/models.py:541 aleksis/core/models.py:217
+#: aleksis/core/models.py:546 aleksis/core/tables.py:46
 msgid "Photo"
-msgstr ""
+msgstr "Фото"
 
 #: aleksis/core/forms.py:199 aleksis/core/forms.py:202
-#: aleksis/core/models.py:79
+#: aleksis/core/models.py:79 aleksis/core/models.py:84
 msgid "Date"
-msgstr ""
+msgstr "Дата"
 
 #: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:87
+#: aleksis/core/models.py:87 aleksis/core/models.py:92
 msgid "Time"
-msgstr ""
+msgstr "Час"
 
 #: aleksis/core/forms.py:233
 msgid "From when until when should the announcement be displayed?"
-msgstr ""
+msgstr "З якого по який час повинно відображатися це оголошення?"
 
 #: aleksis/core/forms.py:236
 msgid "Who should see the announcement?"
-msgstr ""
+msgstr "Хто повинен бачити це оголошення?"
 
 #: aleksis/core/forms.py:237
 msgid "Write your announcement:"
-msgstr ""
+msgstr "Складіть своє оголошеня:"
 
 #: aleksis/core/forms.py:276
-msgid "You are not allowed to create announcements which are only valid in the past."
-msgstr ""
+msgid ""
+"You are not allowed to create announcements which are only valid in the past."
+msgstr "Оголошення для минулого Вам створювати не дозволено."
 
 #: aleksis/core/forms.py:280
 msgid "The from date and time must be earlier then the until date and time."
-msgstr ""
+msgstr "Дата і час початку повинні бути раніше за дату і час закінчення."
 
 #: aleksis/core/forms.py:289
 msgid "You need at least one recipient."
-msgstr ""
+msgstr "Вам потрібен принаймні один отримувач."
 
 #: aleksis/core/forms.py:398
 msgid "Invitation code"
-msgstr ""
+msgstr "Код запрошення"
 
 #: aleksis/core/forms.py:399
 msgid "Please enter your invitation code."
-msgstr ""
+msgstr "Напишіть, будь ласка, свій код запрошення."
 
 #: aleksis/core/forms.py:418 aleksis/core/models.py:187
+#: aleksis/core/models.py:192
 msgid "First name"
-msgstr ""
+msgstr "Ім'я"
 
 #: aleksis/core/forms.py:419 aleksis/core/models.py:188
+#: aleksis/core/models.py:193
 msgid "Last name"
-msgstr ""
+msgstr "Прізвище"
 
 #: aleksis/core/forms.py:428
 msgid "A person is using this e-mail address"
-msgstr ""
+msgstr "Цією ел.адресою хтось користується"
 
 #: aleksis/core/forms.py:456
 msgid "Who should get the permission?"
-msgstr ""
+msgstr "Хто повинен отримати такий дозвіл?"
 
 #: aleksis/core/forms.py:457
 msgid "On what?"
-msgstr ""
+msgstr "В разі чого?"
 
 #: aleksis/core/forms.py:483
 msgid "Select objects which the permission should be granted for:"
-msgstr ""
+msgstr "Оберіть об'єкти, до яких буде наданий дозвіл:"
 
 #: aleksis/core/forms.py:486
 msgid "Grant the permission for all objects"
-msgstr ""
+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
 msgid "You must grant the permission to all objects and/or to some objects."
-msgstr ""
+msgstr "Ви повинні надати дозвіл до всіх та/або до деяких об'єктів."
 
 #: aleksis/core/forms.py:586
-msgid "Adress data"
-msgstr ""
+msgid "Address data"
+msgstr "Дані адреси"
 
 #: aleksis/core/forms.py:598
 msgid "Account data"
-msgstr ""
+msgstr "Дані облікового запису"
 
 #: aleksis/core/forms.py:605
 msgid "Password"
-msgstr ""
+msgstr "Пароль"
 
 #: aleksis/core/forms.py:608
 msgid "Password (again)"
-msgstr ""
+msgstr "Пароль (ще раз)"
 
 #: aleksis/core/forms.py:728
 msgid "The selected action does not exist."
-msgstr ""
+msgstr "Обрана дія не існує."
 
 #: aleksis/core/forms.py:739
 msgid "You do not have permission to run {} on all selected objects."
-msgstr ""
+msgstr "У Вас відсутній дозвіл на запуск {} на усіх обраних об'єктах."
 
 #: aleksis/core/forms.py:795
 msgid "No valid selection."
-msgstr ""
+msgstr "Неправильний вибір."
 
 #: aleksis/core/health_checks.py:21
 msgid "There are unresolved data problems."
-msgstr ""
+msgstr "Існують нерозв'язані проблеми з даними."
 
 #: aleksis/core/health_checks.py:40
 msgid "Error accessing backup storage: {}"
-msgstr ""
+msgstr "Помилка доступу до резервного сховища: {}"
 
 #: aleksis/core/health_checks.py:50
 msgid "Last backup {}!"
-msgstr ""
+msgstr "Остання резервна копія {}!"
 
 #: aleksis/core/health_checks.py:52
 msgid "No backup found!"
-msgstr ""
+msgstr "Резервна копія не знайдена!"
 
 #: aleksis/core/health_checks.py:79
 msgid "No backup result found!"
-msgstr ""
+msgstr "Результат резервного копіювання не знайдений!"
 
 #: 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 ""
+msgstr "Увійти"
 
 #: aleksis/core/menus.py:13 aleksis/core/templates/account/signup.html:22
 #: aleksis/core/templates/socialaccount/signup.html:23
 msgid "Sign up"
-msgstr ""
+msgstr "Зареєструватися"
 
 #: aleksis/core/menus.py:22 aleksis/core/templates/invitations/enter.html:7
 msgid "Accept invitation"
-msgstr ""
+msgstr "Прийняти запрошення"
 
 #: aleksis/core/menus.py:31
 msgid "Dashboard"
-msgstr ""
+msgstr "Інформпанель"
 
 #: aleksis/core/menus.py:39
 msgid "Admin"
-msgstr ""
+msgstr "Адмін"
 
 #: 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
 msgid "Announcements"
-msgstr ""
+msgstr "Оголошення"
 
 #: 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 ""
+msgstr "Навчальний рік"
 
 #: 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 ""
+msgstr "Віджети інформпанелі"
 
 #: 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 ""
+msgstr "Керування даними"
 
 #: 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 ""
+msgstr "Стан системи"
 
 #: aleksis/core/menus.py:102
 msgid "Configuration"
-msgstr ""
+msgstr "Конфігурація"
 
 #: 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 ""
+msgstr "Перевірки даних"
 
 #: 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 ""
+msgstr "Керування дозволами"
 
 #: aleksis/core/menus.py:130
 msgid "Backend Admin"
-msgstr ""
+msgstr "Адміністрування бекенду"
 
 #: 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 ""
+msgstr "Додатки OAuth2"
 
 #: aleksis/core/menus.py:151
 msgid "People"
-msgstr ""
+msgstr "Люди"
 
 #: 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 ""
+msgstr "Типи груп"
 
 #: aleksis/core/menus.py:193
 msgid "Groups and child groups"
-msgstr ""
+msgstr "Групи та підлеглі групи"
 
 #: 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 ""
+msgstr "Додаткові поля"
 
 #: aleksis/core/menus.py:215
 msgid "Invite person"
-msgstr ""
+msgstr "Запросити особу"
 
 #: 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 ""
+msgstr "Призначити підлеглі групи до груп"
 
 #: aleksis/core/menus.py:240
 msgid "Stop impersonation"
-msgstr ""
+msgstr "Зупинити маскування"
 
 #: aleksis/core/menus.py:249
 msgid "Account"
-msgstr ""
+msgstr "Обліковий запис"
 
 #: aleksis/core/menus.py:258
 #: aleksis/core/templates/dynamic_preferences/form.html:5
 msgid "Preferences"
-msgstr ""
+msgstr "Властивості"
 
 #: aleksis/core/menus.py:267
 msgid "2FA"
-msgstr ""
+msgstr "2FA"
 
 #: aleksis/core/menus.py:275
 #: aleksis/core/templates/account/password_change.html:5
@@ -436,819 +450,850 @@ msgstr ""
 #: 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 ""
+msgstr "Змінити пароль"
 
 #: aleksis/core/menus.py:287
 msgid "Third-party accounts"
-msgstr ""
+msgstr "Обліковки третіх сторін"
 
 #: 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 ""
+msgstr "Авторизовані додатки"
 
 #: aleksis/core/menus.py:305
 msgid "Calendar Feeds"
-msgstr ""
+msgstr "Канали календарів"
 
 #: aleksis/core/menus.py:318
 msgid "Logout"
-msgstr ""
+msgstr "Вийти"
 
 #: aleksis/core/mixins.py:511
 msgid "Linked school term"
-msgstr ""
+msgstr "Пов'язаний навчальний рік"
 
-#: aleksis/core/models.py:77
+#: aleksis/core/models.py:77 aleksis/core/models.py:82
 msgid "Boolean (Yes/No)"
-msgstr ""
+msgstr "Логічне (Так/Ні)"
 
-#: aleksis/core/models.py:78
+#: aleksis/core/models.py:78 aleksis/core/models.py:83
 msgid "Text (one line)"
-msgstr ""
+msgstr "Текст (один рядок)"
 
-#: aleksis/core/models.py:80
+#: aleksis/core/models.py:80 aleksis/core/models.py:85
 msgid "Date and time"
-msgstr ""
+msgstr "Дата і час"
 
-#: aleksis/core/models.py:81
+#: aleksis/core/models.py:81 aleksis/core/models.py:86
 msgid "Decimal number"
-msgstr ""
+msgstr "Десятичне число"
 
 #: 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 ""
+msgstr "Адреса ел.пошти"
 
-#: aleksis/core/models.py:83
+#: aleksis/core/models.py:83 aleksis/core/models.py:88
 msgid "Integer"
-msgstr ""
+msgstr "Ціле"
 
-#: aleksis/core/models.py:84
+#: aleksis/core/models.py:84 aleksis/core/models.py:89
 msgid "IP address"
-msgstr ""
+msgstr "IP адреса"
 
-#: aleksis/core/models.py:85
+#: aleksis/core/models.py:85 aleksis/core/models.py:90
 msgid "Boolean or empty (Yes/No/Neither)"
-msgstr ""
+msgstr "Логічне або порожнє (Так/Ні/Нічого)"
 
-#: aleksis/core/models.py:86
+#: aleksis/core/models.py:86 aleksis/core/models.py:91
 msgid "Text (multi-line)"
-msgstr ""
+msgstr "Текст (багаторядковий)"
 
-#: aleksis/core/models.py:88
+#: aleksis/core/models.py:88 aleksis/core/models.py:93
 msgid "URL / Link"
-msgstr ""
+msgstr "URL / Посилання"
 
 #: aleksis/core/models.py:100 aleksis/core/models.py:1070
-#: aleksis/core/models.py:1374
+#: aleksis/core/models.py:1374 aleksis/core/models.py:105
+#: aleksis/core/models.py:1077 aleksis/core/models.py:1384
 msgid "Name"
-msgstr ""
+msgstr "Повне ім'я"
 
-#: aleksis/core/models.py:102
+#: aleksis/core/models.py:102 aleksis/core/models.py:107
 msgid "Start date"
-msgstr ""
+msgstr "Дата початку"
 
-#: aleksis/core/models.py:103
+#: aleksis/core/models.py:103 aleksis/core/models.py:108
 msgid "End date"
-msgstr ""
+msgstr "Дата закінчення"
 
-#: aleksis/core/models.py:122
+#: aleksis/core/models.py:122 aleksis/core/models.py:127
 msgid "The start date must be earlier than the end date."
-msgstr ""
+msgstr "Початкова дата повинна бути раніше кінцевої."
 
-#: aleksis/core/models.py:129
+#: aleksis/core/models.py:129 aleksis/core/models.py:134
 msgid "There is already a school term for this time or a part of this time."
-msgstr ""
+msgstr "На цей час або на частину цього часу вже припадає навчальний рік."
 
 #: aleksis/core/models.py:158 aleksis/core/models.py:1019
-#: aleksis/core/models.py:1371
+#: aleksis/core/models.py:1371 aleksis/core/models.py:163
+#: aleksis/core/models.py:1024 aleksis/core/models.py:1381
 msgid "Person"
-msgstr ""
+msgstr "Особа"
 
-#: aleksis/core/models.py:161
+#: aleksis/core/models.py:161 aleksis/core/models.py:166
 msgid "Can view address"
-msgstr ""
+msgstr "Може бачити адресу"
 
-#: aleksis/core/models.py:162
+#: aleksis/core/models.py:162 aleksis/core/models.py:167
 msgid "Can view contact details"
-msgstr ""
+msgstr "Може бачити контактні дані"
 
-#: aleksis/core/models.py:163
+#: aleksis/core/models.py:163 aleksis/core/models.py:168
 msgid "Can view photo"
-msgstr ""
+msgstr "Може бачити фото"
 
-#: aleksis/core/models.py:164
+#: aleksis/core/models.py:164 aleksis/core/models.py:169
 msgid "Can view avatar image"
-msgstr ""
+msgstr "Може бачити аватар"
 
-#: aleksis/core/models.py:165
+#: aleksis/core/models.py:165 aleksis/core/models.py:170
 msgid "Can view persons groups"
-msgstr ""
+msgstr "Може бачити групи особи"
 
-#: aleksis/core/models.py:166
+#: aleksis/core/models.py:166 aleksis/core/models.py:171
 msgid "Can view personal details"
-msgstr ""
+msgstr "Може бачити особисті дані"
 
-#: aleksis/core/models.py:176
+#: aleksis/core/models.py:176 aleksis/core/models.py:181
 msgid "female"
-msgstr ""
+msgstr "жін"
 
-#: aleksis/core/models.py:176
+#: aleksis/core/models.py:176 aleksis/core/models.py:181
 msgid "male"
-msgstr ""
+msgstr "чол"
 
 #: aleksis/core/models.py:184 aleksis/core/models.py:1273
+#: aleksis/core/models.py:189 aleksis/core/models.py:1283
 msgid "Linked user"
-msgstr ""
+msgstr "Пов'язаний користувач"
 
-#: aleksis/core/models.py:190
+#: aleksis/core/models.py:190 aleksis/core/models.py:195
 msgid "Additional name(s)"
-msgstr ""
+msgstr "Додаткові імена"
 
 #: aleksis/core/models.py:194 aleksis/core/models.py:506
+#: aleksis/core/models.py:199 aleksis/core/models.py:511
 msgid "Short name"
-msgstr ""
+msgstr "Коротке ім'я"
 
-#: aleksis/core/models.py:197
+#: aleksis/core/models.py:197 aleksis/core/models.py:202
 msgid "Street"
-msgstr ""
+msgstr "Вулиця"
 
-#: aleksis/core/models.py:198
+#: aleksis/core/models.py:198 aleksis/core/models.py:203
 msgid "Street number"
-msgstr ""
+msgstr "Номер будинку"
 
-#: aleksis/core/models.py:199
+#: aleksis/core/models.py:199 aleksis/core/models.py:204
 msgid "Postal code"
-msgstr ""
+msgstr "Поштовий індекс"
 
-#: aleksis/core/models.py:200
+#: aleksis/core/models.py:200 aleksis/core/models.py:205
 msgid "Place"
-msgstr ""
+msgstr "Місто"
 
 #: aleksis/core/models.py:202 aleksis/core/templates/core/person/full.html:160
+#: aleksis/core/models.py:207
 msgid "Home phone"
-msgstr ""
+msgstr "Домашній телефон"
 
 #: aleksis/core/models.py:203 aleksis/core/templates/core/person/full.html:170
+#: aleksis/core/models.py:208
 msgid "Mobile phone"
-msgstr ""
+msgstr "Мобільний телефон"
 
-#: aleksis/core/models.py:207
+#: aleksis/core/models.py:207 aleksis/core/models.py:212
 msgid "Date of birth"
-msgstr ""
+msgstr "Дата народження"
 
-#: aleksis/core/models.py:208
+#: aleksis/core/models.py:208 aleksis/core/models.py:213
 msgid "Place of birth"
-msgstr ""
+msgstr "Місце народження"
 
-#: aleksis/core/models.py:209
+#: aleksis/core/models.py:209 aleksis/core/models.py:214
 msgid "Sex"
-msgstr ""
+msgstr "Стать"
 
 #: aleksis/core/models.py:216 aleksis/core/models.py:545
-msgid "This is an official photo, used for official documents and for internal use cases."
+#: 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 ""
+"Це офіційне фото, яке використовується для документів та внутрішніх потреб."
 
 #: 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 ""
+msgstr "Відобразити фото/аватар"
 
 #: 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 ""
+msgstr "Це фото або аватар для загального відображення."
 
 #: aleksis/core/models.py:229 aleksis/core/templates/core/person/full.html:235
+#: aleksis/core/models.py:234
 msgid "Guardians / Parents"
-msgstr ""
+msgstr "Опікуни / батьки"
 
-#: aleksis/core/models.py:236
+#: aleksis/core/models.py:236 aleksis/core/models.py:241
 msgid "Primary group"
-msgstr ""
+msgstr "Основна група"
 
 #: 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: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
 msgid "Description"
-msgstr ""
+msgstr "Опис"
 
-#: aleksis/core/models.py:459
+#: aleksis/core/models.py:459 aleksis/core/models.py:464
 msgid "Title of field"
-msgstr ""
+msgstr "Назва поля"
 
-#: aleksis/core/models.py:461
+#: aleksis/core/models.py:461 aleksis/core/models.py:466
 msgid "Type of field"
-msgstr ""
+msgstr "Тип поля"
 
-#: aleksis/core/models.py:463
+#: aleksis/core/models.py:463 aleksis/core/models.py:468
 msgid "Required"
-msgstr ""
+msgstr "Необхідне"
 
-#: aleksis/core/models.py:464
+#: aleksis/core/models.py:464 aleksis/core/models.py:469
 msgid "Help text / description"
-msgstr ""
+msgstr "Допоміжний текст/опис"
 
-#: aleksis/core/models.py:470
+#: aleksis/core/models.py:470 aleksis/core/models.py:475
 msgid "Addtitional field for groups"
-msgstr ""
+msgstr "Додаткове поле для груп"
 
-#: aleksis/core/models.py:471
+#: aleksis/core/models.py:471 aleksis/core/models.py:476
 msgid "Addtitional fields for groups"
-msgstr ""
+msgstr "Додаткові поля для груп"
 
-#: aleksis/core/models.py:491
+#: aleksis/core/models.py:491 aleksis/core/models.py:496
 msgid "Can assign child groups to groups"
-msgstr ""
+msgstr "Може призначати підлеглі групи до груп"
 
-#: aleksis/core/models.py:492
+#: aleksis/core/models.py:492 aleksis/core/models.py:497
 msgid "Can view statistics about group."
-msgstr ""
+msgstr "Може бачити статистику групи."
 
-#: aleksis/core/models.py:504
+#: aleksis/core/models.py:504 aleksis/core/models.py:509
 msgid "Long name"
-msgstr ""
+msgstr "Довге ім'я"
 
 #: 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 ""
+msgstr "Учасники"
 
 #: 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 ""
+msgstr "Власники"
 
 #: 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 ""
+msgstr "Батьківські групи"
 
-#: aleksis/core/models.py:532
+#: aleksis/core/models.py:532 aleksis/core/models.py:537
 msgid "Type of group"
-msgstr ""
+msgstr "Тип групи"
 
 #: 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:723 aleksis/core/models.py:747
+#: aleksis/core/models.py:838
 msgid "Title"
-msgstr ""
+msgstr "Назва"
 
-#: aleksis/core/models.py:721
+#: aleksis/core/models.py:721 aleksis/core/models.py:726
 msgid "Application"
-msgstr ""
+msgstr "Додаток"
 
-#: aleksis/core/models.py:727
+#: aleksis/core/models.py:727 aleksis/core/models.py:732
 msgid "Activity"
-msgstr ""
+msgstr "Активність"
 
-#: aleksis/core/models.py:728
+#: aleksis/core/models.py:728 aleksis/core/models.py:733
 msgid "Activities"
-msgstr ""
+msgstr "Активності"
 
-#: aleksis/core/models.py:734
+#: aleksis/core/models.py:734 aleksis/core/models.py:739
 msgid "Sender"
-msgstr ""
+msgstr "Відправник"
 
-#: aleksis/core/models.py:739
+#: aleksis/core/models.py:739 aleksis/core/models.py:744
 msgid "Recipient"
-msgstr ""
+msgstr "Отримувач"
 
 #: aleksis/core/models.py:744 aleksis/core/models.py:1071
+#: aleksis/core/models.py:749 aleksis/core/models.py:1078
 msgid "Link"
-msgstr ""
+msgstr "Посилання"
 
-#: aleksis/core/models.py:746
+#: aleksis/core/models.py:746 aleksis/core/models.py:751
 msgid "Send notification at"
-msgstr ""
+msgstr "Надіслати сповіщення о"
 
-#: aleksis/core/models.py:748
+#: aleksis/core/models.py:748 aleksis/core/models.py:753
 msgid "Read"
-msgstr ""
+msgstr "Читати"
 
-#: aleksis/core/models.py:749
+#: aleksis/core/models.py:749 aleksis/core/models.py:754
 msgid "Sent"
-msgstr ""
+msgstr "Надіслано"
 
-#: aleksis/core/models.py:766
+#: aleksis/core/models.py:766 aleksis/core/models.py:771
 msgid "Notification"
-msgstr ""
+msgstr "Сповіщення"
 
 #: 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/templates/core/notifications.html:5 aleksis/core/models.py:772
 msgid "Notifications"
-msgstr ""
+msgstr "Сповіщення"
 
-#: aleksis/core/models.py:835
+#: aleksis/core/models.py:835 aleksis/core/models.py:840
 msgid "Link to detailed view"
-msgstr ""
+msgstr "Посилання на детальний перегляд"
 
-#: aleksis/core/models.py:838
+#: aleksis/core/models.py:838 aleksis/core/models.py:843
 msgid "Date and time from when to show"
-msgstr ""
+msgstr "Дата і час, з якого показувати"
 
-#: aleksis/core/models.py:841
+#: aleksis/core/models.py:841 aleksis/core/models.py:846
 msgid "Date and time until when to show"
-msgstr ""
+msgstr "Дата і час, до якого показувати"
 
-#: aleksis/core/models.py:866
+#: aleksis/core/models.py:866 aleksis/core/models.py:871
 msgid "Announcement"
-msgstr ""
+msgstr "Оголошення"
 
-#: aleksis/core/models.py:904
+#: aleksis/core/models.py:904 aleksis/core/models.py:909
 msgid "Announcement recipient"
-msgstr ""
+msgstr "Отримувач оголошення"
 
-#: aleksis/core/models.py:905
+#: aleksis/core/models.py:905 aleksis/core/models.py:910
 msgid "Announcement recipients"
-msgstr ""
+msgstr "Отримувачі оголошення"
 
-#: aleksis/core/models.py:927
+#: aleksis/core/models.py:927 aleksis/core/models.py:932
 msgid "Widget Title"
-msgstr ""
+msgstr "Назва віджета"
 
-#: aleksis/core/models.py:928
+#: aleksis/core/models.py:928 aleksis/core/models.py:933
 msgid "Activate Widget"
-msgstr ""
+msgstr "Активувати віджет"
 
-#: aleksis/core/models.py:929
+#: aleksis/core/models.py:929 aleksis/core/models.py:934
 msgid "Widget is broken"
-msgstr ""
+msgstr "Віджет зламався"
 
-#: aleksis/core/models.py:932
+#: aleksis/core/models.py:932 aleksis/core/models.py:937
 msgid "Size on mobile devices"
-msgstr ""
+msgstr "Розмір на мобільних"
 
-#: aleksis/core/models.py:933
+#: aleksis/core/models.py:933 aleksis/core/models.py:938
 msgid "<= 600 px, 12 columns"
-msgstr ""
+msgstr "<= 600 пікс, 12 стовпчиків"
 
-#: aleksis/core/models.py:938
+#: aleksis/core/models.py:938 aleksis/core/models.py:943
 msgid "Size on tablet devices"
-msgstr ""
+msgstr "Розмір на планшетах"
 
-#: aleksis/core/models.py:939
+#: aleksis/core/models.py:939 aleksis/core/models.py:944
 msgid "> 600 px, 12 columns"
-msgstr ""
+msgstr "> 600 пікс, 12 стовпчиків"
 
-#: aleksis/core/models.py:944
+#: aleksis/core/models.py:944 aleksis/core/models.py:949
 msgid "Size on desktop devices"
-msgstr ""
+msgstr "Розмір на ПК"
 
-#: aleksis/core/models.py:945
+#: aleksis/core/models.py:945 aleksis/core/models.py:950
 msgid "> 992 px, 12 columns"
-msgstr ""
+msgstr "> 992 пікс, 12 стовпчиків"
 
-#: aleksis/core/models.py:950
+#: aleksis/core/models.py:950 aleksis/core/models.py:955
 msgid "Size on large desktop devices"
-msgstr ""
+msgstr "Розмір на великих екранах"
 
-#: aleksis/core/models.py:951
+#: aleksis/core/models.py:951 aleksis/core/models.py:956
 msgid "> 1200 px>, 12 columns"
-msgstr ""
+msgstr "> 1200 пікс, 12 стовпчиків"
 
-#: aleksis/core/models.py:982
+#: aleksis/core/models.py:982 aleksis/core/models.py:987
 msgid "Can edit default dashboard"
-msgstr ""
+msgstr "Може редагувати типову/стандартну інформпанель"
 
-#: aleksis/core/models.py:983
+#: aleksis/core/models.py:983 aleksis/core/models.py:988
 msgid "Dashboard Widget"
-msgstr ""
+msgstr "Віджет інформпанелі"
 
-#: aleksis/core/models.py:984
+#: aleksis/core/models.py:984 aleksis/core/models.py:989
 msgid "Dashboard Widgets"
-msgstr ""
+msgstr "Віджети інформпанелі"
 
-#: aleksis/core/models.py:990
+#: aleksis/core/models.py:990 aleksis/core/models.py:995
 msgid "URL"
-msgstr ""
+msgstr "URL"
 
-#: aleksis/core/models.py:991
+#: aleksis/core/models.py:991 aleksis/core/models.py:996
 msgid "Icon URL"
-msgstr ""
+msgstr "Іконка URL"
 
-#: aleksis/core/models.py:997
+#: aleksis/core/models.py:997 aleksis/core/models.py:1002
 msgid "External link widget"
-msgstr ""
+msgstr "Зовнішнє посилання на віджет"
 
-#: aleksis/core/models.py:998
+#: aleksis/core/models.py:998 aleksis/core/models.py:1003
 msgid "External link widgets"
-msgstr ""
+msgstr "Зовнішні посилання на віджети"
 
-#: aleksis/core/models.py:1004
+#: aleksis/core/models.py:1004 aleksis/core/models.py:1009
 msgid "Content"
-msgstr ""
+msgstr "Зміст"
 
-#: aleksis/core/models.py:1010
+#: aleksis/core/models.py:1010 aleksis/core/models.py:1015
 msgid "Static content widget"
-msgstr ""
+msgstr "Віджет з постійним змістом"
 
-#: aleksis/core/models.py:1011
+#: aleksis/core/models.py:1011 aleksis/core/models.py:1016
 msgid "Static content widgets"
-msgstr ""
+msgstr "Віджети з постійним змістом"
 
-#: aleksis/core/models.py:1016
+#: aleksis/core/models.py:1016 aleksis/core/models.py:1021
 msgid "Dashboard widget"
-msgstr ""
+msgstr "Віджет інформпанелі"
 
-#: aleksis/core/models.py:1021
+#: aleksis/core/models.py:1021 aleksis/core/models.py:1026
 msgid "Order"
-msgstr ""
+msgstr "Порядок"
 
-#: aleksis/core/models.py:1022
+#: aleksis/core/models.py:1022 aleksis/core/models.py:1027
 msgid "Part of the default dashboard"
-msgstr ""
+msgstr "Частина типової інформпанелі"
 
-#: aleksis/core/models.py:1037
+#: aleksis/core/models.py:1037 aleksis/core/models.py:1042
 msgid "Dashboard widget order"
-msgstr ""
+msgstr "Порядок віджету на інформпанелі"
 
-#: aleksis/core/models.py:1038
+#: aleksis/core/models.py:1038 aleksis/core/models.py:1043
 msgid "Dashboard widget orders"
-msgstr ""
+msgstr "Порядок віджетів на інформпанелі"
 
-#: aleksis/core/models.py:1044
+#: aleksis/core/models.py:1044 aleksis/core/models.py:1049
 msgid "Menu ID"
-msgstr ""
+msgstr "Меню ID"
 
-#: aleksis/core/models.py:1057
+#: aleksis/core/models.py:1057 aleksis/core/models.py:1062
 msgid "Custom menu"
-msgstr ""
+msgstr "Користувацьке меню"
 
-#: aleksis/core/models.py:1058
+#: aleksis/core/models.py:1058 aleksis/core/models.py:1063
 msgid "Custom menus"
-msgstr ""
+msgstr "Користувацькі меню"
 
-#: aleksis/core/models.py:1068
+#: aleksis/core/models.py:1068 aleksis/core/models.py:1075
 msgid "Menu"
-msgstr ""
+msgstr "Меню"
 
 #: 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
 msgid "Icon"
-msgstr ""
+msgstr "Іконка"
 
-#: aleksis/core/models.py:1078
+#: aleksis/core/models.py:1078 aleksis/core/models.py:1085
 msgid "Custom menu item"
-msgstr ""
+msgstr "Пункт користувацького меню"
 
-#: aleksis/core/models.py:1079
+#: aleksis/core/models.py:1079 aleksis/core/models.py:1086
 msgid "Custom menu items"
-msgstr ""
+msgstr "Пункти користувацького меню"
 
-#: aleksis/core/models.py:1093
+#: aleksis/core/models.py:1093 aleksis/core/models.py:1103
 msgid "Title of type"
-msgstr ""
+msgstr "Назва типу"
 
 #: 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
 msgid "Group type"
-msgstr ""
+msgstr "Тип групи"
 
-#: aleksis/core/models.py:1114
+#: aleksis/core/models.py:1114 aleksis/core/models.py:1124
 msgid "Can view system status"
-msgstr ""
+msgstr "Може переглядати стан системи"
 
-#: aleksis/core/models.py:1115
+#: aleksis/core/models.py:1115 aleksis/core/models.py:1125
 msgid "Can manage data"
-msgstr ""
+msgstr "Може керувати даними"
 
-#: aleksis/core/models.py:1116
+#: aleksis/core/models.py:1116 aleksis/core/models.py:1126
 msgid "Can impersonate"
-msgstr ""
+msgstr "Може маскуватися"
 
-#: aleksis/core/models.py:1117
+#: aleksis/core/models.py:1117 aleksis/core/models.py:1127
 msgid "Can use search"
-msgstr ""
+msgstr "Може шукати"
 
-#: aleksis/core/models.py:1118
+#: aleksis/core/models.py:1118 aleksis/core/models.py:1128
 msgid "Can change site preferences"
-msgstr ""
+msgstr "Може змінювати властивості сайту"
 
-#: aleksis/core/models.py:1119
+#: aleksis/core/models.py:1119 aleksis/core/models.py:1129
 msgid "Can change person preferences"
-msgstr ""
+msgstr "Може змінювати властивості особи"
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1120 aleksis/core/models.py:1130
 msgid "Can change group preferences"
-msgstr ""
+msgstr "Може змінювати властивості групи"
 
-#: aleksis/core/models.py:1121
+#: aleksis/core/models.py:1121 aleksis/core/models.py:1131
 msgid "Can test PDF generation"
-msgstr ""
+msgstr "Може генерувати тестові PDF"
 
-#: aleksis/core/models.py:1122
+#: aleksis/core/models.py:1122 aleksis/core/models.py:1132
 msgid "Can invite persons"
-msgstr ""
+msgstr "Може запрошувати осіб"
 
-#: aleksis/core/models.py:1158
+#: aleksis/core/models.py:1158 aleksis/core/models.py:1168
 msgid "Related data check task"
-msgstr ""
+msgstr "Завдання перевірки пов'язаних даних"
 
-#: aleksis/core/models.py:1166
+#: aleksis/core/models.py:1166 aleksis/core/models.py:1176
 msgid "Issue solved"
-msgstr ""
+msgstr "Проблема вирішена"
 
-#: aleksis/core/models.py:1167
+#: aleksis/core/models.py:1167 aleksis/core/models.py:1177
 msgid "Notification sent"
-msgstr ""
+msgstr "Сповіщення надіслане"
 
-#: aleksis/core/models.py:1180
+#: aleksis/core/models.py:1180 aleksis/core/models.py:1190
 msgid "Data check result"
-msgstr ""
+msgstr "Результат перевірки даних"
 
-#: aleksis/core/models.py:1181
+#: aleksis/core/models.py:1181 aleksis/core/models.py:1191
 msgid "Data check results"
-msgstr ""
+msgstr "Результати перевірки даних"
 
-#: aleksis/core/models.py:1183
+#: aleksis/core/models.py:1183 aleksis/core/models.py:1193
 msgid "Can run data checks"
-msgstr ""
+msgstr "Може запускати перевірки даних"
 
-#: aleksis/core/models.py:1184
+#: aleksis/core/models.py:1184 aleksis/core/models.py:1194
 msgid "Can solve data check problems"
-msgstr ""
+msgstr "Може розв'язувати проблеми перевірки даних"
 
-#: aleksis/core/models.py:1191
+#: aleksis/core/models.py:1191 aleksis/core/models.py:1201
 msgid "E-Mail address"
-msgstr ""
+msgstr "Адреса ел.пошти"
 
-#: aleksis/core/models.py:1223
+#: aleksis/core/models.py:1223 aleksis/core/models.py:1233
 msgid "Owner"
-msgstr ""
+msgstr "Власник"
 
-#: aleksis/core/models.py:1227
+#: aleksis/core/models.py:1227 aleksis/core/models.py:1237
 msgid "File expires at"
-msgstr ""
+msgstr "Файл дійсний до"
 
-#: aleksis/core/models.py:1229
+#: aleksis/core/models.py:1229 aleksis/core/models.py:1239
 msgid "Generated HTML file"
-msgstr ""
+msgstr "Згенерований файл HTML"
 
-#: aleksis/core/models.py:1231
+#: aleksis/core/models.py:1231 aleksis/core/models.py:1241
 msgid "Generated PDF file"
-msgstr ""
+msgstr "Згенерований файл PDF"
 
-#: aleksis/core/models.py:1238
+#: aleksis/core/models.py:1238 aleksis/core/models.py:1248
 msgid "PDF file"
-msgstr ""
+msgstr "Файл PDF"
 
-#: aleksis/core/models.py:1239
+#: aleksis/core/models.py:1239 aleksis/core/models.py:1249
 msgid "PDF files"
-msgstr ""
+msgstr "Файли PDF"
 
-#: aleksis/core/models.py:1244
+#: aleksis/core/models.py:1244 aleksis/core/models.py:1254
 msgid "Task result"
-msgstr ""
+msgstr "Результат завдання"
 
-#: aleksis/core/models.py:1247
+#: aleksis/core/models.py:1247 aleksis/core/models.py:1257
 msgid "Task user"
-msgstr ""
+msgstr "Користувач завдання"
 
-#: aleksis/core/models.py:1259
+#: aleksis/core/models.py:1259 aleksis/core/models.py:1269
 msgid "Task user assignment"
-msgstr ""
+msgstr "Призначення користувача завдання"
 
-#: aleksis/core/models.py:1260
+#: aleksis/core/models.py:1260 aleksis/core/models.py:1270
 msgid "Task user assignments"
-msgstr ""
+msgstr "Призначення користувачів завдання"
 
-#: aleksis/core/models.py:1276
+#: aleksis/core/models.py:1276 aleksis/core/models.py:1286
 msgid "Additional attributes"
-msgstr ""
+msgstr "Додаткові атрибути"
 
-#: aleksis/core/models.py:1314
+#: aleksis/core/models.py:1314 aleksis/core/models.py:1324
 msgid "Allowed scopes that clients can request"
-msgstr ""
+msgstr "Дозволені межі дії, які можуть запитувати клієнти"
 
-#: aleksis/core/models.py:1324
-msgid "This image will be shown as icon in the authorization flow. It should be squared."
+#: aleksis/core/models.py:1324 aleksis/core/models.py:1334
+msgid ""
+"This image will be shown as icon in the authorization flow. It should be "
+"squared."
 msgstr ""
+"Це зображення буде виглядати іконкою під час авторизації. Повинне бути "
+"квадратним."
 
-#: aleksis/core/models.py:1373
+#: aleksis/core/models.py:1373 aleksis/core/models.py:1383
 msgid "UUID"
-msgstr ""
+msgstr "UUID"
 
-#: aleksis/core/models.py:1377
+#: aleksis/core/models.py:1377 aleksis/core/models.py:1387
 msgid "Selected ICal feed"
-msgstr ""
+msgstr "Стрічка обраного ICal"
 
-#: aleksis/core/models.py:1386
+#: aleksis/core/models.py:1386 aleksis/core/models.py:1396
 msgid "Personal Calendar URL"
-msgstr ""
+msgstr "URL-посилання особистого календаря"
 
-#: aleksis/core/models.py:1387
+#: aleksis/core/models.py:1387 aleksis/core/models.py:1397
 msgid "Personal Calendar URLs"
-msgstr ""
+msgstr "URL-посилання особистих календарів"
 
 #: aleksis/core/preferences.py:25
 msgid "General"
-msgstr ""
+msgstr "Загальне"
 
 #: aleksis/core/preferences.py:26
 msgid "School"
-msgstr ""
+msgstr "Школа / навч.заклад"
 
 #: aleksis/core/preferences.py:27
 msgid "Theme"
-msgstr ""
+msgstr "Тема"
 
 #: aleksis/core/preferences.py:28
 msgid "Mail"
-msgstr ""
+msgstr "Пошта"
 
 #: aleksis/core/preferences.py:30
 msgid "Footer"
-msgstr ""
+msgstr "Нижній колонтитул (footer)"
 
 #: aleksis/core/preferences.py:31
 msgid "Accounts"
-msgstr ""
+msgstr "Облікові записи"
 
 #: aleksis/core/preferences.py:32
 msgid "Authentication"
-msgstr ""
+msgstr "Авторизація"
 
 #: aleksis/core/preferences.py:33
 msgid "Internationalisation"
-msgstr ""
+msgstr "Інтернаціоналізація"
 
 #: aleksis/core/preferences.py:43
 msgid "Site title"
-msgstr ""
+msgstr "Назва сайту"
 
 #: aleksis/core/preferences.py:55
 msgid "Site description"
-msgstr ""
+msgstr "Опис сайту"
 
 #: aleksis/core/preferences.py:65
 msgid "Primary colour"
-msgstr ""
+msgstr "Основний колір"
 
 #: aleksis/core/preferences.py:77
 msgid "Secondary colour"
-msgstr ""
+msgstr "Додатковий колір"
 
 #: aleksis/core/preferences.py:89
 msgid "Logo"
-msgstr ""
+msgstr "Логотип"
 
 #: aleksis/core/preferences.py:100
 msgid "Favicon"
-msgstr ""
+msgstr "Favicon"
 
 #: aleksis/core/preferences.py:111
 msgid "PWA-Icon"
-msgstr ""
+msgstr "Іконка PWA"
 
 #: aleksis/core/preferences.py:121
 msgid "PWA-Icon is maskable"
-msgstr ""
+msgstr "Іконка PWA може бути з маскою"
 
 #: aleksis/core/preferences.py:133
 msgid "Mail out name"
-msgstr ""
+msgstr "Ім'я відправника"
 
 #: aleksis/core/preferences.py:144
 msgid "Mail out address"
-msgstr ""
+msgstr "Адреса відправника"
 
 #: aleksis/core/preferences.py:157
 msgid "Link to privacy policy"
-msgstr ""
+msgstr "Посилання на політику приватності"
 
 #: aleksis/core/preferences.py:169
 msgid "Link to imprint"
-msgstr ""
+msgstr "Посилання на відбиток"
 
 #: aleksis/core/preferences.py:180
 msgid "Name format for addressing"
-msgstr ""
+msgstr "Формат імені у листуванні"
 
 #: aleksis/core/preferences.py:197
 msgid "Channels to use for notifications"
-msgstr ""
+msgstr "Канали для сповіщень"
 
 #: aleksis/core/preferences.py:209
 msgid "Regular expression to match primary group, e.g. '^Class .*'"
-msgstr ""
+msgstr "Регулярний вираз для пошуку основної групи, напр. '^Class .*'"
 
 #: aleksis/core/preferences.py:220
 msgid "Field on person to match primary group against"
-msgstr ""
+msgstr "Поле щодо особи для співставлення з основною групою"
 
 #: aleksis/core/preferences.py:232
 msgid "Automatically create new persons for new users"
-msgstr ""
+msgstr "Нові особи для нових користувачів створювати автоматично"
 
 #: aleksis/core/preferences.py:241
-msgid "Automatically link existing persons to new users by their e-mail address"
+msgid ""
+"Automatically link existing persons to new users by their e-mail address"
 msgstr ""
+"Пов'язувати існуючих осіб з новими користувачами автоматично за ел.адресами"
 
 #: aleksis/core/preferences.py:252
 msgid "Display name of the school"
-msgstr ""
+msgstr "Назва школи / навч.закладу для відображення"
 
 #: aleksis/core/preferences.py:263
 msgid "Official name of the school, e.g. as given by supervisory authority"
-msgstr ""
+msgstr "Офіційна назва школи / навч.закладу, напр. як у державному свідоцтві"
 
 #: aleksis/core/preferences.py:271
 msgid "Allow users to change their passwords"
-msgstr ""
+msgstr "Дозволити користувачам змінювати свої паролі"
 
 #: aleksis/core/preferences.py:279
 msgid "Allow users to reset their passwords"
-msgstr ""
+msgstr "Дозволити користувачам скидати свої паролі"
 
 #: aleksis/core/preferences.py:287
 msgid "Enable signup"
-msgstr ""
+msgstr "Увімкнути реєстрацію"
 
 #: aleksis/core/preferences.py:295
 msgid "Regular expression for allowed usernames"
-msgstr ""
+msgstr "Регулярний вираз для дозволених логінів"
 
 #: aleksis/core/preferences.py:303
 msgid "Enable invitations"
-msgstr ""
+msgstr "Увімкнути запрошення"
 
 #: aleksis/core/preferences.py:311
 msgid "Length of invite code. (Default 3: abcde-acbde-abcde)"
-msgstr ""
+msgstr "Довжина запрошувального коду. (Типово 3: abcde-acbde-abcde)"
 
 #: aleksis/core/preferences.py:319
 msgid "Size of packets. (Default 5: abcde)"
-msgstr ""
+msgstr "Розмір пакетів. (Типово 5: abcde)"
 
 #: aleksis/core/preferences.py:330
 msgid "Allowed Grant Flows for OAuth applications"
-msgstr ""
+msgstr "Дозволені потоки грантів для додатків з OAuth"
 
 #: aleksis/core/preferences.py:344
 msgid "Available languages"
-msgstr ""
+msgstr "Доступні мови"
 
-#: aleksis/core/preferences.py:357
+#: aleksis/core/preferences.py:357 aleksis/core/preferences.py:343
 msgid "Send emails if data checks detect problems"
-msgstr ""
+msgstr "В разі виявлення проблем під час перевірки даних надіслати ел.лист"
 
-#: aleksis/core/preferences.py:368
+#: aleksis/core/preferences.py:368 aleksis/core/preferences.py:354
 msgid "Email recipients for data checks problem emails"
-msgstr ""
+msgstr "Ел.адреси отримувачів для листів з проблемами перевірки даних"
 
-#: aleksis/core/preferences.py:379
+#: aleksis/core/preferences.py:379 aleksis/core/preferences.py:365
 msgid "Email recipient groups for data checks problem emails"
-msgstr ""
+msgstr "Ел.адреси груп для листів з проблемами перевірки даних"
 
-#: aleksis/core/preferences.py:388
+#: aleksis/core/preferences.py:388 aleksis/core/preferences.py:374
 msgid "Show dashboard to users without login"
-msgstr ""
+msgstr "Відображати інформпанель анонімним користувачам"
 
-#: aleksis/core/preferences.py:397
+#: aleksis/core/preferences.py:397 aleksis/core/preferences.py:383
 msgid "Allow users to edit their dashboard"
-msgstr ""
+msgstr "Дозволити користувачам редагувати свою інформпанель"
 
-#: aleksis/core/preferences.py:408
+#: aleksis/core/preferences.py:408 aleksis/core/preferences.py:394
 msgid "Fields on person model which are editable by themselves."
-msgstr ""
+msgstr "Поля з описом особи, які можна редагувати самостійно."
 
-#: aleksis/core/preferences.py:423
-msgid "Editable fields on person model which should trigger a notification on change"
-msgstr ""
+#: aleksis/core/preferences.py:423 aleksis/core/preferences.py:409
+msgid ""
+"Editable fields on person model which should trigger a notification on change"
+msgstr "Змінювані поля з описом особи, які повинні сповіщати щодо редагування"
 
-#: aleksis/core/preferences.py:437
+#: aleksis/core/preferences.py:437 aleksis/core/preferences.py:423
 msgid "Contact for notification if a person changes their data"
-msgstr ""
+msgstr "Контакт для сповіщень, якщо хтось змінює свої дані"
 
-#: aleksis/core/preferences.py:448
+#: aleksis/core/preferences.py:448 aleksis/core/preferences.py:434
 msgid "Prefer personal photos over avatars"
-msgstr ""
+msgstr "Віддавати перевагу особистим фото замість аватарів"
 
-#: aleksis/core/preferences.py:458
+#: aleksis/core/preferences.py:458 aleksis/core/preferences.py:444
 msgid "PDF file expiration duration"
-msgstr ""
+msgstr "Термін придатності файла PDF"
 
-#: aleksis/core/preferences.py:459
+#: aleksis/core/preferences.py:459 aleksis/core/preferences.py:445
 msgid "in minutes"
-msgstr ""
+msgstr "у хвилинах"
 
-#: aleksis/core/preferences.py:469
+#: aleksis/core/preferences.py:469 aleksis/core/preferences.py:455
 msgid "Automatically update the dashboard and its widgets"
-msgstr ""
+msgstr "Автоматично оновлювати інформпанель та її віджети"
 
-#: aleksis/core/preferences.py:479
+#: aleksis/core/preferences.py:479 aleksis/core/preferences.py:465
 msgid "Automatically update the dashboard and its widgets sitewide"
-msgstr ""
+msgstr "Автоматично оновлювати інформпанель та її віджети (для всього сайту)"
 
-#: aleksis/core/preferences.py:489
+#: aleksis/core/preferences.py:489 aleksis/core/preferences.py:475
 msgid "Country for phone number parsing"
-msgstr ""
+msgstr "Країна для аналізу номера телефона"
 
-#: aleksis/core/settings.py:540
+#: aleksis/core/settings.py:540 aleksis/core/settings.py:541
 msgid "English"
-msgstr ""
+msgstr "Англійська"
 
-#: aleksis/core/settings.py:541
+#: aleksis/core/settings.py:541 aleksis/core/settings.py:542
 msgid "German"
-msgstr ""
+msgstr "Німецька"
 
 #: aleksis/core/tables.py:24
 #: aleksis/core/templates/core/announcement/list.html:36
@@ -1256,14 +1301,17 @@ msgstr ""
 #: aleksis/core/templates/core/person/full.html:26
 #: aleksis/core/templates/core/person/full.html:86
 #: 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 ""
+msgstr "Редагувати"
 
 #: 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
 msgid "Actions"
-msgstr ""
+msgstr "Дії"
 
 #: aleksis/core/tables.py:61 aleksis/core/tables.py:62
 #: aleksis/core/tables.py:76 aleksis/core/tables.py:92
@@ -1274,28 +1322,38 @@ msgstr ""
 #: 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 ""
+msgstr "Видалити"
 
 #: 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 ""
+msgstr "Помилка"
 
 #: aleksis/core/templates/403.html:14
 msgid ""
 "You are not allowed to access the requested page or\n"
 "          object."
 msgstr ""
+"У Вас немає доступу до запитуваної сторінки або\n"
+"          об'єкту."
 
 #: 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"
+"            до адміністраторів сайту:\n"
+"          "
 
 #: aleksis/core/templates/404.html:12
 msgid ""
@@ -1304,46 +1362,65 @@ msgid ""
 "            it is possible that that link was outdated.\n"
 "          "
 msgstr ""
+"\n"
+"            Якщо Ви були перенаправлені посиланням із зовнішньої сторінки,\n"
+"            ймовірно, це посилання вже застаріло.\n"
+"          "
 
 #: aleksis/core/templates/500.html:10
 msgid ""
 "An unexpected error has\n"
 "          occured."
 msgstr ""
+"Сталася неочікувана\n"
+"          помилка."
 
 #: 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"
+"          "
 
 #: aleksis/core/templates/500.html:21
 msgid "Retry"
-msgstr ""
+msgstr "Спробувати ще"
 
 #: aleksis/core/templates/503.html:10
 msgid ""
 "The maintenance mode is currently enabled. Please try again\n"
 "          later."
 msgstr ""
+"Сайт перебуває зараз на обслуговуванні. Спробуйте зайти\n"
+"          пізніше."
 
 #: 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"
+"          "
 
 #: aleksis/core/templates/account/account_inactive.html:5
 #: aleksis/core/templates/account/account_inactive.html:6
 msgid "Account inactive"
-msgstr ""
+msgstr "Обліковий запис неактивний"
 
 #: aleksis/core/templates/account/account_inactive.html:14
 msgid "Account inactive."
-msgstr ""
+msgstr "Обліковий запис неактивний."
 
 #: aleksis/core/templates/account/account_inactive.html:17
 msgid ""
@@ -1352,56 +1429,75 @@ msgid ""
 "            error, please contact one of your site administrators.\n"
 "          "
 msgstr ""
+"\n"
+"            Цей обліковий запис наразі неактивний. Якщо Ви думаєте,\n"
+"            що це помилка, зверніться до адміністраторів сайту.\n"
+"          "
 
 #: aleksis/core/templates/account/email/base_message.txt:5
 msgid "Hello!"
-msgstr ""
+msgstr "Привіт!"
 
 #: aleksis/core/templates/account/email/base_message.txt:9
 msgid "Your AlekSIS team"
-msgstr ""
+msgstr "Команда AlekSIS"
 
 #: aleksis/core/templates/account/email_confirm.html:5
 #: aleksis/core/templates/account/email_confirm.html:6
 #: aleksis/core/templates/account/email_confirm.html:17
 #: aleksis/core/templates/socialaccount/login.html:17
 msgid "Confirm"
-msgstr ""
+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."
+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>."
+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:12
 msgid "Forgot your current password? Click here to reset it:"
-msgstr ""
+msgstr "Забули свій пароль? Натисніть тут для скидання:"
 
 #: aleksis/core/templates/account/password_change.html:12
 msgid "Forgot Password?"
-msgstr ""
+msgstr "Забули пароль?"
 
 #: aleksis/core/templates/account/password_change_disabled.html:5
 #: aleksis/core/templates/account/password_change_disabled.html:6
 msgid "Changing of password disabled"
-msgstr ""
+msgstr "Зміна паролю вимкнена"
 
 #: aleksis/core/templates/account/password_change_disabled.html:13
 msgid "Changing of password disabled."
-msgstr ""
+msgstr "Зміна паролю вимкнена."
 
 #: aleksis/core/templates/account/password_change_disabled.html:15
 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"
+"          "
 
 #: aleksis/core/templates/account/password_reset.html:5
 #: aleksis/core/templates/account/password_reset.html:15
@@ -1411,21 +1507,27 @@ msgstr ""
 #: aleksis/core/templates/account/verification_email_required.html:6
 #: aleksis/core/templates/two_factor/core/login.html:100
 msgid "Reset password"
-msgstr ""
+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."
+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 ""
 "Please contact one of your site administrators, if you\n"
 "        have any trouble resetting your password:"
 msgstr ""
+"Якщо у Вас виникла проблема зі скиданням пароля,\n"
+"        зверніться, будь ласка, до адміністраторів сайту:"
 
 #: aleksis/core/templates/account/password_reset_done.html:15
 msgid "Password reset mail sent"
-msgstr ""
+msgstr "Лист для скидання пароля надісланий"
 
 #: aleksis/core/templates/account/password_reset_done.html:18
 #: aleksis/core/templates/account/verification_email_required.html:16
@@ -1435,19 +1537,31 @@ msgid ""
 "            administrators if you do not receive it within a few minutes.\n"
 "          "
 msgstr ""
+"\n"
+"            Ми надіслали Вам ел.листа. Якщо Ви його не отримаєте протягом\n"
+"            декількох хвилин, зверніться, будь ласка, до адміністраторів "
+"сайту.\n"
+"          "
 
 #: aleksis/core/templates/account/password_reset_from_key.html:15
 msgid "Bad token"
-msgstr ""
+msgstr "Несправний токен"
 
 #: aleksis/core/templates/account/password_reset_from_key.html:19
 #, 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"
+"            "
 
 #: aleksis/core/templates/account/password_reset_from_key.html:25
 msgid ""
@@ -1456,6 +1570,10 @@ msgid ""
 "              administrators\n"
 "            "
 msgstr ""
+"\n"
+"              Якщо проблема досі присутня, зверніться, будь ласка, до\n"
+"              адміністраторів сайту\n"
+"            "
 
 #: aleksis/core/templates/account/password_reset_from_key.html:56
 #: aleksis/core/templates/account/password_reset_from_key_done.html:15
@@ -1464,41 +1582,46 @@ msgid ""
 "            Your password is now changed!\n"
 "          "
 msgstr ""
+"\n"
+"            Ваш пароль змінений!\n"
+"          "
 
 #: aleksis/core/templates/account/password_reset_from_key.html:61
 msgid "Back to login"
-msgstr ""
+msgstr "Назад до входу"
 
 #: aleksis/core/templates/account/password_reset_from_key_done.html:13
 msgid "Password changed!"
-msgstr ""
+msgstr "Пароль змінений!"
 
 #: aleksis/core/templates/account/password_set.html:5
 #: aleksis/core/templates/account/password_set.html:6
 #: aleksis/core/templates/account/password_set.html:12
 msgid "Set password"
-msgstr ""
+msgstr "Налаштування пароля"
 
 #: aleksis/core/templates/account/signup.html:5
 #: aleksis/core/templates/account/signup.html:6
 #: aleksis/core/templates/socialaccount/signup.html:5
 #: aleksis/core/templates/socialaccount/signup.html:6
 msgid "Signup"
-msgstr ""
+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>."
+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_closed.html:5
 #: aleksis/core/templates/account/signup_closed.html:6
 msgid "Signup closed"
-msgstr ""
+msgstr "Реєстрація закрита"
 
 #: aleksis/core/templates/account/signup_closed.html:14
 msgid "Signup closed."
-msgstr ""
+msgstr "Реєстрація закрита."
 
 #: aleksis/core/templates/account/signup_closed.html:17
 msgid ""
@@ -1507,27 +1630,39 @@ msgid ""
 "            error, please contact one of your site administrators.\n"
 "          "
 msgstr ""
+"\n"
+"            Реєстрація наразі закрита. Якщо Ви думаєте, що це помилка,\n"
+"            можете звернутися до адміністраторів сайту.\n"
+"          "
 
 #: aleksis/core/templates/account/verification_email_required.html:14
 msgid "Password reset mail sent!"
-msgstr ""
+msgstr "Лист для скидання пароля надісланий!"
 
 #: aleksis/core/templates/account/verification_sent.html:5
 #: aleksis/core/templates/account/verification_sent.html:6
 msgid "Verify your email address"
-msgstr ""
+msgstr "Перевірте свою адресу ел.пошти"
 
 #: aleksis/core/templates/account/verification_sent.html:14
 msgid "Verify your email!"
-msgstr ""
+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"
+"          "
 
 #: aleksis/core/templates/account/verification_sent.html:22
 msgid ""
@@ -1537,75 +1672,82 @@ msgid ""
 "            contact us if you do not receive it within a few minutes.\n"
 "          "
 msgstr ""
+"\n"
+"            Ми надіслали Вам для перевірки ел.листа.\n"
+"            Будь ласка, перейдіть за вказаним там посиланням. Якщо Ви не "
+"отримаєте\n"
+"            листа протягом декількох хвилин, зверніться, будь ласка, до "
+"нас.\n"
+"          "
 
 #: aleksis/core/templates/core/additional_field/edit.html:6
 #: aleksis/core/templates/core/additional_field/edit.html:7
 msgid "Edit additional field"
-msgstr ""
+msgstr "Редагування додаткового поля"
 
 #: aleksis/core/templates/core/additional_field/list.html:14
 msgid "Create additional field"
-msgstr ""
+msgstr "Створити додаткове поле"
 
 #: aleksis/core/templates/core/announcement/form.html:14
 #: aleksis/core/templates/core/announcement/form.html:21
 msgid "Edit announcement"
-msgstr ""
+msgstr "Редагування оголошення"
 
 #: aleksis/core/templates/core/announcement/form.html:16
 msgid "Publish announcement"
-msgstr ""
+msgstr "Розміщення оголошення"
 
 #: aleksis/core/templates/core/announcement/form.html:23
 #: aleksis/core/templates/core/announcement/list.html:13
 msgid "Publish new announcement"
-msgstr ""
+msgstr "Розмістити нове оголошення"
 
 #: aleksis/core/templates/core/announcement/form.html:34
-msgid "Save und publish announcement"
-msgstr ""
+msgid "Save and publish announcement"
+msgstr "Зберегти та розмістити оголошення"
 
 #: aleksis/core/templates/core/announcement/list.html:19
 msgid "Valid from"
-msgstr ""
+msgstr "Дійсне з"
 
 #: aleksis/core/templates/core/announcement/list.html:20
 msgid "Valid until"
-msgstr ""
+msgstr "Дійсне до"
 
 #: aleksis/core/templates/core/announcement/list.html:21
 msgid "Recipients"
-msgstr ""
+msgstr "Отримувачі"
 
 #: aleksis/core/templates/core/announcement/list.html:50
 msgid "There are no announcements."
-msgstr ""
+msgstr "Оголошень немає."
 
 #: aleksis/core/templates/core/base.html:213
 msgid "About AlekSIS® — The Free School Information System"
-msgstr ""
+msgstr "Щодо AlekSIS® — The Free School Information System"
 
 #: aleksis/core/templates/core/base.html:221
 msgid "Imprint"
-msgstr ""
+msgstr "Відбиток"
 
 #: aleksis/core/templates/core/base.html:229
 msgid "Privacy Policy"
-msgstr ""
+msgstr "Політика приватності"
 
 #: aleksis/core/templates/core/base_print.html:74
 msgid "Powered by AlekSIS®"
-msgstr ""
+msgstr "Базується на AlekSIS®"
 
 #: aleksis/core/templates/core/dashboard_widget/create.html:8
 #: aleksis/core/templates/core/dashboard_widget/create.html:12
 #, python-format
 msgid "Create %(widget)s"
-msgstr ""
+msgstr "Створити %(widget)s"
 
 #: aleksis/core/templates/core/dashboard_widget/dashboardwidget_broken.html:10
 msgid "This widget is currently not available."
-msgstr ""
+msgstr "Цей віджет зараз недоступний."
 
 #: aleksis/core/templates/core/dashboard_widget/dashboardwidget_broken.html:14
 #, python-format
@@ -1615,77 +1757,83 @@ msgid ""
 "            There is no need for you to take any action.\n"
 "          "
 msgstr ""
+"\n"
+"            Під час отримання віджета \"%(title)s\" виникла проблема.\n"
+"            Вам нічого робити не потрібно.\n"
+"          "
 
 #: aleksis/core/templates/core/dashboard_widget/edit.html:8
 #: aleksis/core/templates/core/dashboard_widget/edit.html:12
 #, python-format
 msgid "Edit %(widget)s"
-msgstr ""
+msgstr "Редагувати %(widget)s"
 
 #: aleksis/core/templates/core/dashboard_widget/list.html:15
 msgid "Create dashboard widget"
-msgstr ""
+msgstr "Створити віджет для інформпанелі"
 
 #: aleksis/core/templates/core/dashboard_widget/list.html:22
 #, python-format
 msgid "Create %(name)s"
-msgstr ""
+msgstr "Створити %(name)s"
 
 #: aleksis/core/templates/core/dashboard_widget/list.html:32
 #: aleksis/core/templates/core/edit_dashboard.html:8
 #: aleksis/core/templates/core/edit_dashboard.html:15
 msgid "Edit default dashboard"
-msgstr ""
+msgstr "Редагувати типову/стандартну інформпанель"
 
 #: aleksis/core/templates/core/data_check/list.html:15
 msgid "Check data again"
-msgstr ""
+msgstr "Перевірити дані ще раз"
 
 #: aleksis/core/templates/core/data_check/list.html:22
 msgid "The system detected some problems with your data."
-msgstr ""
+msgstr "Система виявила деякі проблеми з Вашими даними."
 
 #: aleksis/core/templates/core/data_check/list.html:23
 msgid ""
 "Please go through all data and check whether some extra action is\n"
 "          needed."
 msgstr ""
+"Будь ласка, уважно перегляньте усі дані і перевірте чи не потрібно\n"
+"          щось зробити."
 
 #: aleksis/core/templates/core/data_check/list.html:31
 msgid "Everything is fine."
-msgstr ""
+msgstr "Все чудово."
 
 #: aleksis/core/templates/core/data_check/list.html:32
 msgid "The system hasn't detected any problems with your data."
-msgstr ""
+msgstr "Система не виявила жодних проблем з Вашими даними."
 
 #: aleksis/core/templates/core/data_check/list.html:40
 msgid "Detected problems"
-msgstr ""
+msgstr "Виявлені проблеми"
 
 #: aleksis/core/templates/core/data_check/list.html:45
 msgid "Affected object"
-msgstr ""
+msgstr "Залежні об'єкти"
 
 #: aleksis/core/templates/core/data_check/list.html:46
 msgid "Detected problem"
-msgstr ""
+msgstr "Виявлена проблема"
 
 #: aleksis/core/templates/core/data_check/list.html:47
 msgid "Show details"
-msgstr ""
+msgstr "Детальніше"
 
 #: aleksis/core/templates/core/data_check/list.html:48
 msgid "Options to solve the problem"
-msgstr ""
+msgstr "Варіанти вирішення проблеми"
 
 #: aleksis/core/templates/core/data_check/list.html:63
 msgid "Show object"
-msgstr ""
+msgstr "Переглянути об'єкт"
 
 #: aleksis/core/templates/core/data_check/list.html:86
 msgid "Registered checks"
-msgstr ""
+msgstr "Зареєстровані перевірки"
 
 #: aleksis/core/templates/core/data_check/list.html:90
 msgid ""
@@ -1693,66 +1841,96 @@ msgid ""
 "            The system will check for the following problems:\n"
 "          "
 msgstr ""
+"\n"
+"            Система перевірить наявність таких проблеми:\n"
+"          "
 
 #: aleksis/core/templates/core/edit_dashboard.html:6
 #: aleksis/core/templates/core/edit_dashboard.html:13
 #: aleksis/core/templates/core/index.html:17
 msgid "Edit dashboard"
-msgstr ""
+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"
+"        "
 
 #: 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"
+"        "
 
 #: aleksis/core/templates/core/edit_dashboard.html:48
 msgid "Available widgets"
-msgstr ""
+msgstr "Доступні віджети"
 
 #: aleksis/core/templates/core/edit_dashboard.html:57
 msgid "Your dashboard"
-msgstr ""
+msgstr "Ваша інформпанель"
 
 #: aleksis/core/templates/core/edit_dashboard.html:59
 msgid "Default dashboard"
-msgstr ""
+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"
+"        "
 
 #: aleksis/core/templates/core/group/child_groups.html:31
 msgid "Update selection"
-msgstr ""
+msgstr "Оновити вибір"
 
 #: aleksis/core/templates/core/group/child_groups.html:35
 msgid "Clear all filters"
-msgstr ""
+msgstr "Очистити фільтри"
 
 #: aleksis/core/templates/core/group/child_groups.html:39
 msgid "Currently selected groups"
-msgstr ""
+msgstr "Позначені зараз групи"
 
 #: aleksis/core/templates/core/group/child_groups.html:52
 msgid "Start assigning child groups for this groups"
-msgstr ""
+msgstr "Розпочати призначення підлеглих груп до цих груп"
 
 #: aleksis/core/templates/core/group/child_groups.html:61
 msgid ""
@@ -1760,23 +1938,36 @@ msgid ""
 "            Please select some groups in order to go on with assigning.\n"
 "          "
 msgstr ""
+"\n"
+"            Оберіть, будь ласка, декілька груп у порядку, за яким "
+"призначати.\n"
+"          "
 
 #: aleksis/core/templates/core/group/child_groups.html:72
 msgid "Current group:"
-msgstr ""
+msgstr "Поточна група:"
 
 #: aleksis/core/templates/core/group/child_groups.html:78
 msgid "Please be careful!"
-msgstr ""
+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"
+"          "
 
 #: aleksis/core/templates/core/group/child_groups.html:93
 #: aleksis/core/templates/core/group/child_groups.html:128
@@ -1784,91 +1975,96 @@ msgstr ""
 #: aleksis/core/templates/two_factor/_wizard_actions.html:15
 #: aleksis/core/templates/two_factor/_wizard_actions.html:20
 msgid "Back"
-msgstr ""
+msgstr "Назад"
 
 #: aleksis/core/templates/core/group/child_groups.html:99
 #: aleksis/core/templates/core/group/child_groups.html:134
 #: aleksis/core/templates/two_factor/_wizard_actions.html:26
 msgid "Next"
-msgstr ""
+msgstr "Наступний"
 
 #: aleksis/core/templates/core/group/child_groups.html:106
 #: aleksis/core/templates/core/group/child_groups.html:141
 #: aleksis/core/templates/core/partials/save_button.html:3
 msgid "Save"
-msgstr ""
+msgstr "Зберегти"
 
 #: aleksis/core/templates/core/group/child_groups.html:112
 #: aleksis/core/templates/core/group/child_groups.html:147
 msgid "Save and next"
-msgstr ""
+msgstr "Зберегти і йти далі"
 
 #: aleksis/core/templates/core/group/edit.html:11
 #: aleksis/core/templates/core/group/edit.html:12
 msgid "Edit group"
-msgstr ""
+msgstr "Редагувати групу"
 
 #: 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 ""
+msgstr "Змінити властивості"
 
 #: aleksis/core/templates/core/group/full.html:64
+#: aleksis/core/templates/core/group/full.html:68
 msgid "Statistics"
-msgstr ""
+msgstr "Статистика"
 
 #: aleksis/core/templates/core/group/full.html:67
+#: aleksis/core/templates/core/group/full.html:73
 msgid "Count of members"
-msgstr ""
+msgstr "Кількість учасників"
 
 #: aleksis/core/templates/core/group/full.html:71
+#: aleksis/core/templates/core/group/full.html:81
 msgid "Average age"
-msgstr ""
+msgstr "Середній вік"
 
 #: aleksis/core/templates/core/group/full.html:76
+#: aleksis/core/templates/core/group/full.html:90
 msgid "Age range"
-msgstr ""
+msgstr "Віковий діапазон"
 
 #: aleksis/core/templates/core/group/full.html:76
 msgid "years to"
-msgstr ""
+msgstr "–"
 
 #: aleksis/core/templates/core/group/full.html:76
 msgid "years "
-msgstr ""
+msgstr "рр. "
 
 #: aleksis/core/templates/core/group/list.html:14
 msgid "Create group"
-msgstr ""
+msgstr "Створити групу"
 
 #: aleksis/core/templates/core/group/list.html:17
 msgid "Filter groups"
-msgstr ""
+msgstr "Фільтрувати групи"
 
 #: aleksis/core/templates/core/group/list.html:24
 #: aleksis/core/templates/core/person/list.html:28
 msgid "Clear"
-msgstr ""
+msgstr "Очистити"
 
 #: aleksis/core/templates/core/group/list.html:28
 msgid "Selected groups"
-msgstr ""
+msgstr "Обрані групи"
 
 #: aleksis/core/templates/core/group_type/edit.html:6
 #: aleksis/core/templates/core/group_type/edit.html:7
 msgid "Edit group type"
-msgstr ""
+msgstr "Редагувати тип групи"
 
 #: aleksis/core/templates/core/group_type/list.html:14
 msgid "Create group type"
-msgstr ""
+msgstr "Створити тип групи"
 
 #: 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 ""
+msgstr "Створити посилання iCal"
 
 #: aleksis/core/templates/core/ical/ical_create.html:16
 #: aleksis/core/templates/core/ical/ical_edit.html:16
@@ -1877,125 +2073,159 @@ msgstr ""
 #: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:24
 #: aleksis/core/templates/two_factor/_wizard_actions.html:6
 msgid "Cancel"
-msgstr ""
+msgstr "Скасувати"
 
 #: 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 ""
+msgstr "Редагувати посилання iCal %(object)s"
 
 #: aleksis/core/templates/core/ical/ical_list.html:4
 #: aleksis/core/templates/core/ical/ical_list.html:5
 msgid "ICal Feeds"
-msgstr ""
+msgstr "iCal-стрічки"
 
 #: 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."
+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). "
+"Ви можете створити їх стільки, скільки Вам необхідно та імпортувати їх у ПЗ "
+"для роботи з календарями."
 
 #: aleksis/core/templates/core/ical/ical_list.html:14
 msgid "Your iCal URLs"
-msgstr ""
+msgstr "Ваші посилання iCal"
 
 #: aleksis/core/templates/core/index.html:4
 msgid "Home"
-msgstr ""
+msgstr "Додому"
 
 #: aleksis/core/templates/core/index.html:49
 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"
+"      "
 
 #: aleksis/core/templates/core/index.html:59
 msgid "Last activities"
-msgstr ""
+msgstr "Останні дії"
 
 #: aleksis/core/templates/core/index.html:77
 msgid "No activities available yet."
-msgstr ""
+msgstr "Дії поки що не доступні."
 
 #: aleksis/core/templates/core/index.html:82
 msgid "Recent notifications"
-msgstr ""
+msgstr "Свіжі сповіщення"
 
 #: aleksis/core/templates/core/index.html:98
 #: aleksis/core/templates/core/notifications.html:23
 msgid "More information →"
-msgstr ""
+msgstr "Більше інформації →"
 
 #: aleksis/core/templates/core/index.html:105
 #: aleksis/core/templates/core/notifications.html:30
 msgid "No notifications available yet."
-msgstr ""
+msgstr "Сповіщення поки що не доступні."
 
 #: aleksis/core/templates/core/pages/about.html:6
 msgid "About AlekSIS®"
-msgstr ""
+msgstr "Щодо AlekSIS®"
 
 #: aleksis/core/templates/core/pages/about.html:7
 msgid "AlekSIS® – The Free School Information System"
-msgstr ""
+msgstr "AlekSIS® – The Free School Information System"
 
 #: aleksis/core/templates/core/pages/about.html:15
 msgid "About AlekSIS"
-msgstr ""
+msgstr "Щодо 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"
+"              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"
+"              і ним може користуватися будь-хто.\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"
+"              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/core/templates/core/pages/about.html:30
 msgid "Website of AlekSIS"
-msgstr ""
+msgstr "Веб-сайт AlekSIS"
 
 #: aleksis/core/templates/core/pages/about.html:31
 msgid "Source code"
-msgstr ""
+msgstr "Програмний код"
 
 #: aleksis/core/templates/core/pages/about.html:40
 msgid "Licence information"
-msgstr ""
+msgstr "Ліцензійна інформація"
 
 #: 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"
+"              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"
+"              Ці ліцензії мають таку позначку:\n"
+"            "
 
 #: aleksis/core/templates/core/pages/about.html:50
 msgid "Free/Open Source Licence"
-msgstr ""
+msgstr "Безкоштовна або Ліцензія Відкритого Коду (Open Source)"
 
 #: aleksis/core/templates/core/pages/about.html:51
 msgid "Other Licence"
-msgstr ""
+msgstr "Інша ліцензія"
 
 #: aleksis/core/templates/core/pages/about.html:55
 msgid "Full licence text"
-msgstr ""
+msgstr "Повний текст ліцензії"
 
 #: aleksis/core/templates/core/pages/about.html:56
 msgid "More information about the EUPL"
-msgstr ""
+msgstr "Більше інформації щодо EUPL"
 
 #: aleksis/core/templates/core/pages/about.html:95
 #, python-format
@@ -2004,11 +2234,14 @@ msgid ""
 "                    This app is licenced under %(licence)s.\n"
 "                  "
 msgstr ""
+"\n"
+"                    Цей додаток ліцензований під %(licence)s.\n"
+"                  "
 
 #: aleksis/core/templates/core/pages/delete.html:6
 #, python-format
 msgid "Delete %(object_name)s"
-msgstr ""
+msgstr "Видалити %(object_name)s"
 
 #: aleksis/core/templates/core/pages/delete.html:13
 #, python-format
@@ -2017,114 +2250,142 @@ msgid ""
 "      Do you really want to delete the %(object_name)s \"%(object)s\"?\n"
 "    "
 msgstr ""
+"\n"
+"      Ви дійно хочете видалити %(object_name)s \"%(object)s\"?\n"
+"    "
 
 #: aleksis/core/templates/core/pages/progress.html:27
 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"
+"            "
 
 #: aleksis/core/templates/core/pages/progress.html:47
 #: aleksis/core/templates/two_factor/core/otp_required.html:19
 msgid "Go back"
-msgstr ""
+msgstr "Назад"
 
 #: aleksis/core/templates/core/pages/system_status.html:12
 msgid "System checks"
-msgstr ""
+msgstr "Системні перевірки"
 
 #: aleksis/core/templates/core/pages/system_status.html:22
 msgid "Maintenance mode enabled"
-msgstr ""
+msgstr "Активований режим обслуговування"
 
 #: 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 "
+"thesite.\n"
 "              "
 msgstr ""
+"\n"
+"                Доступ до сайту мають лише адміністратор та відвідувачі з "
+"внутрішніми IP-адресами.\n"
+"              "
 
 #: aleksis/core/templates/core/pages/system_status.html:36
 msgid "Maintenance mode disabled"
-msgstr ""
+msgstr "Режим обслуговування деактивований"
 
 #: aleksis/core/templates/core/pages/system_status.html:37
 msgid "Everyone can access the site."
-msgstr ""
+msgstr "Доступ до сайту мають усі."
 
 #: aleksis/core/templates/core/pages/system_status.html:47
 msgid "Debug mode enabled"
-msgstr ""
+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"
+"              "
 
 #: aleksis/core/templates/core/pages/system_status.html:56
 msgid "Debug mode disabled"
-msgstr ""
+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"
+"              "
 
 #: aleksis/core/templates/core/pages/system_status.html:71
 msgid "System health checks"
-msgstr ""
+msgstr "Перевірки роботи системи"
 
 #: aleksis/core/templates/core/pages/system_status.html:77
 msgid "Service"
-msgstr ""
+msgstr "Служба"
 
 #: aleksis/core/templates/core/pages/system_status.html:78
 #: aleksis/core/templates/core/pages/system_status.html:119
 msgid "Status"
-msgstr ""
+msgstr "Стан"
 
 #: aleksis/core/templates/core/pages/system_status.html:79
 msgid "Time taken"
-msgstr ""
+msgstr "Тривалість"
 
 #: aleksis/core/templates/core/pages/system_status.html:100
 msgid "seconds"
-msgstr ""
+msgstr "сек"
 
 #: aleksis/core/templates/core/pages/system_status.html:111
 msgid "Celery task results"
-msgstr ""
+msgstr "Результати виконання Celery"
 
 #: aleksis/core/templates/core/pages/system_status.html:116
 #: aleksis/core/templates/templated_email/celery_failure.email:9
 #: aleksis/core/templates/templated_email/celery_failure.email:28
 msgid "Task"
-msgstr ""
+msgstr "Завдання"
 
 #: aleksis/core/templates/core/pages/system_status.html:117
 msgid "ID"
-msgstr ""
+msgstr "ID"
 
 #: aleksis/core/templates/core/pages/system_status.html:118
 msgid "Date done"
-msgstr ""
+msgstr "Час завершення"
 
 #: aleksis/core/templates/core/pages/test_pdf.html:7
 #: aleksis/core/templates/core/pages/test_pdf.html:8
 msgid "Test PDF generation"
-msgstr ""
+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"
+"      "
 
 #: aleksis/core/templates/core/partials/announcements.html:8
 #: aleksis/core/templates/core/partials/announcements.html:35
@@ -2134,6 +2395,9 @@ msgid ""
 "              Valid for %(from)s\n"
 "            "
 msgstr ""
+"\n"
+"              Дійсний на %(from)s\n"
+"            "
 
 #: aleksis/core/templates/core/partials/announcements.html:12
 #, python-format
@@ -2142,6 +2406,9 @@ msgid ""
 "              Valid from %(from)s until %(until)s\n"
 "            "
 msgstr ""
+"\n"
+"              Дійсний з %(from)s до %(until)s\n"
+"            "
 
 #: aleksis/core/templates/core/partials/announcements.html:39
 #, python-format
@@ -2150,42 +2417,53 @@ msgid ""
 "              Valid for %(from)s – %(until)s\n"
 "            "
 msgstr ""
+"\n"
+"              Дійсний на %(from)s – %(until)s\n"
+"            "
 
 #: 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 ""
+msgstr "Аватар"
 
 #: aleksis/core/templates/core/partials/avatar_content.html:19
 #: aleksis/core/templates/core/partials/avatar_content.html:20
 msgid "Identicon"
-msgstr ""
+msgstr "Ідентифікатор (іконка)"
 
 #: aleksis/core/templates/core/partials/crud_events.html:15
 msgid "Changed by"
-msgstr ""
+msgstr "Змінене"
 
 #: aleksis/core/templates/core/partials/crud_events.html:15
 msgid "Unknown"
-msgstr ""
+msgstr "Невідомо"
 
 #: aleksis/core/templates/core/partials/language_form.html:15
+#: aleksis/core/templates/core/partials/language_form.html:17
 msgid "Language"
-msgstr ""
+msgstr "Мова"
 
 #: aleksis/core/templates/core/partials/language_form.html:27
+#: aleksis/core/templates/core/partials/language_form.html:29
 msgid "Select language"
-msgstr ""
+msgstr "Оберіть мову"
 
 #: aleksis/core/templates/core/partials/no_person.html:12
 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"
+"          "
 
 #: aleksis/core/templates/core/partials/no_person.html:19
 msgid ""
@@ -2195,140 +2473,149 @@ msgid ""
 "            the managers of AlekSIS at your school.\n"
 "          "
 msgstr ""
+"\n"
+"            Ваш обліковий запис не пов'язаний з фізособою. Це означає,\n"
+"            що Ви не маєте жодного доступу до навчальної інформації. "
+"Зверніться,\n"
+"            будь ласка, до адміністраторів AlekSIS у Вашому навчальному "
+"закладі.\n"
+"          "
 
 #: aleksis/core/templates/core/perms/assign.html:12
 #: aleksis/core/templates/core/perms/assign.html:13
 msgid "Assign permission"
-msgstr ""
+msgstr "Призначити дозвіл"
 
 #: aleksis/core/templates/core/perms/assign.html:17
 msgid "Selected permission"
-msgstr ""
+msgstr "Обраний дозвіл"
 
 #: aleksis/core/templates/core/perms/assign.html:26
 msgid "Assign"
-msgstr ""
+msgstr "Призначити"
 
 #: aleksis/core/templates/core/perms/list.html:21
 msgid "Assign a new permission"
-msgstr ""
+msgstr "Призначити новий дозвіл"
 
 #: aleksis/core/templates/core/perms/list.html:25
 msgid "Select"
-msgstr ""
+msgstr "Обрати"
 
 #: aleksis/core/templates/core/perms/list.html:34
 msgid "Global (user)"
-msgstr ""
+msgstr "Глобально (користувач)"
 
 #: aleksis/core/templates/core/perms/list.html:38
 msgid "Global (group)"
-msgstr ""
+msgstr "Глобально (група)"
 
 #: aleksis/core/templates/core/perms/list.html:42
 msgid "Object (user)"
-msgstr ""
+msgstr "Об'єкт (користувач)"
 
 #: aleksis/core/templates/core/perms/list.html:46
 msgid "Object (group)"
-msgstr ""
+msgstr "Об'єкт (група)"
 
 #: aleksis/core/templates/core/perms/list.html:52
 msgid "Filter permissions"
-msgstr ""
+msgstr "Фільтр дозволів"
 
 #: aleksis/core/templates/core/perms/list.html:58
 msgid "Update"
-msgstr ""
+msgstr "Оновити"
 
 #: aleksis/core/templates/core/person/create.html:12
 #: aleksis/core/templates/core/person/create.html:13
 #: aleksis/core/templates/core/person/list.html:17
 msgid "Create person"
-msgstr ""
+msgstr "Створити особу"
 
 #: aleksis/core/templates/core/person/edit.html:12
 #: aleksis/core/templates/core/person/edit.html:13
 msgid "Edit person"
-msgstr ""
+msgstr "Редагувати особу"
 
 #: aleksis/core/templates/core/person/full.html:47
 #: aleksis/core/templates/core/person/full.html:107
 msgid "Impersonate"
-msgstr ""
+msgstr "Маскування"
 
 #: aleksis/core/templates/core/person/full.html:54
 #: aleksis/core/templates/core/person/full.html:114
 msgid "Invite user"
-msgstr ""
+msgstr "Запрошення користувача"
 
 #: aleksis/core/templates/core/person/full.html:121
 msgid "Contact details"
-msgstr ""
+msgstr "Контактні дані"
 
 #: aleksis/core/templates/core/person/full.html:220
 msgid "This person didn't upload a personal photo."
-msgstr ""
+msgstr "Ця особа не завантажила особисте фото."
 
 #: aleksis/core/templates/core/person/full.html:228
 msgid "Children"
-msgstr ""
+msgstr "Діти"
 
 #: aleksis/core/templates/core/person/list.html:21
 msgid "Filter persons"
-msgstr ""
+msgstr "Фільтр осіб"
 
 #: aleksis/core/templates/core/person/list.html:32
 msgid "Selected persons"
-msgstr ""
+msgstr "Позначені особи"
 
 #: aleksis/core/templates/core/school_term/create.html:6
 #: aleksis/core/templates/core/school_term/create.html:7
 #: aleksis/core/templates/core/school_term/list.html:14
 msgid "Create school term"
-msgstr ""
+msgstr "Створити Навчальний рік"
 
 #: aleksis/core/templates/core/school_term/edit.html:6
 #: aleksis/core/templates/core/school_term/edit.html:7
 msgid "Edit school term"
-msgstr ""
+msgstr "Редагувати Навчальний рік"
 
 #: aleksis/core/templates/dynamic_preferences/form.html:9
 msgid "Site preferences"
-msgstr ""
+msgstr "Властивості сайту"
 
 #: aleksis/core/templates/dynamic_preferences/form.html:11
 msgid "My preferences"
-msgstr ""
+msgstr "Мої властивості"
 
 #: aleksis/core/templates/dynamic_preferences/form.html:13
 #, python-format
 msgid "Preferences for %(instance)s"
-msgstr ""
+msgstr "Властивості %(instance)s"
 
 #: aleksis/core/templates/dynamic_preferences/form.html:25
 msgid "Save preferences"
-msgstr ""
+msgstr "Зберегти властивості"
 
 #: aleksis/core/templates/invitations/disabled.html:5
 msgid "The invite feature is disabled"
-msgstr ""
+msgstr "Функція запрошення вимкнена"
 
 #: aleksis/core/templates/invitations/disabled.html:13
 msgid "The invite feature is disabled."
-msgstr ""
+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"
-msgstr ""
+msgstr "сторінка властивостей сайту"
 
 #: aleksis/core/templates/invitations/enter.html:21
 msgid "Accept your invitation"
-msgstr ""
+msgstr "Прийняття Вашого запрошення"
 
 #: aleksis/core/templates/invitations/enter.html:25
 msgid ""
@@ -2337,231 +2624,260 @@ msgid ""
 "                your new user account:\n"
 "              "
 msgstr ""
+"\n"
+"                Для реєстрації Вашого нового облікового запису\n"
+"                напишіть свій код запрошення:\n"
+"              "
 
 #: aleksis/core/templates/invitations/enter.html:37
 msgid "Accept invite"
-msgstr ""
+msgstr "Прийняття запрошення"
 
 #: aleksis/core/templates/invitations/forms/_invite.html:9
 #: aleksis/core/templates/invitations/forms/_invite.html:10
 #: aleksis/core/templates/invitations/forms/_invite.html:21
 msgid "Invite"
-msgstr ""
+msgstr "Запрошення"
 
 #: aleksis/core/templates/invitations/forms/_invite.html:17
 msgid "Invite by email address"
-msgstr ""
+msgstr "Запрошення ел.поштою"
 
 #: aleksis/core/templates/invitations/forms/_invite.html:26
 msgid "Generate invitation code"
-msgstr ""
+msgstr "Створити код запрошення"
 
 #: aleksis/core/templates/invitations/forms/_invite.html:29
 msgid "Generate code"
-msgstr ""
+msgstr "Генерація коду"
 
 #: aleksis/core/templates/invitations/forms/_invite.html:33
 msgid "Invitations"
-msgstr ""
+msgstr "Запрошення"
 
 #: aleksis/core/templates/invitations/messages/invite_accepted.txt:3
 #, python-format
 msgid "The invitation for %(email)s has been accepted."
-msgstr ""
+msgstr "Запрошення для %(email)s було прийняте."
 
 #: aleksis/core/templates/oauth2_provider/application/create.html:5
 #: aleksis/core/templates/oauth2_provider/application/create.html:6
 msgid "Register OAuth2 Application"
-msgstr ""
+msgstr "Реєстрація додатку OAuth2"
 
 #: aleksis/core/templates/oauth2_provider/application/detail.html:5
 msgid "OAuth2 Application"
-msgstr ""
+msgstr "Додаток OAuth2"
 
 #: aleksis/core/templates/oauth2_provider/application/detail.html:39
 msgid "Client id"
-msgstr ""
+msgstr "Клієнтське ID"
 
 #: aleksis/core/templates/oauth2_provider/application/detail.html:47
 msgid "Client secret"
-msgstr ""
+msgstr "Клієнтський секрет"
 
 #: aleksis/core/templates/oauth2_provider/application/detail.html:55
 msgid "Client type"
-msgstr ""
+msgstr "Клієнтський тип"
 
 #: aleksis/core/templates/oauth2_provider/application/detail.html:63
 msgid "Allowed scopes"
-msgstr ""
+msgstr "Дозволені межі дії"
 
 #: aleksis/core/templates/oauth2_provider/application/detail.html:71
 msgid "Redirect URIs"
-msgstr ""
+msgstr "URI-адреси перенаправлення"
 
 #: aleksis/core/templates/oauth2_provider/application/detail.html:79
 msgid "Skip Authorisation"
-msgstr ""
+msgstr "Пропустити авторизацію"
 
 #: aleksis/core/templates/oauth2_provider/application/edit.html:5
 #: aleksis/core/templates/oauth2_provider/application/edit.html:6
 msgid "Edit OAuth2 Application"
-msgstr ""
+msgstr "Редагувати додаток OAuth2"
 
 #: aleksis/core/templates/oauth2_provider/application/list.html:11
 msgid "Register new application"
-msgstr ""
+msgstr "Зареєструвати новий додаток"
 
 #: aleksis/core/templates/oauth2_provider/application/list.html:25
 msgid "No applications defined."
-msgstr ""
+msgstr "Додатки не визначені."
 
 #: aleksis/core/templates/oauth2_provider/authorize.html:5
 #: aleksis/core/templates/socialaccount/login.html:5
 #: aleksis/core/templates/socialaccount/login.html:6
 msgid "Authorize"
-msgstr ""
+msgstr "Авторизувати"
 
 #: aleksis/core/templates/oauth2_provider/authorize.html:23
 #, python-format
 msgid "Authorize %(name)s"
-msgstr ""
+msgstr "Авторизувати %(name)s"
 
 #: aleksis/core/templates/oauth2_provider/authorize.html:25
 msgid "The application requests access to the following scopes:"
-msgstr ""
+msgstr "Додаток запитує дозвіл до таких меж дії:"
 
 #: aleksis/core/templates/oauth2_provider/authorize.html:40
 msgid "Allow"
-msgstr ""
+msgstr "Дозволити"
 
 #: aleksis/core/templates/oauth2_provider/authorize.html:43
 msgid "Disallow"
-msgstr ""
+msgstr "Заборонити"
 
 #: aleksis/core/templates/oauth2_provider/authorized-oob.html:12
 msgid "Success!"
-msgstr ""
+msgstr "Успіх!"
 
 #: aleksis/core/templates/oauth2_provider/authorized-oob.html:14
 msgid "Please return to your application and enter this code:"
-msgstr ""
+msgstr "Поверніться, будь ласка, до свого додатку та впишіть цей код:"
 
 #: 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
 msgid "Revoke access"
-msgstr ""
+msgstr "Відкликати доступ"
 
 #: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:12
 msgid "Are you sure to revoke the access for this application?"
-msgstr ""
+msgstr "Ви дійсно хочете відкликати доступ для цього додатку?"
 
 #: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:20
 msgid "Revoke"
-msgstr ""
+msgstr "Відкликати"
 
 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:33
 msgid "No authorized applications."
-msgstr ""
+msgstr "Авторизованих додатків немає."
 
 #: aleksis/core/templates/offline.html:5
 msgid "Network error"
-msgstr ""
+msgstr "Помилка мережі"
 
 #: aleksis/core/templates/offline.html:10
 msgid "No internet connection."
-msgstr ""
+msgstr "Немає інтернет-з'єднання."
 
 #: 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"
+"      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"
+"      Під час доступу до цієї сторінки виникла помилка. Можливо, у Вас "
+"проблема з інтернетом. Переконайтеся, що Ваш WiFi\n"
+"      або мобільний увімкнені та спробуйте ще раз. Якщо Ви думаєте, що із "
+"з'єднанням все добре, зверніться\n"
+"      до системних адміністраторів:\n"
+"    "
 
 #: aleksis/core/templates/search/search.html:8
 msgid "Global Search"
-msgstr ""
+msgstr "Глобальний пошук"
 
 #: aleksis/core/templates/search/search.html:15
 msgid "Search Term"
-msgstr ""
+msgstr "Пошуковий термін"
 
 #: aleksis/core/templates/search/search.html:26
 msgid "Results"
-msgstr ""
+msgstr "Результати"
 
 #: aleksis/core/templates/search/search.html:38
 msgid "No search results could be found to your search."
-msgstr ""
+msgstr "За Вашим пошуковим запитом результатів немає."
 
 #: aleksis/core/templates/search/search.html:87
 msgid "Please enter a search term above."
-msgstr ""
+msgstr "Напишіть, будь ласка, вище пошуковий термін."
 
 #: aleksis/core/templates/socialaccount/authentication_error.html:5
 #: aleksis/core/templates/socialaccount/authentication_error.html:6
 msgid "Third-party Account Login Failure"
-msgstr ""
+msgstr "Помилка входу стороннього облікового запису"
 
 #: aleksis/core/templates/socialaccount/authentication_error.html:13
 msgid "Third-party Account Login Failure."
-msgstr ""
+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"
+"          "
 
 #: aleksis/core/templates/socialaccount/connections.html:5
 #: aleksis/core/templates/socialaccount/connections.html:6
 msgid "Connections"
-msgstr ""
+msgstr "З'єднання"
 
 #: aleksis/core/templates/socialaccount/connections.html:24
 msgid "Remove"
-msgstr ""
+msgstr "Видалити"
 
 #: aleksis/core/templates/socialaccount/connections.html:34
 msgid "You currently have no third-party accounts connected to this account."
 msgstr ""
+"Зараз у Вас немає облікових записів третіх сторін, з'єднаних з цим обліковим "
+"записом."
 
 #: aleksis/core/templates/socialaccount/connections.html:37
 msgid "Add a Third-party Account"
-msgstr ""
+msgstr "Додати сторонній обліковий запис"
 
 #: aleksis/core/templates/socialaccount/login.html:12
 #, python-format
 msgid "You are about to connect a new third party account from %(provider)s."
-msgstr ""
+msgstr "Ви приєднуєте новий обліковий запис третьої сторони від %(provider)s."
 
 #: 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."
 
 #: aleksis/core/templates/socialaccount/login.html:28
 msgid "Continue"
-msgstr ""
+msgstr "Продовжити"
 
 #: aleksis/core/templates/socialaccount/login_cancelled.html:5
 #: aleksis/core/templates/socialaccount/login_cancelled.html:6
 #: aleksis/core/templates/socialaccount/login_cancelled.html:13
 msgid "Login cancelled"
-msgstr ""
+msgstr "Вхід скасований"
 
 #: aleksis/core/templates/socialaccount/login_cancelled.html:15
 #, 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"
+"          "
 
 #: aleksis/core/templates/socialaccount/signup.html:12
 #, python-format
@@ -2569,6 +2885,9 @@ 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 ""
+"Ви на шляху до використання свого облікового запису у %(provider_name)s\n"
+"        для входу на %(site_name)s. Заповніть, будь ласка, для завершення цю "
+"форму:"
 
 #: aleksis/core/templates/socialaccount/snippets/provider_list.html:12
 #, python-format
@@ -2577,6 +2896,9 @@ msgid ""
 "                Login with %(name)s\n"
 "              "
 msgstr ""
+"\n"
+"                Вхід з %(name)s\n"
+"              "
 
 #: aleksis/core/templates/socialaccount/snippets/provider_list.html:21
 #, python-format
@@ -2585,6 +2907,9 @@ msgid ""
 "            Login with %(name)s\n"
 "          "
 msgstr ""
+"\n"
+"            Вхід з %(name)s\n"
+"          "
 
 #: aleksis/core/templates/socialaccount/snippets/provider_list.html:30
 msgid ""
@@ -2592,41 +2917,44 @@ msgid ""
 "          No third-party account providers available.\n"
 "        "
 msgstr ""
+"\n"
+"          Провайдери сторонніх облікових записів недоступні.\n"
+"        "
 
 #: aleksis/core/templates/templated_email/base.email:5
 #: aleksis/core/templates/templated_email/base.email:16
 msgid "Hello"
-msgstr ""
+msgstr "Привіт"
 
 #: aleksis/core/templates/templated_email/celery_failure.email:4
 #, python-format
 msgid "Celery task %(task_name)s failed!"
-msgstr ""
+msgstr "Збій у завдання Celery з назвою %(task_name)s!"
 
 #: aleksis/core/templates/templated_email/celery_failure.email:7
 #, python-format
 msgid "the celery task %(task_name)s failed with following information:"
-msgstr ""
+msgstr "у завдання Celery %(task_name)s виникла проблема:"
 
 #: aleksis/core/templates/templated_email/celery_failure.email:10
 #: aleksis/core/templates/templated_email/celery_failure.email:29
 msgid "Task ID"
-msgstr ""
+msgstr "ID завдання"
 
 #: aleksis/core/templates/templated_email/celery_failure.email:11
 #: aleksis/core/templates/templated_email/celery_failure.email:30
 msgid "Raised exception"
-msgstr ""
+msgstr "Викинутий виняток"
 
 #: aleksis/core/templates/templated_email/celery_failure.email:12
 #: aleksis/core/templates/templated_email/celery_failure.email:31
 msgid "Positional arguments"
-msgstr ""
+msgstr "Аргументи"
 
 #: aleksis/core/templates/templated_email/celery_failure.email:15
 #: aleksis/core/templates/templated_email/celery_failure.email:38
 msgid "Keyword arguments"
-msgstr ""
+msgstr "Аргументи з ключовими словами"
 
 #: aleksis/core/templates/templated_email/celery_failure.email:22
 #, python-format
@@ -2635,57 +2963,70 @@ msgid ""
 "      the celery task %(task_name)s failed with following information:\n"
 "    "
 msgstr ""
+"\n"
+"      у завдання Celery %(task_name)s виникла проблема:\n"
+"    "
 
 #: aleksis/core/templates/templated_email/data_checks.email:3
 msgid "The system detected some new problems with your data."
-msgstr ""
+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"
+"  "
 
 #: aleksis/core/templates/templated_email/data_checks.email:23
 msgid "Problem description"
-msgstr ""
+msgstr "Опис проблеми"
 
 #: aleksis/core/templates/templated_email/data_checks.email:24
 msgid "Count of objects with new problems"
-msgstr ""
+msgstr "Кількість об'єктів з новими проблемами"
 
 #: aleksis/core/templates/templated_email/notification.email:4
 msgid "New notification for"
-msgstr ""
+msgstr "Нове сповіщення для"
 
 #: aleksis/core/templates/templated_email/notification.email:6
 #: aleksis/core/templates/templated_email/notification.email:20
 #, python-format
 msgid "Hello %(notification_user)s,"
-msgstr ""
+msgstr "Привіт, %(notification_user)s,"
 
 #: aleksis/core/templates/templated_email/notification.email:9
 #: aleksis/core/templates/templated_email/notification.email:23
 msgid "we got a new notification for you:"
-msgstr ""
+msgstr "у нас для Вас нове сповіщення:"
 
 #: aleksis/core/templates/templated_email/notification.email:15
 #: aleksis/core/templates/templated_email/notification.email:29
 msgid "More information"
-msgstr ""
+msgstr "Більше інформаціЇ"
 
 #: aleksis/core/templates/templated_email/notification.email:17
 #, python-format
 msgid "Sent by %(trans_sender)s at %(trans_created_at)s"
-msgstr ""
+msgstr "Надіслано %(trans_sender)s о %(trans_created_at)s"
 
 #: aleksis/core/templates/templated_email/notification.email:34
 #, python-format
@@ -2694,16 +3035,19 @@ msgid ""
 "            Sent by %(trans_sender)s at %(trans_created_at)s\n"
 "        "
 msgstr ""
+"\n"
+"            Надіслано %(trans_sender)s о %(trans_created_at)s\n"
+"        "
 
 #: aleksis/core/templates/templated_email/person_changed.email:4
 #, python-format
 msgid "%(person)s changed their data!"
-msgstr ""
+msgstr "%(person)s змінили свої дані!"
 
 #: aleksis/core/templates/templated_email/person_changed.email:7
 #, python-format
 msgid "the person %(person)s recently changed the following fields:"
-msgstr ""
+msgstr "особа %(person)s щойно змінила такі поля:"
 
 #: aleksis/core/templates/templated_email/person_changed.email:15
 #, python-format
@@ -2712,30 +3056,46 @@ msgid ""
 "    the person %(person)s recently changed the following fields:\n"
 "  "
 msgstr ""
+"\n"
+"    особа %(person)s щойно змінила такі поля:\n"
+"  "
 
 #: aleksis/core/templates/two_factor/_base_focus.html:6
 #: aleksis/core/templates/two_factor/core/otp_required.html:22
 #: aleksis/core/templates/two_factor/core/setup.html:5
 #: aleksis/core/templates/two_factor/profile/profile.html:88
 msgid "Enable Two-Factor Authentication"
-msgstr ""
+msgstr "Увімкнути двох-факторну автентифікацію"
 
 #: aleksis/core/templates/two_factor/core/backup_tokens.html:5
 #: aleksis/core/templates/two_factor/core/backup_tokens.html:9
 #: aleksis/core/templates/two_factor/profile/profile.html:46
 msgid "Backup Tokens"
-msgstr ""
+msgstr "Бекап Токенів"
 
 #: aleksis/core/templates/two_factor/core/backup_tokens.html:14
 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"
+"      "
 
 #: aleksis/core/templates/two_factor/core/backup_tokens.html:33
 msgid ""
@@ -2743,57 +3103,76 @@ msgid ""
 "          Print these tokens and keep them somewhere safe.\n"
 "        "
 msgstr ""
+"\n"
+"          Роздрукуйте ці токени та збережіть в надійному місці.\n"
+"        "
 
 #: aleksis/core/templates/two_factor/core/backup_tokens.html:39
 msgid "You don't have any backup codes yet."
-msgstr ""
+msgstr "У Вас поки що немає бекапів кодів."
 
 #: aleksis/core/templates/two_factor/core/backup_tokens.html:45
 msgid "Back to Account Security"
-msgstr ""
+msgstr "Назад до безпеки облікового запису"
 
 #: aleksis/core/templates/two_factor/core/backup_tokens.html:49
 msgid "Generate Tokens"
-msgstr ""
+msgstr "Створити Токени"
 
 #: aleksis/core/templates/two_factor/core/login.html:27
 #, python-format
 msgid "Login for %(name)s"
-msgstr ""
+msgstr "Увійти для %(name)s"
 
 #: aleksis/core/templates/two_factor/core/login.html:30
 msgid "Login with username and password"
-msgstr ""
+msgstr "Увійдіть за допомогою логіна та пароля"
 
 #: aleksis/core/templates/two_factor/core/login.html:38
 msgid ""
 "You have no permission to view this page. Please login with an other\n"
 "                    account."
 msgstr ""
+"Ви не маєте дозволу на перегляд цієї сторінки. Увійдіть, будь ласка,\n"
+"                    з іншим обліковим записом."
 
 #: aleksis/core/templates/two_factor/core/login.html:47
 msgid "Please login with your account to use the external application."
 msgstr ""
+"Для використання зовнішнього додатку увійдіть, будь ласка, у свій обліковий "
+"запис."
 
 #: aleksis/core/templates/two_factor/core/login.html:54
 msgid "Please login to see this page."
-msgstr ""
+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"
+"                      "
 
 #: 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"
+"                      "
 
 #: aleksis/core/templates/two_factor/core/login.html:75
 msgid ""
@@ -2802,46 +3181,68 @@ msgid ""
 "                        generator.\n"
 "                      "
 msgstr ""
+"\n"
+"                        Напишіть, будь ласка, токен, який Ви отримали своїм\n"
+"                        генератором токенів.\n"
+"                      "
 
 #: 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"
+"                    "
 
 #: aleksis/core/templates/two_factor/core/login.html:109
 msgid "Device currently not available?"
-msgstr ""
+msgstr "Зараз пристрій недоступний?"
 
 #: aleksis/core/templates/two_factor/core/login.html:111
 msgid "Or, alternatively, use one of your backup phones:"
-msgstr ""
+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"
-msgstr ""
+msgstr "Скористатися резервним токеном"
 
 #: aleksis/core/templates/two_factor/core/login.html:136
 msgid "Use alternative login options"
-msgstr ""
+msgstr "Скористайтеся альтернативними можливостями для входу"
 
 #: aleksis/core/templates/two_factor/core/otp_required.html:9
 msgid "Permission Denied"
-msgstr ""
+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"
+"          Для доступу до цієї сторінки Вам потрібно увімкнути ці функції "
+"безпеки."
 
 #: aleksis/core/templates/two_factor/core/otp_required.html:14
 msgid ""
@@ -2849,11 +3250,14 @@ msgid ""
 "          account. Enable two-factor authentication for enhanced account\n"
 "          security."
 msgstr ""
+"Двохфакторна автентифікація у Вашому обліковому записі\n"
+"          вимкнена. Для збільшення безпеки обліковки увімкніть двохфакторну\n"
+"          автентифікацію."
 
 #: aleksis/core/templates/two_factor/core/phone_register.html:5
 #: aleksis/core/templates/two_factor/core/phone_register.html:9
 msgid "Add Backup Phone"
-msgstr ""
+msgstr "Додати резервний телефон"
 
 #: aleksis/core/templates/two_factor/core/phone_register.html:12
 msgid ""
@@ -2861,12 +3265,17 @@ msgid ""
 "      account. This number will be used if your primary method of\n"
 "      registration is not available."
 msgstr ""
+"Ви додаєте у свій обліковий запис резервний номер телефону.\n"
+"      Він буде використаний в разі неможливості реєстрації з Вашим\n"
+"      основним номером."
 
 #: aleksis/core/templates/two_factor/core/phone_register.html:16
 msgid ""
 "We've sent a token to your phone number. Please\n"
 "      enter the token you've received."
 msgstr ""
+"Ми надіслали токен на Ваш номер. Напишіть,\n"
+"      будь ласка, отриманий токен."
 
 #: aleksis/core/templates/two_factor/core/setup.html:9
 msgid ""
@@ -2876,6 +3285,12 @@ msgid ""
 "        authentication.\n"
 "      "
 msgstr ""
+"\n"
+"        Ви встановлюєте для свого облікового запису новий рівень безпеки.\n"
+"        Для увімкнення двохфакторної автентифікації пройдіть декілька "
+"кроків\n"
+"        майстра налаштування.\n"
+"      "
 
 #: aleksis/core/templates/two_factor/core/setup.html:17
 msgid ""
@@ -2883,15 +3298,27 @@ msgid ""
 "        Please select which authentication method you would like to use:\n"
 "      "
 msgstr ""
+"\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"
+"      "
 
 #: aleksis/core/templates/two_factor/core/setup.html:34
 msgid ""
@@ -2900,6 +3327,11 @@ msgid ""
 "        text messages on. This number will be validated in the next step.\n"
 "      "
 msgstr ""
+"\n"
+"        Напишіть, будь ласка, номер телефону, на який Ви хочете\n"
+"        отримувати текстові повідомлення. На наступному кроці він буде "
+"перевірений.\n"
+"      "
 
 #: aleksis/core/templates/two_factor/core/setup.html:41
 msgid ""
@@ -2908,13 +3340,22 @@ msgid ""
 "        This number will be validated in the next step.\n"
 "      "
 msgstr ""
+"\n"
+"        Напишіть, будь ласка, номер телефону, на який Ви хочете\n"
+"        отримувати дзвінки. На наступному кроці він буде перевірений.\n"
+"      "
 
 #: 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"
+"          "
 
 #: aleksis/core/templates/two_factor/core/setup.html:56
 msgid ""
@@ -2922,16 +3363,32 @@ msgid ""
 "            We sent you a text message, please enter the tokens we sent.\n"
 "          "
 msgstr ""
+"\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"
+"        "
 
 #: aleksis/core/templates/two_factor/core/setup.html:73
 msgid ""
@@ -2941,95 +3398,120 @@ msgid ""
 "        account.\n"
 "      "
 msgstr ""
+"\n"
+"        Для ідентифікації та перевірки Вашого YubiKey напишіть,\n"
+"        будь ласка, нижче токен. Ваш YubiKey буде прив'язаний до Вашого\n"
+"        облікового запису.\n"
+"      "
 
 #: aleksis/core/templates/two_factor/core/setup_complete.html:5
 #: aleksis/core/templates/two_factor/core/setup_complete.html:9
 msgid "Two-Factor Authentication successfully enabled"
-msgstr ""
+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"
+"        Вітаємо з успішним налаштуванням двохфакторної автентифікації.\n"
+"      "
 
 #: aleksis/core/templates/two_factor/core/setup_complete.html:24
 #: aleksis/core/templates/two_factor/core/setup_complete.html:44
 msgid "Back to Profile"
-msgstr ""
+msgstr "Назад до Профілю"
 
 #: aleksis/core/templates/two_factor/core/setup_complete.html:28
 #: aleksis/core/templates/two_factor/core/setup_complete.html:48
 msgid "Generate backup codes"
-msgstr ""
+msgstr "Створити резервні коди"
 
 #: aleksis/core/templates/two_factor/core/setup_complete.html:34
 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"
+"        "
 
 #: aleksis/core/templates/two_factor/core/setup_complete.html:52
 #: aleksis/core/templates/two_factor/profile/profile.html:41
 msgid "Add Phone Number"
-msgstr ""
+msgstr "Додати номер телефону"
 
 #: aleksis/core/templates/two_factor/profile/disable.html:5
 #: aleksis/core/templates/two_factor/profile/disable.html:9
 #: aleksis/core/templates/two_factor/profile/profile.html:63
 #: aleksis/core/templates/two_factor/profile/profile.html:73
 msgid "Disable Two-Factor Authentication"
-msgstr ""
+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?"
+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"
-msgstr ""
+msgstr "Вимкнути"
 
 #: aleksis/core/templates/two_factor/profile/profile.html:5
 #: aleksis/core/templates/two_factor/profile/profile.html:10
 msgid "Account Security"
-msgstr ""
+msgstr "Безпека облікового запису"
 
 #: aleksis/core/templates/two_factor/profile/profile.html:15
 msgid "Tokens will be generated by your token generator."
-msgstr ""
+msgstr "Токени будуть створені Вашим генератором токенів."
 
 #: aleksis/core/templates/two_factor/profile/profile.html:17
 #, python-format
 msgid "Primary method: %(primary)s"
-msgstr ""
+msgstr "Основний метод: %(primary)s"
 
 #: aleksis/core/templates/two_factor/profile/profile.html:19
 msgid "Tokens will be generated by your YubiKey."
-msgstr ""
+msgstr "Токени будуть створені Вашим YubiKey."
 
 #: aleksis/core/templates/two_factor/profile/profile.html:23
 msgid "Backup Phone Numbers"
-msgstr ""
+msgstr "Резервні номери телефонів"
 
 #: aleksis/core/templates/two_factor/profile/profile.html:24
 msgid ""
 "If your primary method is not available, we are able to\n"
 "        send backup tokens to the phone numbers listed below."
 msgstr ""
+"Якщо Ваш основний метод не буде доступний, ми зможемо\n"
+"        надіслати резервні токени на вказані нижче телефонні номери."
 
 #: aleksis/core/templates/two_factor/profile/profile.html:33
 msgid "Unregister"
-msgstr ""
+msgstr "Скасувати реєстрацію"
 
 #: aleksis/core/templates/two_factor/profile/profile.html:48
 msgid ""
 "If you don't have any device with you, you can access\n"
 "        your account using backup tokens."
 msgstr ""
+"Якщо у Вас немає з собою жодного пристрою, Ви можете\n"
+"        отримати доступ з використанням резервних токенів."
 
 #: aleksis/core/templates/two_factor/profile/profile.html:50
 #, python-format
@@ -3042,11 +3524,25 @@ msgid_plural ""
 "        You have %(counter)s backup tokens remaining.\n"
 "      "
 msgstr[0] ""
+"\n"
+"        У Вас залишився лише один резервний токен.\n"
+"      "
 msgstr[1] ""
+"\n"
+"        У Вас залишилися %(counter)s резервних токени.\n"
+"      "
+msgstr[2] ""
+"\n"
+"        У Вас залишилося %(counter)s резервних токенів.\n"
+"      "
+msgstr[3] ""
+"\n"
+"        У Вас залишився %(counter)s резервний токен.\n"
+"      "
 
 #: aleksis/core/templates/two_factor/profile/profile.html:59
 msgid "Show Codes"
-msgstr ""
+msgstr "Показати коди"
 
 #: aleksis/core/templates/two_factor/profile/profile.html:65
 msgid ""
@@ -3055,6 +3551,11 @@ msgid ""
 "        also disable two-factor authentication for your account.\n"
 "      "
 msgstr ""
+"\n"
+"        Хоча ми рішуче застерігаємо Вас це не робити, Ви можете \n"
+"        також вимкнути двохфакторну автентифікацію для свого облікового "
+"запису.\n"
+"      "
 
 #: aleksis/core/templates/two_factor/profile/profile.html:78
 msgid ""
@@ -3064,197 +3565,271 @@ msgid ""
 "        security.\n"
 "      "
 msgstr ""
+"\n"
+"        Двохфакторна автентифікація для вашого облікового запису\n"
+"        не активована. Для підвищення безпеки облікового запису увімкніть\n"
+"        двохфакторну автентифікацію.\n"
+"      "
 
 #: aleksis/core/util/notifications.py:64
 msgid "E-Mail"
-msgstr ""
+msgstr "Ел.пошта"
 
 #: aleksis/core/util/notifications.py:65
 msgid "SMS"
-msgstr ""
+msgstr "SMS"
 
 #: aleksis/core/util/pdf.py:118
 msgid "Progress: Generate PDF file"
-msgstr ""
+msgstr "Перебіг: Генерація файлу PDF"
 
 #: aleksis/core/util/pdf.py:119
 msgid "Generating PDF file …"
-msgstr ""
+msgstr "Створення файлу PDF …"
 
 #: aleksis/core/util/pdf.py:120
 msgid "The PDF file has been generated successfully."
-msgstr ""
+msgstr "Файл PDF успішно створений."
 
 #: aleksis/core/util/pdf.py:121
 msgid "There was a problem while generating the PDF file."
-msgstr ""
+msgstr "Під час створення файлу PDF виникла проблема."
 
 #: aleksis/core/util/pdf.py:124
 msgid "Download PDF"
-msgstr ""
+msgstr "Звантажити PDF"
 
-#: aleksis/core/views.py:292
+#: aleksis/core/views.py:292 aleksis/core/views.py:294
 msgid "The school term has been created."
-msgstr ""
+msgstr "Навчальний рік створений."
 
-#: aleksis/core/views.py:304
+#: aleksis/core/views.py:304 aleksis/core/views.py:306
 msgid "The school term has been saved."
-msgstr ""
+msgstr "Навчальний рік збережений."
 
-#: aleksis/core/views.py:424
+#: aleksis/core/views.py:424 aleksis/core/views.py:426
 msgid "The child groups were successfully saved."
-msgstr ""
+msgstr "Підлеглі групи збережені."
 
 #: aleksis/core/views.py:443 aleksis/core/views.py:453
+#: aleksis/core/views.py:445 aleksis/core/views.py:455
 msgid "The person has been saved."
-msgstr ""
+msgstr "Особа збережена."
 
-#: aleksis/core/views.py:503
+#: aleksis/core/views.py:503 aleksis/core/views.py:505
 msgid "The group has been saved."
-msgstr ""
+msgstr "Група збережена."
 
-#: aleksis/core/views.py:600
+#: aleksis/core/views.py:600 aleksis/core/views.py:602
 msgid "The announcement has been saved."
-msgstr ""
+msgstr "Оголошення збережене."
 
-#: aleksis/core/views.py:616
+#: aleksis/core/views.py:616 aleksis/core/views.py:618
 msgid "The announcement has been deleted."
-msgstr ""
+msgstr "Оголошення видалене."
 
-#: aleksis/core/views.py:684
+#: aleksis/core/views.py:684 aleksis/core/views.py:686
 msgid "The requested preference registry does not exist"
-msgstr ""
+msgstr "Журналу із запитаними властивостями не існує"
 
-#: aleksis/core/views.py:703
+#: aleksis/core/views.py:703 aleksis/core/views.py:705
 msgid "The preferences have been saved successfully."
-msgstr ""
+msgstr "Властивості збережені."
 
-#: aleksis/core/views.py:727
+#: aleksis/core/views.py:727 aleksis/core/views.py:729
 msgid "The person has been deleted."
-msgstr ""
+msgstr "Особа видалена."
 
-#: aleksis/core/views.py:741
+#: aleksis/core/views.py:741 aleksis/core/views.py:743
 msgid "The group has been deleted."
-msgstr ""
+msgstr "Група видалена."
 
 #: aleksis/core/views.py:773
 msgid "The additional_field has been saved."
-msgstr ""
+msgstr "Додаткове поле збережене."
 
-#: aleksis/core/views.py:807
+#: aleksis/core/views.py:807 aleksis/core/views.py:809
 msgid "The additional field has been deleted."
-msgstr ""
+msgstr "Додаткове поле видалене."
 
-#: aleksis/core/views.py:832
+#: aleksis/core/views.py:832 aleksis/core/views.py:834
 msgid "The group type has been saved."
-msgstr ""
+msgstr "Тип групи збережений."
 
-#: aleksis/core/views.py:862
+#: aleksis/core/views.py:862 aleksis/core/views.py:864
 msgid "The group type has been deleted."
-msgstr ""
+msgstr "Тип групи видалений."
 
-#: aleksis/core/views.py:895
+#: aleksis/core/views.py:895 aleksis/core/views.py:897
 msgid "Progress: Run data checks"
-msgstr ""
+msgstr "Перебіг: Запуск перевірки даних"
 
-#: aleksis/core/views.py:896
+#: aleksis/core/views.py:896 aleksis/core/views.py:898
 msgid "Run data checks …"
-msgstr ""
+msgstr "Запускається перевірка даних …"
 
-#: aleksis/core/views.py:897
+#: aleksis/core/views.py:897 aleksis/core/views.py:899
 msgid "The data checks were run successfully."
-msgstr ""
+msgstr "Перевірка даних успішно запущена."
 
-#: aleksis/core/views.py:898
+#: aleksis/core/views.py:898 aleksis/core/views.py:900
 msgid "There was a problem while running data checks."
-msgstr ""
+msgstr "Під час запуску перевірки даних виникла проблема."
 
-#: aleksis/core/views.py:914
+#: aleksis/core/views.py:914 aleksis/core/views.py:916
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
-msgstr ""
+msgstr "Варіант розв'язання {solve_option_obj.verbose_name} "
 
-#: aleksis/core/views.py:924
+#: aleksis/core/views.py:924 aleksis/core/views.py:926
 msgid "The requested solve option does not exist"
-msgstr ""
+msgstr "Запитаний варіант розв'язання не існує"
 
-#: aleksis/core/views.py:956
+#: aleksis/core/views.py:956 aleksis/core/views.py:958
 msgid "The dashboard widget has been saved."
-msgstr ""
+msgstr "Віджет інформпанелі збережений."
 
-#: aleksis/core/views.py:986
+#: aleksis/core/views.py:986 aleksis/core/views.py:988
 msgid "The dashboard widget has been created."
-msgstr ""
+msgstr "Віджет інформпанелі створений."
 
-#: aleksis/core/views.py:996
+#: aleksis/core/views.py:996 aleksis/core/views.py:998
 msgid "The dashboard widget has been deleted."
-msgstr ""
+msgstr "Віджет інформпанелі видалений."
 
-#: aleksis/core/views.py:1067
+#: aleksis/core/views.py:1067 aleksis/core/views.py:1069
 msgid "Your dashboard configuration has been saved successfully."
-msgstr ""
+msgstr "Ваша конфігурація інформпанелі збережена."
 
-#: aleksis/core/views.py:1069
+#: aleksis/core/views.py:1069 aleksis/core/views.py:1071
 msgid "The configuration of the default dashboard has been saved successfully."
-msgstr ""
+msgstr "Конфігурація типової/стандартної інформпанелі збережена."
 
-#: aleksis/core/views.py:1145
+#: aleksis/core/views.py:1145 aleksis/core/views.py:1147
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
-msgstr ""
+msgstr "Запрошення успішно створене. Код запрошення: {code}"
 
-#: aleksis/core/views.py:1236
+#: aleksis/core/views.py:1236 aleksis/core/views.py:1238
 msgid "We have successfully assigned the permissions."
-msgstr ""
+msgstr "Ми успішно призначили дозволи."
 
-#: aleksis/core/views.py:1246
+#: aleksis/core/views.py:1246 aleksis/core/views.py:1248
 msgid "The global user permission has been deleted."
-msgstr ""
+msgstr "Глобальний користувацький дозвіл видалений."
 
-#: aleksis/core/views.py:1256
+#: aleksis/core/views.py:1256 aleksis/core/views.py:1258
 msgid "The global group permission has been deleted."
-msgstr ""
+msgstr "Глобальний груповий дозвіл видалений."
 
-#: aleksis/core/views.py:1266
+#: aleksis/core/views.py:1266 aleksis/core/views.py:1268
 msgid "The object user permission has been deleted."
-msgstr ""
+msgstr "Об'єктний користувацький дозвіл видалений."
 
-#: aleksis/core/views.py:1276
+#: aleksis/core/views.py:1276 aleksis/core/views.py:1278
 msgid "The object group permission has been deleted."
-msgstr ""
+msgstr "Об'єктний груповий дозвіл видалений."
 
-#: aleksis/core/views.py:1344
+#: aleksis/core/views.py:1344 aleksis/core/views.py:1346
 msgid "The requested PDF file does not exist"
-msgstr ""
+msgstr "Запитаний файл PDF не існує"
 
 #: 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 ""
+msgstr "Запитане завдання не існує або не доступне"
 
-#: aleksis/core/views.py:1409
-msgid "The third-party account could not be disconnected because it is the only login method available."
+#: aleksis/core/views.py:1409 aleksis/core/views.py:1411
+msgid ""
+"The third-party account could not be disconnected because it is the only "
+"login method available."
 msgstr ""
+"Обліковий запис третьої сторони не можна від'єднати оскільки він єдиний "
+"спосіб для входу."
 
-#: aleksis/core/views.py:1416
+#: aleksis/core/views.py:1416 aleksis/core/views.py:1418
 msgid "The third-party account has been successfully disconnected."
-msgstr ""
+msgstr "Обліковий запис третьої сторони успішно від'єднаний."
 
-#: aleksis/core/views.py:1487
-msgid "Person was invited successfully and an email with further instructions has been send to them."
+#: aleksis/core/views.py:1487 aleksis/core/views.py:1489
+msgid ""
+"Person was invited successfully and an email with further instructions has "
+"been send to them."
 msgstr ""
+"Особа успішно запрошена. Лист з інструкціями щодо наступних дій надісланий "
+"на її ел.пошту."
 
-#: aleksis/core/views.py:1498
+#: aleksis/core/views.py:1498 aleksis/core/views.py:1500
 msgid "Person was already invited."
-msgstr ""
+msgstr "Особа вже була запрошена."
 
 #: aleksis/core/views.py:1598
 msgid "ICal feed updated successfully"
-msgstr ""
+msgstr "Стрічка iCal успішно оновлена"
 
 #: aleksis/core/views.py:1608
 msgid "ICal feed deleted successfully"
-msgstr ""
+msgstr "Стрічка iCal успішно видалена"
 
 #: aleksis/core/views.py:1616
 msgid "ICal feed created successfully"
+msgstr "Стрічка iCal успішно створена"
+
+#: aleksis/core/data_checks.py:330
+#, fuzzy, python-format
+msgid "Validate field %s of model %s."
+msgstr "Перевірте поле %s моделі %s."
+
+#: aleksis/core/data_checks.py:332
+#, fuzzy, python-format
+msgid "The field %s couldn't be validated successfully."
+msgstr "Поле %s не вдалося успішно перевірити."
+
+#: aleksis/core/models.py:181
+#, fuzzy
+msgid "other"
+msgstr "інший"
+
+#: aleksis/core/settings.py:543
+msgid "Ukrainian"
+msgstr "український"
+
+#: aleksis/core/templates/500.html:10
+msgid ""
+"An unexpected error has\n"
+"          occurred."
+msgstr ""
+"Сталася неочікувана\n"
+"          помилка."
+
+#: aleksis/core/templates/core/group/full.html:93
+#, fuzzy, python-format
+msgid ""
+"\n"
+"              %(min)s years to %(max)s years\n"
+"            "
 msgstr ""
+"\n"
+"              %(min)s років до %(max)s років\n"
+"            "
+
+#: aleksis/core/templates/core/ical/ical_list.html:4
+#: aleksis/core/templates/core/ical/ical_list.html:5
+msgid "iCal Feeds"
+msgstr "iCal-стрічки"
+
+#: aleksis/core/views.py:775
+msgid "The additional field has been saved."
+msgstr "Додаткове поле збережене."
+
+#: aleksis/core/views.py:1600
+msgid "iCal feed updated successfully"
+msgstr "Стрічка iCal успішно оновлена"
+
+#: aleksis/core/views.py:1610
+msgid "iCal feed deleted successfully"
+msgstr "Стрічка iCal успішно видалена"
+
+#: aleksis/core/views.py:1618
+msgid "iCal feed created successfully"
+msgstr "Стрічка iCal успішно створена"
diff --git a/aleksis/core/locale/uk/LC_MESSAGES/djangojs.po b/aleksis/core/locale/uk/LC_MESSAGES/djangojs.po
index fb86a6c606be93efcaa83dd2cd9e65f9489fa157..fcd6122a3fdc075256f8c08626ad9d806d4241be 100644
--- a/aleksis/core/locale/uk/LC_MESSAGES/djangojs.po
+++ b/aleksis/core/locale/uk/LC_MESSAGES/djangojs.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-04-23 12:58+0000\n"
+"POT-Creation-Date: 2022-06-25 12:09+0200\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"
@@ -16,22 +16,20 @@ msgstr ""
 "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"
+
 #: aleksis/core/static/js/main.js:66
 msgid "Today"
-msgstr ""
+msgstr "Сьогодні"
 
 #: aleksis/core/static/js/main.js:67
 msgid "Cancel"
-msgstr ""
+msgstr "Скасувати"
 
 #: aleksis/core/static/js/main.js:68
 msgid "OK"
-msgstr ""
+msgstr "OK"
 
 #: aleksis/core/static/js/main.js:195
 msgid "This page may contain outdated information since there is no internet connection."
-msgstr ""
+msgstr "Через відсутність інтернет-з'єднання ця сторінка може містити застарілу інформацію."
diff --git a/aleksis/core/migrations/0041_update_gender_choices.py b/aleksis/core/migrations/0041_update_gender_choices.py
new file mode 100644
index 0000000000000000000000000000000000000000..f9f3448ae5332da071e44318db97a0649ba487eb
--- /dev/null
+++ b/aleksis/core/migrations/0041_update_gender_choices.py
@@ -0,0 +1,19 @@
+# Generated by Django 3.2.13 on 2022-06-05 10:55
+
+from django.db import migrations, models
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0040_oauth_allowed_scopes_max_length_255'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='person',
+            name='sex',
+            field=models.CharField(blank=True, choices=[('f', 'female'), ('m', 'male'), ('x', 'other')], max_length=1, verbose_name='Sex'),
+        ),
+    ]
diff --git a/aleksis/core/models.py b/aleksis/core/models.py
index 462c3a2f8bde981a55745cb06b04f4ad54f10da3..2f603ae0d2e2813b50f2024056cb460d71b4e484 100644
--- a/aleksis/core/models.py
+++ b/aleksis/core/models.py
@@ -51,7 +51,12 @@ from oauth2_provider.models import (
 from phonenumber_field.modelfields import PhoneNumberField
 from polymorphic.models import PolymorphicModel
 
-from aleksis.core.data_checks import BrokenDashboardWidgetDataCheck, DataCheck, DataCheckRegistry
+from aleksis.core.data_checks import (
+    BrokenDashboardWidgetDataCheck,
+    DataCheck,
+    DataCheckRegistry,
+    field_validation_data_check_factory,
+)
 
 from .feeds import PersonalICalFeedBase
 from .managers import (
@@ -173,7 +178,7 @@ class Person(ExtensibleModel):
 
     icon_ = "person"
 
-    SEX_CHOICES = [("f", _("female")), ("m", _("male"))]
+    SEX_CHOICES = [("f", _("female")), ("m", _("male")), ("x", _("other"))]
 
     user = models.OneToOneField(
         get_user_model(),
@@ -1064,6 +1069,8 @@ class CustomMenu(ExtensibleModel):
 class CustomMenuItem(ExtensibleModel):
     """Single item in a custom menu."""
 
+    data_checks = [field_validation_data_check_factory("core", "CustomMenuItem", "icon")]
+
     menu = models.ForeignKey(
         CustomMenu, models.CASCADE, verbose_name=_("Menu"), related_name="items"
     )
@@ -1082,6 +1089,9 @@ class CustomMenuItem(ExtensibleModel):
             models.UniqueConstraint(fields=["menu", "name"], name="unique_name_per_menu"),
         ]
 
+    def get_absolute_url(self):
+        return reverse("admin:core_custommenuitem_change", args=[self.id])
+
 
 class GroupType(ExtensibleModel):
     """Group type model.
diff --git a/aleksis/core/preferences.py b/aleksis/core/preferences.py
index 6aa48cff4520b3149e0bee64a2408af419c17d72..631a9337654db24782f823dd956c286855ca7792 100644
--- a/aleksis/core/preferences.py
+++ b/aleksis/core/preferences.py
@@ -348,20 +348,6 @@ class OAuthAllowedGrants(MultipleChoicePreference):
     required = False
 
 
-@site_preferences_registry.register
-class AvailableLanguages(MultipleChoicePreference):
-    """Available languages  of your AlekSIS instance."""
-
-    section = internationalisation
-    name = "languages"
-    default = [code[0] for code in settings.LANGUAGES]
-    widget = SelectMultiple
-    verbose_name = _("Available languages")
-    field_attribute = {"initial": []}
-    choices = settings.LANGUAGES
-    required = True
-
-
 @site_preferences_registry.register
 class DataChecksSendEmails(BooleanPreference):
     """Enable email sending if data checks detect problems."""
diff --git a/aleksis/core/rules.py b/aleksis/core/rules.py
index a6b478f26144b9fdea74804dccdb7a1913b01c30..e12744ff6df91c72f8ec541b8f0c0672d2ddf273 100644
--- a/aleksis/core/rules.py
+++ b/aleksis/core/rules.py
@@ -326,6 +326,9 @@ rules.add_perm("core.can_register", can_register_predicate)
 can_change_password_predicate = is_site_preference_set(section="auth", pref="allow_password_change")
 rules.add_perm("core.can_change_password", can_change_password_predicate)
 
+can_reset_password_predicate = is_site_preference_set(section="auth", pref="allow_password_reset")
+rules.add_perm("core.can_reset_password", can_reset_password_predicate)
+
 # django-invitations
 invite_enabled_predicate = is_site_preference_set(section="auth", pref="invite_enabled")
 rules.add_perm("core.invite_enabled", invite_enabled_predicate)
diff --git a/aleksis/core/settings.py b/aleksis/core/settings.py
index 9d66b5a834b70f3ac4e2b12969ddfbbc38bcb2ca..9a177cc2ca07861518b071b04feb8bce76c44989 100644
--- a/aleksis/core/settings.py
+++ b/aleksis/core/settings.py
@@ -144,6 +144,7 @@ INSTALLED_APPS = [
     "dynamic_preferences.users.apps.UserPreferencesConfig",
     "impersonate",
     "two_factor",
+    "two_factor.plugins.phonenumber",
     "material",
     "ckeditor",
     "ckeditor_uploader",
@@ -539,6 +540,7 @@ AUTHENTICATION_BACKENDS.append("allauth.account.auth_backends.AuthenticationBack
 LANGUAGES = [
     ("en", _("English")),
     ("de", _("German")),
+    ("uk", _("Ukrainian")),
 ]
 LANGUAGE_CODE = _settings.get("l10n.lang", "en")
 TIME_ZONE = _settings.get("l10n.tz", "UTC")
@@ -640,6 +642,7 @@ SASS_PROCESSOR_INCLUDE_DIRS = [
 ]
 
 ICONIFY_JSON_ROOT = os.path.join(JS_ROOT, "@iconify", "json")
+ICONIFY_COLLECTIONS_ALLOWED = ["mdi"]
 
 ADMINS = _settings.get(
     "contact.admins", [(AUTH_INITIAL_SUPERUSER["username"], AUTH_INITIAL_SUPERUSER["email"])]
@@ -752,6 +755,11 @@ PWA_ICONS_CONFIG = {
     "microsoft": [144],
 }
 FAVICON_PATH = os.path.join("public", "favicon")
+FAVICON_CONFIG = {
+    "shortcut icon": [16, 32, 48, 128, 192],
+    "touch-icon": [196],
+    "icon": [196],
+}
 
 SERVICE_WORKER_PATH = os.path.join(STATIC_ROOT, "js", "serviceworker.js")
 
diff --git a/aleksis/core/static/public/style.scss b/aleksis/core/static/public/style.scss
index b6b4ce7831311178d8044ebb74f2d37b749ebfee..07f1881216448b3c82fb605af72b214004bf2f03 100644
--- a/aleksis/core/static/public/style.scss
+++ b/aleksis/core/static/public/style.scss
@@ -433,15 +433,16 @@ th.orderable > a {
 
 th.orderable {
   background: no-repeat right center;
-  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M12,18.17L8.83,15L7.42,16.41L12,21L16.59,16.41L15.17,15M12,5.83L15.17,9L16.58,7.59L12,3L7.41,7.59L8.83,9L12,5.83Z' /%3E%3C/svg%3E");
+  background-image: url("../../__icons__/mdi/unfold-more-horizontal.svg");
+  background-size: 24px;
 }
 
 th.orderable.asc {
-  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z' /%3E%3C/svg%3E");
+  background-image: url("../../__icons__/mdi/chevron-up.svg");
 }
 
 th.orderable.desc {
-  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z' /%3E%3C/svg%3E");
+  background-image: url("../../__icons__/mdi/chevron-down.svg");
 }
 
 /*+++++++*/
@@ -777,6 +778,7 @@ main figure.alert {
   line-height: 1;
   height: 24px;
   margin-bottom: 8px;
+  width: 100%;
 }
 
 /* Person overview */
@@ -989,3 +991,8 @@ p.ical-description {
   margin: 0;
   font-weight: 300;
 }
+
+.table-circle, .table-circle .materialize-circle {
+  height: 4em;
+  width: 4em;
+}
diff --git a/aleksis/core/tables.py b/aleksis/core/tables.py
index f08460bd8654907cb56f655e01014342f8e59ab5..a58c3fc443b3ad66c8df31109cbb6276192518ef 100644
--- a/aleksis/core/tables.py
+++ b/aleksis/core/tables.py
@@ -1,5 +1,6 @@
 from textwrap import wrap
 
+from django.template.loader import render_to_string
 from django.utils.translation import gettext_lazy as _
 
 import django_tables2 as tables
@@ -31,12 +32,65 @@ class PersonsTable(tables.Table):
     """Table to list persons."""
 
     class Meta:
+        model = Person
         attrs = {"class": "highlight"}
+        fields = []
 
     first_name = tables.LinkColumn("person_by_id", args=[A("id")])
     last_name = tables.LinkColumn("person_by_id", args=[A("id")])
 
 
+class FullPersonsTable(PersonsTable):
+    """Table to list persons."""
+
+    photo = tables.Column(verbose_name=_("Photo"), accessor="pk", orderable=False)
+    address = tables.Column(verbose_name=_("Address"), accessor="pk", orderable=False)
+
+    class Meta(PersonsTable.Meta):
+        fields = (
+            "photo",
+            "short_name",
+            "date_of_birth",
+            "sex",
+            "email",
+            "user__username",
+        )
+        sequence = ("photo", "first_name", "last_name", "short_name", "...")
+
+    def render_photo(self, value, record):
+        return render_to_string(
+            "core/partials/avatar_content.html",
+            {
+                "person_or_user": record,
+                "class": "materialize-circle table-circle",
+                "img_class": "materialize-circle",
+            },
+            self.request,
+        )
+
+    def render_address(self, value, record):
+        return render_to_string(
+            "core/partials/address.html",
+            {
+                "person": record,
+            },
+            self.request,
+        )
+
+    def before_render(self, request):
+        """Hide columns if user has no permission to view them."""
+        if not self.request.user.has_perm("core.view_person_rule"):
+            self.columns.hide("date_of_birth")
+            self.columns.hide("sex")
+        if not self.request.user.has_perm("core.view_contact_details_rule"):
+            self.columns.hide("email")
+        if not self.request.user.has_perm("core.view_address"):
+            self.columns.hide("street")
+            self.columns.hide("housenumber")
+            self.columns.hide("postal_code")
+            self.columns.hide("place")
+
+
 class GroupsTable(tables.Table):
     """Table to list groups."""
 
diff --git a/aleksis/core/templates/500.html b/aleksis/core/templates/500.html
index fee566258f556cf5ea2922abd170873d3c212733..d008cd5405f4e5eee73ddf175cab87057e563785 100644
--- a/aleksis/core/templates/500.html
+++ b/aleksis/core/templates/500.html
@@ -8,7 +8,7 @@
       <div class="card-content white-text">
         <i class="material-icons iconify small left" data-icon="mdi:alert-octagon-outline"></i>
         <span class="card-title">{% trans "Error" %} (500): {% blocktrans %}An unexpected error has
-          occured.{% endblocktrans %}</span>
+          occurred.{% endblocktrans %}</span>
         <p>
           {% blocktrans %}
             Your site administrators will automatically be notified about this
diff --git a/aleksis/core/templates/core/announcement/form.html b/aleksis/core/templates/core/announcement/form.html
index f085758a3395ca74de1dba8e0affec9fb453cc03..60d573d0f0de3cc2f4e3e8409beab1716690715c 100644
--- a/aleksis/core/templates/core/announcement/form.html
+++ b/aleksis/core/templates/core/announcement/form.html
@@ -31,7 +31,7 @@
 
     <button type="submit" class="btn green waves-effect waves-light">
       <i class="material-icons left iconify" data-icon="mdi:content-save-outline"></i>
-      {% trans "Save und publish announcement" %}
+      {% trans "Save and publish announcement" %}
     </button>
   </form>
   {% include_js "select2-materialize" %}
diff --git a/aleksis/core/templates/core/group/full.html b/aleksis/core/templates/core/group/full.html
index 3c6e5488d6174e30847eabcfda2e97b244112938..34b5e647590806e72666701ae0bd1ca1196d9638 100644
--- a/aleksis/core/templates/core/group/full.html
+++ b/aleksis/core/templates/core/group/full.html
@@ -9,7 +9,9 @@
 {% block browser_title %}{{ group.name }}{% endblock %}
 
 {% block content %}
-  <h1>{{ group.name }} <small class="grey-text">{{ group.short_name }}</small></h1>
+  <h1>{{ group.name }}
+    <small class="grey-text">{{ group.short_name }}</small>
+  </h1>
 
   {% has_perm 'core.edit_group_rule' user group as can_change_group %}
   {% has_perm 'core.change_group_preferences_rule' user group as can_change_group_preferences %}
@@ -44,39 +46,57 @@
   <table>
     <tr>
       <th>
-        <i class="material-icons iconify center" data-icon="mdi:shape-outline" title="{% trans "Group type" %}"></i>
+        <i class="material-icons iconify left" data-icon="mdi:shape-outline"></i>
+        {% trans "Group type" %}
       </th>
       <td>
-        {{ group.group_type }}
+        {{ group.group_type|default:"–" }}
       </td>
     </tr>
     <tr>
       <th>
-        <i class="material-icons iconify center" data-icon="mdi:format-vertical-align-top" title="{% trans "Parent groups" %}"></i>
+        <i class="material-icons iconify left" data-icon="mdi:format-vertical-align-top"></i>
+        {% trans "Parent groups" %}
       </th>
       <td>
-        {{ group.parent_groups.all|join:", " }}
+        {{ group.parent_groups.all|join:", "|default:"–" }}
       </td>
     </tr>
   </table>
 
   {% if can_view_group_stats %}
     <h2>{% blocktrans %}Statistics{% endblocktrans %}</h2>
-    <ul>
-      <li>
-        {% trans "Count of members" %}: {{ stats.members }}
-      </li>
+    <table>
+      <tr>
+        <th>
+          <i class="material-icons iconify left" data-icon="mdi:account-group-outline"></i>
+          {% trans "Count of members" %}
+        </th>
+        <td>{{ stats.members }}</td>
+      </tr>
       {% if stats.age_avg %}
-        <li>
-          {% trans "Average age" %}: {{ stats.age_avg|floatformat }}
-        </li>
+        <tr>
+          <th>
+            <i class="material-icons iconify left" data-icon="mdi:cake-variant-outline"></i>
+            {% trans "Average age" %}
+          </th>
+          <td>{{ stats.age_avg|floatformat }}</td>
+        </tr>
       {% endif %}
       {% if stats.age_range_min %}
-        <li>
-          {% trans "Age range" %}: {{ stats.age_range_min }} {% trans "years to" %} {{ stats.age_range_max }} {% trans "years "%}
-        </li>
+        <tr>
+          <th>
+            <i class="material-icons iconify left" data-icon="mdi:calendar-range-outline"></i>
+            {% trans "Age range" %}
+          </th>
+          <td>
+            {% blocktrans with min=stats.age_range_min max=stats.age_range_max %}
+              {{ min }} years to {{ max }} years
+            {% endblocktrans %}
+          </td>
+        </tr>
       {% endif %}
-    </ul>
+    </table>
   {% endif %}
 
   <h2>{% blocktrans %}Owners{% endblocktrans %}</h2>
diff --git a/aleksis/core/templates/core/ical/ical_list.html b/aleksis/core/templates/core/ical/ical_list.html
index 2388feb2daa9c4b31abb80bc830055e2d2d3efc6..3396515d77423542046f5702b14ead4f572aa805 100644
--- a/aleksis/core/templates/core/ical/ical_list.html
+++ b/aleksis/core/templates/core/ical/ical_list.html
@@ -1,8 +1,8 @@
 {% extends 'core/base.html' %}
 {% load i18n msg_box static html_helpers %}
 
-{% block page_title %}{% trans "ICal Feeds" %}{% endblock page_title %}
-{% block browser_title %}{% trans "ICal Feeds" %}{% endblock browser_title %}
+{% block page_title %}{% trans "iCal Feeds" %}{% endblock page_title %}
+{% block browser_title %}{% trans "iCal Feeds" %}{% endblock browser_title %}
 
 {% block content %}
   {% trans "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." as msg %}
diff --git a/aleksis/core/templates/core/partials/address.html b/aleksis/core/templates/core/partials/address.html
new file mode 100644
index 0000000000000000000000000000000000000000..74a01bde2494d94256432923f5f27c279da2e564
--- /dev/null
+++ b/aleksis/core/templates/core/partials/address.html
@@ -0,0 +1,2 @@
+{{ person.street }} {{ person.housenumber }}<br>
+{{ person.postal_code }} {{ person.place }}
diff --git a/aleksis/core/templates/core/partials/footer-menu.html b/aleksis/core/templates/core/partials/footer-menu.html
index 2db2689efed0b3488dc7ba4362d2ff6747863f0e..6a67fa8a8592c5686a1efda8bd0ea9a19e71155b 100644
--- a/aleksis/core/templates/core/partials/footer-menu.html
+++ b/aleksis/core/templates/core/partials/footer-menu.html
@@ -3,7 +3,7 @@
 {% for item in FOOTER_MENU.items.all %}
   <a class="blue-text text-lighten-4 btn-flat" href="{{ item.url }}">
     {% if item.icon %}
-      <i class="material-icons iconify footer-icon left" data-icon="{{ item.icon }}">{{ item.icon }}</i>
+      <i class="material-icons iconify footer-icon left" data-icon="mdi:{{ item.icon }}"></i>
     {% endif %}
     {{ item.name }}
   </a>
diff --git a/aleksis/core/templates/core/partials/language_form.html b/aleksis/core/templates/core/partials/language_form.html
index 197906bb09d6c43d187c63f118261eaf6bbead9e..247dfe386c6dc003e4436415afbf13c34a557612 100644
--- a/aleksis/core/templates/core/partials/language_form.html
+++ b/aleksis/core/templates/core/partials/language_form.html
@@ -8,7 +8,9 @@
   <input name="next" type="hidden" value="{{ request.get_full_path }}">
 
   {% get_current_language as LANGUAGE_CODE %}
-  {% get_language_info_list for request.site.preferences.internationalisation__languages as languages %}
+  {% get_available_languages as LANGUAGES %}
+  {% get_language_info_list for LANGUAGES as languages %}
+
 
   {# Select #}
   <div class="input-field language-field">
diff --git a/aleksis/core/templates/two_factor/core/login.html b/aleksis/core/templates/two_factor/core/login.html
index 77b135569d797181a45bd49d7fd7e9cded4e9a5c..6145855229d9fec9f15edbd8ee597811250e2140 100644
--- a/aleksis/core/templates/two_factor/core/login.html
+++ b/aleksis/core/templates/two_factor/core/login.html
@@ -1,6 +1,6 @@
 {# -*- engine:django -*- #}
 {% extends "two_factor/_base_focus.html" %}
-{% load i18n two_factor account socialaccount %}
+{% load i18n phonenumber account socialaccount %}
 
 {% block browser_title %}
   {% trans "Login" %}
diff --git a/aleksis/core/templates/two_factor/profile/profile.html b/aleksis/core/templates/two_factor/profile/profile.html
index dd9472e7fb9a09051b35d7be57f59dcab1549dae..fe96135d0dfae6fd16ffad4fece50148115c8b69 100644
--- a/aleksis/core/templates/two_factor/profile/profile.html
+++ b/aleksis/core/templates/two_factor/profile/profile.html
@@ -1,5 +1,5 @@
 {% extends "two_factor/_base_focus.html" %}
-{% load i18n two_factor %}
+{% load i18n phonenumber %}
 
 {% block browser_title %}
   {% trans "Account Security" %}
diff --git a/aleksis/core/tests/browser/test_selenium.py b/aleksis/core/tests/browser/test_selenium.py
index e14ad8b9f123cd612848af566790d7e649d47bcc..5e9c4dfa3fc52ccdb582a7ab8d9862018e211032 100644
--- a/aleksis/core/tests/browser/test_selenium.py
+++ b/aleksis/core/tests/browser/test_selenium.py
@@ -7,6 +7,8 @@ from django.test.selenium import SeleniumTestCase, SeleniumTestCaseBase
 from django.urls import reverse
 
 import pytest
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support import expected_conditions as EC
 from selenium.webdriver.support.wait import WebDriverWait
 
 from aleksis.core.models import Person
@@ -43,17 +45,25 @@ class SeleniumTests(SeleniumTestCase):
             self._screenshot("login_default_superuser_blank.png")
 
         # Find login form input fields and enter defined credentials
-        self.selenium.find_element_by_xpath(
-            '//label[contains(text(), "Username")]/../input'
+        WebDriverWait(self.selenium, 10).until(
+            EC.element_to_be_clickable(
+                (By.XPATH, '//label[contains(text(), "Username")]/../input'),
+            )
         ).send_keys(username)
-        self.selenium.find_element_by_xpath(
-            '//label[contains(text(), "Password")]/../input'
+        WebDriverWait(self.selenium, 10).until(
+            EC.element_to_be_clickable(
+                (By.XPATH, '//label[contains(text(), "Password")]/../input'),
+            )
         ).send_keys(password)
         if with_screenshots:
             self._screenshot("login_default_superuser_filled.png")
 
         # Submit form by clicking django-two-factor-auth's Next button
-        self.selenium.find_element_by_xpath('//button[contains(text(), "Login")]').click()
+        WebDriverWait(self.selenium, 10).until(
+            EC.element_to_be_clickable(
+                (By.XPATH, '//button[contains(text(), "Login")]'),
+            )
+        ).click()
         if with_screenshots:
             self._screenshot("login_default_superuser_submitted.png")
 
diff --git a/aleksis/core/tests/regression/test_regression.py b/aleksis/core/tests/regression/test_regression.py
index c2417a56ebd02c015e84f18401d39cfc582b4252..6d6056ad272fa87c9df9d4cf7ba16f87a70dbf40 100644
--- a/aleksis/core/tests/regression/test_regression.py
+++ b/aleksis/core/tests/regression/test_regression.py
@@ -146,3 +146,14 @@ def test_no_access_oauth2_client_credentials_without_allowed_scopes(client):
     )
     r = client.get(url, HTTP_AUTHORIZATION=auth_header)
     assert r.status_code == 200
+
+
+def test_change_password_not_logged_in(client):
+    """Tests that CustomPasswordChangeView redirects to login when accessed unauthenticated.
+
+    https://edugit.org/AlekSIS/official/AlekSIS-Core/-/issues/703
+    """
+    response = client.get(reverse("account_change_password"), follow=True)
+
+    assert response.status_code == 200
+    assert "Please login to see this page." in response.content.decode("utf-8")
diff --git a/aleksis/core/util/core_helpers.py b/aleksis/core/util/core_helpers.py
index ffdba5f45c55454489c8b21c81688458c9808163..67adbf943886d5e503a9009e56b8eeb7f1ed823c 100644
--- a/aleksis/core/util/core_helpers.py
+++ b/aleksis/core/util/core_helpers.py
@@ -23,8 +23,8 @@ from cachalot.signals import post_invalidation
 from cache_memoize import cache_memoize
 
 
-def copyright_years(years: Sequence[int], seperator: str = ", ", joiner: str = "–") -> str:
-    """Take a sequence of integegers and produces a string with ranges.
+def copyright_years(years: Sequence[int], separator: str = ", ", joiner: str = "–") -> str:
+    """Take a sequence of integers and produces a string with ranges.
 
     >>> copyright_years([1999, 2000, 2001, 2005, 2007, 2008, 2009])
     '1999–2001, 2005, 2007–2009'
@@ -38,11 +38,11 @@ def copyright_years(years: Sequence[int], seperator: str = ", ", joiner: str = "
         for range_ in ranges
     ]
 
-    return seperator.join(years_strs)
+    return separator.join(years_strs)
 
 
 def dt_show_toolbar(request: HttpRequest) -> bool:
-    """Add a helper to determin if Django debug toolbar should be displayed.
+    """Add a helper to determine if Django debug toolbar should be displayed.
 
     Extends the default behaviour by enabling DJDT for superusers independent
     of source IP.
diff --git a/aleksis/core/util/model_helpers.py b/aleksis/core/util/model_helpers.py
index 57fab43ab14b787b9300b523e963efbcb0cee121..f1732a72fb3e17ecdcfee18b59cb18d7fd98fd55 100644
--- a/aleksis/core/util/model_helpers.py
+++ b/aleksis/core/util/model_helpers.py
@@ -1,3 +1,5 @@
+from dj_iconify.util import icon_choices
+
 # Materialize colors (without accent, darken and lighten classes)
 COLOURS = [
     ("red", "red"),
@@ -24,938 +26,8 @@ COLOURS = [
     ("transparent", "transparent"),
 ]
 
-# About 1000 icon names from Google's github repository
-ICONS = [
-    ("3d_rotation", "3d_rotation"),
-    ("ac_unit", "ac_unit"),
-    ("access_alarm", "access_alarm"),
-    ("access_alarms", "access_alarms"),
-    ("access_time", "access_time"),
-    ("accessibility", "accessibility"),
-    ("accessible", "accessible"),
-    ("account_balance", "account_balance"),
-    ("account_balance_wallet", "account_balance_wallet"),
-    ("account_box", "account_box"),
-    ("account_circle", "account_circle"),
-    ("adb", "adb"),
-    ("add", "add"),
-    ("add_a_photo", "add_a_photo"),
-    ("add_alarm", "add_alarm"),
-    ("add_alert", "add_alert"),
-    ("add_box", "add_box"),
-    ("add_circle", "add_circle"),
-    ("add_circle_outline", "add_circle_outline"),
-    ("add_location", "add_location"),
-    ("add_shopping_cart", "add_shopping_cart"),
-    ("add_to_photos", "add_to_photos"),
-    ("add_to_queue", "add_to_queue"),
-    ("adjust", "adjust"),
-    ("airline_seat_flat", "airline_seat_flat"),
-    ("airline_seat_flat_angled", "airline_seat_flat_angled"),
-    ("airline_seat_individual_suite", "airline_seat_individual_suite"),
-    ("airline_seat_legroom_extra", "airline_seat_legroom_extra"),
-    ("airline_seat_legroom_normal", "airline_seat_legroom_normal"),
-    ("airline_seat_legroom_reduced", "airline_seat_legroom_reduced"),
-    ("airline_seat_recline_extra", "airline_seat_recline_extra"),
-    ("airline_seat_recline_normal", "airline_seat_recline_normal"),
-    ("airplanemode_active", "airplanemode_active"),
-    ("airplanemode_inactive", "airplanemode_inactive"),
-    ("airplay", "airplay"),
-    ("airport_shuttle", "airport_shuttle"),
-    ("alarm", "alarm"),
-    ("alarm_add", "alarm_add"),
-    ("alarm_off", "alarm_off"),
-    ("alarm_on", "alarm_on"),
-    ("album", "album"),
-    ("all_inclusive", "all_inclusive"),
-    ("all_out", "all_out"),
-    ("android", "android"),
-    ("announcement", "announcement"),
-    ("apps", "apps"),
-    ("archive", "archive"),
-    ("arrow_back", "arrow_back"),
-    ("arrow_downward", "arrow_downward"),
-    ("arrow_drop_down", "arrow_drop_down"),
-    ("arrow_drop_down_circle", "arrow_drop_down_circle"),
-    ("arrow_drop_up", "arrow_drop_up"),
-    ("arrow_forward", "arrow_forward"),
-    ("arrow_upward", "arrow_upward"),
-    ("art_track", "art_track"),
-    ("aspect_ratio", "aspect_ratio"),
-    ("assessment", "assessment"),
-    ("assignment", "assignment"),
-    ("assignment_ind", "assignment_ind"),
-    ("assignment_late", "assignment_late"),
-    ("assignment_return", "assignment_return"),
-    ("assignment_returned", "assignment_returned"),
-    ("assignment_turned_in", "assignment_turned_in"),
-    ("assistant", "assistant"),
-    ("assistant_photo", "assistant_photo"),
-    ("attach_file", "attach_file"),
-    ("attach_money", "attach_money"),
-    ("attachment", "attachment"),
-    ("audiotrack", "audiotrack"),
-    ("autorenew", "autorenew"),
-    ("av_timer", "av_timer"),
-    ("backspace", "backspace"),
-    ("backup", "backup"),
-    ("battery_alert", "battery_alert"),
-    ("battery_charging_full", "battery_charging_full"),
-    ("battery_full", "battery_full"),
-    ("battery_std", "battery_std"),
-    ("battery_unknown", "battery_unknown"),
-    ("beach_access", "beach_access"),
-    ("beenhere", "beenhere"),
-    ("block", "block"),
-    ("bluetooth", "bluetooth"),
-    ("bluetooth_audio", "bluetooth_audio"),
-    ("bluetooth_connected", "bluetooth_connected"),
-    ("bluetooth_disabled", "bluetooth_disabled"),
-    ("bluetooth_searching", "bluetooth_searching"),
-    ("blur_circular", "blur_circular"),
-    ("blur_linear", "blur_linear"),
-    ("blur_off", "blur_off"),
-    ("blur_on", "blur_on"),
-    ("book", "book"),
-    ("bookmark", "bookmark"),
-    ("bookmark_border", "bookmark_border"),
-    ("border_all", "border_all"),
-    ("border_bottom", "border_bottom"),
-    ("border_clear", "border_clear"),
-    ("border_color", "border_color"),
-    ("border_horizontal", "border_horizontal"),
-    ("border_inner", "border_inner"),
-    ("border_left", "border_left"),
-    ("border_outer", "border_outer"),
-    ("border_right", "border_right"),
-    ("border_style", "border_style"),
-    ("border_top", "border_top"),
-    ("border_vertical", "border_vertical"),
-    ("branding_watermark", "branding_watermark"),
-    ("brightness_1", "brightness_1"),
-    ("brightness_2", "brightness_2"),
-    ("brightness_3", "brightness_3"),
-    ("brightness_4", "brightness_4"),
-    ("brightness_5", "brightness_5"),
-    ("brightness_6", "brightness_6"),
-    ("brightness_7", "brightness_7"),
-    ("brightness_auto", "brightness_auto"),
-    ("brightness_high", "brightness_high"),
-    ("brightness_low", "brightness_low"),
-    ("brightness_medium", "brightness_medium"),
-    ("broken_image", "broken_image"),
-    ("brush", "brush"),
-    ("bubble_chart", "bubble_chart"),
-    ("bug_report", "bug_report"),
-    ("build", "build"),
-    ("burst_mode", "burst_mode"),
-    ("business", "business"),
-    ("business_center", "business_center"),
-    ("cached", "cached"),
-    ("cake", "cake"),
-    ("call", "call"),
-    ("call_end", "call_end"),
-    ("call_made", "call_made"),
-    ("call_merge", "call_merge"),
-    ("call_missed", "call_missed"),
-    ("call_missed_outgoing", "call_missed_outgoing"),
-    ("call_received", "call_received"),
-    ("call_split", "call_split"),
-    ("call_to_action", "call_to_action"),
-    ("camera", "camera"),
-    ("camera_alt", "camera_alt"),
-    ("camera_enhance", "camera_enhance"),
-    ("camera_front", "camera_front"),
-    ("camera_rear", "camera_rear"),
-    ("camera_roll", "camera_roll"),
-    ("cancel", "cancel"),
-    ("card_giftcard", "card_giftcard"),
-    ("card_membership", "card_membership"),
-    ("card_travel", "card_travel"),
-    ("casino", "casino"),
-    ("cast", "cast"),
-    ("cast_connected", "cast_connected"),
-    ("center_focus_strong", "center_focus_strong"),
-    ("center_focus_weak", "center_focus_weak"),
-    ("change_history", "change_history"),
-    ("chat", "chat"),
-    ("chat_bubble", "chat_bubble"),
-    ("chat_bubble_outline", "chat_bubble_outline"),
-    ("check", "check"),
-    ("check_box", "check_box"),
-    ("check_box_outline_blank", "check_box_outline_blank"),
-    ("check_circle", "check_circle"),
-    ("chevron_left", "chevron_left"),
-    ("chevron_right", "chevron_right"),
-    ("child_care", "child_care"),
-    ("child_friendly", "child_friendly"),
-    ("chrome_reader_mode", "chrome_reader_mode"),
-    ("class", "class"),
-    ("clear", "clear"),
-    ("clear_all", "clear_all"),
-    ("close", "close"),
-    ("closed_caption", "closed_caption"),
-    ("cloud", "cloud"),
-    ("cloud_circle", "cloud_circle"),
-    ("cloud_done", "cloud_done"),
-    ("cloud_download", "cloud_download"),
-    ("cloud_off", "cloud_off"),
-    ("cloud_queue", "cloud_queue"),
-    ("cloud_upload", "cloud_upload"),
-    ("code", "code"),
-    ("collections", "collections"),
-    ("collections_bookmark", "collections_bookmark"),
-    ("color_lens", "color_lens"),
-    ("colorize", "colorize"),
-    ("comment", "comment"),
-    ("compare", "compare"),
-    ("compare_arrows", "compare_arrows"),
-    ("computer", "computer"),
-    ("confirmation_number", "confirmation_number"),
-    ("contact_mail", "contact_mail"),
-    ("contact_phone", "contact_phone"),
-    ("contacts", "contacts"),
-    ("content_copy", "content_copy"),
-    ("content_cut", "content_cut"),
-    ("content_paste", "content_paste"),
-    ("control_point", "control_point"),
-    ("control_point_duplicate", "control_point_duplicate"),
-    ("copyright", "copyright"),
-    ("create", "create"),
-    ("create_new_folder", "create_new_folder"),
-    ("credit_card", "credit_card"),
-    ("crop", "crop"),
-    ("crop_16_9", "crop_16_9"),
-    ("crop_3_2", "crop_3_2"),
-    ("crop_5_4", "crop_5_4"),
-    ("crop_7_5", "crop_7_5"),
-    ("crop_din", "crop_din"),
-    ("crop_free", "crop_free"),
-    ("crop_landscape", "crop_landscape"),
-    ("crop_original", "crop_original"),
-    ("crop_portrait", "crop_portrait"),
-    ("crop_rotate", "crop_rotate"),
-    ("crop_square", "crop_square"),
-    ("dashboard", "dashboard"),
-    ("data_usage", "data_usage"),
-    ("date_range", "date_range"),
-    ("dehaze", "dehaze"),
-    ("delete", "delete"),
-    ("delete_forever", "delete_forever"),
-    ("delete_sweep", "delete_sweep"),
-    ("description", "description"),
-    ("desktop_mac", "desktop_mac"),
-    ("desktop_windows", "desktop_windows"),
-    ("details", "details"),
-    ("developer_board", "developer_board"),
-    ("developer_mode", "developer_mode"),
-    ("device_hub", "device_hub"),
-    ("devices", "devices"),
-    ("devices_other", "devices_other"),
-    ("dialer_sip", "dialer_sip"),
-    ("dialpad", "dialpad"),
-    ("directions", "directions"),
-    ("directions_bike", "directions_bike"),
-    ("directions_boat", "directions_boat"),
-    ("directions_bus", "directions_bus"),
-    ("directions_car", "directions_car"),
-    ("directions_railway", "directions_railway"),
-    ("directions_run", "directions_run"),
-    ("directions_subway", "directions_subway"),
-    ("directions_transit", "directions_transit"),
-    ("directions_walk", "directions_walk"),
-    ("disc_full", "disc_full"),
-    ("dns", "dns"),
-    ("do_not_disturb", "do_not_disturb"),
-    ("do_not_disturb_alt", "do_not_disturb_alt"),
-    ("do_not_disturb_off", "do_not_disturb_off"),
-    ("do_not_disturb_on", "do_not_disturb_on"),
-    ("dock", "dock"),
-    ("domain", "domain"),
-    ("done", "done"),
-    ("done_all", "done_all"),
-    ("donut_large", "donut_large"),
-    ("donut_small", "donut_small"),
-    ("drafts", "drafts"),
-    ("drag_handle", "drag_handle"),
-    ("drive_eta", "drive_eta"),
-    ("dvr", "dvr"),
-    ("edit", "edit"),
-    ("edit_location", "edit_location"),
-    ("eject", "eject"),
-    ("email", "email"),
-    ("enhanced_encryption", "enhanced_encryption"),
-    ("equalizer", "equalizer"),
-    ("error", "error"),
-    ("error_outline", "error_outline"),
-    ("euro_symbol", "euro_symbol"),
-    ("ev_station", "ev_station"),
-    ("event", "event"),
-    ("event_available", "event_available"),
-    ("event_busy", "event_busy"),
-    ("event_note", "event_note"),
-    ("event_seat", "event_seat"),
-    ("exit_to_app", "exit_to_app"),
-    ("expand_less", "expand_less"),
-    ("expand_more", "expand_more"),
-    ("explicit", "explicit"),
-    ("explore", "explore"),
-    ("exposure", "exposure"),
-    ("exposure_neg_1", "exposure_neg_1"),
-    ("exposure_neg_2", "exposure_neg_2"),
-    ("exposure_plus_1", "exposure_plus_1"),
-    ("exposure_plus_2", "exposure_plus_2"),
-    ("exposure_zero", "exposure_zero"),
-    ("extension", "extension"),
-    ("face", "face"),
-    ("fast_forward", "fast_forward"),
-    ("fast_rewind", "fast_rewind"),
-    ("favorite", "favorite"),
-    ("favorite_border", "favorite_border"),
-    ("featured_play_list", "featured_play_list"),
-    ("featured_video", "featured_video"),
-    ("feedback", "feedback"),
-    ("fiber_dvr", "fiber_dvr"),
-    ("fiber_manual_record", "fiber_manual_record"),
-    ("fiber_new", "fiber_new"),
-    ("fiber_pin", "fiber_pin"),
-    ("fiber_smart_record", "fiber_smart_record"),
-    ("file_download", "file_download"),
-    ("file_upload", "file_upload"),
-    ("filter", "filter"),
-    ("filter_1", "filter_1"),
-    ("filter_2", "filter_2"),
-    ("filter_3", "filter_3"),
-    ("filter_4", "filter_4"),
-    ("filter_5", "filter_5"),
-    ("filter_6", "filter_6"),
-    ("filter_7", "filter_7"),
-    ("filter_8", "filter_8"),
-    ("filter_9", "filter_9"),
-    ("filter_9_plus", "filter_9_plus"),
-    ("filter_b_and_w", "filter_b_and_w"),
-    ("filter_center_focus", "filter_center_focus"),
-    ("filter_drama", "filter_drama"),
-    ("filter_frames", "filter_frames"),
-    ("filter_hdr", "filter_hdr"),
-    ("filter_list", "filter_list"),
-    ("filter_none", "filter_none"),
-    ("filter_tilt_shift", "filter_tilt_shift"),
-    ("filter_vintage", "filter_vintage"),
-    ("find_in_page", "find_in_page"),
-    ("find_replace", "find_replace"),
-    ("fingerprint", "fingerprint"),
-    ("first_page", "first_page"),
-    ("fitness_center", "fitness_center"),
-    ("flag", "flag"),
-    ("flare", "flare"),
-    ("flash_auto", "flash_auto"),
-    ("flash_off", "flash_off"),
-    ("flash_on", "flash_on"),
-    ("flight", "flight"),
-    ("flight_land", "flight_land"),
-    ("flight_takeoff", "flight_takeoff"),
-    ("flip", "flip"),
-    ("flip_to_back", "flip_to_back"),
-    ("flip_to_front", "flip_to_front"),
-    ("folder", "folder"),
-    ("folder_open", "folder_open"),
-    ("folder_shared", "folder_shared"),
-    ("folder_special", "folder_special"),
-    ("font_download", "font_download"),
-    ("format_align_center", "format_align_center"),
-    ("format_align_justify", "format_align_justify"),
-    ("format_align_left", "format_align_left"),
-    ("format_align_right", "format_align_right"),
-    ("format_bold", "format_bold"),
-    ("format_clear", "format_clear"),
-    ("format_color_fill", "format_color_fill"),
-    ("format_color_reset", "format_color_reset"),
-    ("format_color_text", "format_color_text"),
-    ("format_indent_decrease", "format_indent_decrease"),
-    ("format_indent_increase", "format_indent_increase"),
-    ("format_italic", "format_italic"),
-    ("format_line_spacing", "format_line_spacing"),
-    ("format_list_bulleted", "format_list_bulleted"),
-    ("format_list_numbered", "format_list_numbered"),
-    ("format_paint", "format_paint"),
-    ("format_quote", "format_quote"),
-    ("format_shapes", "format_shapes"),
-    ("format_size", "format_size"),
-    ("format_strikethrough", "format_strikethrough"),
-    ("format_textdirection_l_to_r", "format_textdirection_l_to_r"),
-    ("format_textdirection_r_to_l", "format_textdirection_r_to_l"),
-    ("format_underlined", "format_underlined"),
-    ("forum", "forum"),
-    ("forward", "forward"),
-    ("forward_10", "forward_10"),
-    ("forward_30", "forward_30"),
-    ("forward_5", "forward_5"),
-    ("free_breakfast", "free_breakfast"),
-    ("fullscreen", "fullscreen"),
-    ("fullscreen_exit", "fullscreen_exit"),
-    ("functions", "functions"),
-    ("g_translate", "g_translate"),
-    ("gamepad", "gamepad"),
-    ("games", "games"),
-    ("gavel", "gavel"),
-    ("gesture", "gesture"),
-    ("get_app", "get_app"),
-    ("gif", "gif"),
-    ("golf_course", "golf_course"),
-    ("gps_fixed", "gps_fixed"),
-    ("gps_not_fixed", "gps_not_fixed"),
-    ("gps_off", "gps_off"),
-    ("grade", "grade"),
-    ("gradient", "gradient"),
-    ("grain", "grain"),
-    ("graphic_eq", "graphic_eq"),
-    ("grid_off", "grid_off"),
-    ("grid_on", "grid_on"),
-    ("group", "group"),
-    ("group_add", "group_add"),
-    ("group_work", "group_work"),
-    ("hd", "hd"),
-    ("hdr_off", "hdr_off"),
-    ("hdr_on", "hdr_on"),
-    ("hdr_strong", "hdr_strong"),
-    ("hdr_weak", "hdr_weak"),
-    ("headset", "headset"),
-    ("headset_mic", "headset_mic"),
-    ("healing", "healing"),
-    ("hearing", "hearing"),
-    ("help", "help"),
-    ("help_outline", "help_outline"),
-    ("high_quality", "high_quality"),
-    ("highlight", "highlight"),
-    ("highlight_off", "highlight_off"),
-    ("history", "history"),
-    ("home", "home"),
-    ("hot_tub", "hot_tub"),
-    ("hotel", "hotel"),
-    ("hourglass_empty", "hourglass_empty"),
-    ("hourglass_full", "hourglass_full"),
-    ("http", "http"),
-    ("https", "https"),
-    ("image", "image"),
-    ("image_aspect_ratio", "image_aspect_ratio"),
-    ("import_contacts", "import_contacts"),
-    ("import_export", "import_export"),
-    ("important_devices", "important_devices"),
-    ("inbox", "inbox"),
-    ("indeterminate_check_box", "indeterminate_check_box"),
-    ("info", "info"),
-    ("info_outline", "info_outline"),
-    ("input", "input"),
-    ("insert_chart", "insert_chart"),
-    ("insert_comment", "insert_comment"),
-    ("insert_drive_file", "insert_drive_file"),
-    ("insert_emoticon", "insert_emoticon"),
-    ("insert_invitation", "insert_invitation"),
-    ("insert_link", "insert_link"),
-    ("insert_photo", "insert_photo"),
-    ("invert_colors", "invert_colors"),
-    ("invert_colors_off", "invert_colors_off"),
-    ("iso", "iso"),
-    ("keyboard", "keyboard"),
-    ("keyboard_arrow_down", "keyboard_arrow_down"),
-    ("keyboard_arrow_left", "keyboard_arrow_left"),
-    ("keyboard_arrow_right", "keyboard_arrow_right"),
-    ("keyboard_arrow_up", "keyboard_arrow_up"),
-    ("keyboard_backspace", "keyboard_backspace"),
-    ("keyboard_capslock", "keyboard_capslock"),
-    ("keyboard_hide", "keyboard_hide"),
-    ("keyboard_return", "keyboard_return"),
-    ("keyboard_tab", "keyboard_tab"),
-    ("keyboard_voice", "keyboard_voice"),
-    ("kitchen", "kitchen"),
-    ("label", "label"),
-    ("label_outline", "label_outline"),
-    ("landscape", "landscape"),
-    ("language", "language"),
-    ("laptop", "laptop"),
-    ("laptop_chromebook", "laptop_chromebook"),
-    ("laptop_mac", "laptop_mac"),
-    ("laptop_windows", "laptop_windows"),
-    ("last_page", "last_page"),
-    ("launch", "launch"),
-    ("layers", "layers"),
-    ("layers_clear", "layers_clear"),
-    ("leak_add", "leak_add"),
-    ("leak_remove", "leak_remove"),
-    ("lens", "lens"),
-    ("library_add", "library_add"),
-    ("library_books", "library_books"),
-    ("library_music", "library_music"),
-    ("lightbulb_outline", "lightbulb_outline"),
-    ("line_style", "line_style"),
-    ("line_weight", "line_weight"),
-    ("linear_scale", "linear_scale"),
-    ("link", "link"),
-    ("linked_camera", "linked_camera"),
-    ("list", "list"),
-    ("live_help", "live_help"),
-    ("live_tv", "live_tv"),
-    ("local_activity", "local_activity"),
-    ("local_airport", "local_airport"),
-    ("local_atm", "local_atm"),
-    ("local_bar", "local_bar"),
-    ("local_cafe", "local_cafe"),
-    ("local_car_wash", "local_car_wash"),
-    ("local_convenience_store", "local_convenience_store"),
-    ("local_dining", "local_dining"),
-    ("local_drink", "local_drink"),
-    ("local_florist", "local_florist"),
-    ("local_gas_station", "local_gas_station"),
-    ("local_grocery_store", "local_grocery_store"),
-    ("local_hospital", "local_hospital"),
-    ("local_hotel", "local_hotel"),
-    ("local_laundry_service", "local_laundry_service"),
-    ("local_library", "local_library"),
-    ("local_mall", "local_mall"),
-    ("local_movies", "local_movies"),
-    ("local_offer", "local_offer"),
-    ("local_parking", "local_parking"),
-    ("local_pharmacy", "local_pharmacy"),
-    ("local_phone", "local_phone"),
-    ("local_pizza", "local_pizza"),
-    ("local_play", "local_play"),
-    ("local_post_office", "local_post_office"),
-    ("local_printshop", "local_printshop"),
-    ("local_see", "local_see"),
-    ("local_shipping", "local_shipping"),
-    ("local_taxi", "local_taxi"),
-    ("location_city", "location_city"),
-    ("location_disabled", "location_disabled"),
-    ("location_off", "location_off"),
-    ("location_on", "location_on"),
-    ("location_searching", "location_searching"),
-    ("lock", "lock"),
-    ("lock_open", "lock_open"),
-    ("lock_outline", "lock_outline"),
-    ("looks", "looks"),
-    ("looks_3", "looks_3"),
-    ("looks_4", "looks_4"),
-    ("looks_5", "looks_5"),
-    ("looks_6", "looks_6"),
-    ("looks_one", "looks_one"),
-    ("looks_two", "looks_two"),
-    ("loop", "loop"),
-    ("loupe", "loupe"),
-    ("low_priority", "low_priority"),
-    ("loyalty", "loyalty"),
-    ("mail", "mail"),
-    ("mail_outline", "mail_outline"),
-    ("map", "map"),
-    ("markunread", "markunread"),
-    ("markunread_mailbox", "markunread_mailbox"),
-    ("memory", "memory"),
-    ("menu", "menu"),
-    ("merge_type", "merge_type"),
-    ("message", "message"),
-    ("mic", "mic"),
-    ("mic_none", "mic_none"),
-    ("mic_off", "mic_off"),
-    ("mms", "mms"),
-    ("mode_comment", "mode_comment"),
-    ("mode_edit", "mode_edit"),
-    ("monetization_on", "monetization_on"),
-    ("money_off", "money_off"),
-    ("monochrome_photos", "monochrome_photos"),
-    ("mood", "mood"),
-    ("mood_bad", "mood_bad"),
-    ("more", "more"),
-    ("more_horiz", "more_horiz"),
-    ("more_vert", "more_vert"),
-    ("motorcycle", "motorcycle"),
-    ("mouse", "mouse"),
-    ("move_to_inbox", "move_to_inbox"),
-    ("movie", "movie"),
-    ("movie_creation", "movie_creation"),
-    ("movie_filter", "movie_filter"),
-    ("multiline_chart", "multiline_chart"),
-    ("music_note", "music_note"),
-    ("music_video", "music_video"),
-    ("my_location", "my_location"),
-    ("nature", "nature"),
-    ("nature_people", "nature_people"),
-    ("navigate_before", "navigate_before"),
-    ("navigate_next", "navigate_next"),
-    ("navigation", "navigation"),
-    ("near_me", "near_me"),
-    ("network_cell", "network_cell"),
-    ("network_check", "network_check"),
-    ("network_locked", "network_locked"),
-    ("network_wifi", "network_wifi"),
-    ("new_releases", "new_releases"),
-    ("next_week", "next_week"),
-    ("nfc", "nfc"),
-    ("no_encryption", "no_encryption"),
-    ("no_sim", "no_sim"),
-    ("not_interested", "not_interested"),
-    ("note", "note"),
-    ("note_add", "note_add"),
-    ("notifications", "notifications"),
-    ("notifications_active", "notifications_active"),
-    ("notifications_none", "notifications_none"),
-    ("notifications_off", "notifications_off"),
-    ("notifications_paused", "notifications_paused"),
-    ("offline_pin", "offline_pin"),
-    ("ondemand_video", "ondemand_video"),
-    ("opacity", "opacity"),
-    ("open_in_browser", "open_in_browser"),
-    ("open_in_new", "open_in_new"),
-    ("open_with", "open_with"),
-    ("pages", "pages"),
-    ("pageview", "pageview"),
-    ("palette", "palette"),
-    ("pan_tool", "pan_tool"),
-    ("panorama", "panorama"),
-    ("panorama_fish_eye", "panorama_fish_eye"),
-    ("panorama_horizontal", "panorama_horizontal"),
-    ("panorama_vertical", "panorama_vertical"),
-    ("panorama_wide_angle", "panorama_wide_angle"),
-    ("party_mode", "party_mode"),
-    ("pause", "pause"),
-    ("pause_circle_filled", "pause_circle_filled"),
-    ("pause_circle_outline", "pause_circle_outline"),
-    ("payment", "payment"),
-    ("people", "people"),
-    ("people_outline", "people_outline"),
-    ("perm_camera_mic", "perm_camera_mic"),
-    ("perm_contact_calendar", "perm_contact_calendar"),
-    ("perm_data_setting", "perm_data_setting"),
-    ("perm_device_information", "perm_device_information"),
-    ("perm_identity", "perm_identity"),
-    ("perm_media", "perm_media"),
-    ("perm_phone_msg", "perm_phone_msg"),
-    ("perm_scan_wifi", "perm_scan_wifi"),
-    ("person", "person"),
-    ("person_add", "person_add"),
-    ("person_outline", "person_outline"),
-    ("person_pin", "person_pin"),
-    ("person_pin_circle", "person_pin_circle"),
-    ("personal_video", "personal_video"),
-    ("pets", "pets"),
-    ("phone", "phone"),
-    ("phone_android", "phone_android"),
-    ("phone_bluetooth_speaker", "phone_bluetooth_speaker"),
-    ("phone_forwarded", "phone_forwarded"),
-    ("phone_in_talk", "phone_in_talk"),
-    ("phone_iphone", "phone_iphone"),
-    ("phone_locked", "phone_locked"),
-    ("phone_missed", "phone_missed"),
-    ("phone_paused", "phone_paused"),
-    ("phonelink", "phonelink"),
-    ("phonelink_erase", "phonelink_erase"),
-    ("phonelink_lock", "phonelink_lock"),
-    ("phonelink_off", "phonelink_off"),
-    ("phonelink_ring", "phonelink_ring"),
-    ("phonelink_setup", "phonelink_setup"),
-    ("photo", "photo"),
-    ("photo_album", "photo_album"),
-    ("photo_camera", "photo_camera"),
-    ("photo_filter", "photo_filter"),
-    ("photo_library", "photo_library"),
-    ("photo_size_select_actual", "photo_size_select_actual"),
-    ("photo_size_select_large", "photo_size_select_large"),
-    ("photo_size_select_small", "photo_size_select_small"),
-    ("picture_as_pdf", "picture_as_pdf"),
-    ("picture_in_picture", "picture_in_picture"),
-    ("picture_in_picture_alt", "picture_in_picture_alt"),
-    ("pie_chart", "pie_chart"),
-    ("pie_chart_outlined", "pie_chart_outlined"),
-    ("pin_drop", "pin_drop"),
-    ("place", "place"),
-    ("play_arrow", "play_arrow"),
-    ("play_circle_filled", "play_circle_filled"),
-    ("play_circle_outline", "play_circle_outline"),
-    ("play_for_work", "play_for_work"),
-    ("playlist_add", "playlist_add"),
-    ("playlist_add_check", "playlist_add_check"),
-    ("playlist_play", "playlist_play"),
-    ("plus_one", "plus_one"),
-    ("poll", "poll"),
-    ("polymer", "polymer"),
-    ("pool", "pool"),
-    ("portable_wifi_off", "portable_wifi_off"),
-    ("portrait", "portrait"),
-    ("power", "power"),
-    ("power_input", "power_input"),
-    ("power_settings_new", "power_settings_new"),
-    ("pregnant_woman", "pregnant_woman"),
-    ("present_to_all", "present_to_all"),
-    ("print", "print"),
-    ("priority_high", "priority_high"),
-    ("public", "public"),
-    ("publish", "publish"),
-    ("query_builder", "query_builder"),
-    ("question_answer", "question_answer"),
-    ("queue", "queue"),
-    ("queue_music", "queue_music"),
-    ("queue_play_next", "queue_play_next"),
-    ("radio", "radio"),
-    ("radio_button_checked", "radio_button_checked"),
-    ("radio_button_unchecked", "radio_button_unchecked"),
-    ("rate_review", "rate_review"),
-    ("receipt", "receipt"),
-    ("recent_actors", "recent_actors"),
-    ("record_voice_over", "record_voice_over"),
-    ("redeem", "redeem"),
-    ("redo", "redo"),
-    ("refresh", "refresh"),
-    ("remove", "remove"),
-    ("remove_circle", "remove_circle"),
-    ("remove_circle_outline", "remove_circle_outline"),
-    ("remove_from_queue", "remove_from_queue"),
-    ("remove_red_eye", "remove_red_eye"),
-    ("remove_shopping_cart", "remove_shopping_cart"),
-    ("reorder", "reorder"),
-    ("repeat", "repeat"),
-    ("repeat_one", "repeat_one"),
-    ("replay", "replay"),
-    ("replay_10", "replay_10"),
-    ("replay_30", "replay_30"),
-    ("replay_5", "replay_5"),
-    ("reply", "reply"),
-    ("reply_all", "reply_all"),
-    ("report", "report"),
-    ("report_problem", "report_problem"),
-    ("restaurant", "restaurant"),
-    ("restaurant_menu", "restaurant_menu"),
-    ("restore", "restore"),
-    ("restore_page", "restore_page"),
-    ("ring_volume", "ring_volume"),
-    ("room", "room"),
-    ("room_service", "room_service"),
-    ("rotate_90_degrees_ccw", "rotate_90_degrees_ccw"),
-    ("rotate_left", "rotate_left"),
-    ("rotate_right", "rotate_right"),
-    ("rounded_corner", "rounded_corner"),
-    ("router", "router"),
-    ("rowing", "rowing"),
-    ("rss_feed", "rss_feed"),
-    ("rv_hookup", "rv_hookup"),
-    ("satellite", "satellite"),
-    ("save", "save"),
-    ("scanner", "scanner"),
-    ("schedule", "schedule"),
-    ("school", "school"),
-    ("screen_lock_landscape", "screen_lock_landscape"),
-    ("screen_lock_portrait", "screen_lock_portrait"),
-    ("screen_lock_rotation", "screen_lock_rotation"),
-    ("screen_rotation", "screen_rotation"),
-    ("screen_share", "screen_share"),
-    ("sd_card", "sd_card"),
-    ("sd_storage", "sd_storage"),
-    ("search", "search"),
-    ("security", "security"),
-    ("select_all", "select_all"),
-    ("send", "send"),
-    ("sentiment_dissatisfied", "sentiment_dissatisfied"),
-    ("sentiment_neutral", "sentiment_neutral"),
-    ("sentiment_satisfied", "sentiment_satisfied"),
-    ("sentiment_very_dissatisfied", "sentiment_very_dissatisfied"),
-    ("sentiment_very_satisfied", "sentiment_very_satisfied"),
-    ("settings", "settings"),
-    ("settings_applications", "settings_applications"),
-    ("settings_backup_restore", "settings_backup_restore"),
-    ("settings_bluetooth", "settings_bluetooth"),
-    ("settings_brightness", "settings_brightness"),
-    ("settings_cell", "settings_cell"),
-    ("settings_ethernet", "settings_ethernet"),
-    ("settings_input_antenna", "settings_input_antenna"),
-    ("settings_input_component", "settings_input_component"),
-    ("settings_input_composite", "settings_input_composite"),
-    ("settings_input_hdmi", "settings_input_hdmi"),
-    ("settings_input_svideo", "settings_input_svideo"),
-    ("settings_overscan", "settings_overscan"),
-    ("settings_phone", "settings_phone"),
-    ("settings_power", "settings_power"),
-    ("settings_remote", "settings_remote"),
-    ("settings_system_daydream", "settings_system_daydream"),
-    ("settings_voice", "settings_voice"),
-    ("share", "share"),
-    ("shop", "shop"),
-    ("shop_two", "shop_two"),
-    ("shopping_basket", "shopping_basket"),
-    ("shopping_cart", "shopping_cart"),
-    ("short_text", "short_text"),
-    ("show_chart", "show_chart"),
-    ("shuffle", "shuffle"),
-    ("signal_cellular_4_bar", "signal_cellular_4_bar"),
-    ("signal_cellular_connected_no_internet_4_bar", "signal_cellular_connected_no_internet_4_bar"),
-    ("signal_cellular_no_sim", "signal_cellular_no_sim"),
-    ("signal_cellular_null", "signal_cellular_null"),
-    ("signal_cellular_off", "signal_cellular_off"),
-    ("signal_wifi_4_bar", "signal_wifi_4_bar"),
-    ("signal_wifi_4_bar_lock", "signal_wifi_4_bar_lock"),
-    ("signal_wifi_off", "signal_wifi_off"),
-    ("sim_card", "sim_card"),
-    ("sim_card_alert", "sim_card_alert"),
-    ("skip_next", "skip_next"),
-    ("skip_previous", "skip_previous"),
-    ("slideshow", "slideshow"),
-    ("slow_motion_video", "slow_motion_video"),
-    ("smartphone", "smartphone"),
-    ("smoke_free", "smoke_free"),
-    ("smoking_rooms", "smoking_rooms"),
-    ("sms", "sms"),
-    ("sms_failed", "sms_failed"),
-    ("snooze", "snooze"),
-    ("sort", "sort"),
-    ("sort_by_alpha", "sort_by_alpha"),
-    ("spa", "spa"),
-    ("space_bar", "space_bar"),
-    ("speaker", "speaker"),
-    ("speaker_group", "speaker_group"),
-    ("speaker_notes", "speaker_notes"),
-    ("speaker_notes_off", "speaker_notes_off"),
-    ("speaker_phone", "speaker_phone"),
-    ("spellcheck", "spellcheck"),
-    ("star", "star"),
-    ("star_border", "star_border"),
-    ("star_half", "star_half"),
-    ("stars", "stars"),
-    ("stay_current_landscape", "stay_current_landscape"),
-    ("stay_current_portrait", "stay_current_portrait"),
-    ("stay_primary_landscape", "stay_primary_landscape"),
-    ("stay_primary_portrait", "stay_primary_portrait"),
-    ("stop", "stop"),
-    ("stop_screen_share", "stop_screen_share"),
-    ("storage", "storage"),
-    ("store", "store"),
-    ("store_mall_directory", "store_mall_directory"),
-    ("straighten", "straighten"),
-    ("streetview", "streetview"),
-    ("strikethrough_s", "strikethrough_s"),
-    ("style", "style"),
-    ("subdirectory_arrow_left", "subdirectory_arrow_left"),
-    ("subdirectory_arrow_right", "subdirectory_arrow_right"),
-    ("subject", "subject"),
-    ("subscriptions", "subscriptions"),
-    ("subtitles", "subtitles"),
-    ("subway", "subway"),
-    ("supervisor_account", "supervisor_account"),
-    ("surround_sound", "surround_sound"),
-    ("swap_calls", "swap_calls"),
-    ("swap_horiz", "swap_horiz"),
-    ("swap_vert", "swap_vert"),
-    ("swap_vertical_circle", "swap_vertical_circle"),
-    ("switch_camera", "switch_camera"),
-    ("switch_video", "switch_video"),
-    ("sync", "sync"),
-    ("sync_disabled", "sync_disabled"),
-    ("sync_problem", "sync_problem"),
-    ("system_update", "system_update"),
-    ("system_update_alt", "system_update_alt"),
-    ("tab", "tab"),
-    ("tab_unselected", "tab_unselected"),
-    ("tablet", "tablet"),
-    ("tablet_android", "tablet_android"),
-    ("tablet_mac", "tablet_mac"),
-    ("tag_faces", "tag_faces"),
-    ("tap_and_play", "tap_and_play"),
-    ("terrain", "terrain"),
-    ("text_fields", "text_fields"),
-    ("text_format", "text_format"),
-    ("textsms", "textsms"),
-    ("texture", "texture"),
-    ("theaters", "theaters"),
-    ("thumb_down", "thumb_down"),
-    ("thumb_up", "thumb_up"),
-    ("thumbs_up_down", "thumbs_up_down"),
-    ("time_to_leave", "time_to_leave"),
-    ("timelapse", "timelapse"),
-    ("timeline", "timeline"),
-    ("timer", "timer"),
-    ("timer_10", "timer_10"),
-    ("timer_3", "timer_3"),
-    ("timer_off", "timer_off"),
-    ("title", "title"),
-    ("toc", "toc"),
-    ("today", "today"),
-    ("toll", "toll"),
-    ("tonality", "tonality"),
-    ("touch_app", "touch_app"),
-    ("toys", "toys"),
-    ("track_changes", "track_changes"),
-    ("traffic", "traffic"),
-    ("train", "train"),
-    ("tram", "tram"),
-    ("transfer_within_a_station", "transfer_within_a_station"),
-    ("transform", "transform"),
-    ("translate", "translate"),
-    ("trending_down", "trending_down"),
-    ("trending_flat", "trending_flat"),
-    ("trending_up", "trending_up"),
-    ("tune", "tune"),
-    ("turned_in", "turned_in"),
-    ("turned_in_not", "turned_in_not"),
-    ("tv", "tv"),
-    ("unarchive", "unarchive"),
-    ("undo", "undo"),
-    ("unfold_less", "unfold_less"),
-    ("unfold_more", "unfold_more"),
-    ("update", "update"),
-    ("usb", "usb"),
-    ("verified_user", "verified_user"),
-    ("vertical_align_bottom", "vertical_align_bottom"),
-    ("vertical_align_center", "vertical_align_center"),
-    ("vertical_align_top", "vertical_align_top"),
-    ("vibration", "vibration"),
-    ("video_call", "video_call"),
-    ("video_label", "video_label"),
-    ("video_library", "video_library"),
-    ("videocam", "videocam"),
-    ("videocam_off", "videocam_off"),
-    ("videogame_asset", "videogame_asset"),
-    ("view_agenda", "view_agenda"),
-    ("view_array", "view_array"),
-    ("view_carousel", "view_carousel"),
-    ("view_column", "view_column"),
-    ("view_comfy", "view_comfy"),
-    ("view_compact", "view_compact"),
-    ("view_day", "view_day"),
-    ("view_headline", "view_headline"),
-    ("view_list", "view_list"),
-    ("view_module", "view_module"),
-    ("view_quilt", "view_quilt"),
-    ("view_stream", "view_stream"),
-    ("view_week", "view_week"),
-    ("vignette", "vignette"),
-    ("visibility", "visibility"),
-    ("visibility_off", "visibility_off"),
-    ("voice_chat", "voice_chat"),
-    ("voicemail", "voicemail"),
-    ("volume_down", "volume_down"),
-    ("volume_mute", "volume_mute"),
-    ("volume_off", "volume_off"),
-    ("volume_up", "volume_up"),
-    ("vpn_key", "vpn_key"),
-    ("vpn_lock", "vpn_lock"),
-    ("wallpaper", "wallpaper"),
-    ("warning", "warning"),
-    ("watch", "watch"),
-    ("watch_later", "watch_later"),
-    ("wb_auto", "wb_auto"),
-    ("wb_cloudy", "wb_cloudy"),
-    ("wb_incandescent", "wb_incandescent"),
-    ("wb_iridescent", "wb_iridescent"),
-    ("wb_sunny", "wb_sunny"),
-    ("wc", "wc"),
-    ("web", "web"),
-    ("web_asset", "web_asset"),
-    ("weekend", "weekend"),
-    ("whatshot", "whatshot"),
-    ("widgets", "widgets"),
-    ("wifi", "wifi"),
-    ("wifi_lock", "wifi_lock"),
-    ("wifi_tethering", "wifi_tethering"),
-    ("work", "work"),
-    ("wrap_text", "wrap_text"),
-    ("youtube_searched_for", "youtube_searched_for"),
-    ("zoom_in", "zoom_in"),
-    ("zoom_out", "zoom_out"),
-    ("zoom_out_map", "zoom_out_map"),
-]
+try:
+    ICONS = icon_choices("mdi")
+except FileNotFoundError:
+    # If icons aren't installed yet, set choices to empty list
+    ICONS = []
diff --git a/aleksis/core/views.py b/aleksis/core/views.py
index ed20571dd83aee3bfc5d3bc4fd1dc2c8a7211b1d..ea910292f63c7e1fdba3f7144b4128641d2b1446 100644
--- a/aleksis/core/views.py
+++ b/aleksis/core/views.py
@@ -4,6 +4,7 @@ from urllib.parse import urlencode, urlparse, urlunparse
 
 from django.apps import apps
 from django.conf import settings
+from django.contrib.auth.mixins import LoginRequiredMixin
 from django.contrib.auth.models import Group as DjangoGroup
 from django.contrib.auth.models import Permission, User
 from django.contrib.contenttypes.models import ContentType
@@ -35,7 +36,7 @@ from django.views.generic.edit import DeleteView, FormView
 from django.views.generic.list import ListView
 
 import reversion
-from allauth.account.utils import _has_verified_for_login, send_email_confirmation
+from allauth.account.utils import has_verified_email, send_email_confirmation
 from allauth.account.views import PasswordChangeView, PasswordResetView, SignupView
 from allauth.socialaccount.adapter import get_adapter
 from allauth.socialaccount.models import SocialAccount
@@ -115,6 +116,7 @@ from .registries import (
 from .tables import (
     AdditionalFieldsTable,
     DashboardWidgetTable,
+    FullPersonsTable,
     GroupGlobalPermissionTable,
     GroupObjectPermissionTable,
     GroupsTable,
@@ -358,7 +360,7 @@ def group(request: HttpRequest, id_: int) -> HttpResponse:
     members = group.members.all()
 
     # Build table
-    members_table = PersonsTable(members)
+    members_table = FullPersonsTable(members)
     RequestConfig(request).configure(members_table)
     context["members_table"] = members_table
 
@@ -366,7 +368,7 @@ def group(request: HttpRequest, id_: int) -> HttpResponse:
     owners = group.owners.all()
 
     # Build table
-    owners_table = PersonsTable(owners)
+    owners_table = FullPersonsTable(owners)
     RequestConfig(request).configure(owners_table)
     context["owners_table"] = owners_table
 
@@ -770,7 +772,7 @@ def edit_additional_field(request: HttpRequest, id_: Optional[int] = None) -> Ht
         if edit_additional_field_form.is_valid():
             edit_additional_field_form.save(commit=True)
 
-            messages.success(request, _("The additional_field has been saved."))
+            messages.success(request, _("The additional field has been saved."))
 
             return redirect("additional_fields")
 
@@ -1358,7 +1360,7 @@ class CeleryProgressView(View):
         return get_progress(request, task_id, *args, **kwargs)
 
 
-class CustomPasswordChangeView(PermissionRequiredMixin, PasswordChangeView):
+class CustomPasswordChangeView(LoginRequiredMixin, PermissionRequiredMixin, PasswordChangeView):
     """Custom password change view to allow to disable changing of password."""
 
     permission_required = "core.can_change_password"
@@ -1523,7 +1525,7 @@ class LoginView(AllAuthLoginView):
     def done(self, form_list, **kwargs):
         if settings.ACCOUNT_EMAIL_VERIFICATION == "mandatory":
             user = self.get_user()
-            if not _has_verified_for_login(user, user.email):
+            if not has_verified_email(user, user.email):
                 send_email_confirmation(self.request, user, signup=False, email=user.email)
                 return render(self.request, "account/verification_sent.html")
 
@@ -1595,7 +1597,7 @@ class ICalFeedEditView(PermissionRequiredMixin, AdvancedEditView):
     model = PersonalICalUrl
     template_name = "core/ical/ical_edit.html"
     success_url = reverse_lazy("ical_feed_list")
-    success_message = _("ICal feed updated successfully")
+    success_message = _("iCal feed updated successfully")
     permission_required = "core.edit_ical_rule"
 
     fields = ["name", "ical_feed"]
@@ -1605,7 +1607,7 @@ class ICalFeedDeleteView(PermissionRequiredMixin, AdvancedDeleteView):
     model = PersonalICalUrl
     template_name = "core/pages/delete.html"
     success_url = reverse_lazy("ical_feed_list")
-    success_message = _("ICal feed deleted successfully")
+    success_message = _("iCal feed deleted successfully")
     permission_required = "core.delete_ical_rule"
 
 
@@ -1613,7 +1615,7 @@ class ICalFeedCreateView(PermissionRequiredMixin, AdvancedCreateView):
     model = PersonalICalUrl
     template_name = "core/ical/ical_create.html"
     success_url = reverse_lazy("ical_feed_list")
-    success_message = _("ICal feed created successfully")
+    success_message = _("iCal feed created successfully")
     permission_required = "core.create_ical_rule"
 
     fields = ["name", "ical_feed"]
diff --git a/docs/_static/pwa_desktop_chromium.png b/docs/_static/pwa_desktop_chromium.png
new file mode 100644
index 0000000000000000000000000000000000000000..b2f2bb10a380a6147f1a1f516dc6aaf07cb7b545
Binary files /dev/null and b/docs/_static/pwa_desktop_chromium.png differ
diff --git a/docs/_static/pwa_mobile_chromium.png b/docs/_static/pwa_mobile_chromium.png
new file mode 100644
index 0000000000000000000000000000000000000000..3ea9f86d0f13f1e88f030453a16141bb2aba7f60
Binary files /dev/null and b/docs/_static/pwa_mobile_chromium.png differ
diff --git a/docs/_static/pwa_mobile_firefox.png b/docs/_static/pwa_mobile_firefox.png
new file mode 100644
index 0000000000000000000000000000000000000000..482614a3698797115693bf0d9736113bbad9929b
Binary files /dev/null and b/docs/_static/pwa_mobile_firefox.png differ
diff --git a/docs/_static/pwa_mobile_safari.png b/docs/_static/pwa_mobile_safari.png
new file mode 100644
index 0000000000000000000000000000000000000000..8bc4f21e04cecb69d70f56903275c18891aaca63
Binary files /dev/null and b/docs/_static/pwa_mobile_safari.png differ
diff --git a/docs/admin/01_core_concepts.rst b/docs/admin/01_core_concepts.rst
index cdd49c7183217897b09cf1fda5575307e0a5f08c..2d626927ae2845594a0a67525d213064f2581e97 100644
--- a/docs/admin/01_core_concepts.rst
+++ b/docs/admin/01_core_concepts.rst
@@ -1,3 +1,5 @@
+.. _core-concept:
+
 Concepts of the AlekSIS core
 ============================
 
@@ -93,7 +95,7 @@ In contrast to persons, groups are supposed to be **linked to school
 terms** (but they don’t have to be). For example, the composition of a
 class or a course varies from school term to school term. In order to
 archive historical data according to local laws, these groups have to be
-separeted which is solved by linking them to a school term.
+separated which is solved by linking them to a school term.
 
 Manage groups
 ~~~~~~~~~~~~~
diff --git a/docs/admin/10_install.rst b/docs/admin/10_install.rst
index f8b41d0d98efd5daa1df64a5fceea9ae5b86c662..05baa14a8c76f91b3407c47a97c2609c0decad6d 100644
--- a/docs/admin/10_install.rst
+++ b/docs/admin/10_install.rst
@@ -55,7 +55,8 @@ Install some packages from the Debian package system.
                chromium \
                redis-server \
                postgresql \
-               locales-all
+               locales-all \
+               celery
 
 Create PostgreSQL user and database
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -78,7 +79,6 @@ Create the directories for storage
             /usr/share/aleksis/{static,node_modules} \
             /var/lib/aleksis/media \
             /var/backups/aleksis
-   chown -R www-data:www-data /var/lib/aleksis
 
 Create AlekSIS configuration file
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -111,6 +111,18 @@ favourite text editor and adding the following configuration.
    password = "admin"
    email = "root@localhost"
 
+Make sure you specify the correct `allowed_hosts`. It is used for things like the OpenID Connect issuer and the standard mail domain.
+
+Generate OpenID Connect certificate
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+OpenID Connect needs a certificate, which you need to generate and assign required permissions.
+
+.. code-block:: shell
+
+   openssl genrsa -out /etc/aleksis/oidc.pem
+   chown www-data:www-data /etc/aleksis/oidc.pem
+
 Install AlekSIS itself
 ~~~~~~~~~~~~~~~~~~~~~~
 
@@ -119,14 +131,30 @@ They will pull the AlekSIS standard distribution from `PyPI`_ and install it to
 system-wide `dist-packages` of Python. Afterwards, it will download frontend dependencies
 from `yarnpkg`, collect static files, and migrate the database to the final schema.
 
+`aleksis` is a meta-package which will install the :ref:`core-concept`  and all official apps. If you want to install only the AlekSIS Core and your own set of apps, you can install `aleksis-core` instead of `aleksis`.
+
+You only need to install these additional dependencies if installing the meta-package:
+
 .. code-block:: shell
+   apt install libmariadb-dev libldap2-dev libsasl2-dev
+
+After that, you can install the aleksis meta-package, or only `aleksis-core`:
 
+.. code-block:: shell
    pip3 install aleksis
    aleksis-admin yarn install
    aleksis-admin collectstatic
    aleksis-admin migrate
    aleksis-admin createinitialrevisions
 
+Make dynamic content writable for webserver
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To make AlekSIS® able to write dynamic content, you need to assign permissions to the webserver user.
+
+.. code-block:: shell
+   chown -R www-data:www-data /var/lib/aleksis
+
 .. _core-configure-uwsgi:
 
 Configure uWSGI
diff --git a/docs/admin/21_ldap.rst b/docs/admin/21_ldap.rst
index 7b123a594154950482a6cdf7ac095a3030ee5359..389b3fca9c9c0f0af8f2f54fe448d87daf7bf776 100644
--- a/docs/admin/21_ldap.rst
+++ b/docs/admin/21_ldap.rst
@@ -13,7 +13,7 @@ the AlekSIS system (see below).
 Installing packages for LDAP support
 ------------------------------------
 
-Installing the necessary librairies for LDAP support unfortunately is not
+Installing the necessary libraries for LDAP support unfortunately is not
 very straightforward under all circumstances. On Debian, install these packages::
 
   sudo apt install python3-ldap libldap2-dev libssl-dev libsasl2-dev python3-dev
diff --git a/docs/admin/22_registration.rst b/docs/admin/22_registration.rst
index 510500f2198ec6377c91d97bf1be903411f0daea..84ae59f0c881772b72ca023bdb68c53c62717fca 100644
--- a/docs/admin/22_registration.rst
+++ b/docs/admin/22_registration.rst
@@ -4,7 +4,7 @@ Registration and user invitations
 In addition to central management of user accounts, AlekSIS allows self-registration
 by users. Registration can be either fully open, or based on personal invitations.
 
-In a system handling ciritcal data, access control should be as tight as possible.
+In a system handling critical data, access control should be as tight as possible.
 However, there are scenarios where central account creation is not feasible, e.g.
 for optional guardian accounts. In such a scenario, the invitation system allows
 for processes like handing out invitation codes as a letter or through e-mail
diff --git a/docs/admin/31_monitoring.rst b/docs/admin/31_monitoring.rst
index 1847297352a135aafdff954d98eb2a2cc1a69573..0d079bf4b615e2c4bebb0af1dca6f736d4fce49f 100644
--- a/docs/admin/31_monitoring.rst
+++ b/docs/admin/31_monitoring.rst
@@ -58,7 +58,7 @@ Monitoring with Icinga2
 
 As already mentioned, there is a JSON endpoint at
 https://aleksis.example.com/health/. You can use an json check plugin to
-check seperate health checks or just use a HTTP check to check if the
+check separate health checks or just use a HTTP check to check if the
 site returns HTTP 200.
 
 Performance monitoring with Prometheus
diff --git a/docs/conf.py b/docs/conf.py
index dc58a3b9a1acc1ecb89552e27e33a4c66dd48c96..f8abb48da323b7a1e9c6a59fccb05f3fe702495d 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -29,9 +29,9 @@ copyright = "2019-2022 The AlekSIS team"
 author = "The AlekSIS Team"
 
 # The short X.Y version
-version = "2.8"
+version = "2.10"
 # The full version, including alpha/beta/rc tags
-release = "2.8.2.dev0"
+release = "2.10.1.dev0"
 
 
 # -- General configuration ---------------------------------------------------
diff --git a/docs/dev/01_setup.rst b/docs/dev/01_setup.rst
index e52941af0c77b266ffd74bf410cccb0ef04b2678..75cf677a7f43703dc5e6a389e97be28fcf813a02 100644
--- a/docs/dev/01_setup.rst
+++ b/docs/dev/01_setup.rst
@@ -2,7 +2,7 @@ Setting up the development environment
 ======================================
 
 AlekSIS and all official apps use `Poetry`_ to manage virtualenvs and
-dependencies. You should make yourself a bit confortable with poetry
+dependencies. You should make yourself a bit comfortable with poetry
 by reading its documentation.
 
 Poetry makes a lot of stuff very easy, especially managing a virtual
diff --git a/docs/dev/03_run_tests.rst b/docs/dev/03_run_tests.rst
index c50eda52d1c04d183c518a938a6f6a7a1c579ab3..9d38bdf6382d250ce6d1d05dfae37e699c268afa 100644
--- a/docs/dev/03_run_tests.rst
+++ b/docs/dev/03_run_tests.rst
@@ -29,7 +29,7 @@ setting certain environment variables:
 
 Selenium tests are enabled if `TEST_SELENIUM_BROWSERS` is non-empty.
 
-To set variables, use env to wrap the tox ommand::
+To set variables, use env to wrap the tox command::
 
   TEST_SELENIUM_BROWSERS=chrome,firefox tox
 
@@ -69,5 +69,5 @@ look like they should or for documentation purposes.
 To enable screenshots, add the `TEST_SCREENSHOT_PATH` environment variable
 when running the tests.
 
-If runnin multiple browsers, screenshots are placed in separate directories
+If running multiple browsers, screenshots are placed in separate directories
 per browser.
diff --git a/docs/user/01_registration.rst b/docs/user/01_registration.rst
index 3beb4fb51621af47b97a51a1cb6719773249ecf7..19d0b7a893c00f12b0c92fc5f71b0209edbaab8d 100644
--- a/docs/user/01_registration.rst
+++ b/docs/user/01_registration.rst
@@ -15,7 +15,7 @@ AlekSIS account.
   :alt: Signup formular
 
 If enabled, you have to verify your email address after signup. To do so, click
-on the link you recieved on the email address you entered in the signup form.
+on the link you received on the email address you entered in the signup form.
 
 .. note::
    Normally, AlekSIS does not allow public registratio, and all accounts are
@@ -32,5 +32,5 @@ enter it. You will be redirected to the signup form.
   :width: 100%
   :alt: Accept invitation
 
-If you've recieved an invitation link (e.g. via email), clicking the link
+If you've received an invitation link (e.g. via email), clicking the link
 will redirect you to the signup form automatically.
diff --git a/docs/user/02_personal_account.rst b/docs/user/02_personal_account.rst
index a506b9e759ddf0b9f0e8235db784c51c150317c8..b1b0a596890a75ba4cdce866d9be5d2d4829d518 100644
--- a/docs/user/02_personal_account.rst
+++ b/docs/user/02_personal_account.rst
@@ -84,12 +84,12 @@ Microsoft account), you can manage the connections to these accounts on
 the page ``Account → Third-party accounts``.
 
 The feature to use third-party accounts needs to be enabled by
-an administrator, as described in :doc:`../admin/04_socialaccounts`.
+an administrator, as described in :doc:`../admin/23_socialaccounts`.
 
 Authorized applications
 -----------------------
 
 On the page ``Account → Authorized applications`` you can see all
-external applications you authorized to retreive data about you from
+external applications you authorized to retrieve data about you from
 AlekSIS. That can be services provided by your local institution like a
 chat platform, for example.
diff --git a/docs/user/20_pwa.rst b/docs/user/20_pwa.rst
index 461bd113c14747843ac22f66a77bb22bde96d6d3..321ec4b7acd457ae015955cef7473bb37d18b0a0 100644
--- a/docs/user/20_pwa.rst
+++ b/docs/user/20_pwa.rst
@@ -6,7 +6,7 @@ What is a progressive web application?
 
 A PWA is an application developed with common web technologies and
 delivered in form of a website, but which offers some features a
-traditional website does not and ,overall, creates an impression that
+traditional website does not and overall creates an impression that
 resembles that of a native application.
 
 AlekSIS PWA features
@@ -30,19 +30,39 @@ platform to platform. On some, you are prompted to add AlekSIS to your
 home screen of desktop using a popup; on others, you have to take action
 yourself and find the corresponding menu entry. As of the time of
 writing, “installable” PWAs are supported by all major platforms except
-Firefox Desktop which nevertheless supports the other features.
-
--  Chromium-based browsers (e.g. Chromium, Google Chrome, Microsoft
-   Edge) will usually prompt you to install the PWA by a popup on both
-   mobile and desktop devices; for the former using a banner and for the
-   latter using an appearing button in the adress bar. In both cases, a
-   click on the notification is enough to start the installation
-   process.
--  Firefox Mobile will also probably prompt you using a dot near the
-   menu button; then “install” has to been clicked.
--  On Safari you need to open the share popup and click on the “Add to
-   Home Screen” button.
-
-Independent of the used platform, AlekSIS can be accessed as an
+Firefox Desktop and Safari Desktop which nevertheless support the other features.
+
+Chromium-based browsers (e.g. Chromium, Google Chrome, Microsoft
+Edge) will usually prompt you to install the PWA by a popup on both
+mobile and desktop devices; for the former using a banner
+
+.. image:: ../_static/pwa_mobile_chromium.png
+  :width: 40%
+  :alt: PWA installation prompt on the mobile version of the Chromium browser
+
+and for the latter using an appearing button in the address bar.
+
+.. image:: ../_static/pwa_desktop_chromium.png
+  :width: 100%
+  :alt: PWA installation prompt on the desktop version of the Chromium browser
+
+In both cases, a click on the notification is enough to start
+the installation process.
+
+Firefox Mobile will also prompt you using a dot near the
+menu button; then ``Install`` has to be clicked.
+
+.. image:: ../_static/pwa_mobile_firefox.png
+  :width: 40%
+  :alt: PWA installation prompt on the mobile version of the Firefox browser
+
+On Safari Mobile, you need to open the share popup and click on the
+``Add to Home Screen`` button.
+
+.. image:: ../_static/pwa_mobile_safari.png
+  :width: 40%
+  :alt: PWA installation prompt on the mobile version of the Safari browser
+
+No matter what platform is used, AlekSIS can be accessed as an
 independent application entry, just like any other installed native
 application, after installation.
diff --git a/pyproject.toml b/pyproject.toml
index d186fedd46cd899cebbf8fd8201838956a963e4c..3c4d41da429e94a72ddbe39ff3c27c3919df2814 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [tool.poetry]
 name = "AlekSIS-Core"
-version = "2.8.2.dev0"
+version = "2.10.1.dev0"
 packages = [
     { include = "aleksis" }
 ]
@@ -71,7 +71,7 @@ django-ipware = "^4.0"
 django-impersonate = "^1.4"
 psycopg2 = "^2.8"
 django_select2 = "^7.1"
-django-two-factor-auth = { version = "^1.12.1", extras = [ "yubikey", "phonenumbers", "call", "sms" ] }
+django-two-factor-auth = { version = "^1.14.0", extras = [ "yubikey", "phonenumbers", "call", "sms" ] }
 django-yarnpkg = "^6.0"
 django-material = "^1.6.0"
 django-dynamic-preferences = "^1.11"
@@ -89,7 +89,7 @@ django-celery-email = "^3.0.0"
 django-jsonstore = "^0.5.0"
 django-polymorphic = "^3.0.0"
 django-colorfield = "^0.7.0"
-django-bleach = "^2.0.0"
+django-bleach = "^3.0.0"
 django-guardian = "^2.2.0"
 rules = "^3.0"
 django-cache-memoize = "^0.1.6"
@@ -97,7 +97,7 @@ django-haystack = "^3.1"
 celery-haystack-ng = "^2.0"
 django-dbbackup = "^3.3.0"
 spdx-license-list = "^0.5.0"
-license-expression = "^21.6"
+license-expression = "^30.0"
 django-reversion = "^5.0.0"
 django-favicon-plus-reloaded = "^1.1.5"
 django-health-check = "^3.12.1"
@@ -109,7 +109,7 @@ django-model-utils = "^4.0.0"
 bs4 = "^0.0.1"
 django-invitations = "^1.9.3"
 django-cleavejs = "^0.1.0"
-django-allauth = "^0.47.0"
+django-allauth = "^0.51.0"
 django-uwsgi-ng = "^1.1.0"
 django-extensions = "^3.1.1"
 ipython = "^8.0.0"
@@ -127,7 +127,7 @@ sentry-sdk = {version = "^1.4.3", optional = true}
 django-cte = "^1.1.5"
 pycountry = "^22.0.0"
 django-ical = "^1.8.3"
-django-iconify = "^0.2.0"
+django-iconify = "^0.3"
 customidenticon = "^0.1.5"
 
 [tool.poetry.extras]