From 321e8f9dfcd29be94609f9704f148789a3292aea Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Sun, 23 Jul 2023 13:43:47 +0200
Subject: [PATCH] Update translation files

---
 aleksis/core/locale/ar/LC_MESSAGES/django.po  |  633 ++++----
 .../core/locale/de_DE/LC_MESSAGES/django.po   | 1327 +++++++--------
 aleksis/core/locale/fr/LC_MESSAGES/django.po  |  635 ++++----
 aleksis/core/locale/la/LC_MESSAGES/django.po  |  651 ++++----
 .../core/locale/nb_NO/LC_MESSAGES/django.po   |  633 ++++----
 aleksis/core/locale/ru/LC_MESSAGES/django.po  | 1435 +++++++----------
 .../core/locale/tr_TR/LC_MESSAGES/django.po   |  633 ++++----
 aleksis/core/locale/uk/LC_MESSAGES/django.po  |  682 ++++----
 8 files changed, 3258 insertions(+), 3371 deletions(-)

diff --git a/aleksis/core/locale/ar/LC_MESSAGES/django.po b/aleksis/core/locale/ar/LC_MESSAGES/django.po
index 7c475008f..bdff10b2b 100644
--- a/aleksis/core/locale/ar/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/ar/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: AlekSIS (School Information System) 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-05-09 18:40+0200\n"
+"POT-Creation-Date: 2023-07-23 13:39+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"
@@ -42,8 +42,8 @@ msgstr ""
 msgid "Home and mobile phone"
 msgstr ""
 
-#: aleksis/core/apps.py:166 aleksis/core/forms.py:221
-#: aleksis/core/models.py:495 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:166 aleksis/core/forms.py:231
+#: aleksis/core/models.py:517 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
 msgid "Groups"
 msgstr ""
@@ -102,172 +102,172 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:721
+#: aleksis/core/filters.py:113 aleksis/core/models.py:743
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:494
+#: aleksis/core/filters.py:135 aleksis/core/models.py:516
 msgid "Group"
 msgstr ""
 
-#: aleksis/core/forms.py:51 aleksis/core/forms.py:582
+#: aleksis/core/forms.py:50 aleksis/core/forms.py:591
 msgid "Base data"
 msgstr ""
 
-#: aleksis/core/forms.py:56 aleksis/core/tables.py:47
+#: aleksis/core/forms.py:55 aleksis/core/tables.py:29
 msgid "Address"
 msgstr ""
 
-#: aleksis/core/forms.py:57 aleksis/core/forms.py:591
+#: aleksis/core/forms.py:56 aleksis/core/forms.py:600
 msgid "Contact data"
 msgstr ""
 
-#: aleksis/core/forms.py:59
+#: aleksis/core/forms.py:58
 msgid "Advanced personal data"
 msgstr ""
 
-#: aleksis/core/forms.py:107
+#: aleksis/core/forms.py:106
 msgid "New user"
 msgstr ""
 
-#: aleksis/core/forms.py:107
+#: aleksis/core/forms.py:106
 msgid "Create a new account"
 msgstr ""
 
-#: aleksis/core/forms.py:133
+#: aleksis/core/forms.py:132
 msgid "You cannot set a new username when also selecting an existing user."
 msgstr ""
 
-#: aleksis/core/forms.py:137
+#: aleksis/core/forms.py:136
 msgid "This username is already in use."
 msgstr ""
 
-#: aleksis/core/forms.py:154 aleksis/core/models.py:142
+#: aleksis/core/forms.py:153 aleksis/core/models.py:154
 msgid "School term"
 msgstr ""
 
-#: aleksis/core/forms.py:155
+#: aleksis/core/forms.py:154
 msgid "Common data"
 msgstr ""
 
-#: aleksis/core/forms.py:156 aleksis/core/forms.py:208
-#: aleksis/core/models.py:165 aleksis/core/templates/core/person/list.html:8
+#: aleksis/core/forms.py:155 aleksis/core/forms.py:218
+#: aleksis/core/models.py:177 aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
 msgstr ""
 
-#: aleksis/core/forms.py:157 aleksis/core/forms.py:593
+#: aleksis/core/forms.py:156 aleksis/core/forms.py:602
 msgid "Additional data"
 msgstr ""
 
-#: aleksis/core/forms.py:158 aleksis/core/models.py:218
-#: aleksis/core/models.py:547 aleksis/core/tables.py:46
+#: aleksis/core/forms.py:157 aleksis/core/models.py:230
+#: aleksis/core/models.py:569 aleksis/core/tables.py:28
 msgid "Photo"
 msgstr ""
 
-#: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:85
+#: aleksis/core/forms.py:210 aleksis/core/forms.py:213
+#: aleksis/core/models.py:97
 msgid "Date"
 msgstr ""
 
-#: aleksis/core/forms.py:201 aleksis/core/forms.py:204
-#: aleksis/core/models.py:93
+#: aleksis/core/forms.py:211 aleksis/core/forms.py:214
+#: aleksis/core/models.py:105
 msgid "Time"
 msgstr ""
 
-#: aleksis/core/forms.py:234
+#: aleksis/core/forms.py:244
 msgid "From when until when should the announcement be displayed?"
 msgstr ""
 
-#: aleksis/core/forms.py:237
+#: aleksis/core/forms.py:247
 msgid "Who should see the announcement?"
 msgstr ""
 
-#: aleksis/core/forms.py:238
+#: aleksis/core/forms.py:248
 msgid "Write your announcement:"
 msgstr ""
 
-#: aleksis/core/forms.py:277
+#: aleksis/core/forms.py:287
 msgid "You are not allowed to create announcements which are only valid in the past."
 msgstr ""
 
-#: aleksis/core/forms.py:281
+#: aleksis/core/forms.py:291
 msgid "The from date and time must be earlier then the until date and time."
 msgstr ""
 
-#: aleksis/core/forms.py:290
+#: aleksis/core/forms.py:300
 msgid "You need at least one recipient."
 msgstr ""
 
-#: aleksis/core/forms.py:399
+#: aleksis/core/forms.py:408
 msgid "Invitation code"
 msgstr ""
 
-#: aleksis/core/forms.py:400
+#: aleksis/core/forms.py:409
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:193
+#: aleksis/core/forms.py:428 aleksis/core/models.py:205
 msgid "First name"
 msgstr ""
 
-#: aleksis/core/forms.py:420 aleksis/core/models.py:194
+#: aleksis/core/forms.py:429 aleksis/core/models.py:206
 msgid "Last name"
 msgstr ""
 
-#: aleksis/core/forms.py:429
+#: aleksis/core/forms.py:438
 msgid "A person is using this e-mail address"
 msgstr ""
 
-#: aleksis/core/forms.py:457
+#: aleksis/core/forms.py:466
 msgid "Who should get the permission?"
 msgstr ""
 
-#: aleksis/core/forms.py:458
+#: aleksis/core/forms.py:467
 msgid "On what?"
 msgstr ""
 
-#: aleksis/core/forms.py:484
+#: aleksis/core/forms.py:493
 msgid "Select objects which the permission should be granted for:"
 msgstr ""
 
-#: aleksis/core/forms.py:487
+#: aleksis/core/forms.py:496
 msgid "Grant the permission for all objects"
 msgstr ""
 
-#: aleksis/core/forms.py:495
+#: aleksis/core/forms.py:504
 msgid "You must select at least one group or person which should get the permission."
 msgstr ""
 
-#: aleksis/core/forms.py:500
+#: aleksis/core/forms.py:509
 msgid "You must grant the permission to all objects or to specific objects."
 msgstr ""
 
-#: aleksis/core/forms.py:587
+#: aleksis/core/forms.py:596
 msgid "Address data"
 msgstr ""
 
-#: aleksis/core/forms.py:599
+#: aleksis/core/forms.py:608
 msgid "Account data"
 msgstr ""
 
-#: aleksis/core/forms.py:606
+#: aleksis/core/forms.py:615
 msgid "Password"
 msgstr ""
 
-#: aleksis/core/forms.py:609
+#: aleksis/core/forms.py:618
 msgid "Password (again)"
 msgstr ""
 
-#: aleksis/core/forms.py:762
+#: aleksis/core/forms.py:771
 msgid "The selected action does not exist."
 msgstr ""
 
-#: aleksis/core/forms.py:773
+#: aleksis/core/forms.py:782
 msgid "You do not have permission to run {} on all selected objects."
 msgstr ""
 
-#: aleksis/core/forms.py:829
+#: aleksis/core/forms.py:838
 msgid "No valid selection."
 msgstr ""
 
@@ -291,697 +291,744 @@ msgstr ""
 msgid "No backup result found!"
 msgstr ""
 
-#: aleksis/core/mixins.py:511
+#: aleksis/core/mixins.py:539
 msgid "Linked school term"
 msgstr ""
 
-#: aleksis/core/models.py:83
+#: aleksis/core/models.py:95
 msgid "Boolean (Yes/No)"
 msgstr ""
 
-#: aleksis/core/models.py:84
+#: aleksis/core/models.py:96
 msgid "Text (one line)"
 msgstr ""
 
-#: aleksis/core/models.py:86
+#: aleksis/core/models.py:98
 msgid "Date and time"
 msgstr ""
 
-#: aleksis/core/models.py:87
+#: aleksis/core/models.py:99
 msgid "Decimal number"
 msgstr ""
 
-#: aleksis/core/models.py:88 aleksis/core/models.py:211
+#: aleksis/core/models.py:100 aleksis/core/models.py:223
 msgid "E-mail address"
 msgstr ""
 
-#: aleksis/core/models.py:89
+#: aleksis/core/models.py:101
 msgid "Integer"
 msgstr ""
 
-#: aleksis/core/models.py:90
+#: aleksis/core/models.py:102
 msgid "IP address"
 msgstr ""
 
-#: aleksis/core/models.py:91
+#: aleksis/core/models.py:103
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr ""
 
-#: aleksis/core/models.py:92
+#: aleksis/core/models.py:104
 msgid "Text (multi-line)"
 msgstr ""
 
-#: aleksis/core/models.py:94
+#: aleksis/core/models.py:106
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:106 aleksis/core/models.py:1078
+#: aleksis/core/models.py:118 aleksis/core/models.py:1100
+#: aleksis/core/models.py:1729
 msgid "Name"
 msgstr ""
 
-#: aleksis/core/models.py:108
+#: aleksis/core/models.py:120 aleksis/core/models.py:1532
 msgid "Start date"
 msgstr ""
 
-#: aleksis/core/models.py:109
+#: aleksis/core/models.py:121 aleksis/core/models.py:1533
 msgid "End date"
 msgstr ""
 
-#: aleksis/core/models.py:128
+#: aleksis/core/models.py:140 aleksis/core/schema/school_term.py:48
 msgid "The start date must be earlier than the end date."
 msgstr ""
 
-#: aleksis/core/models.py:135
+#: aleksis/core/models.py:147 aleksis/core/schema/school_term.py:53
 msgid "There is already a school term for this time or a part of this time."
 msgstr ""
 
-#: aleksis/core/models.py:143
-#: aleksis/core/templates/core/school_term/list.html:8
-#: aleksis/core/templates/core/school_term/list.html:9
+#: aleksis/core/models.py:155
 msgid "School terms"
 msgstr ""
 
-#: aleksis/core/models.py:164 aleksis/core/models.py:1027
+#: aleksis/core/models.py:176 aleksis/core/models.py:1049
 msgid "Person"
 msgstr ""
 
-#: aleksis/core/models.py:167
+#: aleksis/core/models.py:179
 msgid "Can view address"
 msgstr ""
 
-#: aleksis/core/models.py:168
+#: aleksis/core/models.py:180
 msgid "Can view contact details"
 msgstr ""
 
-#: aleksis/core/models.py:169
+#: aleksis/core/models.py:181
 msgid "Can view photo"
 msgstr ""
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:182
 msgid "Can view avatar image"
 msgstr ""
 
-#: aleksis/core/models.py:171
+#: aleksis/core/models.py:183
 msgid "Can view persons groups"
 msgstr ""
 
-#: aleksis/core/models.py:172
+#: aleksis/core/models.py:184
 msgid "Can view personal details"
 msgstr ""
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "female"
 msgstr ""
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "male"
 msgstr ""
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "other"
 msgstr ""
 
-#: aleksis/core/models.py:190 aleksis/core/models.py:1382
+#: aleksis/core/models.py:202 aleksis/core/models.py:1404
 msgid "Linked user"
 msgstr ""
 
-#: aleksis/core/models.py:196
+#: aleksis/core/models.py:208
 msgid "Additional name(s)"
 msgstr ""
 
-#: aleksis/core/models.py:200 aleksis/core/models.py:512
-#: aleksis/core/models.py:1468
+#: aleksis/core/models.py:212 aleksis/core/models.py:534
+#: aleksis/core/models.py:1490
 msgid "Short name"
 msgstr ""
 
-#: aleksis/core/models.py:203
+#: aleksis/core/models.py:215
 msgid "Street"
 msgstr ""
 
-#: aleksis/core/models.py:204
+#: aleksis/core/models.py:216
 msgid "Street number"
 msgstr ""
 
-#: aleksis/core/models.py:205
+#: aleksis/core/models.py:217
 msgid "Postal code"
 msgstr ""
 
-#: aleksis/core/models.py:206
+#: aleksis/core/models.py:218
 msgid "Place"
 msgstr ""
 
-#: aleksis/core/models.py:208
+#: aleksis/core/models.py:220
 msgid "Home phone"
 msgstr ""
 
-#: aleksis/core/models.py:209
+#: aleksis/core/models.py:221
 msgid "Mobile phone"
 msgstr ""
 
-#: aleksis/core/models.py:213
+#: aleksis/core/models.py:225
 msgid "Date of birth"
 msgstr ""
 
-#: aleksis/core/models.py:214
+#: aleksis/core/models.py:226
 msgid "Place of birth"
 msgstr ""
 
-#: aleksis/core/models.py:215
+#: aleksis/core/models.py:227
 msgid "Sex"
 msgstr ""
 
-#: aleksis/core/models.py:222 aleksis/core/models.py:551
+#: aleksis/core/models.py:234 aleksis/core/models.py:573
 msgid "This is an official photo, used for official documents and for internal use cases."
 msgstr ""
 
-#: aleksis/core/models.py:227 aleksis/core/models.py:555
+#: aleksis/core/models.py:239 aleksis/core/models.py:577
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:230 aleksis/core/models.py:558
+#: aleksis/core/models.py:242 aleksis/core/models.py:580
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:235
+#: aleksis/core/models.py:247
 msgid "Guardians / Parents"
 msgstr ""
 
-#: aleksis/core/models.py:242
+#: aleksis/core/models.py:254
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:245 aleksis/core/models.py:725
-#: aleksis/core/models.py:749 aleksis/core/models.py:844
-#: aleksis/core/models.py:1113
+#: aleksis/core/models.py:257 aleksis/core/models.py:747
+#: aleksis/core/models.py:771 aleksis/core/models.py:866
+#: aleksis/core/models.py:1135
 msgid "Description"
 msgstr ""
 
-#: aleksis/core/models.py:465
+#: aleksis/core/models.py:487
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:467
+#: aleksis/core/models.py:489
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:469
+#: aleksis/core/models.py:491
 msgid "Required"
 msgstr ""
 
-#: aleksis/core/models.py:470
+#: aleksis/core/models.py:492
 msgid "Help text / description"
 msgstr ""
 
-#: aleksis/core/models.py:476
+#: aleksis/core/models.py:498
 msgid "Addtitional field for groups"
 msgstr ""
 
-#: aleksis/core/models.py:477
+#: aleksis/core/models.py:499
 msgid "Addtitional fields for groups"
 msgstr ""
 
-#: aleksis/core/models.py:497
+#: aleksis/core/models.py:519
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:498
+#: aleksis/core/models.py:520
 msgid "Can view statistics about group."
 msgstr ""
 
-#: aleksis/core/models.py:510 aleksis/core/models.py:1469
+#: aleksis/core/models.py:532 aleksis/core/models.py:1491
 msgid "Long name"
 msgstr ""
 
-#: aleksis/core/models.py:520 aleksis/core/templates/core/group/full.html:105
+#: aleksis/core/models.py:542 aleksis/core/templates/core/group/full.html:105
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:523 aleksis/core/templates/core/group/full.html:102
+#: aleksis/core/models.py:545 aleksis/core/templates/core/group/full.html:102
 msgid "Owners"
 msgstr ""
 
-#: aleksis/core/models.py:530 aleksis/core/templates/core/group/full.html:59
+#: aleksis/core/models.py:552 aleksis/core/templates/core/group/full.html:59
 msgid "Parent groups"
 msgstr ""
 
-#: aleksis/core/models.py:538
+#: aleksis/core/models.py:560
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:543
+#: aleksis/core/models.py:565
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 msgid "Additional fields"
 msgstr ""
 
-#: aleksis/core/models.py:724 aleksis/core/models.py:748
-#: aleksis/core/models.py:843 aleksis/core/models.py:1299
+#: aleksis/core/models.py:746 aleksis/core/models.py:770
+#: aleksis/core/models.py:865 aleksis/core/models.py:1321
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
 
-#: aleksis/core/models.py:727
+#: aleksis/core/models.py:749
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:733
+#: aleksis/core/models.py:755
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:734
+#: aleksis/core/models.py:756
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:740
+#: aleksis/core/models.py:762
 msgid "Sender"
 msgstr ""
 
-#: aleksis/core/models.py:745
+#: aleksis/core/models.py:767
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:750 aleksis/core/models.py:1079
+#: aleksis/core/models.py:772 aleksis/core/models.py:1101
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:753 aleksis/core/models.py:1080
-#: aleksis/core/models.py:1429
+#: aleksis/core/models.py:775 aleksis/core/models.py:1102
+#: aleksis/core/models.py:1451
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
 
-#: aleksis/core/models.py:756
+#: aleksis/core/models.py:778
 msgid "Send notification at"
 msgstr ""
 
-#: aleksis/core/models.py:758
+#: aleksis/core/models.py:780
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:759
+#: aleksis/core/models.py:781
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:776
+#: aleksis/core/models.py:798
 msgid "Notification"
 msgstr ""
 
-#: aleksis/core/models.py:777 aleksis/core/preferences.py:29
+#: aleksis/core/models.py:799 aleksis/core/preferences.py:28
 msgid "Notifications"
 msgstr ""
 
-#: aleksis/core/models.py:845
+#: aleksis/core/models.py:867
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:848
+#: aleksis/core/models.py:870
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:851
+#: aleksis/core/models.py:873
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:876
+#: aleksis/core/models.py:898
 msgid "Announcement"
 msgstr ""
 
-#: aleksis/core/models.py:877
+#: aleksis/core/models.py:899
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
 msgstr ""
 
-#: aleksis/core/models.py:914
+#: aleksis/core/models.py:936
 msgid "Announcement recipient"
 msgstr ""
 
-#: aleksis/core/models.py:915
+#: aleksis/core/models.py:937
 msgid "Announcement recipients"
 msgstr ""
 
-#: aleksis/core/models.py:935
+#: aleksis/core/models.py:957
 msgid "Widget Title"
 msgstr ""
 
-#: aleksis/core/models.py:936
+#: aleksis/core/models.py:958
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:959
 msgid "Widget is broken"
 msgstr ""
 
-#: aleksis/core/models.py:940
+#: aleksis/core/models.py:962
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:941
+#: aleksis/core/models.py:963
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:946
+#: aleksis/core/models.py:968
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:947
+#: aleksis/core/models.py:969
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:952
+#: aleksis/core/models.py:974
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:953
+#: aleksis/core/models.py:975
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:958
+#: aleksis/core/models.py:980
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:959
+#: aleksis/core/models.py:981
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:990
+#: aleksis/core/models.py:1012
 msgid "Can edit default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:991
+#: aleksis/core/models.py:1013
 msgid "Dashboard Widget"
 msgstr ""
 
-#: aleksis/core/models.py:992
+#: aleksis/core/models.py:1014
 msgid "Dashboard Widgets"
 msgstr ""
 
-#: aleksis/core/models.py:998
+#: aleksis/core/models.py:1020
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:999
+#: aleksis/core/models.py:1021
 msgid "Icon URL"
 msgstr ""
 
-#: aleksis/core/models.py:1005
+#: aleksis/core/models.py:1027
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:1006
+#: aleksis/core/models.py:1028
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1012
+#: aleksis/core/models.py:1034
 msgid "Content"
 msgstr ""
 
-#: aleksis/core/models.py:1018
+#: aleksis/core/models.py:1040
 msgid "Static content widget"
 msgstr ""
 
-#: aleksis/core/models.py:1019
+#: aleksis/core/models.py:1041
 msgid "Static content widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1024
+#: aleksis/core/models.py:1046
 msgid "Dashboard widget"
 msgstr ""
 
-#: aleksis/core/models.py:1029
+#: aleksis/core/models.py:1051
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:1030
+#: aleksis/core/models.py:1052
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:1045
+#: aleksis/core/models.py:1067
 msgid "Dashboard widget order"
 msgstr ""
 
-#: aleksis/core/models.py:1046
+#: aleksis/core/models.py:1068
 msgid "Dashboard widget orders"
 msgstr ""
 
-#: aleksis/core/models.py:1052
+#: aleksis/core/models.py:1074
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1065
+#: aleksis/core/models.py:1087
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1066
+#: aleksis/core/models.py:1088
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1098
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1086
+#: aleksis/core/models.py:1108
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1087
+#: aleksis/core/models.py:1109
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1134
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1119 aleksis/core/templates/core/group/full.html:50
+#: aleksis/core/models.py:1141 aleksis/core/templates/core/group/full.html:50
 msgid "Group type"
 msgstr ""
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1142
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
 msgstr ""
 
-#: aleksis/core/models.py:1133
+#: aleksis/core/models.py:1155
 msgid "Can view system status"
 msgstr ""
 
-#: aleksis/core/models.py:1134
+#: aleksis/core/models.py:1156
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1135
+#: aleksis/core/models.py:1157
 msgid "Can impersonate"
 msgstr ""
 
-#: aleksis/core/models.py:1136
+#: aleksis/core/models.py:1158
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1137
+#: aleksis/core/models.py:1159
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1138
+#: aleksis/core/models.py:1160
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1139
+#: aleksis/core/models.py:1161
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1140
+#: aleksis/core/models.py:1162
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1141
+#: aleksis/core/models.py:1163
 msgid "Can invite persons"
 msgstr ""
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1199
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1185
+#: aleksis/core/models.py:1207
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1186
+#: aleksis/core/models.py:1208
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1199
+#: aleksis/core/models.py:1221
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1200
+#: aleksis/core/models.py:1222
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1202
+#: aleksis/core/models.py:1224
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1203
+#: aleksis/core/models.py:1225
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1210
+#: aleksis/core/models.py:1232
 msgid "E-Mail address"
 msgstr ""
 
-#: aleksis/core/models.py:1270
+#: aleksis/core/models.py:1292
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1274
+#: aleksis/core/models.py:1296
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1277
+#: aleksis/core/models.py:1299
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1280
+#: aleksis/core/models.py:1302
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1287
+#: aleksis/core/models.py:1309
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1288
+#: aleksis/core/models.py:1310
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1293
+#: aleksis/core/models.py:1315
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1296
+#: aleksis/core/models.py:1318
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1300
+#: aleksis/core/models.py:1322
 msgid "Back URL"
 msgstr ""
 
-#: aleksis/core/models.py:1301
+#: aleksis/core/models.py:1323
 msgid "Progress title"
 msgstr ""
 
-#: aleksis/core/models.py:1302
+#: aleksis/core/models.py:1324
 msgid "Error message"
 msgstr ""
 
-#: aleksis/core/models.py:1303
+#: aleksis/core/models.py:1325
 msgid "Success message"
 msgstr ""
 
-#: aleksis/core/models.py:1304
+#: aleksis/core/models.py:1326
 msgid "Redirect on success URL"
 msgstr ""
 
-#: aleksis/core/models.py:1306
+#: aleksis/core/models.py:1328
 msgid "Additional button title"
 msgstr ""
 
-#: aleksis/core/models.py:1308
+#: aleksis/core/models.py:1330
 msgid "Additional button URL"
 msgstr ""
 
-#: aleksis/core/models.py:1310
+#: aleksis/core/models.py:1332
 msgid "Additional button icon"
 msgstr ""
 
-#: aleksis/core/models.py:1312
+#: aleksis/core/models.py:1334
 msgid "Result fetched"
 msgstr ""
 
-#: aleksis/core/models.py:1337
+#: aleksis/core/models.py:1359
 msgid "Background task completed successfully"
 msgstr ""
 
-#: aleksis/core/models.py:1338
+#: aleksis/core/models.py:1360
 msgid "The background task '{}' has been completed successfully."
 msgstr ""
 
-#: aleksis/core/models.py:1344
+#: aleksis/core/models.py:1366
 msgid "Background task failed"
 msgstr ""
 
-#: aleksis/core/models.py:1345
+#: aleksis/core/models.py:1367
 msgid "The background task '{}' has failed."
 msgstr ""
 
-#: aleksis/core/models.py:1354
+#: aleksis/core/models.py:1376
 msgid "Background task"
 msgstr ""
 
-#: aleksis/core/models.py:1368
+#: aleksis/core/models.py:1390
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1369
+#: aleksis/core/models.py:1391
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1385
+#: aleksis/core/models.py:1407
 msgid "Additional attributes"
 msgstr ""
 
-#: aleksis/core/models.py:1423
+#: aleksis/core/models.py:1445
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1433
+#: aleksis/core/models.py:1455
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
-#: aleksis/core/models.py:1478
+#: aleksis/core/models.py:1500
 msgid "Can view room timetable"
 msgstr ""
 
-#: aleksis/core/models.py:1480
+#: aleksis/core/models.py:1502
 msgid "Room"
 msgstr ""
 
-#: aleksis/core/models.py:1481
+#: aleksis/core/models.py:1503
 msgid "Rooms"
 msgstr ""
 
-#: aleksis/core/preferences.py:25
+#: aleksis/core/models.py:1528
+msgid "Start date and time"
+msgstr ""
+
+#: aleksis/core/models.py:1530
+msgid "End date and time"
+msgstr ""
+
+#: aleksis/core/models.py:1531
+msgid "Timezone"
+msgstr ""
+
+#: aleksis/core/models.py:1534
+msgid "Recurrences"
+msgstr ""
+
+#: aleksis/core/models.py:1540
+msgid "Amended base event"
+msgstr ""
+
+#: aleksis/core/models.py:1643
+msgid "Calendar Event"
+msgstr ""
+
+#: aleksis/core/models.py:1644
+msgid "Calendar Events"
+msgstr ""
+
+#: aleksis/core/models.py:1670
+msgid "Birthdays"
+msgstr ""
+
+#: aleksis/core/models.py:1674
+msgid "{}'s birthday"
+msgstr ""
+
+#: aleksis/core/models.py:1713 aleksis/core/models.py:1775
+msgid "Holidays"
+msgstr ""
+
+#: aleksis/core/models.py:1774
+msgid "Holiday"
+msgstr ""
+
+#: aleksis/core/preferences.py:24
 msgid "General"
 msgstr ""
 
-#: aleksis/core/preferences.py:26
+#: aleksis/core/preferences.py:25
 msgid "School"
 msgstr ""
 
-#: aleksis/core/preferences.py:27
+#: aleksis/core/preferences.py:26
 msgid "Theme"
 msgstr ""
 
-#: aleksis/core/preferences.py:28
+#: aleksis/core/preferences.py:27
 msgid "Mail"
 msgstr ""
 
-#: aleksis/core/preferences.py:30
+#: aleksis/core/preferences.py:29
 msgid "Footer"
 msgstr ""
 
-#: aleksis/core/preferences.py:31
+#: aleksis/core/preferences.py:30
 msgid "Accounts"
 msgstr ""
 
-#: aleksis/core/preferences.py:32
+#: aleksis/core/preferences.py:31
 msgid "Authentication"
 msgstr ""
 
-#: aleksis/core/preferences.py:33
+#: aleksis/core/preferences.py:32
 msgid "Internationalisation"
 msgstr ""
 
+#: aleksis/core/preferences.py:33
+msgid "Calendar"
+msgstr ""
+
 #: aleksis/core/preferences.py:43
 msgid "Site title"
 msgstr ""
@@ -1155,7 +1202,15 @@ msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
 #: aleksis/core/preferences.py:490
-msgid "Country for phone number parsing"
+msgid "Birthday calendar feed color"
+msgstr ""
+
+#: aleksis/core/preferences.py:502
+msgid "Holiday calendar feed color"
+msgstr ""
+
+#: aleksis/core/preferences.py:515
+msgid "Activated calendars"
 msgstr ""
 
 #: aleksis/core/settings.py:551
@@ -1170,22 +1225,9 @@ msgstr ""
 msgid "Ukrainian"
 msgstr ""
 
-#: aleksis/core/tables.py:25
-#: aleksis/core/templates/core/announcement/list.html:36
-#: aleksis/core/templates/core/group/full.html:26
-#: aleksis/core/templates/oauth2_provider/application/detail.html:17
-msgid "Edit"
-msgstr ""
-
-#: aleksis/core/tables.py:27 aleksis/core/tables.py:148
-#: aleksis/core/tables.py:185
-#: aleksis/core/templates/core/announcement/list.html:22
-msgid "Actions"
-msgstr ""
-
-#: aleksis/core/tables.py:115 aleksis/core/tables.py:116
-#: aleksis/core/tables.py:130 aleksis/core/tables.py:146
-#: aleksis/core/tables.py:183
+#: aleksis/core/tables.py:97 aleksis/core/tables.py:98
+#: aleksis/core/tables.py:112 aleksis/core/tables.py:128
+#: aleksis/core/tables.py:165
 #: aleksis/core/templates/core/announcement/list.html:42
 #: aleksis/core/templates/core/group/full.html:33
 #: aleksis/core/templates/core/pages/delete.html:22
@@ -1193,6 +1235,11 @@ msgstr ""
 msgid "Delete"
 msgstr ""
 
+#: aleksis/core/tables.py:130 aleksis/core/tables.py:167
+#: aleksis/core/templates/core/announcement/list.html:22
+msgid "Actions"
+msgstr ""
+
 #: aleksis/core/templates/403.html:14 aleksis/core/templates/500.html:10
 #: aleksis/core/templates/oauth2_provider/authorize.html:54
 msgid "Error"
@@ -1263,6 +1310,13 @@ msgstr ""
 msgid "Your AlekSIS team"
 msgstr ""
 
+#: aleksis/core/templates/account/email/email_confirmation_message.txt:6
+#, python-format
+msgid ""
+"Someone tried to register an account with the username %(user_display)s and your e-mail address on %(site_domain)s.\n"
+"If it was you, please confirm the registration by clicking on the following link:"
+msgstr ""
+
 #: aleksis/core/templates/account/email_confirm.html:5
 #: aleksis/core/templates/account/email_confirm.html:6
 #: aleksis/core/templates/account/email_confirm.html:17
@@ -1495,6 +1549,12 @@ msgstr ""
 msgid "Recipients"
 msgstr ""
 
+#: aleksis/core/templates/core/announcement/list.html:36
+#: aleksis/core/templates/core/group/full.html:26
+#: aleksis/core/templates/oauth2_provider/application/detail.html:17
+msgid "Edit"
+msgstr ""
+
 #: aleksis/core/templates/core/announcement/list.html:50
 msgid "There are no announcements."
 msgstr ""
@@ -2043,17 +2103,6 @@ msgstr ""
 msgid "Selected persons"
 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 ""
-
-#: aleksis/core/templates/core/school_term/edit.html:6
-#: aleksis/core/templates/core/school_term/edit.html:7
-msgid "Edit school term"
-msgstr ""
-
 #: aleksis/core/templates/dynamic_preferences/form.html:5
 msgid "Preferences"
 msgstr ""
@@ -2813,156 +2862,148 @@ msgstr ""
 msgid "Download PDF"
 msgstr ""
 
-#: aleksis/core/views.py:285
-msgid "The school term has been created."
-msgstr ""
-
-#: aleksis/core/views.py:297
-msgid "The school term has been saved."
-msgstr ""
-
-#: aleksis/core/views.py:401
+#: aleksis/core/views.py:371
 msgid "The child groups were successfully saved."
 msgstr ""
 
-#: aleksis/core/views.py:420 aleksis/core/views.py:430
+#: aleksis/core/views.py:390 aleksis/core/views.py:400
 msgid "The person has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:480
+#: aleksis/core/views.py:450
 msgid "The group has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:528
+#: aleksis/core/views.py:498
 msgid "Maintenance mode was turned on successfully."
 msgstr ""
 
-#: aleksis/core/views.py:530
+#: aleksis/core/views.py:500
 msgid "Maintenance mode was turned off successfully."
 msgstr ""
 
-#: aleksis/core/views.py:588
+#: aleksis/core/views.py:558
 msgid "The announcement has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:604
+#: aleksis/core/views.py:574
 msgid "The announcement has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:673
+#: aleksis/core/views.py:643
 msgid "The requested preference registry does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:692
+#: aleksis/core/views.py:662
 msgid "The preferences have been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:716
+#: aleksis/core/views.py:686
 msgid "The person has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:730
+#: aleksis/core/views.py:700
 msgid "The group has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:762
+#: aleksis/core/views.py:732
 msgid "The additional field has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:797
+#: aleksis/core/views.py:767
 msgid "The additional field has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:822
+#: aleksis/core/views.py:792
 msgid "The group type has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:853
+#: aleksis/core/views.py:823
 msgid "The group type has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:888
+#: aleksis/core/views.py:858
 msgid "Progress: Run data checks"
 msgstr ""
 
-#: aleksis/core/views.py:889
+#: aleksis/core/views.py:859
 msgid "Run data checks …"
 msgstr ""
 
-#: aleksis/core/views.py:890
+#: aleksis/core/views.py:860
 msgid "The data checks were run successfully."
 msgstr ""
 
-#: aleksis/core/views.py:891
+#: aleksis/core/views.py:861
 msgid "There was a problem while running data checks."
 msgstr ""
 
-#: aleksis/core/views.py:908
+#: aleksis/core/views.py:878
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/views.py:918
+#: aleksis/core/views.py:888
 msgid "The requested solve option does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:951
+#: aleksis/core/views.py:921
 msgid "The dashboard widget has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:981
+#: aleksis/core/views.py:951
 msgid "The dashboard widget has been created."
 msgstr ""
 
-#: aleksis/core/views.py:991
+#: aleksis/core/views.py:961
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1063
+#: aleksis/core/views.py:1033
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1065
+#: aleksis/core/views.py:1035
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1136
+#: aleksis/core/views.py:1106
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1233
+#: aleksis/core/views.py:1203
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1243
+#: aleksis/core/views.py:1213
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1253
+#: aleksis/core/views.py:1223
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1263
+#: aleksis/core/views.py:1233
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1273
+#: aleksis/core/views.py:1243
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1382
+#: aleksis/core/views.py:1352
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1389
+#: aleksis/core/views.py:1359
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1465
+#: aleksis/core/views.py:1435
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1476
+#: aleksis/core/views.py:1446
 msgid "Person was already invited."
 msgstr ""
diff --git a/aleksis/core/locale/de_DE/LC_MESSAGES/django.po b/aleksis/core/locale/de_DE/LC_MESSAGES/django.po
index 549daede5..672dca25a 100644
--- a/aleksis/core/locale/de_DE/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/de_DE/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: AlekSIS (School Information System) 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-05-09 18:40+0200\n"
+"POT-Creation-Date: 2023-07-23 13:39+0200\n"
 "PO-Revision-Date: 2023-05-09 18:45+0200\n"
 "Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
 "Language-Team: German <https://translate.edugit.org/projects/aleksis/aleksis-core/de/>\n"
@@ -42,8 +42,8 @@ msgstr "E-Mail-Adresse"
 msgid "Home and mobile phone"
 msgstr "Festnetz- und Mobilfunknummer"
 
-#: aleksis/core/apps.py:166 aleksis/core/forms.py:221
-#: aleksis/core/models.py:495 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:166 aleksis/core/forms.py:231
+#: aleksis/core/models.py:517 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
 msgid "Groups"
 msgstr "Gruppen"
@@ -102,187 +102,172 @@ msgstr "Berechtigung"
 msgid "Content type"
 msgstr "Inhaltstyp"
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:721
+#: aleksis/core/filters.py:113 aleksis/core/models.py:743
 msgid "User"
 msgstr "Benutzer"
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:494
+#: aleksis/core/filters.py:135 aleksis/core/models.py:516
 msgid "Group"
 msgstr "Gruppe"
 
-#: aleksis/core/forms.py:51 aleksis/core/forms.py:582
+#: aleksis/core/forms.py:50 aleksis/core/forms.py:591
 msgid "Base data"
 msgstr "Basisdaten"
 
-#: aleksis/core/forms.py:56 aleksis/core/tables.py:47
+#: aleksis/core/forms.py:55 aleksis/core/tables.py:29
 msgid "Address"
 msgstr "Adresse"
 
-#: aleksis/core/forms.py:57 aleksis/core/forms.py:591
+#: aleksis/core/forms.py:56 aleksis/core/forms.py:600
 msgid "Contact data"
 msgstr "Kontaktdaten"
 
-#: aleksis/core/forms.py:59
+#: aleksis/core/forms.py:58
 msgid "Advanced personal data"
 msgstr "Zusätzliche persönliche Daten"
 
-#: aleksis/core/forms.py:107
+#: aleksis/core/forms.py:106
 msgid "New user"
 msgstr "Neuer Benutzer"
 
-#: aleksis/core/forms.py:107
+#: aleksis/core/forms.py:106
 msgid "Create a new account"
 msgstr "Neues Benutzerkonto erstellen"
 
-#: aleksis/core/forms.py:133
+#: 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:137
+#: aleksis/core/forms.py:136
 msgid "This username is already in use."
 msgstr "Dieser Benutzername wird bereits genutzt."
 
-#: aleksis/core/forms.py:154 aleksis/core/models.py:142
+#: aleksis/core/forms.py:153 aleksis/core/models.py:154
 msgid "School term"
 msgstr "Schuljahr"
 
-#: aleksis/core/forms.py:155
+#: aleksis/core/forms.py:154
 msgid "Common data"
 msgstr "Allgemeine Daten"
 
-#: aleksis/core/forms.py:156 aleksis/core/forms.py:208
-#: aleksis/core/models.py:165 aleksis/core/templates/core/person/list.html:8
+#: aleksis/core/forms.py:155 aleksis/core/forms.py:218
+#: aleksis/core/models.py:177 aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
 msgstr "Personen"
 
-#: aleksis/core/forms.py:157 aleksis/core/forms.py:593
+#: aleksis/core/forms.py:156 aleksis/core/forms.py:602
 msgid "Additional data"
 msgstr "Zusätzliche Daten"
 
-#: aleksis/core/forms.py:158 aleksis/core/models.py:218
-#: aleksis/core/models.py:547 aleksis/core/tables.py:46
+#: aleksis/core/forms.py:157 aleksis/core/models.py:230
+#: aleksis/core/models.py:569 aleksis/core/tables.py:28
 msgid "Photo"
 msgstr "Foto"
 
-#: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:85
+#: aleksis/core/forms.py:210 aleksis/core/forms.py:213
+#: aleksis/core/models.py:97
 msgid "Date"
 msgstr "Datum"
 
-#: aleksis/core/forms.py:201 aleksis/core/forms.py:204
-#: aleksis/core/models.py:93
+#: aleksis/core/forms.py:211 aleksis/core/forms.py:214
+#: aleksis/core/models.py:105
 msgid "Time"
 msgstr "Zeit"
 
-#: aleksis/core/forms.py:234
+#: aleksis/core/forms.py:244
 msgid "From when until when should the announcement be displayed?"
 msgstr "Von wann bis wann soll die Ankündigung angezeigt werden?"
 
-#: aleksis/core/forms.py:237
+#: aleksis/core/forms.py:247
 msgid "Who should see the announcement?"
 msgstr "Wer soll die Ankündigung sehen?"
 
-#: aleksis/core/forms.py:238
+#: aleksis/core/forms.py:248
 msgid "Write your announcement:"
 msgstr "Schreiben Sie ihre Ankündigung:"
 
-#: aleksis/core/forms.py:277
-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:287
+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:281
+#: aleksis/core/forms.py:291
 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:290
+#: aleksis/core/forms.py:300
 msgid "You need at least one recipient."
 msgstr "Sie benötigen mindestens einen Empfänger."
 
-#: aleksis/core/forms.py:399
+#: aleksis/core/forms.py:408
 msgid "Invitation code"
 msgstr "Einladungscode"
 
-#: aleksis/core/forms.py:400
+#: aleksis/core/forms.py:409
 msgid "Please enter your invitation code."
 msgstr "Bitte geben Sie Ihren Einladungscode ein."
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:193
+#: aleksis/core/forms.py:428 aleksis/core/models.py:205
 msgid "First name"
 msgstr "Vorname"
 
-#: aleksis/core/forms.py:420 aleksis/core/models.py:194
+#: aleksis/core/forms.py:429 aleksis/core/models.py:206
 msgid "Last name"
 msgstr "Nachname"
 
-#: aleksis/core/forms.py:429
+#: aleksis/core/forms.py:438
 msgid "A person is using this e-mail address"
 msgstr "Eine Person nutzt diese E-Mail-Adresse"
 
-#: aleksis/core/forms.py:457
+#: aleksis/core/forms.py:466
 msgid "Who should get the permission?"
 msgstr "Wer soll die Berechtigung erhalten?"
 
-#: aleksis/core/forms.py:458
+#: aleksis/core/forms.py:467
 msgid "On what?"
 msgstr "Auf was?"
 
-#: aleksis/core/forms.py:484
+#: aleksis/core/forms.py:493
 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:487
+#: aleksis/core/forms.py:496
 msgid "Grant the permission for all objects"
 msgstr "Vergebe die Berechtigung für alle Objekte"
 
-#: aleksis/core/forms.py:495
-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:504
+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:500
+#: aleksis/core/forms.py:509
 msgid "You must grant the permission to all objects or to specific objects."
-msgstr ""
-"Sie müssen die Berechtigung auf alle Objekte oder für spezifische Objekte "
-"vergeben."
+msgstr "Sie müssen die Berechtigung auf alle Objekte oder für spezifische Objekte vergeben."
 
-#: aleksis/core/forms.py:587
+#: aleksis/core/forms.py:596
 msgid "Address data"
 msgstr "Adressdaten"
 
-#: aleksis/core/forms.py:599
+#: aleksis/core/forms.py:608
 msgid "Account data"
 msgstr "Kontodaten"
 
-#: aleksis/core/forms.py:606
+#: aleksis/core/forms.py:615
 msgid "Password"
 msgstr "Passwort"
 
-#: aleksis/core/forms.py:609
+#: aleksis/core/forms.py:618
 msgid "Password (again)"
 msgstr "Passwort wiederholen"
 
-#: aleksis/core/forms.py:762
+#: aleksis/core/forms.py:771
 msgid "The selected action does not exist."
 msgstr "Die ausgewählte Aktion existiert nicht."
 
-#: aleksis/core/forms.py:773
+#: aleksis/core/forms.py:782
 msgid "You do not have permission to run {} on all selected objects."
-msgstr ""
-"Sie haben nicht die Berechtigung, {} auf alle ausgewählten Objekte "
-"auszuführen."
+msgstr "Sie haben nicht die Berechtigung, {} auf alle ausgewählten Objekte auszuführen."
 
-#: aleksis/core/forms.py:829
+#: aleksis/core/forms.py:838
 msgid "No valid selection."
 msgstr "Keine gültige Auswahl."
 
@@ -306,706 +291,762 @@ msgstr "Kein Backup gefunden!"
 msgid "No backup result found!"
 msgstr "Kein Backupergebnis gefunden!"
 
-#: aleksis/core/mixins.py:511
+#: aleksis/core/mixins.py:539
 msgid "Linked school term"
 msgstr "Zugeordnetes Schuljahr"
 
-#: aleksis/core/models.py:83
+#: aleksis/core/models.py:95
 msgid "Boolean (Yes/No)"
 msgstr "Boolean (Ja/Nein)"
 
-#: aleksis/core/models.py:84
+#: aleksis/core/models.py:96
 msgid "Text (one line)"
 msgstr "Text (eine Zeile)"
 
-#: aleksis/core/models.py:86
+#: aleksis/core/models.py:98
 msgid "Date and time"
 msgstr "Datum und Uhrzeit"
 
-#: aleksis/core/models.py:87
+#: aleksis/core/models.py:99
 msgid "Decimal number"
 msgstr "Dezimalzahl"
 
-#: aleksis/core/models.py:88 aleksis/core/models.py:211
+#: aleksis/core/models.py:100 aleksis/core/models.py:223
 msgid "E-mail address"
 msgstr "E-Mail-Adresse"
 
-#: aleksis/core/models.py:89
+#: aleksis/core/models.py:101
 msgid "Integer"
 msgstr "Ganze Zahl"
 
-#: aleksis/core/models.py:90
+#: aleksis/core/models.py:102
 msgid "IP address"
 msgstr "IP-Adresse"
 
-#: aleksis/core/models.py:91
+#: aleksis/core/models.py:103
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr "Boolean oder leer (Ja/Nein/weder)"
 
-#: aleksis/core/models.py:92
+#: aleksis/core/models.py:104
 msgid "Text (multi-line)"
 msgstr "Text (mehrzeilig)"
 
-#: aleksis/core/models.py:94
+#: aleksis/core/models.py:106
 msgid "URL / Link"
 msgstr "URL / Link"
 
-#: aleksis/core/models.py:106 aleksis/core/models.py:1078
+#: aleksis/core/models.py:118 aleksis/core/models.py:1100
+#: aleksis/core/models.py:1729
 msgid "Name"
 msgstr "Name"
 
-#: aleksis/core/models.py:108
+#: aleksis/core/models.py:120 aleksis/core/models.py:1532
 msgid "Start date"
 msgstr "Startdatum"
 
-#: aleksis/core/models.py:109
+#: aleksis/core/models.py:121 aleksis/core/models.py:1533
 msgid "End date"
 msgstr "Enddatum"
 
-#: aleksis/core/models.py:128
+#: aleksis/core/models.py:140 aleksis/core/schema/school_term.py:48
 msgid "The start date must be earlier than the end date."
 msgstr "Das Startdatum muss vor dem Enddatum liegen."
 
-#: aleksis/core/models.py:135
+#: aleksis/core/models.py:147 aleksis/core/schema/school_term.py:53
 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:143
-#: aleksis/core/templates/core/school_term/list.html:8
-#: aleksis/core/templates/core/school_term/list.html:9
+#: aleksis/core/models.py:155
 msgid "School terms"
 msgstr "Schuljahre"
 
-#: aleksis/core/models.py:164 aleksis/core/models.py:1027
+#: aleksis/core/models.py:176 aleksis/core/models.py:1049
 msgid "Person"
 msgstr "Person"
 
-#: aleksis/core/models.py:167
+#: aleksis/core/models.py:179
 msgid "Can view address"
 msgstr "Kann Adresse sehen"
 
-#: aleksis/core/models.py:168
+#: aleksis/core/models.py:180
 msgid "Can view contact details"
 msgstr "Kann Kontaktdetails sehen"
 
-#: aleksis/core/models.py:169
+#: aleksis/core/models.py:181
 msgid "Can view photo"
 msgstr "Kann Foto sehen"
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:182
 msgid "Can view avatar image"
 msgstr "Kann Avatar-Bild sehen"
 
-#: aleksis/core/models.py:171
+#: aleksis/core/models.py:183
 msgid "Can view persons groups"
 msgstr "Kann Gruppen einer Person sehen"
 
-#: aleksis/core/models.py:172
+#: aleksis/core/models.py:184
 msgid "Can view personal details"
 msgstr "Kann persönliche Daten sehen"
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "female"
 msgstr "weiblich"
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "male"
 msgstr "männlich"
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "other"
 msgstr "andere"
 
-#: aleksis/core/models.py:190 aleksis/core/models.py:1382
+#: aleksis/core/models.py:202 aleksis/core/models.py:1404
 msgid "Linked user"
 msgstr "Verknüpfter Benutzer"
 
-#: aleksis/core/models.py:196
+#: aleksis/core/models.py:208
 msgid "Additional name(s)"
 msgstr "Zusätzliche Namen"
 
-#: aleksis/core/models.py:200 aleksis/core/models.py:512
-#: aleksis/core/models.py:1468
+#: aleksis/core/models.py:212 aleksis/core/models.py:534
+#: aleksis/core/models.py:1490
 msgid "Short name"
 msgstr "Kurzname"
 
-#: aleksis/core/models.py:203
+#: aleksis/core/models.py:215
 msgid "Street"
 msgstr "Straße"
 
-#: aleksis/core/models.py:204
+#: aleksis/core/models.py:216
 msgid "Street number"
 msgstr "Hausnummer"
 
-#: aleksis/core/models.py:205
+#: aleksis/core/models.py:217
 msgid "Postal code"
 msgstr "Postleitzahl"
 
-#: aleksis/core/models.py:206
+#: aleksis/core/models.py:218
 msgid "Place"
 msgstr "Ort"
 
-#: aleksis/core/models.py:208
+#: aleksis/core/models.py:220
 msgid "Home phone"
 msgstr "Festnetz"
 
-#: aleksis/core/models.py:209
+#: aleksis/core/models.py:221
 msgid "Mobile phone"
 msgstr "Handy"
 
-#: aleksis/core/models.py:213
+#: aleksis/core/models.py:225
 msgid "Date of birth"
 msgstr "Geburtsdatum"
 
-#: aleksis/core/models.py:214
+#: aleksis/core/models.py:226
 msgid "Place of birth"
 msgstr "Geburtsort"
 
-#: aleksis/core/models.py:215
+#: aleksis/core/models.py:227
 msgid "Sex"
 msgstr "Geschlecht"
 
-#: aleksis/core/models.py:222 aleksis/core/models.py:551
-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:234 aleksis/core/models.py:573
+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:227 aleksis/core/models.py:555
+#: aleksis/core/models.py:239 aleksis/core/models.py:577
 msgid "Display picture / Avatar"
 msgstr "Bild/Avatar anzeigen"
 
-#: aleksis/core/models.py:230 aleksis/core/models.py:558
+#: aleksis/core/models.py:242 aleksis/core/models.py:580
 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:235
+#: aleksis/core/models.py:247
 msgid "Guardians / Parents"
 msgstr "Erziehungsberechtigte / Eltern"
 
-#: aleksis/core/models.py:242
+#: aleksis/core/models.py:254
 msgid "Primary group"
 msgstr "Primärgruppe"
 
-#: aleksis/core/models.py:245 aleksis/core/models.py:725
-#: aleksis/core/models.py:749 aleksis/core/models.py:844
-#: aleksis/core/models.py:1113
+#: aleksis/core/models.py:257 aleksis/core/models.py:747
+#: aleksis/core/models.py:771 aleksis/core/models.py:866
+#: aleksis/core/models.py:1135
 msgid "Description"
 msgstr "Beschreibung"
 
-#: aleksis/core/models.py:465
+#: aleksis/core/models.py:487
 msgid "Title of field"
 msgstr "Feldtitel"
 
-#: aleksis/core/models.py:467
+#: aleksis/core/models.py:489
 msgid "Type of field"
 msgstr "Feldtyp"
 
-#: aleksis/core/models.py:469
+#: aleksis/core/models.py:491
 msgid "Required"
 msgstr "Pflichtfeld"
 
-#: aleksis/core/models.py:470
+#: aleksis/core/models.py:492
 msgid "Help text / description"
 msgstr "Hilfetext/Beschreibung"
 
-#: aleksis/core/models.py:476
+#: aleksis/core/models.py:498
 msgid "Addtitional field for groups"
 msgstr "Zusätzliche Felder für Gruppen"
 
-#: aleksis/core/models.py:477
+#: aleksis/core/models.py:499
 msgid "Addtitional fields for groups"
 msgstr "Zusätzliche Felder für Gruppen"
 
-#: aleksis/core/models.py:497
+#: aleksis/core/models.py:519
 msgid "Can assign child groups to groups"
 msgstr "Kann Kindgruppen zu Gruppen zuordnen"
 
-#: aleksis/core/models.py:498
+#: aleksis/core/models.py:520
 msgid "Can view statistics about group."
 msgstr "Kann Statistiken über Gruppen sehen."
 
-#: aleksis/core/models.py:510 aleksis/core/models.py:1469
+#: aleksis/core/models.py:532 aleksis/core/models.py:1491
 msgid "Long name"
 msgstr "Langname"
 
-#: aleksis/core/models.py:520 aleksis/core/templates/core/group/full.html:105
+#: aleksis/core/models.py:542 aleksis/core/templates/core/group/full.html:105
 msgid "Members"
 msgstr "Mitglieder"
 
-#: aleksis/core/models.py:523 aleksis/core/templates/core/group/full.html:102
+#: aleksis/core/models.py:545 aleksis/core/templates/core/group/full.html:102
 msgid "Owners"
 msgstr "Leiter/-innen"
 
-#: aleksis/core/models.py:530 aleksis/core/templates/core/group/full.html:59
+#: aleksis/core/models.py:552 aleksis/core/templates/core/group/full.html:59
 msgid "Parent groups"
 msgstr "Ãœbergeordnete Gruppen"
 
-#: aleksis/core/models.py:538
+#: aleksis/core/models.py:560
 msgid "Type of group"
 msgstr "Gruppentyp"
 
-#: aleksis/core/models.py:543
+#: aleksis/core/models.py:565
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 msgid "Additional fields"
 msgstr "Zusätzliche Felder"
 
-#: aleksis/core/models.py:724 aleksis/core/models.py:748
-#: aleksis/core/models.py:843 aleksis/core/models.py:1299
+#: aleksis/core/models.py:746 aleksis/core/models.py:770
+#: aleksis/core/models.py:865 aleksis/core/models.py:1321
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr "Titel"
 
-#: aleksis/core/models.py:727
+#: aleksis/core/models.py:749
 msgid "Application"
 msgstr "Anwendung"
 
-#: aleksis/core/models.py:733
+#: aleksis/core/models.py:755
 msgid "Activity"
 msgstr "Aktivität"
 
-#: aleksis/core/models.py:734
+#: aleksis/core/models.py:756
 msgid "Activities"
 msgstr "Aktivitäten"
 
-#: aleksis/core/models.py:740
+#: aleksis/core/models.py:762
 msgid "Sender"
 msgstr "Absender"
 
-#: aleksis/core/models.py:745
+#: aleksis/core/models.py:767
 msgid "Recipient"
 msgstr "Empfänger"
 
-#: aleksis/core/models.py:750 aleksis/core/models.py:1079
+#: aleksis/core/models.py:772 aleksis/core/models.py:1101
 msgid "Link"
 msgstr "Link"
 
-#: aleksis/core/models.py:753 aleksis/core/models.py:1080
-#: aleksis/core/models.py:1429
+#: aleksis/core/models.py:775 aleksis/core/models.py:1102
+#: aleksis/core/models.py:1451
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr "Symbol"
 
-#: aleksis/core/models.py:756
+#: aleksis/core/models.py:778
 msgid "Send notification at"
 msgstr "Benachrichtigung schicken am"
 
-#: aleksis/core/models.py:758
+#: aleksis/core/models.py:780
 msgid "Read"
 msgstr "Gelesen"
 
-#: aleksis/core/models.py:759
+#: aleksis/core/models.py:781
 msgid "Sent"
 msgstr "Versandt"
 
-#: aleksis/core/models.py:776
+#: aleksis/core/models.py:798
 msgid "Notification"
 msgstr "Benachrichtigung"
 
-#: aleksis/core/models.py:777 aleksis/core/preferences.py:29
+#: aleksis/core/models.py:799 aleksis/core/preferences.py:28
 msgid "Notifications"
 msgstr "Benachrichtigungen"
 
-#: aleksis/core/models.py:845
+#: aleksis/core/models.py:867
 msgid "Link to detailed view"
 msgstr "Link zur detaillierten Ansicht"
 
-#: aleksis/core/models.py:848
+#: aleksis/core/models.py:870
 msgid "Date and time from when to show"
 msgstr "Datum und Uhrzeit des Anzeigestarts"
 
-#: aleksis/core/models.py:851
+#: aleksis/core/models.py:873
 msgid "Date and time until when to show"
 msgstr "Anzeigezeitraum"
 
-#: aleksis/core/models.py:876
+#: aleksis/core/models.py:898
 msgid "Announcement"
 msgstr "Ankündigung"
 
-#: aleksis/core/models.py:877
+#: aleksis/core/models.py:899
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
 msgstr "Ankündigungen"
 
-#: aleksis/core/models.py:914
+#: aleksis/core/models.py:936
 msgid "Announcement recipient"
 msgstr "Empfänger der Ankündigung"
 
-#: aleksis/core/models.py:915
+#: aleksis/core/models.py:937
 msgid "Announcement recipients"
 msgstr "Empfänger der Ankündigung"
 
-#: aleksis/core/models.py:935
+#: aleksis/core/models.py:957
 msgid "Widget Title"
 msgstr "Widget-Titel"
 
-#: aleksis/core/models.py:936
+#: aleksis/core/models.py:958
 msgid "Activate Widget"
 msgstr "Widget aktivieren"
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:959
 msgid "Widget is broken"
 msgstr "Widget ist kaputt"
 
-#: aleksis/core/models.py:940
+#: aleksis/core/models.py:962
 msgid "Size on mobile devices"
 msgstr "Größe auf Mobilgeräten"
 
-#: aleksis/core/models.py:941
+#: aleksis/core/models.py:963
 msgid "<= 600 px, 12 columns"
 msgstr "<= 600 px, 12 Spalten"
 
-#: aleksis/core/models.py:946
+#: aleksis/core/models.py:968
 msgid "Size on tablet devices"
 msgstr "Größe auf Tablets"
 
-#: aleksis/core/models.py:947
+#: aleksis/core/models.py:969
 msgid "> 600 px, 12 columns"
 msgstr "> 600px, 12 Spalten"
 
-#: aleksis/core/models.py:952
+#: aleksis/core/models.py:974
 msgid "Size on desktop devices"
 msgstr "Größe auf Desktopgeräten"
 
-#: aleksis/core/models.py:953
+#: aleksis/core/models.py:975
 msgid "> 992 px, 12 columns"
 msgstr "> 992 px, 12 Spalten"
 
-#: aleksis/core/models.py:958
+#: aleksis/core/models.py:980
 msgid "Size on large desktop devices"
 msgstr "Größe auf großen Desktopgeräten"
 
-#: aleksis/core/models.py:959
+#: aleksis/core/models.py:981
 msgid "> 1200 px>, 12 columns"
 msgstr "> 1200 px, 12 Spalten"
 
-#: aleksis/core/models.py:990
+#: aleksis/core/models.py:1012
 msgid "Can edit default dashboard"
 msgstr "Kann Standarddashboard bearbeiten"
 
-#: aleksis/core/models.py:991
+#: aleksis/core/models.py:1013
 msgid "Dashboard Widget"
 msgstr "Dashboard-Widget"
 
-#: aleksis/core/models.py:992
+#: aleksis/core/models.py:1014
 msgid "Dashboard Widgets"
 msgstr "Dashboard-Widgets"
 
-#: aleksis/core/models.py:998
+#: aleksis/core/models.py:1020
 msgid "URL"
 msgstr "URL"
 
-#: aleksis/core/models.py:999
+#: aleksis/core/models.py:1021
 msgid "Icon URL"
 msgstr "Symbol-URL"
 
-#: aleksis/core/models.py:1005
+#: aleksis/core/models.py:1027
 msgid "External link widget"
 msgstr "Externer-Link-Widget"
 
-#: aleksis/core/models.py:1006
+#: aleksis/core/models.py:1028
 msgid "External link widgets"
 msgstr "Externer-Link-Widgets"
 
-#: aleksis/core/models.py:1012
+#: aleksis/core/models.py:1034
 msgid "Content"
 msgstr "Inhalt"
 
-#: aleksis/core/models.py:1018
+#: aleksis/core/models.py:1040
 msgid "Static content widget"
 msgstr "Statischer-Inhalt-Widget"
 
-#: aleksis/core/models.py:1019
+#: aleksis/core/models.py:1041
 msgid "Static content widgets"
 msgstr "Statischer-Inhalt-Widgets"
 
-#: aleksis/core/models.py:1024
+#: aleksis/core/models.py:1046
 msgid "Dashboard widget"
 msgstr "Dashboard-Widget"
 
-#: aleksis/core/models.py:1029
+#: aleksis/core/models.py:1051
 msgid "Order"
 msgstr "Reihenfolge"
 
-#: aleksis/core/models.py:1030
+#: aleksis/core/models.py:1052
 msgid "Part of the default dashboard"
 msgstr "Teil des Standarddashboards"
 
-#: aleksis/core/models.py:1045
+#: aleksis/core/models.py:1067
 msgid "Dashboard widget order"
 msgstr "Reihenfolge der Dashboard-Widgets"
 
-#: aleksis/core/models.py:1046
+#: aleksis/core/models.py:1068
 msgid "Dashboard widget orders"
 msgstr "Reihenfolgen der Dashboard-Widgets"
 
-#: aleksis/core/models.py:1052
+#: aleksis/core/models.py:1074
 msgid "Menu ID"
 msgstr "Menü-ID"
 
-#: aleksis/core/models.py:1065
+#: aleksis/core/models.py:1087
 msgid "Custom menu"
 msgstr "Benutzerdefiniertes Menü"
 
-#: aleksis/core/models.py:1066
+#: aleksis/core/models.py:1088
 msgid "Custom menus"
 msgstr "Benutzerdefinierte Menüs"
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1098
 msgid "Menu"
 msgstr "Menü"
 
-#: aleksis/core/models.py:1086
+#: aleksis/core/models.py:1108
 msgid "Custom menu item"
 msgstr "Benutzerdefiniertes Menüelement"
 
-#: aleksis/core/models.py:1087
+#: aleksis/core/models.py:1109
 msgid "Custom menu items"
 msgstr "Benutzerdefinierte Menüelemente"
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1134
 msgid "Title of type"
 msgstr "Titel des Typs"
 
-#: aleksis/core/models.py:1119 aleksis/core/templates/core/group/full.html:50
+#: aleksis/core/models.py:1141 aleksis/core/templates/core/group/full.html:50
 msgid "Group type"
 msgstr "Gruppentyp"
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1142
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
 msgstr "Gruppentypen"
 
-#: aleksis/core/models.py:1133
+#: aleksis/core/models.py:1155
 msgid "Can view system status"
 msgstr "Kann Systemstatus sehen"
 
-#: aleksis/core/models.py:1134
+#: aleksis/core/models.py:1156
 msgid "Can manage data"
 msgstr "Kann Daten verwalten"
 
-#: aleksis/core/models.py:1135
+#: aleksis/core/models.py:1157
 msgid "Can impersonate"
 msgstr "Kann sich verkleiden"
 
-#: aleksis/core/models.py:1136
+#: aleksis/core/models.py:1158
 msgid "Can use search"
 msgstr "Kann Suche benutzen"
 
-#: aleksis/core/models.py:1137
+#: aleksis/core/models.py:1159
 msgid "Can change site preferences"
 msgstr "Kann Konfiguration ändern"
 
-#: aleksis/core/models.py:1138
+#: aleksis/core/models.py:1160
 msgid "Can change person preferences"
 msgstr "Kann Einstellungen einer Person verändern"
 
-#: aleksis/core/models.py:1139
+#: aleksis/core/models.py:1161
 msgid "Can change group preferences"
 msgstr "Kann Einstellungen einer Gruppe verändern"
 
-#: aleksis/core/models.py:1140
+#: aleksis/core/models.py:1162
 msgid "Can test PDF generation"
 msgstr "Kann die PDF-Generierung testen"
 
-#: aleksis/core/models.py:1141
+#: aleksis/core/models.py:1163
 msgid "Can invite persons"
 msgstr "Kann Personen einladen"
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1199
 msgid "Related data check task"
 msgstr "Zugehörige Datenprüfungsaufgabe"
 
-#: aleksis/core/models.py:1185
+#: aleksis/core/models.py:1207
 msgid "Issue solved"
 msgstr "Problem gelöst"
 
-#: aleksis/core/models.py:1186
+#: aleksis/core/models.py:1208
 msgid "Notification sent"
 msgstr "Benachrichtigung gesendet"
 
-#: aleksis/core/models.py:1199
+#: aleksis/core/models.py:1221
 msgid "Data check result"
 msgstr "Datenprüfungsergebnis"
 
-#: aleksis/core/models.py:1200
+#: aleksis/core/models.py:1222
 msgid "Data check results"
 msgstr "Datenprüfungsergebnisse"
 
-#: aleksis/core/models.py:1202
+#: aleksis/core/models.py:1224
 msgid "Can run data checks"
 msgstr "Kann Datenprüfungen ausführen"
 
-#: aleksis/core/models.py:1203
+#: aleksis/core/models.py:1225
 msgid "Can solve data check problems"
 msgstr "Kann Datenprüfungsprobleme lösen"
 
-#: aleksis/core/models.py:1210
+#: aleksis/core/models.py:1232
 msgid "E-Mail address"
 msgstr "E-Mail-Adresse"
 
-#: aleksis/core/models.py:1270
+#: aleksis/core/models.py:1292
 msgid "Owner"
 msgstr "Leiter"
 
-#: aleksis/core/models.py:1274
+#: aleksis/core/models.py:1296
 msgid "File expires at"
 msgstr "Datei abgelaufen am"
 
-#: aleksis/core/models.py:1277
+#: aleksis/core/models.py:1299
 msgid "Generated HTML file"
 msgstr "Generierte HTML-Datei"
 
-#: aleksis/core/models.py:1280
+#: aleksis/core/models.py:1302
 msgid "Generated PDF file"
 msgstr "Generierte PDF-Datei"
 
-#: aleksis/core/models.py:1287
+#: aleksis/core/models.py:1309
 msgid "PDF file"
 msgstr "PDF-Datei"
 
-#: aleksis/core/models.py:1288
+#: aleksis/core/models.py:1310
 msgid "PDF files"
 msgstr "PDF-Dateien"
 
-#: aleksis/core/models.py:1293
+#: aleksis/core/models.py:1315
 msgid "Task result"
 msgstr "Task-Ergebnis"
 
-#: aleksis/core/models.py:1296
+#: aleksis/core/models.py:1318
 msgid "Task user"
 msgstr "Task-Benutzer"
 
-#: aleksis/core/models.py:1300
+#: aleksis/core/models.py:1322
 msgid "Back URL"
 msgstr "Zurück-URL"
 
-#: aleksis/core/models.py:1301
+#: aleksis/core/models.py:1323
 msgid "Progress title"
 msgstr "Fortschritt-Titel"
 
-#: aleksis/core/models.py:1302
+#: aleksis/core/models.py:1324
 msgid "Error message"
 msgstr "Fehlernachricht"
 
-#: aleksis/core/models.py:1303
+#: aleksis/core/models.py:1325
 msgid "Success message"
 msgstr "Erfolgsnachricht"
 
-#: aleksis/core/models.py:1304
+#: aleksis/core/models.py:1326
 msgid "Redirect on success URL"
 msgstr "URL, auf die bei Erfolg weitergeleitet wird"
 
-#: aleksis/core/models.py:1306
+#: aleksis/core/models.py:1328
 msgid "Additional button title"
 msgstr "Titel des zusätzlichen Buttons"
 
-#: aleksis/core/models.py:1308
+#: aleksis/core/models.py:1330
 msgid "Additional button URL"
 msgstr "URL des zusätzlichen Buttons"
 
-#: aleksis/core/models.py:1310
+#: aleksis/core/models.py:1332
 msgid "Additional button icon"
 msgstr "Symbol des zusätzlichen Buttons"
 
-#: aleksis/core/models.py:1312
+#: aleksis/core/models.py:1334
 msgid "Result fetched"
 msgstr "Ergebnis abgerufen"
 
-#: aleksis/core/models.py:1337
+#: aleksis/core/models.py:1359
 msgid "Background task completed successfully"
 msgstr "Hintergrundaufgabe erfolgreich fertiggestellt"
 
-#: aleksis/core/models.py:1338
+#: aleksis/core/models.py:1360
 msgid "The background task '{}' has been completed successfully."
 msgstr "Die Hintergrundaufgabe '{}' wurde erfolgreich fertiggestellt."
 
-#: aleksis/core/models.py:1344
+#: aleksis/core/models.py:1366
 msgid "Background task failed"
 msgstr "Hintergrundaufgabe fehlgeschlagen"
 
-#: aleksis/core/models.py:1345
+#: aleksis/core/models.py:1367
 msgid "The background task '{}' has failed."
 msgstr "Die Hintergrundaufgabe '{}' ist fehlgeschlagen."
 
-#: aleksis/core/models.py:1354
+#: aleksis/core/models.py:1376
 msgid "Background task"
 msgstr "Hintergrundaufgabe"
 
-#: aleksis/core/models.py:1368
+#: aleksis/core/models.py:1390
 msgid "Task user assignment"
 msgstr "Task-Benutzer-Zuordnung"
 
-#: aleksis/core/models.py:1369
+#: aleksis/core/models.py:1391
 msgid "Task user assignments"
 msgstr "Task-Benutzer-Zuordnungen"
 
-#: aleksis/core/models.py:1385
+#: aleksis/core/models.py:1407
 msgid "Additional attributes"
 msgstr "Zusätzliche Attribute"
 
-#: aleksis/core/models.py:1423
+#: aleksis/core/models.py:1445
 msgid "Allowed scopes that clients can request"
 msgstr "Erlaubte Scopes, die ein Client anfordern kann"
 
-#: aleksis/core/models.py:1433
-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:1455
+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:1478
+#: aleksis/core/models.py:1500
 msgid "Can view room timetable"
 msgstr "Kann Raum-Stundenplan sehen"
 
-#: aleksis/core/models.py:1480
+#: aleksis/core/models.py:1502
 msgid "Room"
 msgstr "Raum"
 
-#: aleksis/core/models.py:1481
+#: aleksis/core/models.py:1503
 msgid "Rooms"
 msgstr "Räume"
 
-#: aleksis/core/preferences.py:25
+#: aleksis/core/models.py:1528
+#, fuzzy
+#| msgid "Date and time"
+msgid "Start date and time"
+msgstr "Datum und Uhrzeit"
+
+#: aleksis/core/models.py:1530
+#, fuzzy
+#| msgid "Date and time"
+msgid "End date and time"
+msgstr "Datum und Uhrzeit"
+
+#: aleksis/core/models.py:1531
+#, fuzzy
+#| msgid "Time"
+msgid "Timezone"
+msgstr "Zeit"
+
+#: aleksis/core/models.py:1534
+#, fuzzy
+#| msgid "Preferences"
+msgid "Recurrences"
+msgstr "Einstellungen"
+
+#: aleksis/core/models.py:1540
+msgid "Amended base event"
+msgstr ""
+
+#: aleksis/core/models.py:1643
+#, fuzzy
+#| msgid "Calendar Feeds"
+msgid "Calendar Event"
+msgstr "Kalender-Feeds"
+
+#: aleksis/core/models.py:1644
+#, fuzzy
+#| msgid "Calendar Feeds"
+msgid "Calendar Events"
+msgstr "Kalender-Feeds"
+
+#: aleksis/core/models.py:1670
+#, fuzzy
+#| msgid "Birthday Calendar"
+msgid "Birthdays"
+msgstr "Geburtstagskalender"
+
+#: aleksis/core/models.py:1674
+#, fuzzy
+#| msgid "%(name)s's birthday"
+msgid "{}'s birthday"
+msgstr "%(name)ss Geburtstag"
+
+#: aleksis/core/models.py:1713 aleksis/core/models.py:1775
+msgid "Holidays"
+msgstr ""
+
+#: aleksis/core/models.py:1774
+msgid "Holiday"
+msgstr ""
+
+#: aleksis/core/preferences.py:24
 msgid "General"
 msgstr "Allgemein"
 
-#: aleksis/core/preferences.py:26
+#: aleksis/core/preferences.py:25
 msgid "School"
 msgstr "Schule"
 
-#: aleksis/core/preferences.py:27
+#: aleksis/core/preferences.py:26
 msgid "Theme"
 msgstr "Theme"
 
-#: aleksis/core/preferences.py:28
+#: aleksis/core/preferences.py:27
 msgid "Mail"
 msgstr "E-Mail"
 
-#: aleksis/core/preferences.py:30
+#: aleksis/core/preferences.py:29
 msgid "Footer"
 msgstr "Fußbereich"
 
-#: aleksis/core/preferences.py:31
+#: aleksis/core/preferences.py:30
 msgid "Accounts"
 msgstr "Konten"
 
-#: aleksis/core/preferences.py:32
+#: aleksis/core/preferences.py:31
 msgid "Authentication"
 msgstr "Authentifizierung"
 
-#: aleksis/core/preferences.py:33
+#: aleksis/core/preferences.py:32
 msgid "Internationalisation"
 msgstr "Internationalisierung"
 
+#: aleksis/core/preferences.py:33
+#, fuzzy
+#| msgid "Calendar Feeds"
+msgid "Calendar"
+msgstr "Kalender-Feeds"
+
 #: aleksis/core/preferences.py:43
 msgid "Site title"
 msgstr "Seitentitel"
@@ -1083,11 +1124,8 @@ msgid "Automatically create new persons for new users"
 msgstr "Erstelle automatisch neue Personen für neue Benutzer"
 
 #: aleksis/core/preferences.py:256
-msgid ""
-"Automatically link existing persons to new users by their e-mail address"
-msgstr ""
-"Verknüpfe existierende Personen automatisch mit neuen Personen anhand ihrer "
-"E-Mail-Adresse"
+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:267
 msgid "Display name of the school"
@@ -1095,8 +1133,7 @@ msgstr "Sichtbarer Name der Schule"
 
 #: aleksis/core/preferences.py:278
 msgid "Official name of the school, e.g. as given by supervisory authority"
-msgstr ""
-"Offizieller Name der Schule, wie er z.B. von der Behörde vorgegeben ist"
+msgstr "Offizieller Name der Schule, wie er z.B. von der Behörde vorgegeben ist"
 
 #: aleksis/core/preferences.py:286
 msgid "Allow users to change their passwords"
@@ -1155,11 +1192,8 @@ 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:424
-msgid ""
-"Editable fields on person model which should trigger a notification on change"
-msgstr ""
-"Editierbare Felder des Personen-Models welche eine Benachrichtigung für "
-"Änderungen auslösen soll"
+msgid "Editable fields on person model which should trigger a notification on change"
+msgstr "Editierbare Felder des Personen-Models welche eine Benachrichtigung für Änderungen auslösen soll"
 
 #: aleksis/core/preferences.py:438
 msgid "Contact for notification if a person changes their data"
@@ -1183,13 +1217,23 @@ msgstr "Automatisch das Dashboard und seine Widgets aktualisieren"
 
 #: aleksis/core/preferences.py:480
 msgid "Automatically update the dashboard and its widgets sitewide"
-msgstr ""
-"Automatisch das Dashboard und seine Widgets aktualisieren (auf der ganzen "
-"Seite)"
+msgstr "Automatisch das Dashboard und seine Widgets aktualisieren (auf der ganzen Seite)"
 
 #: aleksis/core/preferences.py:490
-msgid "Country for phone number parsing"
-msgstr "Land für das Einlesen von Telefonnummern"
+#, fuzzy
+#| msgid "Birthday Calendar"
+msgid "Birthday calendar feed color"
+msgstr "Geburtstagskalender"
+
+#: aleksis/core/preferences.py:502
+msgid "Holiday calendar feed color"
+msgstr ""
+
+#: aleksis/core/preferences.py:515
+#, fuzzy
+#| msgid "Birthday Calendar"
+msgid "Activated calendars"
+msgstr "Geburtstagskalender"
 
 #: aleksis/core/settings.py:551
 msgid "English"
@@ -1203,22 +1247,9 @@ msgstr "Deutsch"
 msgid "Ukrainian"
 msgstr "Ukrainisch"
 
-#: aleksis/core/tables.py:25
-#: aleksis/core/templates/core/announcement/list.html:36
-#: aleksis/core/templates/core/group/full.html:26
-#: aleksis/core/templates/oauth2_provider/application/detail.html:17
-msgid "Edit"
-msgstr "Bearbeiten"
-
-#: aleksis/core/tables.py:27 aleksis/core/tables.py:148
-#: aleksis/core/tables.py:185
-#: aleksis/core/templates/core/announcement/list.html:22
-msgid "Actions"
-msgstr "Aktionen"
-
-#: aleksis/core/tables.py:115 aleksis/core/tables.py:116
-#: aleksis/core/tables.py:130 aleksis/core/tables.py:146
-#: aleksis/core/tables.py:183
+#: aleksis/core/tables.py:97 aleksis/core/tables.py:98
+#: aleksis/core/tables.py:112 aleksis/core/tables.py:128
+#: aleksis/core/tables.py:165
 #: aleksis/core/templates/core/announcement/list.html:42
 #: aleksis/core/templates/core/group/full.html:33
 #: aleksis/core/templates/core/pages/delete.html:22
@@ -1226,6 +1257,11 @@ msgstr "Aktionen"
 msgid "Delete"
 msgstr "Löschen"
 
+#: aleksis/core/tables.py:130 aleksis/core/tables.py:167
+#: aleksis/core/templates/core/announcement/list.html:22
+msgid "Actions"
+msgstr "Aktionen"
+
 #: aleksis/core/templates/403.html:14 aleksis/core/templates/500.html:10
 #: aleksis/core/templates/oauth2_provider/authorize.html:54
 msgid "Error"
@@ -1242,14 +1278,12 @@ msgstr ""
 #: aleksis/core/templates/403.html:19 aleksis/core/templates/404.html:16
 msgid ""
 "\n"
-"            If you think this is an error in AlekSIS, please contact your "
-"site\n"
+"            If you think this is an error in AlekSIS, please contact your site\n"
 "            administrators:\n"
 "          "
 msgstr ""
 "\n"
-"            Wenn Sie der Meinung sind, dass es sich um einen Fehler in "
-"AlekSIS handelt, kontaktieren Sie bitte einen Ihrer\n"
+"            Wenn Sie der Meinung sind, dass es sich um einen Fehler in AlekSIS handelt, kontaktieren Sie bitte einen Ihrer\n"
 "     Systemadministratoren:\n"
 "          "
 
@@ -1261,8 +1295,7 @@ 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"
 "          "
 
@@ -1277,14 +1310,12 @@ msgstr ""
 #: aleksis/core/templates/500.html:13
 msgid ""
 "\n"
-"            Your site administrators will automatically be notified about "
-"this\n"
+"            Your site administrators will automatically be notified about this\n"
 "            error. You can also contact them directly:\n"
 "          "
 msgstr ""
 "\n"
-"            Ihre Administratoren werden automatisch über diesen Fehler "
-"informiert.\n"
+"            Ihre Administratoren werden automatisch über diesen Fehler informiert.\n"
 "      Sie können diese auch direkt kontaktieren:\n"
 "          "
 
@@ -1321,6 +1352,13 @@ msgstr "Hallo!"
 msgid "Your AlekSIS team"
 msgstr "Ihr AlekSIS-Team"
 
+#: aleksis/core/templates/account/email/email_confirmation_message.txt:6
+#, python-format
+msgid ""
+"Someone tried to register an account with the username %(user_display)s and your e-mail address on %(site_domain)s.\n"
+"If it was you, please confirm the registration by clicking on the following link:"
+msgstr ""
+
 #: aleksis/core/templates/account/email_confirm.html:5
 #: aleksis/core/templates/account/email_confirm.html:6
 #: aleksis/core/templates/account/email_confirm.html:17
@@ -1330,21 +1368,13 @@ msgstr "Bestätigen"
 
 #: aleksis/core/templates/account/email_confirm.html:12
 #, python-format
-msgid ""
-"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an e-mail "
-"address for user %(user_display)s."
-msgstr ""
-"Bitte bestätigen Sie, dass <a href=\"mailto:%(email)s\">%(email)s</a> eine E-"
-"Mail-Adresse für den Benutzer %(user_display)s ist."
+msgid "Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an e-mail address for user %(user_display)s."
+msgstr "Bitte bestätigen Sie, dass <a href=\"mailto:%(email)s\">%(email)s</a> eine E-Mail-Adresse für den Benutzer %(user_display)s ist."
 
 #: aleksis/core/templates/account/email_confirm.html:25
 #, python-format
-msgid ""
-"This e-mail confirmation link expired or is invalid. Please <a "
-"href=\"%(email_url)s\">issue a new e-mail confirmation request</a>."
-msgstr ""
-"Dieser E-Mail-Bestätigungslink ist abgelaufen oder nicht gültig. Bitte <a "
-"href=\"%(email_url)s\">fragen Sie eine neue E-Mail-Bestätigung an</a>."
+msgid "This e-mail confirmation link expired or is invalid. Please <a href=\"%(email_url)s\">issue a new e-mail confirmation request</a>."
+msgstr "Dieser E-Mail-Bestätigungslink ist abgelaufen oder nicht gültig. Bitte <a href=\"%(email_url)s\">fragen Sie eine neue E-Mail-Bestätigung an</a>."
 
 #: aleksis/core/templates/account/password_change.html:5
 #: aleksis/core/templates/account/password_change.html:6
@@ -1359,9 +1389,7 @@ msgstr "Passwort ändern"
 
 #: aleksis/core/templates/account/password_change.html:12
 msgid "Forgot your current password? Click here to reset it:"
-msgstr ""
-"Haben Sie Ihr aktuelles Passwort vergessen? Klicken Sie hier, um es "
-"zurückzusetzen:"
+msgstr "Haben Sie Ihr aktuelles Passwort vergessen? Klicken Sie hier, um es zurückzusetzen:"
 
 #: aleksis/core/templates/account/password_change.html:12
 msgid "Forgot Password?"
@@ -1380,13 +1408,11 @@ msgstr "Passwortänderung deaktiviert."
 msgid ""
 "\n"
 "            Users are not allowed to edit their own passwords. If you think\n"
-"            this is an error please contact one of your site "
-"administrators.\n"
+"            this is an error please contact one of your site administrators.\n"
 "          "
 msgstr ""
 "\n"
-"            Benutzer dürfen ihre eigenen Passwörter nicht ändern. Wenn Sie "
-"denken, \n"
+"            Benutzer dürfen ihre eigenen Passwörter nicht ändern. Wenn Sie denken, \n"
 "dass dies ein Fehler ist, kontaktieren Sie bitte einen der Administratoren:\n"
 "          "
 
@@ -1401,12 +1427,8 @@ msgid "Reset password"
 msgstr "Passwort zurücksetzen"
 
 #: aleksis/core/templates/account/password_reset.html:17
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll send you "
-"an e-mail allowing you to reset it."
-msgstr ""
-"Passwort vergessen? Geben Sie Ihre E-Mail-Adresse hier ein und wir werden "
-"Ihnen eine E-Mail zum Zurücksetzen des Passwortes schicken."
+msgid "Forgotten your password? Enter your e-mail address below, and we'll send you an e-mail allowing you to reset it."
+msgstr "Passwort vergessen? Geben Sie Ihre E-Mail-Adresse hier ein und wir werden Ihnen eine E-Mail zum Zurücksetzen des Passwortes schicken."
 
 #: aleksis/core/templates/account/password_reset.html:30
 msgid ""
@@ -1429,8 +1451,7 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Wir haben Ihnen eine E-Mail gesendet. Bitte kontaktieren Sie "
-"einen der Administratoren,\n"
+"            Wir haben Ihnen eine E-Mail gesendet. Bitte kontaktieren Sie einen der Administratoren,\n"
 "wenn Sie diese nicht innerhalb weniger Minuten erhalten.\n"
 "          "
 
@@ -1442,16 +1463,12 @@ msgstr "Ungültiges Token"
 #, python-format
 msgid ""
 "\n"
-"              The password reset link was invalid, possibly because it has "
-"already been used. Please request a <a href=\"%(passwd_reset_url)s\"\n"
+"              The password reset link was invalid, possibly because it has already been used. Please request a <a href=\"%(passwd_reset_url)s\"\n"
 "              class=\"blue-text text-lighten-2\">new password reset</a>.\n"
 "            "
 msgstr ""
 "\n"
-"              Der Link zum Zurücksetzen des Passwortes war falsch, "
-"wahrscheinlich, weil er bereits benutzt wurde. Bitte starten Sie eine neue "
-"Anfrage <a href=\"%(passwd_reset_url)s\"              class=\"blue-text text-"
-"lighten-2\">zum Zurücksetzen des Passwortes</a>.\n"
+"              Der Link zum Zurücksetzen des Passwortes war falsch, wahrscheinlich, weil er bereits benutzt wurde. Bitte starten Sie eine neue Anfrage <a href=\"%(passwd_reset_url)s\"              class=\"blue-text text-lighten-2\">zum Zurücksetzen des Passwortes</a>.\n"
 "            "
 
 #: aleksis/core/templates/account/password_reset_from_key.html:25
@@ -1500,11 +1517,8 @@ msgstr "Registrierung"
 
 #: aleksis/core/templates/account/signup.html:12
 #, python-format
-msgid ""
-"Already have an account? Then please <a href=\"%(login_url)s\">sign in</a>."
-msgstr ""
-"Haben Sie bereits ein Konto? Dann <a href=\"%(login_url)s\">melden Sie sich "
-"bitte an</a>."
+msgid "Already have an account? Then please <a href=\"%(login_url)s\">sign in</a>."
+msgstr "Haben Sie bereits ein Konto? Dann <a href=\"%(login_url)s\">melden Sie sich bitte an</a>."
 
 #: aleksis/core/templates/account/signup.html:22
 #: aleksis/core/templates/socialaccount/signup.html:23
@@ -1528,8 +1542,7 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Die Registrierung ist aktuell geschlossen. Wenn Sie denken, dass "
-"dies ein Fehler ist,\n"
+"            Die Registrierung ist aktuell geschlossen. Wenn Sie denken, dass dies ein Fehler ist,\n"
 " kontaktieren Sie bitte einen Ihrer Systemadministratoren.\n"
 "          "
 
@@ -1549,17 +1562,13 @@ msgstr "Verifizieren Sie Ihre E-Mail!"
 #: aleksis/core/templates/account/verification_sent.html:16
 msgid ""
 "\n"
-"            This part of the site requires us to verify that you are who you "
-"claim to be.\n"
-"            For this purpose, we require that you verify ownership of your e-"
-"mail address.\n"
+"            This part of the site requires us to verify that you are who you claim to be.\n"
+"            For this purpose, we require that you verify ownership of your e-mail address.\n"
 "          "
 msgstr ""
 "\n"
-"            Dieser Teil der Anwendung setzt voraus, dass wir verifizieren, "
-"dass Sie die Person sind, die sie vorgeben, zu sein.\n"
-"Zu diesem Zweck setzen wir voraus, dass Sie die Inhaberschaft Ihrer E-Mail-"
-"Adresse bestätigen.\n"
+"            Dieser Teil der Anwendung setzt voraus, dass wir verifizieren, dass Sie die Person sind, die sie vorgeben, zu sein.\n"
+"Zu diesem Zweck setzen wir voraus, dass Sie die Inhaberschaft Ihrer E-Mail-Adresse bestätigen.\n"
 "          "
 
 #: aleksis/core/templates/account/verification_sent.html:22
@@ -1573,8 +1582,7 @@ msgstr ""
 "\n"
 "            Wir haben Ihnen eine E-Mail zur Verifizierung geschickt.\n"
 "Bitte klicken Sie auf den Link in dieser E-Mail.\n"
-"Bitte kontaktieren Sie uns, wenn Sie diese nicht binnen weniger Minuten "
-"erhalten.\n"
+"Bitte kontaktieren Sie uns, wenn Sie diese nicht binnen weniger Minuten erhalten.\n"
 "          "
 
 #: aleksis/core/templates/core/additional_field/edit.html:6
@@ -1616,6 +1624,12 @@ msgstr "Gültig bis"
 msgid "Recipients"
 msgstr "Empfänger"
 
+#: aleksis/core/templates/core/announcement/list.html:36
+#: aleksis/core/templates/core/group/full.html:26
+#: aleksis/core/templates/oauth2_provider/application/detail.html:17
+msgid "Edit"
+msgstr "Bearbeiten"
+
 #: aleksis/core/templates/core/announcement/list.html:50
 msgid "There are no announcements."
 msgstr "Es gibt aktuell keine Ankündigungen."
@@ -1643,8 +1657,7 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Es ist ein Problem dabei aufgetreten, das Widget \"%(title)s\" "
-"zu laden.\n"
+"            Es ist ein Problem dabei aufgetreten, das Widget \"%(title)s\" zu laden.\n"
 "Sie brauchen nichts weiter machen.\n"
 "          "
 
@@ -1750,42 +1763,29 @@ msgstr "Dashboard bearbeiten"
 #: aleksis/core/templates/core/edit_dashboard.html:24
 msgid ""
 "\n"
-"          On this page you can arrange your personal dashboard. You can drag "
-"any items from \"Available widgets\" to \"Your\n"
-"          Dashboard\" or change the order by moving the widgets. After you "
-"have finished, please don't forget to click on\n"
+"          On this page you can arrange your personal dashboard. You can drag any items from \"Available widgets\" to \"Your\n"
+"          Dashboard\" or change the order by moving the widgets. After you have finished, please don't forget to click on\n"
 "          \"Save\".\n"
 "        "
 msgstr ""
 "\n"
-"          Auf dieser Seite können Sie Ihr persönliches Dashboard "
-"zusammenstallen. Sie können beliebige Elemente von den \"Verfügbaren "
-"Widgets\" \n"
-"in \"Ihr Dashboard\" ziehen oder die Reihenfolge verändern, indem Sie die "
-"Widgets bewegen. Wenn Sie fertig sind, vergessen Sie bitte nicht, \n"
+"          Auf dieser Seite können Sie Ihr persönliches Dashboard zusammenstallen. Sie können beliebige Elemente von den \"Verfügbaren Widgets\" \n"
+"in \"Ihr Dashboard\" ziehen oder die Reihenfolge verändern, indem Sie die Widgets bewegen. Wenn Sie fertig sind, vergessen Sie bitte nicht, \n"
 "auf \"Speichern\" zu drücken.\n"
 "        "
 
 #: aleksis/core/templates/core/edit_dashboard.html:30
 msgid ""
 "\n"
-"          On this page you can arrange the default dashboard which is shown "
-"when a user doesn't arrange his own\n"
-"          dashboard. You can drag any items from \"Available widgets\" to "
-"\"Default Dashboard\" or change the order\n"
-"          by moving the widgets. After you have finished, please don't "
-"forget to click on \"Save\".\n"
+"          On this page you can arrange the default dashboard which is shown when a user doesn't arrange his own\n"
+"          dashboard. You can drag any items from \"Available widgets\" to \"Default Dashboard\" or change the order\n"
+"          by moving the widgets. After you have finished, please don't forget to click on \"Save\".\n"
 "        "
 msgstr ""
 "\n"
-"          Auf dieser Seite können Sie Ihr das Standard-Dashboard "
-"zusammenstallen, welches angezeigt wird, wenn ein Benutzer kein eigenes "
-"definiert. \n"
-"Sie können beliebige Elemente von den \"Verfügbaren Widgets\" in \"Standard-"
-"Dashboard\" ziehen oder die Reihenfolge verändern, indem Sie die Widgets "
-"bewegen. \n"
-"Wenn Sie fertig sind, vergessen Sie bitte nicht, auf \"Speichern\" zu "
-"drücken.\n"
+"          Auf dieser Seite können Sie Ihr das Standard-Dashboard zusammenstallen, welches angezeigt wird, wenn ein Benutzer kein eigenes definiert. \n"
+"Sie können beliebige Elemente von den \"Verfügbaren Widgets\" in \"Standard-Dashboard\" ziehen oder die Reihenfolge verändern, indem Sie die Widgets bewegen. \n"
+"Wenn Sie fertig sind, vergessen Sie bitte nicht, auf \"Speichern\" zu drücken.\n"
 "        "
 
 #: aleksis/core/templates/core/edit_dashboard.html:48
@@ -1808,15 +1808,12 @@ msgstr "Kindgruppen zu Gruppen zuordnen"
 #: aleksis/core/templates/core/group/child_groups.html:18
 msgid ""
 "\n"
-"          You can use this to assign child groups to groups. Please use the "
-"filters below to select groups you want to\n"
+"          You can use this to assign child groups to groups. Please use the filters below to select groups you want to\n"
 "          change and click \"Next\".\n"
 "        "
 msgstr ""
 "\n"
-"          Sie können diese Seite verwenden, um Kindgruppen zu Gruppen "
-"zuzuordnen. Bitte nutzen Sie die folgenden Filter, um die Gruppen "
-"auszuwählen, die Sie \n"
+"          Sie können diese Seite verwenden, um Kindgruppen zu Gruppen zuzuordnen. Bitte nutzen Sie die folgenden Filter, um die Gruppen auszuwählen, die Sie \n"
 "          ändern möchten und klicken auf \"Weiter\".\n"
 "        "
 
@@ -1857,18 +1854,14 @@ msgstr "Bitte seien Sie vorsichtig!"
 #: aleksis/core/templates/core/group/child_groups.html:79
 msgid ""
 "\n"
-"            If you click \"Back\" or \"Next\" the current group assignments "
-"are not saved.\n"
-"            If you click \"Save\", you will overwrite all existing child "
-"group relations for this group with what you\n"
+"            If you click \"Back\" or \"Next\" the current group assignments are not saved.\n"
+"            If you click \"Save\", you will overwrite all existing child group relations for this group with what you\n"
 "            selected on this page.\n"
 "          "
 msgstr ""
 "\n"
-"            Wenn Sie auf \"Zurück\" oder \"Weiter\" klicken, werden die "
-"aktuellen Gruppenzuordnungen nicht gespeichert.\n"
-"Wenn Sie auf \"Speichern\" klicken, werden alle existierenden Zuordnungen "
-"von Kindgruppen für diese Gruppe\n"
+"            Wenn Sie auf \"Zurück\" oder \"Weiter\" klicken, werden die aktuellen Gruppenzuordnungen nicht gespeichert.\n"
+"Wenn Sie auf \"Speichern\" klicken, werden alle existierenden Zuordnungen von Kindgruppen für diese Gruppe\n"
 "mit dem überschrieben, was Sie auf dieser Seite ausgewählt haben.\n"
 "          "
 
@@ -1966,16 +1959,13 @@ msgstr "Startseite"
 #: aleksis/core/templates/core/index.html:34
 msgid ""
 "\n"
-"        You didn't customise your dashboard so that you see the system "
-"default. Please click on \"Edit dashboard\" to\n"
+"        You didn't customise your dashboard so that you see the system default. Please click on \"Edit dashboard\" to\n"
 "        customise your personal dashboard.\n"
 "      "
 msgstr ""
 "\n"
-"        Sie haben Ihr Dashboard nicht angepasst, sodass Sie das Standard-"
-"Dashboard sehen.\n"
-"Bitte klicken Sie auf \"Dashboard bearbeiten\", um Ihr persönliches "
-"Dashboard anzupassen.\n"
+"        Sie haben Ihr Dashboard nicht angepasst, sodass Sie das Standard-Dashboard sehen.\n"
+"Bitte klicken Sie auf \"Dashboard bearbeiten\", um Ihr persönliches Dashboard anzupassen.\n"
 "      "
 
 #: aleksis/core/templates/core/index.html:44
@@ -2018,13 +2008,11 @@ msgstr "Wartungsmodus aktiviert"
 #: aleksis/core/templates/core/pages/system_status.html:28
 msgid ""
 "\n"
-"                  Only admin and visitors from internal IPs can access the "
-"site.\n"
+"                  Only admin and visitors from internal IPs can access the site.\n"
 "                "
 msgstr ""
 "\n"
-"                  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:39
@@ -2042,13 +2030,11 @@ msgstr "Debug-Modus aktiviert"
 #: aleksis/core/templates/core/pages/system_status.html:53
 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:60
@@ -2058,13 +2044,11 @@ msgstr "Debug-Modus deaktivert"
 #: aleksis/core/templates/core/pages/system_status.html:62
 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:75
@@ -2114,13 +2098,11 @@ msgstr "PDF-Generierung testen"
 #: aleksis/core/templates/core/pages/test_pdf.html:14
 msgid ""
 "\n"
-"        This simple view can be used to ensure the correct function of the "
-"built-in PDF generation system.\n"
+"        This simple view can be used to ensure the correct function of the built-in PDF generation system.\n"
 "      "
 msgstr ""
 "\n"
-"        Diese einfache Seite kann genutzt werden, um die korrekte "
-"Funktionalität des eingebauten PDF-Generierungssystem zu testen.\n"
+"        Diese einfache Seite kann genutzt werden, um die korrekte Funktionalität des eingebauten PDF-Generierungssystem zu testen.\n"
 "      "
 
 #: aleksis/core/templates/core/partials/announcements.html:8
@@ -2178,13 +2160,11 @@ msgstr "Unbekannt"
 #: aleksis/core/templates/core/partials/splash_screen.html:11
 msgid ""
 "\n"
-"      This webbrowser doesn't support JavaScript, or its execution is "
-"blocked. Please use another browser to continue.\n"
+"      This webbrowser doesn't support JavaScript, or its execution is blocked. Please use another browser to continue.\n"
 "    "
 msgstr ""
 "\n"
-"      Dieser Webbrowser unterstützt kein JavaScript oder die Ausführung "
-"wurde blockiert. Bitte nutzen Sie einen anderen Browser, um fortzufahren.\n"
+"      Dieser Webbrowser unterstützt kein JavaScript oder die Ausführung wurde blockiert. Bitte nutzen Sie einen anderen Browser, um fortzufahren.\n"
 "    "
 
 #: aleksis/core/templates/core/partials/splash_screen.html:17
@@ -2194,8 +2174,7 @@ msgid ""
 "    "
 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"
 "    "
 
 #: aleksis/core/templates/core/perms/assign.html:12
@@ -2267,17 +2246,6 @@ msgstr "Personen filtern"
 msgid "Selected persons"
 msgstr "Ausgewählte Personen"
 
-#: 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 "Schuljahr erstellen"
-
-#: aleksis/core/templates/core/school_term/edit.html:6
-#: aleksis/core/templates/core/school_term/edit.html:7
-msgid "Edit school term"
-msgstr "Schuljahr bearbeiten"
-
 #: aleksis/core/templates/dynamic_preferences/form.html:5
 msgid "Preferences"
 msgstr "Einstellungen"
@@ -2308,12 +2276,8 @@ 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"
@@ -2461,17 +2425,13 @@ msgstr "Keine Verbindung zum Server."
 #: aleksis/core/templates/offline.html:14
 msgid ""
 "\n"
-"      This page is not available without a connection to the server. Please "
-"check your internet connection and try again.\n"
-"      If you are connected and the error persists, please contact the system "
-"administrators:\n"
+"      This page is not available without a connection to the server. Please check your internet connection and try again.\n"
+"      If you are connected and the error persists, please contact the system administrators:\n"
 "    "
 msgstr ""
 "\n"
-"      Diese Seite ist ohne eine Verbindung zum Server nicht verfügbar. Bitte "
-"prüfen Sie Ihre Internetverbindung und probieren Sie es erneut.\n"
-"      Wenn Sie verbunden sind und der Fehler weiterhin auftritt, "
-"kontaktieren Sie bitte die Systemadministratoren:\n"
+"      Diese Seite ist ohne eine Verbindung zum Server nicht verfügbar. Bitte prüfen Sie Ihre Internetverbindung und probieren Sie es erneut.\n"
+"      Wenn Sie verbunden sind und der Fehler weiterhin auftritt, kontaktieren Sie bitte die Systemadministratoren:\n"
 "    "
 
 #: aleksis/core/templates/search/search.html:8
@@ -2506,14 +2466,12 @@ msgstr "Anmeldung über Drittanbieter-Konto fehlgeschlagen."
 #: aleksis/core/templates/socialaccount/authentication_error.html:15
 msgid ""
 "\n"
-"            An error occurred while attempting to login via your third-party "
-"account.\n"
+"            An error occurred while attempting to login via your third-party account.\n"
 "            Please contact one of your site administrators.\n"
 "          "
 msgstr ""
 "\n"
-"            Beim dem Versuch, die Anmeldung über Ihr Drittanbieter-Konto "
-"durchzuführen, ist ein Fehler aufgetreten.\n"
+"            Beim dem Versuch, die Anmeldung über Ihr Drittanbieter-Konto durchzuführen, ist ein Fehler aufgetreten.\n"
 "            Kontaktieren Sie bitte einen Ihrer Systemadministratoren:\n"
 "          "
 
@@ -2528,8 +2486,7 @@ msgstr "Löschen"
 
 #: aleksis/core/templates/socialaccount/connections.html:34
 msgid "You currently have no third-party accounts connected to this account."
-msgstr ""
-"Sie haben aktuell keine Drittanbieter-Konten mit Ihrem Konto verbunden."
+msgstr "Sie haben aktuell keine Drittanbieter-Konten mit Ihrem Konto verbunden."
 
 #: aleksis/core/templates/socialaccount/connections.html:37
 msgid "Add a Third-party Account"
@@ -2538,15 +2495,12 @@ msgstr "Ein Drittanbieter-Konto hinzufügen"
 #: aleksis/core/templates/socialaccount/login.html:12
 #, python-format
 msgid "You are about to connect a new third party account from %(provider)s."
-msgstr ""
-"Sie sind dabei, ein neues Drittanbieterkonto von %(provider)s zu verbinden."
+msgstr "Sie sind dabei, ein neues Drittanbieterkonto von %(provider)s zu verbinden."
 
 #: aleksis/core/templates/socialaccount/login.html:23
 #, python-format
 msgid "You are about to sign in using a third party account from %(provider)s."
-msgstr ""
-"Sie sind dabei, sich mit einem Drittanbieterkonto von %(provider)s "
-"anzumelden."
+msgstr "Sie sind dabei, sich mit einem Drittanbieterkonto von %(provider)s anzumelden."
 
 #: aleksis/core/templates/socialaccount/login.html:28
 msgid "Continue"
@@ -2562,15 +2516,11 @@ msgstr "Login abgebrochen"
 #, python-format
 msgid ""
 "\n"
-"            You decided to cancel logging in to our site using one of your "
-"existing accounts. If this was a mistake, please proceed to <a "
-"href=\"%(login_url)s\">sign in</a>.\n"
+"            You decided to cancel logging in to our site using one of your existing accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s\">sign in</a>.\n"
 "          "
 msgstr ""
 "\n"
-"            Sie haben sich entschieden, die Anmeldung mit einem Ihrer "
-"bestehenden Konten bei uns abzubrechen. Wenn dies ein Fehler war, <a "
-"href=\"%(login_url)s\">fahren Sie bitte mit dem Login fort</a>.\n"
+"            Sie haben sich entschieden, die Anmeldung mit einem Ihrer bestehenden Konten bei uns abzubrechen. Wenn dies ein Fehler war, <a href=\"%(login_url)s\">fahren Sie bitte mit dem Login fort</a>.\n"
 "          "
 
 #: aleksis/core/templates/socialaccount/signup.html:12
@@ -2579,8 +2529,7 @@ msgid ""
 "You are about to use your %(provider_name)s account to login to\n"
 "        %(site_name)s. As a final step, please complete the following form:"
 msgstr ""
-"Sie sind dabei, Ihr %(provider_name)s-Konto zur Anmeldung bei %(site_name)s "
-"zu nutzen. \n"
+"Sie sind dabei, Ihr %(provider_name)s-Konto zur Anmeldung bei %(site_name)s zu nutzen. \n"
 "Als ein letzter Schritt vervollständigen Sie bitte das folgende Formular:"
 
 #: aleksis/core/templates/socialaccount/snippets/provider_list.html:12
@@ -2630,8 +2579,7 @@ msgstr "Celery-Task %(task_name)s fehlgeschlagen!"
 #: aleksis/core/templates/templated_email/celery_failure.email:7
 #, python-format
 msgid "the celery task %(task_name)s failed with following information:"
-msgstr ""
-"der Celery-Task %(task_name)s ist mit folgenden Informationen fehlgeschlagen:"
+msgstr "der Celery-Task %(task_name)s ist mit folgenden Informationen fehlgeschlagen:"
 
 #: aleksis/core/templates/templated_email/celery_failure.email:10
 #: aleksis/core/templates/templated_email/celery_failure.email:29
@@ -2661,8 +2609,7 @@ msgid ""
 "    "
 msgstr ""
 "\n"
-"      der Celery-Task  %(task_name)s ist mit folgenden Informationen "
-"fehlgeschlagen:\n"
+"      der Celery-Task  %(task_name)s ist mit folgenden Informationen fehlgeschlagen:\n"
 "    "
 
 #: aleksis/core/templates/templated_email/data_checks.email:3
@@ -2672,25 +2619,21 @@ msgstr "Das System hat einige neue Probleme mit Ihren Daten entdeckt."
 #: aleksis/core/templates/templated_email/data_checks.email:6
 msgid ""
 "the system detected some new problems with your data.\n"
-"Please take some time to inspect them and solve the issues or mark them as "
-"ignored."
+"Please take some time to inspect them and solve the issues or mark them as ignored."
 msgstr ""
 "das System hat einige neue Probleme mit Ihren Daten entdeckt.\n"
-"Bitte nehmen Sie sich etwas Zeit, diese zu überprüfen und sie zu lösen oder "
-"als ignoriert zu markieren."
+"Bitte nehmen Sie sich etwas Zeit, diese zu überprüfen und sie zu lösen oder als ignoriert zu markieren."
 
 #: aleksis/core/templates/templated_email/data_checks.email:15
 msgid ""
 "\n"
 "   the system detected some new problems with your data.\n"
-"   Please take some time to inspect them and solve the issues or mark them "
-"as ignored.\n"
+"   Please take some time to inspect them and solve the issues or mark them as ignored.\n"
 "  "
 msgstr ""
 "\n"
 "   das System hat einige neue Probleme mit Ihren Daten entdeckt.\n"
-"Bitte nehmen Sie sich etwas Zeit, diese zu überprüfen und sie zu lösen oder "
-"als ignoriert zu markieren.\n"
+"Bitte nehmen Sie sich etwas Zeit, diese zu überprüfen und sie zu lösen oder als ignoriert zu markieren.\n"
 "  "
 
 #: aleksis/core/templates/templated_email/data_checks.email:23
@@ -2715,12 +2658,8 @@ msgstr "Hallo %(person)s"
 #: aleksis/core/templates/templated_email/invitation.email:9
 #: aleksis/core/templates/templated_email/invitation.email:18
 #, python-format
-msgid ""
-"you have been invited to register on %(site)s. If you would like to accept "
-"this invitation, please click on the following link:"
-msgstr ""
-"Sie wurden eingeladen, sich auf %(site)s zu registrieren. Wenn Sie diese "
-"Einladung annehmen möchten, klicken Sie bitte auf folgenden Link:"
+msgid "you have been invited to register on %(site)s. If you would like to accept this invitation, please click on the following link:"
+msgstr "Sie wurden eingeladen, sich auf %(site)s zu registrieren. Wenn Sie diese Einladung annehmen möchten, klicken Sie bitte auf folgenden Link:"
 
 #: aleksis/core/templates/templated_email/notification.email:4
 msgid "New notification for"
@@ -2794,21 +2733,16 @@ msgid ""
 "\n"
 "        Backup tokens can be used when your primary and backup\n"
 "        phone numbers aren't available. The backup tokens below can be used\n"
-"        for login verification. If you've used up all your backup tokens, "
-"you\n"
-"        can generate a new set of backup tokens. Only the backup tokens "
-"shown\n"
+"        for login verification. If you've used up all your backup tokens, you\n"
+"        can generate a new set of backup tokens. Only the backup tokens shown\n"
 "        below will be valid.\n"
 "      "
 msgstr ""
 "\n"
 "        Backup-Token können genutzt werden, wenn Ihre primären und Backup-\n"
-"        Telefonnummern nicht verfügbar sind. Die Backup-Tokens unten können "
-"für\n"
-"        die Anmeldungsverifizierung genutzt werden. Wenn Sie alle Backup-"
-"Tokens genutzt haben,\n"
-"        müssen Sie neue generieren. Nur gültige Backup-Tokens werden "
-"angezeigt.\n"
+"        Telefonnummern nicht verfügbar sind. Die Backup-Tokens unten können für\n"
+"        die Anmeldungsverifizierung genutzt werden. Wenn Sie alle Backup-Tokens genutzt haben,\n"
+"        müssen Sie neue generieren. Nur gültige Backup-Tokens werden angezeigt.\n"
 "      "
 
 #: aleksis/core/templates/two_factor/core/backup_tokens.html:33
@@ -2858,9 +2792,7 @@ msgstr ""
 
 #: aleksis/core/templates/two_factor/core/login.html:51
 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:58
 msgid "Please login to see this page."
@@ -2869,8 +2801,7 @@ msgstr "Bitte melden Sie sich an, um diese Seite zu sehen."
 #: aleksis/core/templates/two_factor/core/login.html:69
 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 ""
@@ -2882,8 +2813,7 @@ msgstr ""
 #: aleksis/core/templates/two_factor/core/login.html:74
 msgid ""
 "\n"
-"                        We sent you a text message, please enter the code we "
-"sent.\n"
+"                        We sent you a text message, please enter the code we sent.\n"
 "                      "
 msgstr ""
 "\n"
@@ -2894,8 +2824,7 @@ msgstr ""
 #: aleksis/core/templates/two_factor/core/login.html:78
 msgid ""
 "\n"
-"                        We sent you an email, please enter the code we "
-"sent.\n"
+"                        We sent you an email, please enter the code we sent.\n"
 "                      "
 msgstr ""
 "\n"
@@ -2906,20 +2835,17 @@ msgstr ""
 #: aleksis/core/templates/two_factor/core/login.html:82
 msgid ""
 "\n"
-"                        Please use your Webauthn-compatible device to "
-"authenticate.\n"
+"                        Please use your Webauthn-compatible device to authenticate.\n"
 "                      "
 msgstr ""
 "\n"
-"                        Bitte nutzen Sie Ihr Webauthn-kompatibles Gerät, um "
-"sich zu authentifizieren.\n"
+"                        Bitte nutzen Sie Ihr Webauthn-kompatibles Gerät, um sich zu authentifizieren.\n"
 "                      "
 
 #: aleksis/core/templates/two_factor/core/login.html:86
 msgid ""
 "\n"
-"                        Please enter the code generated by your code "
-"generator.\n"
+"                        Please enter the code generated by your code generator.\n"
 "                      "
 msgstr ""
 "\n"
@@ -2930,19 +2856,14 @@ msgstr ""
 #: aleksis/core/templates/two_factor/core/login.html:91
 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"
 "                    "
 
@@ -2973,13 +2894,11 @@ msgstr "Zugriff verwehrt"
 #: aleksis/core/templates/two_factor/core/otp_required.html:10
 msgid ""
 "The page you requested enforces users to verify using\n"
-"          two-factor authentication for security reasons. You need to enable "
-"this\n"
+"          two-factor authentication for security reasons. You need to enable this\n"
 "          security feature 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 die Seite aufzurufen."
 
 #: aleksis/core/templates/two_factor/core/otp_required.html:16
@@ -3023,8 +2942,7 @@ msgid ""
 msgstr ""
 "\n"
 "        Sie sind dabei, Ihre Kontosicherheit auf das\n"
-"       nächste Level zu erhöhen. Bitte folgen Sie den Schritten im "
-"Assistenten, um eine\n"
+"       nächste Level zu erhöhen. Bitte folgen Sie den Schritten im Assistenten, um eine\n"
 "       Zwei-Faktor-Authentifizierungs-Methode zu Ihrem Konto hinzuzufügen.\n"
 "      "
 
@@ -3035,22 +2953,19 @@ 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:27
 msgid ""
 "\n"
 "        To start using a code 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"
-"        Um mit dem Code-Generator zu starten, benutzen Sie bitte Ihre "
-"favorisierte\n"
+"        Um mit dem Code-Generator zu starten, benutzen Sie bitte Ihre favorisierte\n"
 "App für Zwei-Faktor-Authentifizierung (TOTP), um diesen QR-Code zu scannen.\n"
 "Dann geben Sie den in der App angezeigten Code ein:\n"
 "      "
@@ -3064,8 +2979,7 @@ msgid ""
 msgstr ""
 "\n"
 "        Bitte geben Sie die Telefonnummer des Gerätes an,\n"
-"        an die die SMS-Nachrichten geschickt werden sollen. Diese Nummer "
-"wird im nächsten Schritt überprüft.\n"
+"        an die die SMS-Nachrichten geschickt werden sollen. Diese Nummer wird im nächsten Schritt überprüft.\n"
 "      "
 
 #: aleksis/core/templates/two_factor/core/setup.html:45
@@ -3087,20 +3001,17 @@ msgid ""
 "      "
 msgstr ""
 "\n"
-"        Wir haben Ihnen eine E-Mail geschickt, bitte geben Sie den Code ein, "
-"den wir geschickt haben.\n"
+"        Wir haben Ihnen eine E-Mail geschickt, bitte geben Sie den Code ein, den wir geschickt haben.\n"
 "      "
 
 #: aleksis/core/templates/two_factor/core/setup.html:60
 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:66
@@ -3110,30 +3021,23 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Wir haben Ihnen eine SMS geschickt, bitte geben Sie den Code "
-"ein, den wir geschickt haben.\n"
+"            Wir haben Ihnen eine SMS geschickt, bitte geben Sie den Code ein, den wir geschickt haben.\n"
 "          "
 
 #: aleksis/core/templates/two_factor/core/setup.html:73
 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:83
@@ -3158,13 +3062,11 @@ msgstr "Zwei-Faktor-Authentifizierung erfolgreich aktiviert"
 #: aleksis/core/templates/two_factor/core/setup_complete.html:13
 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:22
@@ -3181,17 +3083,14 @@ msgstr "Backup-Codes generieren"
 msgid ""
 "\n"
 "          However, it might happen that you don't have access to\n"
-"          your primary device. To enable account recovery, generate backup "
-"codes\n"
+"          your primary device. To enable account recovery, generate backup codes\n"
 "          or add other authentication methods.\n"
 "        "
 msgstr ""
 "\n"
-"          Es kann passieren, dass Sie keinen Zugriff auf Ihr primäres Gerät "
-"haben. \n"
+"          Es kann passieren, dass Sie keinen Zugriff auf Ihr primäres Gerät haben. \n"
 "Um die Konto-Wiederherstellung zu aktivieren,\n"
-"generieren Sie Backup-Codes oder fügen Sie eine andere Authentifizierungs-"
-"Methode hinzu.\n"
+"generieren Sie Backup-Codes oder fügen Sie eine andere Authentifizierungs-Methode hinzu.\n"
 "        "
 
 #: aleksis/core/templates/two_factor/core/setup_complete.html:48
@@ -3204,12 +3103,8 @@ msgid "Disable Two-Factor Authentication"
 msgstr "Zwei-Faktor-Authentifizierung deaktiveren"
 
 #: aleksis/core/templates/two_factor/profile/disable.html:12
-msgid ""
-"You are about to disable two-factor authentication. This weakens your "
-"account security, are you sure?"
-msgstr ""
-"Sie sind dabei, Zwei-Faktor-Authentifizierung zu deaktivieren. Das "
-"verschlechtert Ihre Kontosicherheit. Sind Sie sicher?"
+msgid "You are about to disable two-factor authentication. This weakens your account security, are you sure?"
+msgstr "Sie sind dabei, Zwei-Faktor-Authentifizierung zu deaktivieren. Das verschlechtert Ihre Kontosicherheit. Sind Sie sicher?"
 
 #: aleksis/core/templates/two_factor/profile/disable.html:26
 msgid "Disable"
@@ -3243,177 +3138,172 @@ msgstr "Es ist ein Fehler beim Generieren der PDF-Datei aufgetreten."
 msgid "Download PDF"
 msgstr "PDF herunterladen"
 
-#: aleksis/core/views.py:285
-msgid "The school term has been created."
-msgstr "Das Schuljahr wurde erstellt."
-
-#: aleksis/core/views.py:297
-msgid "The school term has been saved."
-msgstr "Das Schuljahr wurde gespeichert."
-
-#: aleksis/core/views.py:401
+#: aleksis/core/views.py:371
 msgid "The child groups were successfully saved."
 msgstr "Die Untergruppen wurden gespeichert."
 
-#: aleksis/core/views.py:420 aleksis/core/views.py:430
+#: aleksis/core/views.py:390 aleksis/core/views.py:400
 msgid "The person has been saved."
 msgstr "Die Person wurde gespeichert."
 
-#: aleksis/core/views.py:480
+#: aleksis/core/views.py:450
 msgid "The group has been saved."
 msgstr "Die Gruppe wurde gespeichert."
 
-#: aleksis/core/views.py:528
+#: aleksis/core/views.py:498
 msgid "Maintenance mode was turned on successfully."
 msgstr "Der Wartungsmodus wurde erfolgreich angeschaltet."
 
-#: aleksis/core/views.py:530
+#: aleksis/core/views.py:500
 msgid "Maintenance mode was turned off successfully."
 msgstr "Der Wartungsmodus wurde erfolgreich ausgeschaltet."
 
-#: aleksis/core/views.py:588
+#: aleksis/core/views.py:558
 msgid "The announcement has been saved."
 msgstr "Die Ankündigung wurde gespeichert."
 
-#: aleksis/core/views.py:604
+#: aleksis/core/views.py:574
 msgid "The announcement has been deleted."
 msgstr "Ankündigung wurde gelöscht."
 
-#: aleksis/core/views.py:673
+#: aleksis/core/views.py:643
 msgid "The requested preference registry does not exist"
 msgstr "Das angeforderte Einstellungsregister existiert nicht"
 
-#: aleksis/core/views.py:692
+#: aleksis/core/views.py:662
 msgid "The preferences have been saved successfully."
 msgstr "Die Einstellungen wurde gespeichert."
 
-#: aleksis/core/views.py:716
+#: aleksis/core/views.py:686
 msgid "The person has been deleted."
 msgstr "Die Person wurde gelöscht."
 
-#: aleksis/core/views.py:730
+#: aleksis/core/views.py:700
 msgid "The group has been deleted."
 msgstr "Die Gruppe wurde gelöscht."
 
-#: aleksis/core/views.py:762
+#: aleksis/core/views.py:732
 msgid "The additional field has been saved."
 msgstr "Das zusätzliche Feld wurde gespeichert."
 
-#: aleksis/core/views.py:797
+#: aleksis/core/views.py:767
 msgid "The additional field has been deleted."
 msgstr "Das zusätzliche Feld wurde gelöscht."
 
-#: aleksis/core/views.py:822
+#: aleksis/core/views.py:792
 msgid "The group type has been saved."
 msgstr "Der Gruppentyp wurde gespeichert."
 
-#: aleksis/core/views.py:853
+#: aleksis/core/views.py:823
 msgid "The group type has been deleted."
 msgstr "Der Gruppentyp wurde gelöscht."
 
-#: aleksis/core/views.py:888
+#: aleksis/core/views.py:858
 msgid "Progress: Run data checks"
 msgstr "Fortschritt: Datenprüfungen ausführen"
 
-#: aleksis/core/views.py:889
+#: aleksis/core/views.py:859
 msgid "Run data checks …"
 msgstr "Datenprüfungen laufen …"
 
-#: aleksis/core/views.py:890
+#: aleksis/core/views.py:860
 msgid "The data checks were run successfully."
 msgstr "Die Datenprüfungen wurden erfolgreich ausgeführt."
 
-#: aleksis/core/views.py:891
+#: aleksis/core/views.py:861
 msgid "There was a problem while running data checks."
 msgstr "Es gab ein Problem beim Ausführen der Datenprüfungen."
 
-#: aleksis/core/views.py:908
+#: aleksis/core/views.py:878
 #, 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:918
+#: aleksis/core/views.py:888
 msgid "The requested solve option does not exist"
 msgstr "Die angeforderte Lösungsoption existiert nicht"
 
-#: aleksis/core/views.py:951
+#: aleksis/core/views.py:921
 msgid "The dashboard widget has been saved."
 msgstr "Das Dashboard-Widget wurde gespeichert."
 
-#: aleksis/core/views.py:981
+#: aleksis/core/views.py:951
 msgid "The dashboard widget has been created."
 msgstr "Das Dashboard-Widget wurde erstellt."
 
-#: aleksis/core/views.py:991
+#: aleksis/core/views.py:961
 msgid "The dashboard widget has been deleted."
 msgstr "Das Dashboard-Widget wurde gelöscht."
 
-#: aleksis/core/views.py:1063
+#: aleksis/core/views.py:1033
 msgid "Your dashboard configuration has been saved successfully."
 msgstr "Ihre Dashboardkonfiguration wurde erfolgreich gespeichert."
 
-#: aleksis/core/views.py:1065
+#: aleksis/core/views.py:1035
 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:1136
+#: aleksis/core/views.py:1106
 #, 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:1203
 msgid "We have successfully assigned the permissions."
 msgstr "Wir haben die Berechtigungen erfolgreich zugewiesen."
 
-#: aleksis/core/views.py:1243
+#: aleksis/core/views.py:1213
 msgid "The global user permission has been deleted."
 msgstr "Die globale Benutzerberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1253
+#: aleksis/core/views.py:1223
 msgid "The global group permission has been deleted."
 msgstr "Die globale Gruppenberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1263
+#: aleksis/core/views.py:1233
 msgid "The object user permission has been deleted."
 msgstr "Die Objekt-Benutzerberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1273
+#: aleksis/core/views.py:1243
 msgid "The object group permission has been deleted."
 msgstr "Die Objekt-Gruppenberechtigung wurde gelöscht."
 
-#: aleksis/core/views.py:1382
-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:1352
+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:1389
+#: aleksis/core/views.py:1359
 msgid "The third-party account has been successfully disconnected."
 msgstr "Das Drittanbieter-Konto wurde erfolgreich getrennt."
 
-#: aleksis/core/views.py:1465
-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:1435
+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:1476
+#: aleksis/core/views.py:1446
 msgid "Person was already invited."
 msgstr "Person wurde bereits eingeladen."
 
+#~ msgid "Country for phone number parsing"
+#~ msgstr "Land für das Einlesen von Telefonnummern"
+
+#~ msgid "Create school term"
+#~ msgstr "Schuljahr erstellen"
+
+#~ msgid "Edit school term"
+#~ msgstr "Schuljahr bearbeiten"
+
+#~ msgid "The school term has been created."
+#~ msgstr "Das Schuljahr wurde erstellt."
+
+#~ msgid "The school term has been saved."
+#~ msgstr "Das Schuljahr wurde gespeichert."
+
 #~ msgid "Revoke access"
 #~ msgstr "Zugriff zurückziehen"
 
 #~ 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?"
 
 #~ msgid "Revoke"
 #~ msgstr "Zurückziehen"
@@ -3436,14 +3326,11 @@ msgstr "Person wurde bereits eingeladen."
 
 #~ 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"
 #~ "          "
 
 #~ msgid ""
@@ -3452,8 +3339,7 @@ msgstr "Person wurde bereits eingeladen."
 #~ "          security."
 #~ msgstr ""
 #~ "Die Zwei-Faktor-Authentifizierung ist nicht für Ihren Account aktiviert.\n"
-#~ "          Aktivieren Sie Zwei-Faktor-Authentifizierung für eine "
-#~ "verbesserte\n"
+#~ "          Aktivieren Sie Zwei-Faktor-Authentifizierung für eine verbesserte\n"
 #~ "          Accountsicherheit."
 
 #~ msgid "Add Phone Number"
@@ -3480,8 +3366,7 @@ msgstr "Person wurde bereits eingeladen."
 #~ "        send backup tokens to the phone numbers listed below."
 #~ msgstr ""
 #~ "Wenn Ihre primäre Methode nicht verfügbar ist, sind wir in der Lage,\n"
-#~ "        Backup-Tokens zu den unten aufgelisteten Telefonnummern zu "
-#~ "schicken."
+#~ "        Backup-Tokens zu den unten aufgelisteten Telefonnummern zu schicken."
 
 #~ msgid "Unregister"
 #~ msgstr "Abmelden"
@@ -3522,8 +3407,7 @@ msgstr "Person wurde bereits eingeladen."
 #~ 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"
 #~ "      "
 
 #~ msgid ""
@@ -3534,31 +3418,20 @@ msgstr "Person wurde bereits eingeladen."
 #~ "      "
 #~ msgstr ""
 #~ "\n"
-#~ "        Die Zwei-Faktor-Authentifizierung ist nicht für Ihren Account "
-#~ "aktiviert.\n"
-#~ "          Aktivieren Sie Zwei-Faktor-Authentifizierung für eine "
-#~ "verbesserte\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"
 #~ "      "
 
-#~ msgid "Birthday Calendar"
-#~ msgstr "Geburtstagskalender"
-
 #~ msgid "A Calendar of Birthdays"
 #~ msgstr "Ein Kalender mit Geburtstagen"
 
-#, python-format
-#~ msgid "%(name)s's birthday"
-#~ msgstr "%(name)ss Geburtstag"
-
 #, python-format
 #~ msgid "%(name)s was born on %(birthday)s"
 #~ msgstr "%(name)s wurde am %(birthday)s geboren"
 
 #~ 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."
 
 #~ msgid "Dashboard"
 #~ msgstr "Dashboard"
@@ -3596,9 +3469,6 @@ msgstr "Person wurde bereits eingeladen."
 #~ msgid "Third-party accounts"
 #~ msgstr "Drittanbieter-Konten"
 
-#~ msgid "Calendar Feeds"
-#~ msgstr "Kalender-Feeds"
-
 #~ msgid "Logout"
 #~ msgstr "Abmelden"
 
@@ -3649,14 +3519,8 @@ msgstr "Person wurde bereits eingeladen."
 #~ msgid "ICal Feeds"
 #~ msgstr "iCal-Feeds"
 
-#~ 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."
+#~ 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."
 
 #~ msgid "Your iCal URLs"
 #~ msgstr "Deine iCal-URLs"
@@ -3681,30 +3545,24 @@ msgstr "Person wurde bereits eingeladen."
 
 #~ 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"
 #~ "            "
 
 #~ 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"
 #~ "            "
 
 #~ msgid "Website of AlekSIS"
@@ -3718,18 +3576,14 @@ msgstr "Person wurde bereits eingeladen."
 
 #~ 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"
 #~ "            "
 
@@ -3747,24 +3601,20 @@ msgstr "Person wurde bereits eingeladen."
 
 #~ 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"
 #~ "            "
 
 #~ 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"
 #~ "              "
 
 #~ msgid "Language"
@@ -3775,14 +3625,12 @@ msgstr "Person wurde bereits eingeladen."
 
 #~ 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"
 #~ "          "
 
@@ -3794,10 +3642,8 @@ msgstr "Person wurde bereits eingeladen."
 #~ "          "
 #~ 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"
 #~ "          "
 
@@ -3820,27 +3666,21 @@ msgstr "Person wurde bereits eingeladen."
 #~ msgstr "Erfolg!"
 
 #~ msgid "Please return to your application and enter this code:"
-#~ msgstr ""
-#~ "Bitte gehen Sie zurück in Ihre Anwendung und geben Sie diesen Code ein:"
+#~ msgstr "Bitte gehen Sie zurück in Ihre Anwendung und geben Sie diesen Code ein:"
 
 #~ msgid "No internet connection."
 #~ msgstr "Keine Internetverbindung."
 
 #~ msgid ""
 #~ "\n"
-#~ "      There was an error accessing this page. You probably don't have an "
-#~ "internet connection. Check to see if your WiFi\n"
-#~ "      or mobile data is turned on and try again. If you think you are "
-#~ "connected, please contact the system\n"
+#~ "      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"
 #~ "    "
 
@@ -3936,8 +3776,7 @@ 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"
 #~ " "
@@ -3956,12 +3795,8 @@ 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."
@@ -3970,12 +3805,8 @@ 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"
@@ -3997,9 +3828,7 @@ 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"
@@ -4024,23 +3853,17 @@ 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"
@@ -4066,8 +3889,7 @@ 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"
@@ -4076,12 +3898,8 @@ 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."
@@ -4135,8 +3953,7 @@ 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"
 #~ "     "
 
@@ -4210,9 +4027,7 @@ 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 name"
diff --git a/aleksis/core/locale/fr/LC_MESSAGES/django.po b/aleksis/core/locale/fr/LC_MESSAGES/django.po
index 2b3c3874a..d1852c66e 100644
--- a/aleksis/core/locale/fr/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/fr/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: AlekSIS (School Information System) 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-05-09 18:40+0200\n"
+"POT-Creation-Date: 2023-07-23 13:39+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"
@@ -44,8 +44,8 @@ msgstr "Détails de contact"
 msgid "Home and mobile phone"
 msgstr ""
 
-#: aleksis/core/apps.py:166 aleksis/core/forms.py:221
-#: aleksis/core/models.py:495 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:166 aleksis/core/forms.py:231
+#: aleksis/core/models.py:517 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
 #, fuzzy
 #| msgid "Group"
@@ -108,184 +108,184 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:721
+#: aleksis/core/filters.py:113 aleksis/core/models.py:743
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:494
+#: aleksis/core/filters.py:135 aleksis/core/models.py:516
 msgid "Group"
 msgstr "groupe"
 
-#: aleksis/core/forms.py:51 aleksis/core/forms.py:582
+#: aleksis/core/forms.py:50 aleksis/core/forms.py:591
 msgid "Base data"
 msgstr ""
 
-#: aleksis/core/forms.py:56 aleksis/core/tables.py:47
+#: aleksis/core/forms.py:55 aleksis/core/tables.py:29
 msgid "Address"
 msgstr ""
 
-#: aleksis/core/forms.py:57 aleksis/core/forms.py:591
+#: aleksis/core/forms.py:56 aleksis/core/forms.py:600
 #, fuzzy
 #| msgid "Contact details"
 msgid "Contact data"
 msgstr "Détails de contact"
 
-#: aleksis/core/forms.py:59
+#: aleksis/core/forms.py:58
 #, fuzzy
 #| msgid "Contact details"
 msgid "Advanced personal data"
 msgstr "Détails de contact"
 
-#: aleksis/core/forms.py:107
+#: aleksis/core/forms.py:106
 msgid "New user"
 msgstr ""
 
-#: aleksis/core/forms.py:107
+#: aleksis/core/forms.py:106
 msgid "Create a new account"
 msgstr ""
 
-#: aleksis/core/forms.py:133
+#: aleksis/core/forms.py:132
 msgid "You cannot set a new username when also selecting an existing user."
 msgstr ""
 
-#: aleksis/core/forms.py:137
+#: aleksis/core/forms.py:136
 msgid "This username is already in use."
 msgstr "Cet nom est deja en utilisation."
 
-#: aleksis/core/forms.py:154 aleksis/core/models.py:142
+#: aleksis/core/forms.py:153 aleksis/core/models.py:154
 msgid "School term"
 msgstr ""
 
-#: aleksis/core/forms.py:155
+#: aleksis/core/forms.py:154
 #, fuzzy
 #| msgid "Contact details"
 msgid "Common data"
 msgstr "Détails de contact"
 
-#: aleksis/core/forms.py:156 aleksis/core/forms.py:208
-#: aleksis/core/models.py:165 aleksis/core/templates/core/person/list.html:8
+#: aleksis/core/forms.py:155 aleksis/core/forms.py:218
+#: aleksis/core/models.py:177 aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 #, fuzzy
 #| msgid "Person"
 msgid "Persons"
 msgstr "Personne"
 
-#: aleksis/core/forms.py:157 aleksis/core/forms.py:593
+#: aleksis/core/forms.py:156 aleksis/core/forms.py:602
 #, fuzzy
 #| msgid "Contact details"
 msgid "Additional data"
 msgstr "Détails de contact"
 
-#: aleksis/core/forms.py:158 aleksis/core/models.py:218
-#: aleksis/core/models.py:547 aleksis/core/tables.py:46
+#: aleksis/core/forms.py:157 aleksis/core/models.py:230
+#: aleksis/core/models.py:569 aleksis/core/tables.py:28
 msgid "Photo"
 msgstr ""
 
-#: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:85
+#: aleksis/core/forms.py:210 aleksis/core/forms.py:213
+#: aleksis/core/models.py:97
 msgid "Date"
 msgstr "Date"
 
-#: aleksis/core/forms.py:201 aleksis/core/forms.py:204
-#: aleksis/core/models.py:93
+#: aleksis/core/forms.py:211 aleksis/core/forms.py:214
+#: aleksis/core/models.py:105
 msgid "Time"
 msgstr ""
 
-#: aleksis/core/forms.py:234
+#: aleksis/core/forms.py:244
 msgid "From when until when should the announcement be displayed?"
 msgstr ""
 
-#: aleksis/core/forms.py:237
+#: aleksis/core/forms.py:247
 msgid "Who should see the announcement?"
 msgstr ""
 
-#: aleksis/core/forms.py:238
+#: aleksis/core/forms.py:248
 msgid "Write your announcement:"
 msgstr ""
 
-#: aleksis/core/forms.py:277
+#: aleksis/core/forms.py:287
 msgid "You are not allowed to create announcements which are only valid in the past."
 msgstr ""
 
-#: aleksis/core/forms.py:281
+#: aleksis/core/forms.py:291
 msgid "The from date and time must be earlier then the until date and time."
 msgstr ""
 
-#: aleksis/core/forms.py:290
+#: aleksis/core/forms.py:300
 msgid "You need at least one recipient."
 msgstr ""
 
-#: aleksis/core/forms.py:399
+#: aleksis/core/forms.py:408
 msgid "Invitation code"
 msgstr ""
 
-#: aleksis/core/forms.py:400
+#: aleksis/core/forms.py:409
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:193
+#: aleksis/core/forms.py:428 aleksis/core/models.py:205
 msgid "First name"
 msgstr "Prénom"
 
-#: aleksis/core/forms.py:420 aleksis/core/models.py:194
+#: aleksis/core/forms.py:429 aleksis/core/models.py:206
 msgid "Last name"
 msgstr "Nom de famille"
 
-#: aleksis/core/forms.py:429
+#: aleksis/core/forms.py:438
 msgid "A person is using this e-mail address"
 msgstr ""
 
-#: aleksis/core/forms.py:457
+#: aleksis/core/forms.py:466
 msgid "Who should get the permission?"
 msgstr ""
 
-#: aleksis/core/forms.py:458
+#: aleksis/core/forms.py:467
 msgid "On what?"
 msgstr ""
 
-#: aleksis/core/forms.py:484
+#: aleksis/core/forms.py:493
 msgid "Select objects which the permission should be granted for:"
 msgstr ""
 
-#: aleksis/core/forms.py:487
+#: aleksis/core/forms.py:496
 msgid "Grant the permission for all objects"
 msgstr ""
 
-#: aleksis/core/forms.py:495
+#: aleksis/core/forms.py:504
 msgid "You must select at least one group or person which should get the permission."
 msgstr ""
 
-#: aleksis/core/forms.py:500
+#: aleksis/core/forms.py:509
 msgid "You must grant the permission to all objects or to specific objects."
 msgstr ""
 
-#: aleksis/core/forms.py:587
+#: aleksis/core/forms.py:596
 msgid "Address data"
 msgstr ""
 
-#: aleksis/core/forms.py:599
+#: aleksis/core/forms.py:608
 #, fuzzy
 #| msgid "Contact details"
 msgid "Account data"
 msgstr "Détails de contact"
 
-#: aleksis/core/forms.py:606
+#: aleksis/core/forms.py:615
 msgid "Password"
 msgstr ""
 
-#: aleksis/core/forms.py:609
+#: aleksis/core/forms.py:618
 msgid "Password (again)"
 msgstr ""
 
-#: aleksis/core/forms.py:762
+#: aleksis/core/forms.py:771
 msgid "The selected action does not exist."
 msgstr ""
 
-#: aleksis/core/forms.py:773
+#: aleksis/core/forms.py:782
 msgid "You do not have permission to run {} on all selected objects."
 msgstr ""
 
-#: aleksis/core/forms.py:829
+#: aleksis/core/forms.py:838
 msgid "No valid selection."
 msgstr ""
 
@@ -309,498 +309,497 @@ msgstr ""
 msgid "No backup result found!"
 msgstr ""
 
-#: aleksis/core/mixins.py:511
+#: aleksis/core/mixins.py:539
 msgid "Linked school term"
 msgstr ""
 
-#: aleksis/core/models.py:83
+#: aleksis/core/models.py:95
 msgid "Boolean (Yes/No)"
 msgstr ""
 
-#: aleksis/core/models.py:84
+#: aleksis/core/models.py:96
 msgid "Text (one line)"
 msgstr ""
 
-#: aleksis/core/models.py:86
+#: aleksis/core/models.py:98
 msgid "Date and time"
 msgstr ""
 
-#: aleksis/core/models.py:87
+#: aleksis/core/models.py:99
 msgid "Decimal number"
 msgstr ""
 
-#: aleksis/core/models.py:88 aleksis/core/models.py:211
+#: aleksis/core/models.py:100 aleksis/core/models.py:223
 msgid "E-mail address"
 msgstr ""
 
-#: aleksis/core/models.py:89
+#: aleksis/core/models.py:101
 msgid "Integer"
 msgstr ""
 
-#: aleksis/core/models.py:90
+#: aleksis/core/models.py:102
 msgid "IP address"
 msgstr ""
 
-#: aleksis/core/models.py:91
+#: aleksis/core/models.py:103
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr ""
 
-#: aleksis/core/models.py:92
+#: aleksis/core/models.py:104
 msgid "Text (multi-line)"
 msgstr ""
 
-#: aleksis/core/models.py:94
+#: aleksis/core/models.py:106
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:106 aleksis/core/models.py:1078
+#: aleksis/core/models.py:118 aleksis/core/models.py:1100
+#: aleksis/core/models.py:1729
 msgid "Name"
 msgstr ""
 
-#: aleksis/core/models.py:108
+#: aleksis/core/models.py:120 aleksis/core/models.py:1532
 #, fuzzy
 #| msgid "Contact details"
 msgid "Start date"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:109
+#: aleksis/core/models.py:121 aleksis/core/models.py:1533
 msgid "End date"
 msgstr ""
 
-#: aleksis/core/models.py:128
+#: aleksis/core/models.py:140 aleksis/core/schema/school_term.py:48
 msgid "The start date must be earlier than the end date."
 msgstr ""
 
-#: aleksis/core/models.py:135
+#: aleksis/core/models.py:147 aleksis/core/schema/school_term.py:53
 msgid "There is already a school term for this time or a part of this time."
 msgstr ""
 
-#: aleksis/core/models.py:143
-#: aleksis/core/templates/core/school_term/list.html:8
-#: aleksis/core/templates/core/school_term/list.html:9
+#: aleksis/core/models.py:155
 msgid "School terms"
 msgstr ""
 
-#: aleksis/core/models.py:164 aleksis/core/models.py:1027
+#: aleksis/core/models.py:176 aleksis/core/models.py:1049
 msgid "Person"
 msgstr "Personne"
 
-#: aleksis/core/models.py:167
+#: aleksis/core/models.py:179
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view address"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:168
+#: aleksis/core/models.py:180
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view contact details"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:169
+#: aleksis/core/models.py:181
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view photo"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:182
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view avatar image"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:171
+#: aleksis/core/models.py:183
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view persons groups"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:172
+#: aleksis/core/models.py:184
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view personal details"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "female"
 msgstr ""
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "male"
 msgstr ""
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "other"
 msgstr ""
 
-#: aleksis/core/models.py:190 aleksis/core/models.py:1382
+#: aleksis/core/models.py:202 aleksis/core/models.py:1404
 msgid "Linked user"
 msgstr ""
 
-#: aleksis/core/models.py:196
+#: aleksis/core/models.py:208
 msgid "Additional name(s)"
 msgstr ""
 
-#: aleksis/core/models.py:200 aleksis/core/models.py:512
-#: aleksis/core/models.py:1468
+#: aleksis/core/models.py:212 aleksis/core/models.py:534
+#: aleksis/core/models.py:1490
 #, fuzzy
 #| msgid "First name"
 msgid "Short name"
 msgstr "Prénom"
 
-#: aleksis/core/models.py:203
+#: aleksis/core/models.py:215
 msgid "Street"
 msgstr ""
 
-#: aleksis/core/models.py:204
+#: aleksis/core/models.py:216
 msgid "Street number"
 msgstr ""
 
-#: aleksis/core/models.py:205
+#: aleksis/core/models.py:217
 msgid "Postal code"
 msgstr ""
 
-#: aleksis/core/models.py:206
+#: aleksis/core/models.py:218
 msgid "Place"
 msgstr ""
 
-#: aleksis/core/models.py:208
+#: aleksis/core/models.py:220
 msgid "Home phone"
 msgstr ""
 
-#: aleksis/core/models.py:209
+#: aleksis/core/models.py:221
 msgid "Mobile phone"
 msgstr ""
 
-#: aleksis/core/models.py:213
+#: aleksis/core/models.py:225
 msgid "Date of birth"
 msgstr "Date d'anniversaire"
 
-#: aleksis/core/models.py:214
+#: aleksis/core/models.py:226
 #, fuzzy
 #| msgid "Date of birth"
 msgid "Place of birth"
 msgstr "Date d'anniversaire"
 
-#: aleksis/core/models.py:215
+#: aleksis/core/models.py:227
 msgid "Sex"
 msgstr "Sexe"
 
-#: aleksis/core/models.py:222 aleksis/core/models.py:551
+#: aleksis/core/models.py:234 aleksis/core/models.py:573
 msgid "This is an official photo, used for official documents and for internal use cases."
 msgstr ""
 
-#: aleksis/core/models.py:227 aleksis/core/models.py:555
+#: aleksis/core/models.py:239 aleksis/core/models.py:577
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:230 aleksis/core/models.py:558
+#: aleksis/core/models.py:242 aleksis/core/models.py:580
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:235
+#: aleksis/core/models.py:247
 msgid "Guardians / Parents"
 msgstr ""
 
-#: aleksis/core/models.py:242
+#: aleksis/core/models.py:254
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:245 aleksis/core/models.py:725
-#: aleksis/core/models.py:749 aleksis/core/models.py:844
-#: aleksis/core/models.py:1113
+#: aleksis/core/models.py:257 aleksis/core/models.py:747
+#: aleksis/core/models.py:771 aleksis/core/models.py:866
+#: aleksis/core/models.py:1135
 msgid "Description"
 msgstr "Description"
 
-#: aleksis/core/models.py:465
+#: aleksis/core/models.py:487
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:467
+#: aleksis/core/models.py:489
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:469
+#: aleksis/core/models.py:491
 msgid "Required"
 msgstr ""
 
-#: aleksis/core/models.py:470
+#: aleksis/core/models.py:492
 #, fuzzy
 #| msgid "Description"
 msgid "Help text / description"
 msgstr "Description"
 
-#: aleksis/core/models.py:476
+#: aleksis/core/models.py:498
 msgid "Addtitional field for groups"
 msgstr ""
 
-#: aleksis/core/models.py:477
+#: aleksis/core/models.py:499
 msgid "Addtitional fields for groups"
 msgstr ""
 
-#: aleksis/core/models.py:497
+#: aleksis/core/models.py:519
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:498
+#: aleksis/core/models.py:520
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view statistics about group."
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:510 aleksis/core/models.py:1469
+#: aleksis/core/models.py:532 aleksis/core/models.py:1491
 #, fuzzy
 #| msgid "Last name"
 msgid "Long name"
 msgstr "Nom de famille"
 
-#: aleksis/core/models.py:520 aleksis/core/templates/core/group/full.html:105
+#: aleksis/core/models.py:542 aleksis/core/templates/core/group/full.html:105
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:523 aleksis/core/templates/core/group/full.html:102
+#: aleksis/core/models.py:545 aleksis/core/templates/core/group/full.html:102
 msgid "Owners"
 msgstr "Propriétaires"
 
-#: aleksis/core/models.py:530 aleksis/core/templates/core/group/full.html:59
+#: aleksis/core/models.py:552 aleksis/core/templates/core/group/full.html:59
 msgid "Parent groups"
 msgstr ""
 
-#: aleksis/core/models.py:538
+#: aleksis/core/models.py:560
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:543
+#: aleksis/core/models.py:565
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 msgid "Additional fields"
 msgstr ""
 
-#: aleksis/core/models.py:724 aleksis/core/models.py:748
-#: aleksis/core/models.py:843 aleksis/core/models.py:1299
+#: aleksis/core/models.py:746 aleksis/core/models.py:770
+#: aleksis/core/models.py:865 aleksis/core/models.py:1321
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
 
-#: aleksis/core/models.py:727
+#: aleksis/core/models.py:749
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:733
+#: aleksis/core/models.py:755
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:734
+#: aleksis/core/models.py:756
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:740
+#: aleksis/core/models.py:762
 msgid "Sender"
 msgstr ""
 
-#: aleksis/core/models.py:745
+#: aleksis/core/models.py:767
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:750 aleksis/core/models.py:1079
+#: aleksis/core/models.py:772 aleksis/core/models.py:1101
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:753 aleksis/core/models.py:1080
-#: aleksis/core/models.py:1429
+#: aleksis/core/models.py:775 aleksis/core/models.py:1102
+#: aleksis/core/models.py:1451
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
 
-#: aleksis/core/models.py:756
+#: aleksis/core/models.py:778
 msgid "Send notification at"
 msgstr ""
 
-#: aleksis/core/models.py:758
+#: aleksis/core/models.py:780
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:759
+#: aleksis/core/models.py:781
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:776
+#: aleksis/core/models.py:798
 msgid "Notification"
 msgstr ""
 
-#: aleksis/core/models.py:777 aleksis/core/preferences.py:29
+#: aleksis/core/models.py:799 aleksis/core/preferences.py:28
 msgid "Notifications"
 msgstr ""
 
-#: aleksis/core/models.py:845
+#: aleksis/core/models.py:867
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:848
+#: aleksis/core/models.py:870
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:851
+#: aleksis/core/models.py:873
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:876
+#: aleksis/core/models.py:898
 msgid "Announcement"
 msgstr ""
 
-#: aleksis/core/models.py:877
+#: aleksis/core/models.py:899
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
 msgstr ""
 
-#: aleksis/core/models.py:914
+#: aleksis/core/models.py:936
 msgid "Announcement recipient"
 msgstr ""
 
-#: aleksis/core/models.py:915
+#: aleksis/core/models.py:937
 msgid "Announcement recipients"
 msgstr ""
 
-#: aleksis/core/models.py:935
+#: aleksis/core/models.py:957
 msgid "Widget Title"
 msgstr ""
 
-#: aleksis/core/models.py:936
+#: aleksis/core/models.py:958
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:959
 msgid "Widget is broken"
 msgstr ""
 
-#: aleksis/core/models.py:940
+#: aleksis/core/models.py:962
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:941
+#: aleksis/core/models.py:963
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:946
+#: aleksis/core/models.py:968
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:947
+#: aleksis/core/models.py:969
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:952
+#: aleksis/core/models.py:974
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:953
+#: aleksis/core/models.py:975
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:958
+#: aleksis/core/models.py:980
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:959
+#: aleksis/core/models.py:981
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:990
+#: aleksis/core/models.py:1012
 msgid "Can edit default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:991
+#: aleksis/core/models.py:1013
 msgid "Dashboard Widget"
 msgstr ""
 
-#: aleksis/core/models.py:992
+#: aleksis/core/models.py:1014
 msgid "Dashboard Widgets"
 msgstr ""
 
-#: aleksis/core/models.py:998
+#: aleksis/core/models.py:1020
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:999
+#: aleksis/core/models.py:1021
 msgid "Icon URL"
 msgstr ""
 
-#: aleksis/core/models.py:1005
+#: aleksis/core/models.py:1027
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:1006
+#: aleksis/core/models.py:1028
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1012
+#: aleksis/core/models.py:1034
 msgid "Content"
 msgstr ""
 
-#: aleksis/core/models.py:1018
+#: aleksis/core/models.py:1040
 msgid "Static content widget"
 msgstr ""
 
-#: aleksis/core/models.py:1019
+#: aleksis/core/models.py:1041
 msgid "Static content widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1024
+#: aleksis/core/models.py:1046
 msgid "Dashboard widget"
 msgstr ""
 
-#: aleksis/core/models.py:1029
+#: aleksis/core/models.py:1051
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:1030
+#: aleksis/core/models.py:1052
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:1045
+#: aleksis/core/models.py:1067
 msgid "Dashboard widget order"
 msgstr ""
 
-#: aleksis/core/models.py:1046
+#: aleksis/core/models.py:1068
 msgid "Dashboard widget orders"
 msgstr ""
 
-#: aleksis/core/models.py:1052
+#: aleksis/core/models.py:1074
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1065
+#: aleksis/core/models.py:1087
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1066
+#: aleksis/core/models.py:1088
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1098
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1086
+#: aleksis/core/models.py:1108
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1087
+#: aleksis/core/models.py:1109
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1134
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1119 aleksis/core/templates/core/group/full.html:50
+#: aleksis/core/models.py:1141 aleksis/core/templates/core/group/full.html:50
 #, fuzzy
 #| msgid "Group"
 msgid "Group type"
 msgstr "Groupe"
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1142
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 #, fuzzy
@@ -808,248 +807,298 @@ msgstr "Groupe"
 msgid "Group types"
 msgstr "Groupe"
 
-#: aleksis/core/models.py:1133
+#: aleksis/core/models.py:1155
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view system status"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1134
+#: aleksis/core/models.py:1156
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1135
+#: aleksis/core/models.py:1157
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can impersonate"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1136
+#: aleksis/core/models.py:1158
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1137
+#: aleksis/core/models.py:1159
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1138
+#: aleksis/core/models.py:1160
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1139
+#: aleksis/core/models.py:1161
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1140
+#: aleksis/core/models.py:1162
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1141
+#: aleksis/core/models.py:1163
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can invite persons"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1199
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1185
+#: aleksis/core/models.py:1207
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1186
+#: aleksis/core/models.py:1208
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1199
+#: aleksis/core/models.py:1221
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1200
+#: aleksis/core/models.py:1222
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1202
+#: aleksis/core/models.py:1224
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1203
+#: aleksis/core/models.py:1225
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1210
+#: aleksis/core/models.py:1232
 #, fuzzy
 #| msgid "Contact details"
 msgid "E-Mail address"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1270
+#: aleksis/core/models.py:1292
 #, fuzzy
 #| msgid "Owners"
 msgid "Owner"
 msgstr "Propriétaires"
 
-#: aleksis/core/models.py:1274
+#: aleksis/core/models.py:1296
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1277
+#: aleksis/core/models.py:1299
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1280
+#: aleksis/core/models.py:1302
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1287
+#: aleksis/core/models.py:1309
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1288
+#: aleksis/core/models.py:1310
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1293
+#: aleksis/core/models.py:1315
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1296
+#: aleksis/core/models.py:1318
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1300
+#: aleksis/core/models.py:1322
 msgid "Back URL"
 msgstr ""
 
-#: aleksis/core/models.py:1301
+#: aleksis/core/models.py:1323
 msgid "Progress title"
 msgstr ""
 
-#: aleksis/core/models.py:1302
+#: aleksis/core/models.py:1324
 msgid "Error message"
 msgstr ""
 
-#: aleksis/core/models.py:1303
+#: aleksis/core/models.py:1325
 msgid "Success message"
 msgstr ""
 
-#: aleksis/core/models.py:1304
+#: aleksis/core/models.py:1326
 msgid "Redirect on success URL"
 msgstr ""
 
-#: aleksis/core/models.py:1306
+#: aleksis/core/models.py:1328
 #, fuzzy
 #| msgid "Contact details"
 msgid "Additional button title"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1308
+#: aleksis/core/models.py:1330
 #, fuzzy
 #| msgid "Contact details"
 msgid "Additional button URL"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1310
+#: aleksis/core/models.py:1332
 #, fuzzy
 #| msgid "Contact details"
 msgid "Additional button icon"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1312
+#: aleksis/core/models.py:1334
 msgid "Result fetched"
 msgstr ""
 
-#: aleksis/core/models.py:1337
+#: aleksis/core/models.py:1359
 msgid "Background task completed successfully"
 msgstr ""
 
-#: aleksis/core/models.py:1338
+#: aleksis/core/models.py:1360
 msgid "The background task '{}' has been completed successfully."
 msgstr ""
 
-#: aleksis/core/models.py:1344
+#: aleksis/core/models.py:1366
 msgid "Background task failed"
 msgstr ""
 
-#: aleksis/core/models.py:1345
+#: aleksis/core/models.py:1367
 msgid "The background task '{}' has failed."
 msgstr ""
 
-#: aleksis/core/models.py:1354
+#: aleksis/core/models.py:1376
 msgid "Background task"
 msgstr ""
 
-#: aleksis/core/models.py:1368
+#: aleksis/core/models.py:1390
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1369
+#: aleksis/core/models.py:1391
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1385
+#: aleksis/core/models.py:1407
 #, fuzzy
 #| msgid "Contact details"
 msgid "Additional attributes"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1423
+#: aleksis/core/models.py:1445
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1433
+#: aleksis/core/models.py:1455
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
-#: aleksis/core/models.py:1478
+#: aleksis/core/models.py:1500
 #, fuzzy
 #| msgid "Contact details"
 msgid "Can view room timetable"
 msgstr "Détails de contact"
 
-#: aleksis/core/models.py:1480
+#: aleksis/core/models.py:1502
 msgid "Room"
 msgstr ""
 
-#: aleksis/core/models.py:1481
+#: aleksis/core/models.py:1503
 msgid "Rooms"
 msgstr ""
 
-#: aleksis/core/preferences.py:25
+#: aleksis/core/models.py:1528
+#, fuzzy
+#| msgid "Contact details"
+msgid "Start date and time"
+msgstr "Détails de contact"
+
+#: aleksis/core/models.py:1530
+msgid "End date and time"
+msgstr ""
+
+#: aleksis/core/models.py:1531
+msgid "Timezone"
+msgstr ""
+
+#: aleksis/core/models.py:1534
+msgid "Recurrences"
+msgstr ""
+
+#: aleksis/core/models.py:1540
+msgid "Amended base event"
+msgstr ""
+
+#: aleksis/core/models.py:1643
+msgid "Calendar Event"
+msgstr ""
+
+#: aleksis/core/models.py:1644
+msgid "Calendar Events"
+msgstr ""
+
+#: aleksis/core/models.py:1670
+msgid "Birthdays"
+msgstr ""
+
+#: aleksis/core/models.py:1674
+msgid "{}'s birthday"
+msgstr ""
+
+#: aleksis/core/models.py:1713 aleksis/core/models.py:1775
+msgid "Holidays"
+msgstr ""
+
+#: aleksis/core/models.py:1774
+msgid "Holiday"
+msgstr ""
+
+#: aleksis/core/preferences.py:24
 msgid "General"
 msgstr ""
 
-#: aleksis/core/preferences.py:26
+#: aleksis/core/preferences.py:25
 msgid "School"
 msgstr ""
 
-#: aleksis/core/preferences.py:27
+#: aleksis/core/preferences.py:26
 msgid "Theme"
 msgstr ""
 
-#: aleksis/core/preferences.py:28
+#: aleksis/core/preferences.py:27
 msgid "Mail"
 msgstr ""
 
-#: aleksis/core/preferences.py:30
+#: aleksis/core/preferences.py:29
 msgid "Footer"
 msgstr ""
 
-#: aleksis/core/preferences.py:31
+#: aleksis/core/preferences.py:30
 #, fuzzy
 #| msgid "Contact details"
 msgid "Accounts"
 msgstr "Détails de contact"
 
-#: aleksis/core/preferences.py:32
+#: aleksis/core/preferences.py:31
 msgid "Authentication"
 msgstr ""
 
-#: aleksis/core/preferences.py:33
+#: aleksis/core/preferences.py:32
 msgid "Internationalisation"
 msgstr ""
 
+#: aleksis/core/preferences.py:33
+msgid "Calendar"
+msgstr ""
+
 #: aleksis/core/preferences.py:43
 msgid "Site title"
 msgstr ""
@@ -1231,7 +1280,15 @@ msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
 #: aleksis/core/preferences.py:490
-msgid "Country for phone number parsing"
+msgid "Birthday calendar feed color"
+msgstr ""
+
+#: aleksis/core/preferences.py:502
+msgid "Holiday calendar feed color"
+msgstr ""
+
+#: aleksis/core/preferences.py:515
+msgid "Activated calendars"
 msgstr ""
 
 #: aleksis/core/settings.py:551
@@ -1246,22 +1303,9 @@ msgstr ""
 msgid "Ukrainian"
 msgstr ""
 
-#: aleksis/core/tables.py:25
-#: aleksis/core/templates/core/announcement/list.html:36
-#: aleksis/core/templates/core/group/full.html:26
-#: aleksis/core/templates/oauth2_provider/application/detail.html:17
-msgid "Edit"
-msgstr ""
-
-#: aleksis/core/tables.py:27 aleksis/core/tables.py:148
-#: aleksis/core/tables.py:185
-#: aleksis/core/templates/core/announcement/list.html:22
-msgid "Actions"
-msgstr ""
-
-#: aleksis/core/tables.py:115 aleksis/core/tables.py:116
-#: aleksis/core/tables.py:130 aleksis/core/tables.py:146
-#: aleksis/core/tables.py:183
+#: aleksis/core/tables.py:97 aleksis/core/tables.py:98
+#: aleksis/core/tables.py:112 aleksis/core/tables.py:128
+#: aleksis/core/tables.py:165
 #: aleksis/core/templates/core/announcement/list.html:42
 #: aleksis/core/templates/core/group/full.html:33
 #: aleksis/core/templates/core/pages/delete.html:22
@@ -1269,6 +1313,11 @@ msgstr ""
 msgid "Delete"
 msgstr ""
 
+#: aleksis/core/tables.py:130 aleksis/core/tables.py:167
+#: aleksis/core/templates/core/announcement/list.html:22
+msgid "Actions"
+msgstr ""
+
 #: aleksis/core/templates/403.html:14 aleksis/core/templates/500.html:10
 #: aleksis/core/templates/oauth2_provider/authorize.html:54
 msgid "Error"
@@ -1339,6 +1388,13 @@ msgstr ""
 msgid "Your AlekSIS team"
 msgstr ""
 
+#: aleksis/core/templates/account/email/email_confirmation_message.txt:6
+#, python-format
+msgid ""
+"Someone tried to register an account with the username %(user_display)s and your e-mail address on %(site_domain)s.\n"
+"If it was you, please confirm the registration by clicking on the following link:"
+msgstr ""
+
 #: aleksis/core/templates/account/email_confirm.html:5
 #: aleksis/core/templates/account/email_confirm.html:6
 #: aleksis/core/templates/account/email_confirm.html:17
@@ -1571,6 +1627,12 @@ msgstr ""
 msgid "Recipients"
 msgstr ""
 
+#: aleksis/core/templates/core/announcement/list.html:36
+#: aleksis/core/templates/core/group/full.html:26
+#: aleksis/core/templates/oauth2_provider/application/detail.html:17
+msgid "Edit"
+msgstr ""
+
 #: aleksis/core/templates/core/announcement/list.html:50
 msgid "There are no announcements."
 msgstr ""
@@ -2135,17 +2197,6 @@ msgstr ""
 msgid "Selected persons"
 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 ""
-
-#: aleksis/core/templates/core/school_term/edit.html:6
-#: aleksis/core/templates/core/school_term/edit.html:7
-msgid "Edit school term"
-msgstr ""
-
 #: aleksis/core/templates/dynamic_preferences/form.html:5
 msgid "Preferences"
 msgstr ""
@@ -2921,157 +2972,149 @@ msgstr ""
 msgid "Download PDF"
 msgstr ""
 
-#: aleksis/core/views.py:285
-msgid "The school term has been created."
-msgstr ""
-
-#: aleksis/core/views.py:297
-msgid "The school term has been saved."
-msgstr ""
-
-#: aleksis/core/views.py:401
+#: aleksis/core/views.py:371
 msgid "The child groups were successfully saved."
 msgstr ""
 
-#: aleksis/core/views.py:420 aleksis/core/views.py:430
+#: aleksis/core/views.py:390 aleksis/core/views.py:400
 msgid "The person has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:480
+#: aleksis/core/views.py:450
 msgid "The group has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:528
+#: aleksis/core/views.py:498
 msgid "Maintenance mode was turned on successfully."
 msgstr ""
 
-#: aleksis/core/views.py:530
+#: aleksis/core/views.py:500
 msgid "Maintenance mode was turned off successfully."
 msgstr ""
 
-#: aleksis/core/views.py:588
+#: aleksis/core/views.py:558
 msgid "The announcement has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:604
+#: aleksis/core/views.py:574
 msgid "The announcement has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:673
+#: aleksis/core/views.py:643
 msgid "The requested preference registry does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:692
+#: aleksis/core/views.py:662
 msgid "The preferences have been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:716
+#: aleksis/core/views.py:686
 msgid "The person has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:730
+#: aleksis/core/views.py:700
 msgid "The group has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:762
+#: aleksis/core/views.py:732
 msgid "The additional field has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:797
+#: aleksis/core/views.py:767
 msgid "The additional field has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:822
+#: aleksis/core/views.py:792
 msgid "The group type has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:853
+#: aleksis/core/views.py:823
 msgid "The group type has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:888
+#: aleksis/core/views.py:858
 msgid "Progress: Run data checks"
 msgstr ""
 
-#: aleksis/core/views.py:889
+#: aleksis/core/views.py:859
 msgid "Run data checks …"
 msgstr ""
 
-#: aleksis/core/views.py:890
+#: aleksis/core/views.py:860
 msgid "The data checks were run successfully."
 msgstr ""
 
-#: aleksis/core/views.py:891
+#: aleksis/core/views.py:861
 msgid "There was a problem while running data checks."
 msgstr ""
 
-#: aleksis/core/views.py:908
+#: aleksis/core/views.py:878
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/views.py:918
+#: aleksis/core/views.py:888
 msgid "The requested solve option does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:951
+#: aleksis/core/views.py:921
 msgid "The dashboard widget has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:981
+#: aleksis/core/views.py:951
 msgid "The dashboard widget has been created."
 msgstr ""
 
-#: aleksis/core/views.py:991
+#: aleksis/core/views.py:961
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1063
+#: aleksis/core/views.py:1033
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1065
+#: aleksis/core/views.py:1035
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1136
+#: aleksis/core/views.py:1106
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1233
+#: aleksis/core/views.py:1203
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1243
+#: aleksis/core/views.py:1213
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1253
+#: aleksis/core/views.py:1223
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1263
+#: aleksis/core/views.py:1233
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1273
+#: aleksis/core/views.py:1243
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1382
+#: aleksis/core/views.py:1352
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1389
+#: aleksis/core/views.py:1359
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1465
+#: aleksis/core/views.py:1435
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1476
+#: aleksis/core/views.py:1446
 #, fuzzy
 #| msgid "This username is already in use."
 msgid "Person was already invited."
diff --git a/aleksis/core/locale/la/LC_MESSAGES/django.po b/aleksis/core/locale/la/LC_MESSAGES/django.po
index 1b6172ee3..6289dae46 100644
--- a/aleksis/core/locale/la/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/la/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-05-09 18:40+0200\n"
+"POT-Creation-Date: 2023-07-23 13:39+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"
@@ -48,8 +48,8 @@ msgstr "Inscriptio electronica"
 msgid "Home and mobile phone"
 msgstr "Numerus telephoni mobilis"
 
-#: aleksis/core/apps.py:166 aleksis/core/forms.py:221
-#: aleksis/core/models.py:495 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:166 aleksis/core/forms.py:231
+#: aleksis/core/models.py:517 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
 msgid "Groups"
 msgstr "Greges"
@@ -112,188 +112,188 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:721
+#: aleksis/core/filters.py:113 aleksis/core/models.py:743
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:494
+#: aleksis/core/filters.py:135 aleksis/core/models.py:516
 msgid "Group"
 msgstr "Grex"
 
-#: aleksis/core/forms.py:51 aleksis/core/forms.py:582
+#: aleksis/core/forms.py:50 aleksis/core/forms.py:591
 msgid "Base data"
 msgstr ""
 
-#: aleksis/core/forms.py:56 aleksis/core/tables.py:47
+#: aleksis/core/forms.py:55 aleksis/core/tables.py:29
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/forms.py:57 aleksis/core/forms.py:591
+#: aleksis/core/forms.py:56 aleksis/core/forms.py:600
 msgid "Contact data"
 msgstr ""
 
-#: aleksis/core/forms.py:59
+#: aleksis/core/forms.py:58
 msgid "Advanced personal data"
 msgstr ""
 
-#: aleksis/core/forms.py:107
+#: aleksis/core/forms.py:106
 msgid "New user"
 msgstr ""
 
-#: aleksis/core/forms.py:107
+#: aleksis/core/forms.py:106
 #, fuzzy
 #| msgid "Persons and accounts"
 msgid "Create a new account"
 msgstr "Personae et computi"
 
-#: aleksis/core/forms.py:133
+#: aleksis/core/forms.py:132
 msgid "You cannot set a new username when also selecting an existing user."
 msgstr ""
 
-#: aleksis/core/forms.py:137
+#: aleksis/core/forms.py:136
 msgid "This username is already in use."
 msgstr ""
 
-#: aleksis/core/forms.py:154 aleksis/core/models.py:142
+#: aleksis/core/forms.py:153 aleksis/core/models.py:154
 msgid "School term"
 msgstr "Anus scolae"
 
-#: aleksis/core/forms.py:155
+#: aleksis/core/forms.py:154
 #, fuzzy
 #| msgid "Data management"
 msgid "Common data"
 msgstr "Adminstratio datarum"
 
-#: aleksis/core/forms.py:156 aleksis/core/forms.py:208
-#: aleksis/core/models.py:165 aleksis/core/templates/core/person/list.html:8
+#: aleksis/core/forms.py:155 aleksis/core/forms.py:218
+#: aleksis/core/models.py:177 aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
 msgstr "personae"
 
-#: aleksis/core/forms.py:157 aleksis/core/forms.py:593
+#: aleksis/core/forms.py:156 aleksis/core/forms.py:602
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Additional data"
 msgstr "addita nomines"
 
-#: aleksis/core/forms.py:158 aleksis/core/models.py:218
-#: aleksis/core/models.py:547 aleksis/core/tables.py:46
+#: aleksis/core/forms.py:157 aleksis/core/models.py:230
+#: aleksis/core/models.py:569 aleksis/core/tables.py:28
 msgid "Photo"
 msgstr "Photographia"
 
-#: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:85
+#: aleksis/core/forms.py:210 aleksis/core/forms.py:213
+#: aleksis/core/models.py:97
 msgid "Date"
 msgstr "dies"
 
-#: aleksis/core/forms.py:201 aleksis/core/forms.py:204
-#: aleksis/core/models.py:93
+#: aleksis/core/forms.py:211 aleksis/core/forms.py:214
+#: aleksis/core/models.py:105
 msgid "Time"
 msgstr "tempus"
 
-#: aleksis/core/forms.py:234
+#: aleksis/core/forms.py:244
 msgid "From when until when should the announcement be displayed?"
 msgstr ""
 
-#: aleksis/core/forms.py:237
+#: aleksis/core/forms.py:247
 msgid "Who should see the announcement?"
 msgstr "Quis nuntium videatne?"
 
-#: aleksis/core/forms.py:238
+#: aleksis/core/forms.py:248
 msgid "Write your announcement:"
 msgstr "Scribe nuntium:"
 
-#: aleksis/core/forms.py:277
+#: aleksis/core/forms.py:287
 msgid "You are not allowed to create announcements which are only valid in the past."
 msgstr ""
 
-#: aleksis/core/forms.py:281
+#: aleksis/core/forms.py:291
 msgid "The from date and time must be earlier then the until date and time."
 msgstr ""
 
-#: aleksis/core/forms.py:290
+#: aleksis/core/forms.py:300
 msgid "You need at least one recipient."
 msgstr ""
 
-#: aleksis/core/forms.py:399
+#: aleksis/core/forms.py:408
 msgid "Invitation code"
 msgstr ""
 
-#: aleksis/core/forms.py:400
+#: aleksis/core/forms.py:409
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:193
+#: aleksis/core/forms.py:428 aleksis/core/models.py:205
 msgid "First name"
 msgstr "Primus nomen"
 
-#: aleksis/core/forms.py:420 aleksis/core/models.py:194
+#: aleksis/core/forms.py:429 aleksis/core/models.py:206
 msgid "Last name"
 msgstr "Secondus nomen"
 
-#: aleksis/core/forms.py:429
+#: aleksis/core/forms.py:438
 #, fuzzy
 #| msgid "E-mail address"
 msgid "A person is using this e-mail address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/forms.py:457
+#: aleksis/core/forms.py:466
 #, fuzzy
 #| msgid "Who should see the announcement?"
 msgid "Who should get the permission?"
 msgstr "Quis nuntium videatne?"
 
-#: aleksis/core/forms.py:458
+#: aleksis/core/forms.py:467
 msgid "On what?"
 msgstr ""
 
-#: aleksis/core/forms.py:484
+#: aleksis/core/forms.py:493
 msgid "Select objects which the permission should be granted for:"
 msgstr ""
 
-#: aleksis/core/forms.py:487
+#: aleksis/core/forms.py:496
 msgid "Grant the permission for all objects"
 msgstr ""
 
-#: aleksis/core/forms.py:495
+#: aleksis/core/forms.py:504
 msgid "You must select at least one group or person which should get the permission."
 msgstr ""
 
-#: aleksis/core/forms.py:500
+#: aleksis/core/forms.py:509
 msgid "You must grant the permission to all objects or to specific objects."
 msgstr ""
 
-#: aleksis/core/forms.py:587
+#: aleksis/core/forms.py:596
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Address data"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/forms.py:599
+#: aleksis/core/forms.py:608
 #, fuzzy
 #| msgid "Data management"
 msgid "Account data"
 msgstr "Adminstratio datarum"
 
-#: aleksis/core/forms.py:606
+#: aleksis/core/forms.py:615
 msgid "Password"
 msgstr ""
 
-#: aleksis/core/forms.py:609
+#: aleksis/core/forms.py:618
 msgid "Password (again)"
 msgstr ""
 
-#: aleksis/core/forms.py:762
+#: aleksis/core/forms.py:771
 msgid "The selected action does not exist."
 msgstr ""
 
-#: aleksis/core/forms.py:773
+#: aleksis/core/forms.py:782
 msgid "You do not have permission to run {} on all selected objects."
 msgstr ""
 
-#: aleksis/core/forms.py:829
+#: aleksis/core/forms.py:838
 msgid "No valid selection."
 msgstr ""
 
@@ -319,272 +319,271 @@ msgstr ""
 msgid "No backup result found!"
 msgstr ""
 
-#: aleksis/core/mixins.py:511
+#: aleksis/core/mixins.py:539
 #, fuzzy
 #| msgid "Edit school term"
 msgid "Linked school term"
 msgstr "Muta anum scolae"
 
-#: aleksis/core/models.py:83
+#: aleksis/core/models.py:95
 msgid "Boolean (Yes/No)"
 msgstr ""
 
-#: aleksis/core/models.py:84
+#: aleksis/core/models.py:96
 msgid "Text (one line)"
 msgstr ""
 
-#: aleksis/core/models.py:86
+#: aleksis/core/models.py:98
 msgid "Date and time"
 msgstr "Dies et hora"
 
-#: aleksis/core/models.py:87
+#: aleksis/core/models.py:99
 msgid "Decimal number"
 msgstr ""
 
-#: aleksis/core/models.py:88 aleksis/core/models.py:211
+#: aleksis/core/models.py:100 aleksis/core/models.py:223
 msgid "E-mail address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:89
+#: aleksis/core/models.py:101
 msgid "Integer"
 msgstr ""
 
-#: aleksis/core/models.py:90
+#: aleksis/core/models.py:102
 #, fuzzy
 #| msgid "E-mail address"
 msgid "IP address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:91
+#: aleksis/core/models.py:103
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr ""
 
-#: aleksis/core/models.py:92
+#: aleksis/core/models.py:104
 msgid "Text (multi-line)"
 msgstr ""
 
-#: aleksis/core/models.py:94
+#: aleksis/core/models.py:106
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:106 aleksis/core/models.py:1078
+#: aleksis/core/models.py:118 aleksis/core/models.py:1100
+#: aleksis/core/models.py:1729
 msgid "Name"
 msgstr "Nomen"
 
-#: aleksis/core/models.py:108
+#: aleksis/core/models.py:120 aleksis/core/models.py:1532
 msgid "Start date"
 msgstr ""
 
-#: aleksis/core/models.py:109
+#: aleksis/core/models.py:121 aleksis/core/models.py:1533
 msgid "End date"
 msgstr ""
 
-#: aleksis/core/models.py:128
+#: aleksis/core/models.py:140 aleksis/core/schema/school_term.py:48
 msgid "The start date must be earlier than the end date."
 msgstr ""
 
-#: aleksis/core/models.py:135
+#: aleksis/core/models.py:147 aleksis/core/schema/school_term.py:53
 msgid "There is already a school term for this time or a part of this time."
 msgstr ""
 
-#: aleksis/core/models.py:143
-#: aleksis/core/templates/core/school_term/list.html:8
-#: aleksis/core/templates/core/school_term/list.html:9
+#: aleksis/core/models.py:155
 msgid "School terms"
 msgstr "ani scolae"
 
-#: aleksis/core/models.py:164 aleksis/core/models.py:1027
+#: aleksis/core/models.py:176 aleksis/core/models.py:1049
 msgid "Person"
 msgstr "Persona"
 
-#: aleksis/core/models.py:167
+#: aleksis/core/models.py:179
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Can view address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:168
+#: aleksis/core/models.py:180
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Can view contact details"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:169
+#: aleksis/core/models.py:181
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Can view photo"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:182
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Can view avatar image"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:171
+#: aleksis/core/models.py:183
 #, fuzzy
 #| msgid "Persons and accounts"
 msgid "Can view persons groups"
 msgstr "Personae et computi"
 
-#: aleksis/core/models.py:172
+#: aleksis/core/models.py:184
 #, fuzzy
 #| msgid "Stop impersonation"
 msgid "Can view personal details"
 msgstr "Simulandum aliquem finire"
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "female"
 msgstr "femininum"
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "male"
 msgstr "maskulinum"
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "other"
 msgstr ""
 
-#: aleksis/core/models.py:190 aleksis/core/models.py:1382
+#: aleksis/core/models.py:202 aleksis/core/models.py:1404
 msgid "Linked user"
 msgstr ""
 
-#: aleksis/core/models.py:196
+#: aleksis/core/models.py:208
 msgid "Additional name(s)"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:200 aleksis/core/models.py:512
-#: aleksis/core/models.py:1468
+#: aleksis/core/models.py:212 aleksis/core/models.py:534
+#: aleksis/core/models.py:1490
 msgid "Short name"
 msgstr "Breve nomen"
 
-#: aleksis/core/models.py:203
+#: aleksis/core/models.py:215
 msgid "Street"
 msgstr "Via"
 
-#: aleksis/core/models.py:204
+#: aleksis/core/models.py:216
 msgid "Street number"
 msgstr "Numerus domini"
 
-#: aleksis/core/models.py:205
+#: aleksis/core/models.py:217
 msgid "Postal code"
 msgstr "Numerus directorius"
 
-#: aleksis/core/models.py:206
+#: aleksis/core/models.py:218
 msgid "Place"
 msgstr "Urbs"
 
-#: aleksis/core/models.py:208
+#: aleksis/core/models.py:220
 msgid "Home phone"
 msgstr "Numerus telephoni domi"
 
-#: aleksis/core/models.py:209
+#: aleksis/core/models.py:221
 msgid "Mobile phone"
 msgstr "Numerus telephoni mobilis"
 
-#: aleksis/core/models.py:213
+#: aleksis/core/models.py:225
 msgid "Date of birth"
 msgstr "Dies natalis"
 
-#: aleksis/core/models.py:214
+#: aleksis/core/models.py:226
 #, fuzzy
 #| msgid "Date of birth"
 msgid "Place of birth"
 msgstr "Dies natalis"
 
-#: aleksis/core/models.py:215
+#: aleksis/core/models.py:227
 msgid "Sex"
 msgstr "Genus"
 
-#: aleksis/core/models.py:222 aleksis/core/models.py:551
+#: aleksis/core/models.py:234 aleksis/core/models.py:573
 msgid "This is an official photo, used for official documents and for internal use cases."
 msgstr ""
 
-#: aleksis/core/models.py:227 aleksis/core/models.py:555
+#: aleksis/core/models.py:239 aleksis/core/models.py:577
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:230 aleksis/core/models.py:558
+#: aleksis/core/models.py:242 aleksis/core/models.py:580
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:235
+#: aleksis/core/models.py:247
 msgid "Guardians / Parents"
 msgstr "Parentes"
 
-#: aleksis/core/models.py:242
+#: aleksis/core/models.py:254
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:245 aleksis/core/models.py:725
-#: aleksis/core/models.py:749 aleksis/core/models.py:844
-#: aleksis/core/models.py:1113
+#: aleksis/core/models.py:257 aleksis/core/models.py:747
+#: aleksis/core/models.py:771 aleksis/core/models.py:866
+#: aleksis/core/models.py:1135
 msgid "Description"
 msgstr "Descriptio"
 
-#: aleksis/core/models.py:465
+#: aleksis/core/models.py:487
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:467
+#: aleksis/core/models.py:489
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:469
+#: aleksis/core/models.py:491
 msgid "Required"
 msgstr ""
 
-#: aleksis/core/models.py:470
+#: aleksis/core/models.py:492
 #, fuzzy
 #| msgid "Site description"
 msgid "Help text / description"
 msgstr "Descriptio paginae"
 
-#: aleksis/core/models.py:476
+#: aleksis/core/models.py:498
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Addtitional field for groups"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:477
+#: aleksis/core/models.py:499
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Addtitional fields for groups"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:497
+#: aleksis/core/models.py:519
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:498
+#: aleksis/core/models.py:520
 #, fuzzy
 #| msgid "Persons and accounts"
 msgid "Can view statistics about group."
 msgstr "Personae et computi"
 
-#: aleksis/core/models.py:510 aleksis/core/models.py:1469
+#: aleksis/core/models.py:532 aleksis/core/models.py:1491
 #, fuzzy
 #| msgid "Last name"
 msgid "Long name"
 msgstr "Secondus nomen"
 
-#: aleksis/core/models.py:520 aleksis/core/templates/core/group/full.html:105
+#: aleksis/core/models.py:542 aleksis/core/templates/core/group/full.html:105
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:523 aleksis/core/templates/core/group/full.html:102
+#: aleksis/core/models.py:545 aleksis/core/templates/core/group/full.html:102
 msgid "Owners"
 msgstr ""
 
-#: aleksis/core/models.py:530 aleksis/core/templates/core/group/full.html:59
+#: aleksis/core/models.py:552 aleksis/core/templates/core/group/full.html:59
 msgid "Parent groups"
 msgstr ""
 
-#: aleksis/core/models.py:538
+#: aleksis/core/models.py:560
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:543
+#: aleksis/core/models.py:565
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 #, fuzzy
@@ -592,259 +591,259 @@ msgstr ""
 msgid "Additional fields"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:724 aleksis/core/models.py:748
-#: aleksis/core/models.py:843 aleksis/core/models.py:1299
+#: aleksis/core/models.py:746 aleksis/core/models.py:770
+#: aleksis/core/models.py:865 aleksis/core/models.py:1321
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr "Titulus"
 
-#: aleksis/core/models.py:727
+#: aleksis/core/models.py:749
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:733
+#: aleksis/core/models.py:755
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:734
+#: aleksis/core/models.py:756
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:740
+#: aleksis/core/models.py:762
 msgid "Sender"
 msgstr "Mittens"
 
-#: aleksis/core/models.py:745
+#: aleksis/core/models.py:767
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:750 aleksis/core/models.py:1079
+#: aleksis/core/models.py:772 aleksis/core/models.py:1101
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:753 aleksis/core/models.py:1080
-#: aleksis/core/models.py:1429
+#: aleksis/core/models.py:775 aleksis/core/models.py:1102
+#: aleksis/core/models.py:1451
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr "Nota"
 
-#: aleksis/core/models.py:756
+#: aleksis/core/models.py:778
 #, fuzzy
 #| msgid "Notification"
 msgid "Send notification at"
 msgstr "Nuntius"
 
-#: aleksis/core/models.py:758
+#: aleksis/core/models.py:780
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:759
+#: aleksis/core/models.py:781
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:776
+#: aleksis/core/models.py:798
 #, fuzzy
 #| msgid "Notifications"
 msgid "Notification"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:777 aleksis/core/preferences.py:29
+#: aleksis/core/models.py:799 aleksis/core/preferences.py:28
 msgid "Notifications"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:845
+#: aleksis/core/models.py:867
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:848
+#: aleksis/core/models.py:870
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:851
+#: aleksis/core/models.py:873
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:876
+#: aleksis/core/models.py:898
 #, fuzzy
 #| msgid "Announcements"
 msgid "Announcement"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:877
+#: aleksis/core/models.py:899
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:914
+#: aleksis/core/models.py:936
 #, fuzzy
 #| msgid "Announcements"
 msgid "Announcement recipient"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:915
+#: aleksis/core/models.py:937
 #, fuzzy
 #| msgid "Announcements"
 msgid "Announcement recipients"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:935
+#: aleksis/core/models.py:957
 #, fuzzy
 #| msgid "Site title"
 msgid "Widget Title"
 msgstr "Titulus paginae"
 
-#: aleksis/core/models.py:936
+#: aleksis/core/models.py:958
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:959
 #, fuzzy
 #| msgid "Site title"
 msgid "Widget is broken"
 msgstr "Titulus paginae"
 
-#: aleksis/core/models.py:940
+#: aleksis/core/models.py:962
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:941
+#: aleksis/core/models.py:963
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:946
+#: aleksis/core/models.py:968
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:947
+#: aleksis/core/models.py:969
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:952
+#: aleksis/core/models.py:974
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:953
+#: aleksis/core/models.py:975
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:958
+#: aleksis/core/models.py:980
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:959
+#: aleksis/core/models.py:981
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:990
+#: aleksis/core/models.py:1012
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Can edit default dashboard"
 msgstr "Forum"
 
-#: aleksis/core/models.py:991
+#: aleksis/core/models.py:1013
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard Widget"
 msgstr "Forum"
 
-#: aleksis/core/models.py:992
+#: aleksis/core/models.py:1014
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard Widgets"
 msgstr "Forum"
 
-#: aleksis/core/models.py:998
+#: aleksis/core/models.py:1020
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:999
+#: aleksis/core/models.py:1021
 #, fuzzy
 #| msgid "Icon"
 msgid "Icon URL"
 msgstr "Nota"
 
-#: aleksis/core/models.py:1005
+#: aleksis/core/models.py:1027
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:1006
+#: aleksis/core/models.py:1028
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1012
+#: aleksis/core/models.py:1034
 msgid "Content"
 msgstr ""
 
-#: aleksis/core/models.py:1018
+#: aleksis/core/models.py:1040
 msgid "Static content widget"
 msgstr ""
 
-#: aleksis/core/models.py:1019
+#: aleksis/core/models.py:1041
 msgid "Static content widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1024
+#: aleksis/core/models.py:1046
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard widget"
 msgstr "Forum"
 
-#: aleksis/core/models.py:1029
+#: aleksis/core/models.py:1051
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:1030
+#: aleksis/core/models.py:1052
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:1045
+#: aleksis/core/models.py:1067
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard widget order"
 msgstr "Forum"
 
-#: aleksis/core/models.py:1046
+#: aleksis/core/models.py:1068
 #, fuzzy
 #| msgid "Dashboard"
 msgid "Dashboard widget orders"
 msgstr "Forum"
 
-#: aleksis/core/models.py:1052
+#: aleksis/core/models.py:1074
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1065
+#: aleksis/core/models.py:1087
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1066
+#: aleksis/core/models.py:1088
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1098
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1086
+#: aleksis/core/models.py:1108
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1087
+#: aleksis/core/models.py:1109
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1134
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1119 aleksis/core/templates/core/group/full.html:50
+#: aleksis/core/models.py:1141 aleksis/core/templates/core/group/full.html:50
 #, fuzzy
 #| msgid "Group"
 msgid "Group type"
 msgstr "Grex"
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1142
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 #, fuzzy
@@ -852,256 +851,310 @@ msgstr "Grex"
 msgid "Group types"
 msgstr "Greges"
 
-#: aleksis/core/models.py:1133
+#: aleksis/core/models.py:1155
 #, fuzzy
 #| msgid "System status"
 msgid "Can view system status"
 msgstr "Status systemae"
 
-#: aleksis/core/models.py:1134
+#: aleksis/core/models.py:1156
 #, fuzzy
 #| msgid "Data management"
 msgid "Can manage data"
 msgstr "Adminstratio datarum"
 
-#: aleksis/core/models.py:1135
+#: aleksis/core/models.py:1157
 #, fuzzy
 #| msgid "Stop impersonation"
 msgid "Can impersonate"
 msgstr "Simulandum aliquem finire"
 
-#: aleksis/core/models.py:1136
+#: aleksis/core/models.py:1158
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1137
+#: aleksis/core/models.py:1159
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1138
+#: aleksis/core/models.py:1160
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1139
+#: aleksis/core/models.py:1161
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1140
+#: aleksis/core/models.py:1162
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1141
+#: aleksis/core/models.py:1163
 #, fuzzy
 #| msgid "Stop impersonation"
 msgid "Can invite persons"
 msgstr "Simulandum aliquem finire"
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1199
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1185
+#: aleksis/core/models.py:1207
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1186
+#: aleksis/core/models.py:1208
 #, fuzzy
 #| msgid "Notifications"
 msgid "Notification sent"
 msgstr "Nuntii"
 
-#: aleksis/core/models.py:1199
+#: aleksis/core/models.py:1221
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1200
+#: aleksis/core/models.py:1222
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1202
+#: aleksis/core/models.py:1224
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1203
+#: aleksis/core/models.py:1225
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1210
+#: aleksis/core/models.py:1232
 #, fuzzy
 #| msgid "E-mail address"
 msgid "E-Mail address"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:1270
+#: aleksis/core/models.py:1292
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1274
+#: aleksis/core/models.py:1296
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1277
+#: aleksis/core/models.py:1299
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1280
+#: aleksis/core/models.py:1302
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1287
+#: aleksis/core/models.py:1309
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1288
+#: aleksis/core/models.py:1310
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1293
+#: aleksis/core/models.py:1315
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1296
+#: aleksis/core/models.py:1318
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1300
+#: aleksis/core/models.py:1322
 #, fuzzy
 #| msgid "Icon"
 msgid "Back URL"
 msgstr "Nota"
 
-#: aleksis/core/models.py:1301
+#: aleksis/core/models.py:1323
 msgid "Progress title"
 msgstr ""
 
-#: aleksis/core/models.py:1302
+#: aleksis/core/models.py:1324
 msgid "Error message"
 msgstr ""
 
-#: aleksis/core/models.py:1303
+#: aleksis/core/models.py:1325
 msgid "Success message"
 msgstr ""
 
-#: aleksis/core/models.py:1304
+#: aleksis/core/models.py:1326
 msgid "Redirect on success URL"
 msgstr ""
 
-#: aleksis/core/models.py:1306
+#: aleksis/core/models.py:1328
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Additional button title"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:1308
+#: aleksis/core/models.py:1330
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Additional button URL"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:1310
+#: aleksis/core/models.py:1332
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Additional button icon"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:1312
+#: aleksis/core/models.py:1334
 msgid "Result fetched"
 msgstr ""
 
-#: aleksis/core/models.py:1337
+#: aleksis/core/models.py:1359
 msgid "Background task completed successfully"
 msgstr ""
 
-#: aleksis/core/models.py:1338
+#: aleksis/core/models.py:1360
 msgid "The background task '{}' has been completed successfully."
 msgstr ""
 
-#: aleksis/core/models.py:1344
+#: aleksis/core/models.py:1366
 msgid "Background task failed"
 msgstr ""
 
-#: aleksis/core/models.py:1345
+#: aleksis/core/models.py:1367
 msgid "The background task '{}' has failed."
 msgstr ""
 
-#: aleksis/core/models.py:1354
+#: aleksis/core/models.py:1376
 msgid "Background task"
 msgstr ""
 
-#: aleksis/core/models.py:1368
+#: aleksis/core/models.py:1390
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1369
+#: aleksis/core/models.py:1391
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1385
+#: aleksis/core/models.py:1407
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "Additional attributes"
 msgstr "addita nomines"
 
-#: aleksis/core/models.py:1423
+#: aleksis/core/models.py:1445
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1433
+#: aleksis/core/models.py:1455
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
-#: aleksis/core/models.py:1478
+#: aleksis/core/models.py:1500
 #, fuzzy
 #| msgid "E-mail address"
 msgid "Can view room timetable"
 msgstr "Inscriptio electronica"
 
-#: aleksis/core/models.py:1480
+#: aleksis/core/models.py:1502
 msgid "Room"
 msgstr ""
 
-#: aleksis/core/models.py:1481
+#: aleksis/core/models.py:1503
 msgid "Rooms"
 msgstr ""
 
-#: aleksis/core/preferences.py:25
+#: aleksis/core/models.py:1528
+#, fuzzy
+#| msgid "Date and time"
+msgid "Start date and time"
+msgstr "Dies et hora"
+
+#: aleksis/core/models.py:1530
+#, fuzzy
+#| msgid "Date and time"
+msgid "End date and time"
+msgstr "Dies et hora"
+
+#: aleksis/core/models.py:1531
+#, fuzzy
+#| msgid "Time"
+msgid "Timezone"
+msgstr "tempus"
+
+#: aleksis/core/models.py:1534
+msgid "Recurrences"
+msgstr ""
+
+#: aleksis/core/models.py:1540
+msgid "Amended base event"
+msgstr ""
+
+#: aleksis/core/models.py:1643
+msgid "Calendar Event"
+msgstr ""
+
+#: aleksis/core/models.py:1644
+msgid "Calendar Events"
+msgstr ""
+
+#: aleksis/core/models.py:1670
+msgid "Birthdays"
+msgstr ""
+
+#: aleksis/core/models.py:1674
+msgid "{}'s birthday"
+msgstr ""
+
+#: aleksis/core/models.py:1713 aleksis/core/models.py:1775
+msgid "Holidays"
+msgstr ""
+
+#: aleksis/core/models.py:1774
+msgid "Holiday"
+msgstr ""
+
+#: aleksis/core/preferences.py:24
 msgid "General"
 msgstr ""
 
-#: aleksis/core/preferences.py:26
+#: aleksis/core/preferences.py:25
 msgid "School"
 msgstr "Scola"
 
-#: aleksis/core/preferences.py:27
+#: aleksis/core/preferences.py:26
 msgid "Theme"
 msgstr ""
 
-#: aleksis/core/preferences.py:28
+#: aleksis/core/preferences.py:27
 msgid "Mail"
 msgstr ""
 
-#: aleksis/core/preferences.py:30
+#: aleksis/core/preferences.py:29
 msgid "Footer"
 msgstr ""
 
-#: aleksis/core/preferences.py:31
+#: aleksis/core/preferences.py:30
 #, fuzzy
 #| msgid "Data management"
 msgid "Accounts"
 msgstr "Adminstratio datarum"
 
-#: aleksis/core/preferences.py:32
+#: aleksis/core/preferences.py:31
 #, fuzzy
 #| msgid "Notifications"
 msgid "Authentication"
 msgstr "Nuntii"
 
-#: aleksis/core/preferences.py:33
+#: aleksis/core/preferences.py:32
 #, fuzzy
 #| msgid "Impersonation"
 msgid "Internationalisation"
 msgstr "Simulare aliquem"
 
+#: aleksis/core/preferences.py:33
+msgid "Calendar"
+msgstr ""
+
 #: aleksis/core/preferences.py:43
 msgid "Site title"
 msgstr "Titulus paginae"
@@ -1287,7 +1340,15 @@ msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
 #: aleksis/core/preferences.py:490
-msgid "Country for phone number parsing"
+msgid "Birthday calendar feed color"
+msgstr ""
+
+#: aleksis/core/preferences.py:502
+msgid "Holiday calendar feed color"
+msgstr ""
+
+#: aleksis/core/preferences.py:515
+msgid "Activated calendars"
 msgstr ""
 
 #: aleksis/core/settings.py:551
@@ -1302,31 +1363,23 @@ msgstr "Germanus"
 msgid "Ukrainian"
 msgstr ""
 
-#: aleksis/core/tables.py:25
-#: aleksis/core/templates/core/announcement/list.html:36
-#: aleksis/core/templates/core/group/full.html:26
-#: aleksis/core/templates/oauth2_provider/application/detail.html:17
-msgid "Edit"
+#: aleksis/core/tables.py:97 aleksis/core/tables.py:98
+#: aleksis/core/tables.py:112 aleksis/core/tables.py:128
+#: aleksis/core/tables.py:165
+#: aleksis/core/templates/core/announcement/list.html:42
+#: aleksis/core/templates/core/group/full.html:33
+#: aleksis/core/templates/core/pages/delete.html:22
+#: aleksis/core/templates/oauth2_provider/application/detail.html:21
+msgid "Delete"
 msgstr ""
 
-#: aleksis/core/tables.py:27 aleksis/core/tables.py:148
-#: aleksis/core/tables.py:185
+#: aleksis/core/tables.py:130 aleksis/core/tables.py:167
 #: aleksis/core/templates/core/announcement/list.html:22
 #, fuzzy
 #| msgid "Notifications"
 msgid "Actions"
 msgstr "Nuntii"
 
-#: aleksis/core/tables.py:115 aleksis/core/tables.py:116
-#: aleksis/core/tables.py:130 aleksis/core/tables.py:146
-#: aleksis/core/tables.py:183
-#: aleksis/core/templates/core/announcement/list.html:42
-#: aleksis/core/templates/core/group/full.html:33
-#: aleksis/core/templates/core/pages/delete.html:22
-#: aleksis/core/templates/oauth2_provider/application/detail.html:21
-msgid "Delete"
-msgstr ""
-
 #: aleksis/core/templates/403.html:14 aleksis/core/templates/500.html:10
 #: aleksis/core/templates/oauth2_provider/authorize.html:54
 msgid "Error"
@@ -1397,6 +1450,13 @@ msgstr ""
 msgid "Your AlekSIS team"
 msgstr ""
 
+#: aleksis/core/templates/account/email/email_confirmation_message.txt:6
+#, python-format
+msgid ""
+"Someone tried to register an account with the username %(user_display)s and your e-mail address on %(site_domain)s.\n"
+"If it was you, please confirm the registration by clicking on the following link:"
+msgstr ""
+
 #: aleksis/core/templates/account/email_confirm.html:5
 #: aleksis/core/templates/account/email_confirm.html:6
 #: aleksis/core/templates/account/email_confirm.html:17
@@ -1645,6 +1705,12 @@ msgstr ""
 msgid "Recipients"
 msgstr ""
 
+#: aleksis/core/templates/core/announcement/list.html:36
+#: aleksis/core/templates/core/group/full.html:26
+#: aleksis/core/templates/oauth2_provider/application/detail.html:17
+msgid "Edit"
+msgstr ""
+
 #: aleksis/core/templates/core/announcement/list.html:50
 #, fuzzy
 #| msgid "Write your announcement:"
@@ -2233,19 +2299,6 @@ msgstr ""
 msgid "Selected persons"
 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
-#, fuzzy
-#| msgid "Edit school term"
-msgid "Create school term"
-msgstr "Muta anum scolae"
-
-#: aleksis/core/templates/core/school_term/edit.html:6
-#: aleksis/core/templates/core/school_term/edit.html:7
-msgid "Edit school term"
-msgstr "Muta anum scolae"
-
 #: aleksis/core/templates/dynamic_preferences/form.html:5
 msgid "Preferences"
 msgstr ""
@@ -3038,164 +3091,164 @@ msgstr ""
 msgid "Download PDF"
 msgstr ""
 
-#: aleksis/core/views.py:285
-msgid "The school term has been created."
-msgstr ""
-
-#: aleksis/core/views.py:297
-msgid "The school term has been saved."
-msgstr ""
-
-#: aleksis/core/views.py:401
+#: aleksis/core/views.py:371
 msgid "The child groups were successfully saved."
 msgstr ""
 
-#: aleksis/core/views.py:420 aleksis/core/views.py:430
+#: aleksis/core/views.py:390 aleksis/core/views.py:400
 msgid "The person has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:480
+#: aleksis/core/views.py:450
 msgid "The group has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:528
+#: aleksis/core/views.py:498
 msgid "Maintenance mode was turned on successfully."
 msgstr ""
 
-#: aleksis/core/views.py:530
+#: aleksis/core/views.py:500
 msgid "Maintenance mode was turned off successfully."
 msgstr ""
 
-#: aleksis/core/views.py:588
+#: aleksis/core/views.py:558
 msgid "The announcement has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:604
+#: aleksis/core/views.py:574
 msgid "The announcement has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:673
+#: aleksis/core/views.py:643
 msgid "The requested preference registry does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:692
+#: aleksis/core/views.py:662
 msgid "The preferences have been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:716
+#: aleksis/core/views.py:686
 msgid "The person has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:730
+#: aleksis/core/views.py:700
 msgid "The group has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:762
+#: aleksis/core/views.py:732
 #, fuzzy
 #| msgid "Additional name(s)"
 msgid "The additional field has been saved."
 msgstr "addita nomines"
 
-#: aleksis/core/views.py:797
+#: aleksis/core/views.py:767
 msgid "The additional field has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:822
+#: aleksis/core/views.py:792
 msgid "The group type has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:853
+#: aleksis/core/views.py:823
 msgid "The group type has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:888
+#: aleksis/core/views.py:858
 msgid "Progress: Run data checks"
 msgstr ""
 
-#: aleksis/core/views.py:889
+#: aleksis/core/views.py:859
 #, fuzzy
 #| msgid "System status"
 msgid "Run data checks …"
 msgstr "Status systemae"
 
-#: aleksis/core/views.py:890
+#: aleksis/core/views.py:860
 msgid "The data checks were run successfully."
 msgstr ""
 
-#: aleksis/core/views.py:891
+#: aleksis/core/views.py:861
 msgid "There was a problem while running data checks."
 msgstr ""
 
-#: aleksis/core/views.py:908
+#: aleksis/core/views.py:878
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/views.py:918
+#: aleksis/core/views.py:888
 msgid "The requested solve option does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:951
+#: aleksis/core/views.py:921
 msgid "The dashboard widget has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:981
+#: aleksis/core/views.py:951
 msgid "The dashboard widget has been created."
 msgstr ""
 
-#: aleksis/core/views.py:991
+#: aleksis/core/views.py:961
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1063
+#: aleksis/core/views.py:1033
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1065
+#: aleksis/core/views.py:1035
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1136
+#: aleksis/core/views.py:1106
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1233
+#: aleksis/core/views.py:1203
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1243
+#: aleksis/core/views.py:1213
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1253
+#: aleksis/core/views.py:1223
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1263
+#: aleksis/core/views.py:1233
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1273
+#: aleksis/core/views.py:1243
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1382
+#: aleksis/core/views.py:1352
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1389
+#: aleksis/core/views.py:1359
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1465
+#: aleksis/core/views.py:1435
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1476
+#: aleksis/core/views.py:1446
 msgid "Person was already invited."
 msgstr ""
 
+#, fuzzy
+#~| msgid "Edit school term"
+#~ msgid "Create school term"
+#~ msgstr "Muta anum scolae"
+
+#~ msgid "Edit school term"
+#~ msgstr "Muta anum scolae"
+
 #, fuzzy
 #~| msgid "Notifications"
 #~ msgid "Authorized applications"
diff --git a/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po b/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po
index fb8bc425d..7a97f88fb 100644
--- a/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: AlekSIS (School Information System) 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-05-09 18:40+0200\n"
+"POT-Creation-Date: 2023-07-23 13:39+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"
@@ -41,8 +41,8 @@ msgstr ""
 msgid "Home and mobile phone"
 msgstr ""
 
-#: aleksis/core/apps.py:166 aleksis/core/forms.py:221
-#: aleksis/core/models.py:495 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:166 aleksis/core/forms.py:231
+#: aleksis/core/models.py:517 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
 msgid "Groups"
 msgstr ""
@@ -101,172 +101,172 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:721
+#: aleksis/core/filters.py:113 aleksis/core/models.py:743
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:494
+#: aleksis/core/filters.py:135 aleksis/core/models.py:516
 msgid "Group"
 msgstr ""
 
-#: aleksis/core/forms.py:51 aleksis/core/forms.py:582
+#: aleksis/core/forms.py:50 aleksis/core/forms.py:591
 msgid "Base data"
 msgstr ""
 
-#: aleksis/core/forms.py:56 aleksis/core/tables.py:47
+#: aleksis/core/forms.py:55 aleksis/core/tables.py:29
 msgid "Address"
 msgstr ""
 
-#: aleksis/core/forms.py:57 aleksis/core/forms.py:591
+#: aleksis/core/forms.py:56 aleksis/core/forms.py:600
 msgid "Contact data"
 msgstr ""
 
-#: aleksis/core/forms.py:59
+#: aleksis/core/forms.py:58
 msgid "Advanced personal data"
 msgstr ""
 
-#: aleksis/core/forms.py:107
+#: aleksis/core/forms.py:106
 msgid "New user"
 msgstr ""
 
-#: aleksis/core/forms.py:107
+#: aleksis/core/forms.py:106
 msgid "Create a new account"
 msgstr ""
 
-#: aleksis/core/forms.py:133
+#: aleksis/core/forms.py:132
 msgid "You cannot set a new username when also selecting an existing user."
 msgstr ""
 
-#: aleksis/core/forms.py:137
+#: aleksis/core/forms.py:136
 msgid "This username is already in use."
 msgstr ""
 
-#: aleksis/core/forms.py:154 aleksis/core/models.py:142
+#: aleksis/core/forms.py:153 aleksis/core/models.py:154
 msgid "School term"
 msgstr ""
 
-#: aleksis/core/forms.py:155
+#: aleksis/core/forms.py:154
 msgid "Common data"
 msgstr ""
 
-#: aleksis/core/forms.py:156 aleksis/core/forms.py:208
-#: aleksis/core/models.py:165 aleksis/core/templates/core/person/list.html:8
+#: aleksis/core/forms.py:155 aleksis/core/forms.py:218
+#: aleksis/core/models.py:177 aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
 msgstr ""
 
-#: aleksis/core/forms.py:157 aleksis/core/forms.py:593
+#: aleksis/core/forms.py:156 aleksis/core/forms.py:602
 msgid "Additional data"
 msgstr ""
 
-#: aleksis/core/forms.py:158 aleksis/core/models.py:218
-#: aleksis/core/models.py:547 aleksis/core/tables.py:46
+#: aleksis/core/forms.py:157 aleksis/core/models.py:230
+#: aleksis/core/models.py:569 aleksis/core/tables.py:28
 msgid "Photo"
 msgstr ""
 
-#: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:85
+#: aleksis/core/forms.py:210 aleksis/core/forms.py:213
+#: aleksis/core/models.py:97
 msgid "Date"
 msgstr ""
 
-#: aleksis/core/forms.py:201 aleksis/core/forms.py:204
-#: aleksis/core/models.py:93
+#: aleksis/core/forms.py:211 aleksis/core/forms.py:214
+#: aleksis/core/models.py:105
 msgid "Time"
 msgstr ""
 
-#: aleksis/core/forms.py:234
+#: aleksis/core/forms.py:244
 msgid "From when until when should the announcement be displayed?"
 msgstr ""
 
-#: aleksis/core/forms.py:237
+#: aleksis/core/forms.py:247
 msgid "Who should see the announcement?"
 msgstr ""
 
-#: aleksis/core/forms.py:238
+#: aleksis/core/forms.py:248
 msgid "Write your announcement:"
 msgstr ""
 
-#: aleksis/core/forms.py:277
+#: aleksis/core/forms.py:287
 msgid "You are not allowed to create announcements which are only valid in the past."
 msgstr ""
 
-#: aleksis/core/forms.py:281
+#: aleksis/core/forms.py:291
 msgid "The from date and time must be earlier then the until date and time."
 msgstr ""
 
-#: aleksis/core/forms.py:290
+#: aleksis/core/forms.py:300
 msgid "You need at least one recipient."
 msgstr ""
 
-#: aleksis/core/forms.py:399
+#: aleksis/core/forms.py:408
 msgid "Invitation code"
 msgstr ""
 
-#: aleksis/core/forms.py:400
+#: aleksis/core/forms.py:409
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:193
+#: aleksis/core/forms.py:428 aleksis/core/models.py:205
 msgid "First name"
 msgstr ""
 
-#: aleksis/core/forms.py:420 aleksis/core/models.py:194
+#: aleksis/core/forms.py:429 aleksis/core/models.py:206
 msgid "Last name"
 msgstr ""
 
-#: aleksis/core/forms.py:429
+#: aleksis/core/forms.py:438
 msgid "A person is using this e-mail address"
 msgstr ""
 
-#: aleksis/core/forms.py:457
+#: aleksis/core/forms.py:466
 msgid "Who should get the permission?"
 msgstr ""
 
-#: aleksis/core/forms.py:458
+#: aleksis/core/forms.py:467
 msgid "On what?"
 msgstr ""
 
-#: aleksis/core/forms.py:484
+#: aleksis/core/forms.py:493
 msgid "Select objects which the permission should be granted for:"
 msgstr ""
 
-#: aleksis/core/forms.py:487
+#: aleksis/core/forms.py:496
 msgid "Grant the permission for all objects"
 msgstr ""
 
-#: aleksis/core/forms.py:495
+#: aleksis/core/forms.py:504
 msgid "You must select at least one group or person which should get the permission."
 msgstr ""
 
-#: aleksis/core/forms.py:500
+#: aleksis/core/forms.py:509
 msgid "You must grant the permission to all objects or to specific objects."
 msgstr ""
 
-#: aleksis/core/forms.py:587
+#: aleksis/core/forms.py:596
 msgid "Address data"
 msgstr ""
 
-#: aleksis/core/forms.py:599
+#: aleksis/core/forms.py:608
 msgid "Account data"
 msgstr ""
 
-#: aleksis/core/forms.py:606
+#: aleksis/core/forms.py:615
 msgid "Password"
 msgstr ""
 
-#: aleksis/core/forms.py:609
+#: aleksis/core/forms.py:618
 msgid "Password (again)"
 msgstr ""
 
-#: aleksis/core/forms.py:762
+#: aleksis/core/forms.py:771
 msgid "The selected action does not exist."
 msgstr ""
 
-#: aleksis/core/forms.py:773
+#: aleksis/core/forms.py:782
 msgid "You do not have permission to run {} on all selected objects."
 msgstr ""
 
-#: aleksis/core/forms.py:829
+#: aleksis/core/forms.py:838
 msgid "No valid selection."
 msgstr ""
 
@@ -290,697 +290,744 @@ msgstr ""
 msgid "No backup result found!"
 msgstr ""
 
-#: aleksis/core/mixins.py:511
+#: aleksis/core/mixins.py:539
 msgid "Linked school term"
 msgstr ""
 
-#: aleksis/core/models.py:83
+#: aleksis/core/models.py:95
 msgid "Boolean (Yes/No)"
 msgstr ""
 
-#: aleksis/core/models.py:84
+#: aleksis/core/models.py:96
 msgid "Text (one line)"
 msgstr ""
 
-#: aleksis/core/models.py:86
+#: aleksis/core/models.py:98
 msgid "Date and time"
 msgstr ""
 
-#: aleksis/core/models.py:87
+#: aleksis/core/models.py:99
 msgid "Decimal number"
 msgstr ""
 
-#: aleksis/core/models.py:88 aleksis/core/models.py:211
+#: aleksis/core/models.py:100 aleksis/core/models.py:223
 msgid "E-mail address"
 msgstr ""
 
-#: aleksis/core/models.py:89
+#: aleksis/core/models.py:101
 msgid "Integer"
 msgstr ""
 
-#: aleksis/core/models.py:90
+#: aleksis/core/models.py:102
 msgid "IP address"
 msgstr ""
 
-#: aleksis/core/models.py:91
+#: aleksis/core/models.py:103
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr ""
 
-#: aleksis/core/models.py:92
+#: aleksis/core/models.py:104
 msgid "Text (multi-line)"
 msgstr ""
 
-#: aleksis/core/models.py:94
+#: aleksis/core/models.py:106
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:106 aleksis/core/models.py:1078
+#: aleksis/core/models.py:118 aleksis/core/models.py:1100
+#: aleksis/core/models.py:1729
 msgid "Name"
 msgstr ""
 
-#: aleksis/core/models.py:108
+#: aleksis/core/models.py:120 aleksis/core/models.py:1532
 msgid "Start date"
 msgstr ""
 
-#: aleksis/core/models.py:109
+#: aleksis/core/models.py:121 aleksis/core/models.py:1533
 msgid "End date"
 msgstr ""
 
-#: aleksis/core/models.py:128
+#: aleksis/core/models.py:140 aleksis/core/schema/school_term.py:48
 msgid "The start date must be earlier than the end date."
 msgstr ""
 
-#: aleksis/core/models.py:135
+#: aleksis/core/models.py:147 aleksis/core/schema/school_term.py:53
 msgid "There is already a school term for this time or a part of this time."
 msgstr ""
 
-#: aleksis/core/models.py:143
-#: aleksis/core/templates/core/school_term/list.html:8
-#: aleksis/core/templates/core/school_term/list.html:9
+#: aleksis/core/models.py:155
 msgid "School terms"
 msgstr ""
 
-#: aleksis/core/models.py:164 aleksis/core/models.py:1027
+#: aleksis/core/models.py:176 aleksis/core/models.py:1049
 msgid "Person"
 msgstr ""
 
-#: aleksis/core/models.py:167
+#: aleksis/core/models.py:179
 msgid "Can view address"
 msgstr ""
 
-#: aleksis/core/models.py:168
+#: aleksis/core/models.py:180
 msgid "Can view contact details"
 msgstr ""
 
-#: aleksis/core/models.py:169
+#: aleksis/core/models.py:181
 msgid "Can view photo"
 msgstr ""
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:182
 msgid "Can view avatar image"
 msgstr ""
 
-#: aleksis/core/models.py:171
+#: aleksis/core/models.py:183
 msgid "Can view persons groups"
 msgstr ""
 
-#: aleksis/core/models.py:172
+#: aleksis/core/models.py:184
 msgid "Can view personal details"
 msgstr ""
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "female"
 msgstr ""
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "male"
 msgstr ""
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "other"
 msgstr ""
 
-#: aleksis/core/models.py:190 aleksis/core/models.py:1382
+#: aleksis/core/models.py:202 aleksis/core/models.py:1404
 msgid "Linked user"
 msgstr ""
 
-#: aleksis/core/models.py:196
+#: aleksis/core/models.py:208
 msgid "Additional name(s)"
 msgstr ""
 
-#: aleksis/core/models.py:200 aleksis/core/models.py:512
-#: aleksis/core/models.py:1468
+#: aleksis/core/models.py:212 aleksis/core/models.py:534
+#: aleksis/core/models.py:1490
 msgid "Short name"
 msgstr ""
 
-#: aleksis/core/models.py:203
+#: aleksis/core/models.py:215
 msgid "Street"
 msgstr ""
 
-#: aleksis/core/models.py:204
+#: aleksis/core/models.py:216
 msgid "Street number"
 msgstr ""
 
-#: aleksis/core/models.py:205
+#: aleksis/core/models.py:217
 msgid "Postal code"
 msgstr ""
 
-#: aleksis/core/models.py:206
+#: aleksis/core/models.py:218
 msgid "Place"
 msgstr ""
 
-#: aleksis/core/models.py:208
+#: aleksis/core/models.py:220
 msgid "Home phone"
 msgstr ""
 
-#: aleksis/core/models.py:209
+#: aleksis/core/models.py:221
 msgid "Mobile phone"
 msgstr ""
 
-#: aleksis/core/models.py:213
+#: aleksis/core/models.py:225
 msgid "Date of birth"
 msgstr ""
 
-#: aleksis/core/models.py:214
+#: aleksis/core/models.py:226
 msgid "Place of birth"
 msgstr ""
 
-#: aleksis/core/models.py:215
+#: aleksis/core/models.py:227
 msgid "Sex"
 msgstr ""
 
-#: aleksis/core/models.py:222 aleksis/core/models.py:551
+#: aleksis/core/models.py:234 aleksis/core/models.py:573
 msgid "This is an official photo, used for official documents and for internal use cases."
 msgstr ""
 
-#: aleksis/core/models.py:227 aleksis/core/models.py:555
+#: aleksis/core/models.py:239 aleksis/core/models.py:577
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:230 aleksis/core/models.py:558
+#: aleksis/core/models.py:242 aleksis/core/models.py:580
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:235
+#: aleksis/core/models.py:247
 msgid "Guardians / Parents"
 msgstr ""
 
-#: aleksis/core/models.py:242
+#: aleksis/core/models.py:254
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:245 aleksis/core/models.py:725
-#: aleksis/core/models.py:749 aleksis/core/models.py:844
-#: aleksis/core/models.py:1113
+#: aleksis/core/models.py:257 aleksis/core/models.py:747
+#: aleksis/core/models.py:771 aleksis/core/models.py:866
+#: aleksis/core/models.py:1135
 msgid "Description"
 msgstr ""
 
-#: aleksis/core/models.py:465
+#: aleksis/core/models.py:487
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:467
+#: aleksis/core/models.py:489
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:469
+#: aleksis/core/models.py:491
 msgid "Required"
 msgstr ""
 
-#: aleksis/core/models.py:470
+#: aleksis/core/models.py:492
 msgid "Help text / description"
 msgstr ""
 
-#: aleksis/core/models.py:476
+#: aleksis/core/models.py:498
 msgid "Addtitional field for groups"
 msgstr ""
 
-#: aleksis/core/models.py:477
+#: aleksis/core/models.py:499
 msgid "Addtitional fields for groups"
 msgstr ""
 
-#: aleksis/core/models.py:497
+#: aleksis/core/models.py:519
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:498
+#: aleksis/core/models.py:520
 msgid "Can view statistics about group."
 msgstr ""
 
-#: aleksis/core/models.py:510 aleksis/core/models.py:1469
+#: aleksis/core/models.py:532 aleksis/core/models.py:1491
 msgid "Long name"
 msgstr ""
 
-#: aleksis/core/models.py:520 aleksis/core/templates/core/group/full.html:105
+#: aleksis/core/models.py:542 aleksis/core/templates/core/group/full.html:105
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:523 aleksis/core/templates/core/group/full.html:102
+#: aleksis/core/models.py:545 aleksis/core/templates/core/group/full.html:102
 msgid "Owners"
 msgstr ""
 
-#: aleksis/core/models.py:530 aleksis/core/templates/core/group/full.html:59
+#: aleksis/core/models.py:552 aleksis/core/templates/core/group/full.html:59
 msgid "Parent groups"
 msgstr ""
 
-#: aleksis/core/models.py:538
+#: aleksis/core/models.py:560
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:543
+#: aleksis/core/models.py:565
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 msgid "Additional fields"
 msgstr ""
 
-#: aleksis/core/models.py:724 aleksis/core/models.py:748
-#: aleksis/core/models.py:843 aleksis/core/models.py:1299
+#: aleksis/core/models.py:746 aleksis/core/models.py:770
+#: aleksis/core/models.py:865 aleksis/core/models.py:1321
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
 
-#: aleksis/core/models.py:727
+#: aleksis/core/models.py:749
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:733
+#: aleksis/core/models.py:755
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:734
+#: aleksis/core/models.py:756
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:740
+#: aleksis/core/models.py:762
 msgid "Sender"
 msgstr ""
 
-#: aleksis/core/models.py:745
+#: aleksis/core/models.py:767
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:750 aleksis/core/models.py:1079
+#: aleksis/core/models.py:772 aleksis/core/models.py:1101
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:753 aleksis/core/models.py:1080
-#: aleksis/core/models.py:1429
+#: aleksis/core/models.py:775 aleksis/core/models.py:1102
+#: aleksis/core/models.py:1451
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
 
-#: aleksis/core/models.py:756
+#: aleksis/core/models.py:778
 msgid "Send notification at"
 msgstr ""
 
-#: aleksis/core/models.py:758
+#: aleksis/core/models.py:780
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:759
+#: aleksis/core/models.py:781
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:776
+#: aleksis/core/models.py:798
 msgid "Notification"
 msgstr ""
 
-#: aleksis/core/models.py:777 aleksis/core/preferences.py:29
+#: aleksis/core/models.py:799 aleksis/core/preferences.py:28
 msgid "Notifications"
 msgstr ""
 
-#: aleksis/core/models.py:845
+#: aleksis/core/models.py:867
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:848
+#: aleksis/core/models.py:870
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:851
+#: aleksis/core/models.py:873
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:876
+#: aleksis/core/models.py:898
 msgid "Announcement"
 msgstr ""
 
-#: aleksis/core/models.py:877
+#: aleksis/core/models.py:899
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
 msgstr ""
 
-#: aleksis/core/models.py:914
+#: aleksis/core/models.py:936
 msgid "Announcement recipient"
 msgstr ""
 
-#: aleksis/core/models.py:915
+#: aleksis/core/models.py:937
 msgid "Announcement recipients"
 msgstr ""
 
-#: aleksis/core/models.py:935
+#: aleksis/core/models.py:957
 msgid "Widget Title"
 msgstr ""
 
-#: aleksis/core/models.py:936
+#: aleksis/core/models.py:958
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:959
 msgid "Widget is broken"
 msgstr ""
 
-#: aleksis/core/models.py:940
+#: aleksis/core/models.py:962
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:941
+#: aleksis/core/models.py:963
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:946
+#: aleksis/core/models.py:968
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:947
+#: aleksis/core/models.py:969
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:952
+#: aleksis/core/models.py:974
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:953
+#: aleksis/core/models.py:975
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:958
+#: aleksis/core/models.py:980
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:959
+#: aleksis/core/models.py:981
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:990
+#: aleksis/core/models.py:1012
 msgid "Can edit default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:991
+#: aleksis/core/models.py:1013
 msgid "Dashboard Widget"
 msgstr ""
 
-#: aleksis/core/models.py:992
+#: aleksis/core/models.py:1014
 msgid "Dashboard Widgets"
 msgstr ""
 
-#: aleksis/core/models.py:998
+#: aleksis/core/models.py:1020
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:999
+#: aleksis/core/models.py:1021
 msgid "Icon URL"
 msgstr ""
 
-#: aleksis/core/models.py:1005
+#: aleksis/core/models.py:1027
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:1006
+#: aleksis/core/models.py:1028
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1012
+#: aleksis/core/models.py:1034
 msgid "Content"
 msgstr ""
 
-#: aleksis/core/models.py:1018
+#: aleksis/core/models.py:1040
 msgid "Static content widget"
 msgstr ""
 
-#: aleksis/core/models.py:1019
+#: aleksis/core/models.py:1041
 msgid "Static content widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1024
+#: aleksis/core/models.py:1046
 msgid "Dashboard widget"
 msgstr ""
 
-#: aleksis/core/models.py:1029
+#: aleksis/core/models.py:1051
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:1030
+#: aleksis/core/models.py:1052
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:1045
+#: aleksis/core/models.py:1067
 msgid "Dashboard widget order"
 msgstr ""
 
-#: aleksis/core/models.py:1046
+#: aleksis/core/models.py:1068
 msgid "Dashboard widget orders"
 msgstr ""
 
-#: aleksis/core/models.py:1052
+#: aleksis/core/models.py:1074
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1065
+#: aleksis/core/models.py:1087
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1066
+#: aleksis/core/models.py:1088
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1098
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1086
+#: aleksis/core/models.py:1108
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1087
+#: aleksis/core/models.py:1109
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1134
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1119 aleksis/core/templates/core/group/full.html:50
+#: aleksis/core/models.py:1141 aleksis/core/templates/core/group/full.html:50
 msgid "Group type"
 msgstr ""
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1142
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
 msgstr ""
 
-#: aleksis/core/models.py:1133
+#: aleksis/core/models.py:1155
 msgid "Can view system status"
 msgstr ""
 
-#: aleksis/core/models.py:1134
+#: aleksis/core/models.py:1156
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1135
+#: aleksis/core/models.py:1157
 msgid "Can impersonate"
 msgstr ""
 
-#: aleksis/core/models.py:1136
+#: aleksis/core/models.py:1158
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1137
+#: aleksis/core/models.py:1159
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1138
+#: aleksis/core/models.py:1160
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1139
+#: aleksis/core/models.py:1161
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1140
+#: aleksis/core/models.py:1162
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1141
+#: aleksis/core/models.py:1163
 msgid "Can invite persons"
 msgstr ""
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1199
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1185
+#: aleksis/core/models.py:1207
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1186
+#: aleksis/core/models.py:1208
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1199
+#: aleksis/core/models.py:1221
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1200
+#: aleksis/core/models.py:1222
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1202
+#: aleksis/core/models.py:1224
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1203
+#: aleksis/core/models.py:1225
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1210
+#: aleksis/core/models.py:1232
 msgid "E-Mail address"
 msgstr ""
 
-#: aleksis/core/models.py:1270
+#: aleksis/core/models.py:1292
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1274
+#: aleksis/core/models.py:1296
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1277
+#: aleksis/core/models.py:1299
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1280
+#: aleksis/core/models.py:1302
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1287
+#: aleksis/core/models.py:1309
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1288
+#: aleksis/core/models.py:1310
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1293
+#: aleksis/core/models.py:1315
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1296
+#: aleksis/core/models.py:1318
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1300
+#: aleksis/core/models.py:1322
 msgid "Back URL"
 msgstr ""
 
-#: aleksis/core/models.py:1301
+#: aleksis/core/models.py:1323
 msgid "Progress title"
 msgstr ""
 
-#: aleksis/core/models.py:1302
+#: aleksis/core/models.py:1324
 msgid "Error message"
 msgstr ""
 
-#: aleksis/core/models.py:1303
+#: aleksis/core/models.py:1325
 msgid "Success message"
 msgstr ""
 
-#: aleksis/core/models.py:1304
+#: aleksis/core/models.py:1326
 msgid "Redirect on success URL"
 msgstr ""
 
-#: aleksis/core/models.py:1306
+#: aleksis/core/models.py:1328
 msgid "Additional button title"
 msgstr ""
 
-#: aleksis/core/models.py:1308
+#: aleksis/core/models.py:1330
 msgid "Additional button URL"
 msgstr ""
 
-#: aleksis/core/models.py:1310
+#: aleksis/core/models.py:1332
 msgid "Additional button icon"
 msgstr ""
 
-#: aleksis/core/models.py:1312
+#: aleksis/core/models.py:1334
 msgid "Result fetched"
 msgstr ""
 
-#: aleksis/core/models.py:1337
+#: aleksis/core/models.py:1359
 msgid "Background task completed successfully"
 msgstr ""
 
-#: aleksis/core/models.py:1338
+#: aleksis/core/models.py:1360
 msgid "The background task '{}' has been completed successfully."
 msgstr ""
 
-#: aleksis/core/models.py:1344
+#: aleksis/core/models.py:1366
 msgid "Background task failed"
 msgstr ""
 
-#: aleksis/core/models.py:1345
+#: aleksis/core/models.py:1367
 msgid "The background task '{}' has failed."
 msgstr ""
 
-#: aleksis/core/models.py:1354
+#: aleksis/core/models.py:1376
 msgid "Background task"
 msgstr ""
 
-#: aleksis/core/models.py:1368
+#: aleksis/core/models.py:1390
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1369
+#: aleksis/core/models.py:1391
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1385
+#: aleksis/core/models.py:1407
 msgid "Additional attributes"
 msgstr ""
 
-#: aleksis/core/models.py:1423
+#: aleksis/core/models.py:1445
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1433
+#: aleksis/core/models.py:1455
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
-#: aleksis/core/models.py:1478
+#: aleksis/core/models.py:1500
 msgid "Can view room timetable"
 msgstr ""
 
-#: aleksis/core/models.py:1480
+#: aleksis/core/models.py:1502
 msgid "Room"
 msgstr ""
 
-#: aleksis/core/models.py:1481
+#: aleksis/core/models.py:1503
 msgid "Rooms"
 msgstr ""
 
-#: aleksis/core/preferences.py:25
+#: aleksis/core/models.py:1528
+msgid "Start date and time"
+msgstr ""
+
+#: aleksis/core/models.py:1530
+msgid "End date and time"
+msgstr ""
+
+#: aleksis/core/models.py:1531
+msgid "Timezone"
+msgstr ""
+
+#: aleksis/core/models.py:1534
+msgid "Recurrences"
+msgstr ""
+
+#: aleksis/core/models.py:1540
+msgid "Amended base event"
+msgstr ""
+
+#: aleksis/core/models.py:1643
+msgid "Calendar Event"
+msgstr ""
+
+#: aleksis/core/models.py:1644
+msgid "Calendar Events"
+msgstr ""
+
+#: aleksis/core/models.py:1670
+msgid "Birthdays"
+msgstr ""
+
+#: aleksis/core/models.py:1674
+msgid "{}'s birthday"
+msgstr ""
+
+#: aleksis/core/models.py:1713 aleksis/core/models.py:1775
+msgid "Holidays"
+msgstr ""
+
+#: aleksis/core/models.py:1774
+msgid "Holiday"
+msgstr ""
+
+#: aleksis/core/preferences.py:24
 msgid "General"
 msgstr ""
 
-#: aleksis/core/preferences.py:26
+#: aleksis/core/preferences.py:25
 msgid "School"
 msgstr ""
 
-#: aleksis/core/preferences.py:27
+#: aleksis/core/preferences.py:26
 msgid "Theme"
 msgstr ""
 
-#: aleksis/core/preferences.py:28
+#: aleksis/core/preferences.py:27
 msgid "Mail"
 msgstr ""
 
-#: aleksis/core/preferences.py:30
+#: aleksis/core/preferences.py:29
 msgid "Footer"
 msgstr ""
 
-#: aleksis/core/preferences.py:31
+#: aleksis/core/preferences.py:30
 msgid "Accounts"
 msgstr ""
 
-#: aleksis/core/preferences.py:32
+#: aleksis/core/preferences.py:31
 msgid "Authentication"
 msgstr ""
 
-#: aleksis/core/preferences.py:33
+#: aleksis/core/preferences.py:32
 msgid "Internationalisation"
 msgstr ""
 
+#: aleksis/core/preferences.py:33
+msgid "Calendar"
+msgstr ""
+
 #: aleksis/core/preferences.py:43
 msgid "Site title"
 msgstr ""
@@ -1154,7 +1201,15 @@ msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
 #: aleksis/core/preferences.py:490
-msgid "Country for phone number parsing"
+msgid "Birthday calendar feed color"
+msgstr ""
+
+#: aleksis/core/preferences.py:502
+msgid "Holiday calendar feed color"
+msgstr ""
+
+#: aleksis/core/preferences.py:515
+msgid "Activated calendars"
 msgstr ""
 
 #: aleksis/core/settings.py:551
@@ -1169,22 +1224,9 @@ msgstr ""
 msgid "Ukrainian"
 msgstr ""
 
-#: aleksis/core/tables.py:25
-#: aleksis/core/templates/core/announcement/list.html:36
-#: aleksis/core/templates/core/group/full.html:26
-#: aleksis/core/templates/oauth2_provider/application/detail.html:17
-msgid "Edit"
-msgstr ""
-
-#: aleksis/core/tables.py:27 aleksis/core/tables.py:148
-#: aleksis/core/tables.py:185
-#: aleksis/core/templates/core/announcement/list.html:22
-msgid "Actions"
-msgstr ""
-
-#: aleksis/core/tables.py:115 aleksis/core/tables.py:116
-#: aleksis/core/tables.py:130 aleksis/core/tables.py:146
-#: aleksis/core/tables.py:183
+#: aleksis/core/tables.py:97 aleksis/core/tables.py:98
+#: aleksis/core/tables.py:112 aleksis/core/tables.py:128
+#: aleksis/core/tables.py:165
 #: aleksis/core/templates/core/announcement/list.html:42
 #: aleksis/core/templates/core/group/full.html:33
 #: aleksis/core/templates/core/pages/delete.html:22
@@ -1192,6 +1234,11 @@ msgstr ""
 msgid "Delete"
 msgstr ""
 
+#: aleksis/core/tables.py:130 aleksis/core/tables.py:167
+#: aleksis/core/templates/core/announcement/list.html:22
+msgid "Actions"
+msgstr ""
+
 #: aleksis/core/templates/403.html:14 aleksis/core/templates/500.html:10
 #: aleksis/core/templates/oauth2_provider/authorize.html:54
 msgid "Error"
@@ -1262,6 +1309,13 @@ msgstr ""
 msgid "Your AlekSIS team"
 msgstr ""
 
+#: aleksis/core/templates/account/email/email_confirmation_message.txt:6
+#, python-format
+msgid ""
+"Someone tried to register an account with the username %(user_display)s and your e-mail address on %(site_domain)s.\n"
+"If it was you, please confirm the registration by clicking on the following link:"
+msgstr ""
+
 #: aleksis/core/templates/account/email_confirm.html:5
 #: aleksis/core/templates/account/email_confirm.html:6
 #: aleksis/core/templates/account/email_confirm.html:17
@@ -1494,6 +1548,12 @@ msgstr ""
 msgid "Recipients"
 msgstr ""
 
+#: aleksis/core/templates/core/announcement/list.html:36
+#: aleksis/core/templates/core/group/full.html:26
+#: aleksis/core/templates/oauth2_provider/application/detail.html:17
+msgid "Edit"
+msgstr ""
+
 #: aleksis/core/templates/core/announcement/list.html:50
 msgid "There are no announcements."
 msgstr ""
@@ -2042,17 +2102,6 @@ msgstr ""
 msgid "Selected persons"
 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 ""
-
-#: aleksis/core/templates/core/school_term/edit.html:6
-#: aleksis/core/templates/core/school_term/edit.html:7
-msgid "Edit school term"
-msgstr ""
-
 #: aleksis/core/templates/dynamic_preferences/form.html:5
 msgid "Preferences"
 msgstr ""
@@ -2812,157 +2861,149 @@ msgstr ""
 msgid "Download PDF"
 msgstr ""
 
-#: aleksis/core/views.py:285
-msgid "The school term has been created."
-msgstr ""
-
-#: aleksis/core/views.py:297
-msgid "The school term has been saved."
-msgstr ""
-
-#: aleksis/core/views.py:401
+#: aleksis/core/views.py:371
 msgid "The child groups were successfully saved."
 msgstr ""
 
-#: aleksis/core/views.py:420 aleksis/core/views.py:430
+#: aleksis/core/views.py:390 aleksis/core/views.py:400
 msgid "The person has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:480
+#: aleksis/core/views.py:450
 msgid "The group has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:528
+#: aleksis/core/views.py:498
 msgid "Maintenance mode was turned on successfully."
 msgstr ""
 
-#: aleksis/core/views.py:530
+#: aleksis/core/views.py:500
 msgid "Maintenance mode was turned off successfully."
 msgstr ""
 
-#: aleksis/core/views.py:588
+#: aleksis/core/views.py:558
 msgid "The announcement has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:604
+#: aleksis/core/views.py:574
 msgid "The announcement has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:673
+#: aleksis/core/views.py:643
 msgid "The requested preference registry does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:692
+#: aleksis/core/views.py:662
 msgid "The preferences have been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:716
+#: aleksis/core/views.py:686
 msgid "The person has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:730
+#: aleksis/core/views.py:700
 msgid "The group has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:762
+#: aleksis/core/views.py:732
 msgid "The additional field has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:797
+#: aleksis/core/views.py:767
 msgid "The additional field has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:822
+#: aleksis/core/views.py:792
 msgid "The group type has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:853
+#: aleksis/core/views.py:823
 msgid "The group type has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:888
+#: aleksis/core/views.py:858
 msgid "Progress: Run data checks"
 msgstr ""
 
-#: aleksis/core/views.py:889
+#: aleksis/core/views.py:859
 msgid "Run data checks …"
 msgstr ""
 
-#: aleksis/core/views.py:890
+#: aleksis/core/views.py:860
 msgid "The data checks were run successfully."
 msgstr ""
 
-#: aleksis/core/views.py:891
+#: aleksis/core/views.py:861
 msgid "There was a problem while running data checks."
 msgstr ""
 
-#: aleksis/core/views.py:908
+#: aleksis/core/views.py:878
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/views.py:918
+#: aleksis/core/views.py:888
 msgid "The requested solve option does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:951
+#: aleksis/core/views.py:921
 msgid "The dashboard widget has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:981
+#: aleksis/core/views.py:951
 msgid "The dashboard widget has been created."
 msgstr ""
 
-#: aleksis/core/views.py:991
+#: aleksis/core/views.py:961
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1063
+#: aleksis/core/views.py:1033
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1065
+#: aleksis/core/views.py:1035
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1136
+#: aleksis/core/views.py:1106
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1233
+#: aleksis/core/views.py:1203
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1243
+#: aleksis/core/views.py:1213
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1253
+#: aleksis/core/views.py:1223
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1263
+#: aleksis/core/views.py:1233
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1273
+#: aleksis/core/views.py:1243
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1382
+#: aleksis/core/views.py:1352
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1389
+#: aleksis/core/views.py:1359
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1465
+#: aleksis/core/views.py:1435
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1476
+#: aleksis/core/views.py:1446
 msgid "Person was already invited."
 msgstr ""
 
diff --git a/aleksis/core/locale/ru/LC_MESSAGES/django.po b/aleksis/core/locale/ru/LC_MESSAGES/django.po
index e5977044c..6748904be 100644
--- a/aleksis/core/locale/ru/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/ru/LC_MESSAGES/django.po
@@ -7,44 +7,45 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-02-27 13:23+0100\n"
+"POT-Creation-Date: 2023-07-23 13:39+0200\n"
 "PO-Revision-Date: 2023-05-26 04:37+0000\n"
 "Last-Translator: Serhii Horichenko <m@sgg.im>\n"
-"Language-Team: Russian <https://translate.edugit.org/projects/aleksis/"
-"aleksis-core/ru/>\n"
+"Language-Team: Russian <https://translate.edugit.org/projects/aleksis/aleksis-core/ru/>\n"
 "Language: ru\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
-"%100>=11 && n%100<=14)? 2 : 3);\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
 "X-Generator: Weblate 4.12.1\n"
 
-#: aleksis/core/apps.py:155 aleksis/core/apps.py:161
+#: aleksis/core/apps.py:151
+#, fuzzy
+msgid "You have been logged out successfully."
+msgstr "Свойства сохранены."
+
+#: aleksis/core/apps.py:161
 msgid "OpenID Connect scope"
 msgstr "Граница действия OpenID Connect"
 
-#: aleksis/core/apps.py:156 aleksis/core/apps.py:162
+#: aleksis/core/apps.py:162
 msgid "Given name, family name, link to profile and picture if existing."
 msgstr "Имя, фамилия, ссылка на профиль и фото, если есть."
 
-#: aleksis/core/apps.py:157 aleksis/core/apps.py:163
+#: aleksis/core/apps.py:163
 msgid "Full home postal address"
 msgstr "Полный домашний почтовый адрес"
 
-#: aleksis/core/apps.py:158 aleksis/core/apps.py:164
+#: aleksis/core/apps.py:164
 msgid "Email address"
 msgstr "Адрес эл.почты"
 
-#: aleksis/core/apps.py:159 aleksis/core/apps.py:165
+#: aleksis/core/apps.py:165
 msgid "Home and mobile phone"
 msgstr "Домашний и мобильный телефоны"
 
-#: aleksis/core/apps.py:160 aleksis/core/forms.py:220
-#: aleksis/core/models.py:494 aleksis/core/templates/core/group/list.html:8
-#: aleksis/core/templates/core/group/list.html:9 aleksis/core/apps.py:166
-#: aleksis/core/forms.py:221 aleksis/core/models.py:495
+#: aleksis/core/apps.py:166 aleksis/core/forms.py:231
+#: aleksis/core/models.py:517 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/templates/core/group/list.html:9
 msgid "Groups"
 msgstr "Группы"
 
@@ -102,187 +103,172 @@ msgstr "Разрешение"
 msgid "Content type"
 msgstr "Тип содержимого"
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:720
-#: aleksis/core/models.py:721
+#: aleksis/core/filters.py:113 aleksis/core/models.py:743
 msgid "User"
 msgstr "Пользователь"
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:493
-#: aleksis/core/models.py:494
+#: aleksis/core/filters.py:135 aleksis/core/models.py:516
 msgid "Group"
 msgstr "Группа"
 
-#: aleksis/core/forms.py:50 aleksis/core/forms.py:581 aleksis/core/forms.py:51
-#: aleksis/core/forms.py:582
+#: aleksis/core/forms.py:50 aleksis/core/forms.py:591
 msgid "Base data"
 msgstr "Основные данные"
 
-#: aleksis/core/forms.py:55 aleksis/core/tables.py:47 aleksis/core/forms.py:56
+#: aleksis/core/forms.py:55 aleksis/core/tables.py:29
 msgid "Address"
 msgstr "Адрес"
 
-#: aleksis/core/forms.py:56 aleksis/core/forms.py:590 aleksis/core/forms.py:57
-#: aleksis/core/forms.py:591
+#: aleksis/core/forms.py:56 aleksis/core/forms.py:600
 msgid "Contact data"
 msgstr "Контактные данные"
 
-#: aleksis/core/forms.py:58 aleksis/core/forms.py:59
+#: aleksis/core/forms.py:58
 msgid "Advanced personal data"
 msgstr "Дополнительные личные данные"
 
-#: aleksis/core/forms.py:106 aleksis/core/forms.py:107
+#: aleksis/core/forms.py:106
 msgid "New user"
 msgstr "Новый пользователь"
 
-#: aleksis/core/forms.py:106 aleksis/core/forms.py:107
+#: aleksis/core/forms.py:106
 msgid "Create a new account"
 msgstr "Создать новую учётную запись"
 
-#: aleksis/core/forms.py:132 aleksis/core/forms.py:133
+#: aleksis/core/forms.py:132
 msgid "You cannot set a new username when also selecting an existing user."
 msgstr "После выбора существующего пользователя создать новый логин нельзя."
 
-#: aleksis/core/forms.py:136 aleksis/core/forms.py:137
+#: aleksis/core/forms.py:136
 msgid "This username is already in use."
 msgstr "Этот логин уже занят."
 
-#: aleksis/core/forms.py:153 aleksis/core/models.py:141
-#: aleksis/core/forms.py:154 aleksis/core/models.py:142
+#: aleksis/core/forms.py:153 aleksis/core/models.py:154
 msgid "School term"
 msgstr "Учебный год"
 
-#: aleksis/core/forms.py:154 aleksis/core/forms.py:155
+#: aleksis/core/forms.py:154
 msgid "Common data"
 msgstr "Общие данные"
 
-#: aleksis/core/forms.py:155 aleksis/core/forms.py:207
-#: aleksis/core/models.py:164 aleksis/core/templates/core/person/list.html:8
-#: aleksis/core/templates/core/person/list.html:9 aleksis/core/forms.py:156
-#: aleksis/core/forms.py:208 aleksis/core/models.py:165
+#: aleksis/core/forms.py:155 aleksis/core/forms.py:218
+#: aleksis/core/models.py:177 aleksis/core/templates/core/person/list.html:8
+#: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
 msgstr "Люди"
 
-#: aleksis/core/forms.py:156 aleksis/core/forms.py:592
-#: aleksis/core/forms.py:157 aleksis/core/forms.py:593
+#: aleksis/core/forms.py:156 aleksis/core/forms.py:602
 msgid "Additional data"
 msgstr "Дополнительные данные"
 
-#: aleksis/core/forms.py:157 aleksis/core/models.py:217
-#: aleksis/core/models.py:546 aleksis/core/tables.py:46
-#: aleksis/core/forms.py:158 aleksis/core/models.py:218
-#: aleksis/core/models.py:547
+#: aleksis/core/forms.py:157 aleksis/core/models.py:230
+#: aleksis/core/models.py:569 aleksis/core/tables.py:28
 msgid "Photo"
 msgstr "Фото"
 
-#: aleksis/core/forms.py:199 aleksis/core/forms.py:202
-#: aleksis/core/models.py:84 aleksis/core/forms.py:200
-#: aleksis/core/forms.py:203 aleksis/core/models.py:85
+#: aleksis/core/forms.py:210 aleksis/core/forms.py:213
+#: aleksis/core/models.py:97
 msgid "Date"
 msgstr "Дата"
 
-#: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:92 aleksis/core/forms.py:201
-#: aleksis/core/forms.py:204 aleksis/core/models.py:93
+#: aleksis/core/forms.py:211 aleksis/core/forms.py:214
+#: aleksis/core/models.py:105
 msgid "Time"
 msgstr "Время"
 
-#: aleksis/core/forms.py:233 aleksis/core/forms.py:234
+#: aleksis/core/forms.py:244
 msgid "From when until when should the announcement be displayed?"
 msgstr "С какого и по какое время это объявление должно отображаться?"
 
-#: aleksis/core/forms.py:236 aleksis/core/forms.py:237
+#: aleksis/core/forms.py:247
 msgid "Who should see the announcement?"
 msgstr "Кто должен видеть это объявление?"
 
-#: aleksis/core/forms.py:237 aleksis/core/forms.py:238
+#: aleksis/core/forms.py:248
 msgid "Write your announcement:"
 msgstr "Напишите свое объявление:"
 
-#: aleksis/core/forms.py:276 aleksis/core/forms.py:277
-msgid ""
-"You are not allowed to create announcements which are only valid in the past."
+#: aleksis/core/forms.py:287
+msgid "You are not allowed to create announcements which are only valid in the past."
 msgstr "Объявления для прошлого Вам создавать не разрешено."
 
-#: aleksis/core/forms.py:280 aleksis/core/forms.py:281
+#: aleksis/core/forms.py:291
 msgid "The from date and time must be earlier then the until date and time."
 msgstr "Дата и время начала должны быть до даты и времени окончания."
 
-#: aleksis/core/forms.py:289 aleksis/core/forms.py:290
+#: aleksis/core/forms.py:300
 msgid "You need at least one recipient."
 msgstr "Нужен хотя бы один получатель."
 
-#: aleksis/core/forms.py:398 aleksis/core/forms.py:399
+#: aleksis/core/forms.py:408
 msgid "Invitation code"
 msgstr "Код приглашения"
 
-#: aleksis/core/forms.py:399 aleksis/core/forms.py:400
+#: aleksis/core/forms.py:409
 msgid "Please enter your invitation code."
 msgstr "Укажите, пожалуйста, код приглашения."
 
-#: aleksis/core/forms.py:418 aleksis/core/models.py:192
-#: aleksis/core/forms.py:419 aleksis/core/models.py:193
+#: aleksis/core/forms.py:428 aleksis/core/models.py:205
 msgid "First name"
 msgstr "Имя"
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:193
-#: aleksis/core/forms.py:420 aleksis/core/models.py:194
+#: aleksis/core/forms.py:429 aleksis/core/models.py:206
 msgid "Last name"
 msgstr "Фамилия"
 
-#: aleksis/core/forms.py:428 aleksis/core/forms.py:429
+#: aleksis/core/forms.py:438
 msgid "A person is using this e-mail address"
 msgstr "Этот эл.адрес кем-то используется"
 
-#: aleksis/core/forms.py:456 aleksis/core/forms.py:457
+#: aleksis/core/forms.py:466
 msgid "Who should get the permission?"
 msgstr "Кто должен получить такое разрешение?"
 
-#: aleksis/core/forms.py:457 aleksis/core/forms.py:458
+#: aleksis/core/forms.py:467
 msgid "On what?"
 msgstr "В случае чего?"
 
-#: aleksis/core/forms.py:483 aleksis/core/forms.py:484
+#: aleksis/core/forms.py:493
 msgid "Select objects which the permission should be granted for:"
 msgstr "Отметьте объекты, к которым будет предоставлен доступ:"
 
-#: aleksis/core/forms.py:486 aleksis/core/forms.py:487
+#: aleksis/core/forms.py:496
 msgid "Grant the permission for all objects"
 msgstr "Предоставить доступ ко всем объектам"
 
-#: aleksis/core/forms.py:494 aleksis/core/forms.py:495
-msgid ""
-"You must select at least one group or person which should get the permission."
+#: aleksis/core/forms.py:504
+msgid "You must select at least one group or person which should get the permission."
 msgstr "Вам нужно выбрать хотя бы одну группу или физлицо, кто получит доступ."
 
-#: aleksis/core/forms.py:499 aleksis/core/forms.py:500
+#: aleksis/core/forms.py:509
 msgid "You must grant the permission to all objects or to specific objects."
 msgstr "Вы должны предоставить доступ ко всем или к конкретным объектам."
 
-#: aleksis/core/forms.py:586 aleksis/core/forms.py:587
+#: aleksis/core/forms.py:596
 msgid "Address data"
 msgstr "Подробности адреса"
 
-#: aleksis/core/forms.py:598 aleksis/core/forms.py:599
+#: aleksis/core/forms.py:608
 msgid "Account data"
 msgstr "Данные учётной записи"
 
-#: aleksis/core/forms.py:605 aleksis/core/forms.py:606
+#: aleksis/core/forms.py:615
 msgid "Password"
 msgstr "Пароль"
 
-#: aleksis/core/forms.py:608 aleksis/core/forms.py:609
+#: aleksis/core/forms.py:618
 msgid "Password (again)"
 msgstr "Пароль (ещё раз)"
 
-#: aleksis/core/forms.py:761 aleksis/core/forms.py:762
+#: aleksis/core/forms.py:771
 msgid "The selected action does not exist."
 msgstr "Выбранное действие не существует."
 
-#: aleksis/core/forms.py:772 aleksis/core/forms.py:773
+#: aleksis/core/forms.py:782
 msgid "You do not have permission to run {} on all selected objects."
 msgstr "У Вас нет разрешения на запуск {} на всех выбранных объектах."
 
-#: aleksis/core/forms.py:828 aleksis/core/forms.py:829
+#: aleksis/core/forms.py:838
 msgid "No valid selection."
 msgstr "Неправильный выбор."
 
@@ -306,729 +292,762 @@ msgstr "Резервная копия не найдена!"
 msgid "No backup result found!"
 msgstr "Результат резервного копирования не найден!"
 
-#: aleksis/core/mixins.py:511
+#: aleksis/core/mixins.py:539
 msgid "Linked school term"
 msgstr "Связанный учебный год"
 
-#: aleksis/core/models.py:82 aleksis/core/models.py:83
+#: aleksis/core/models.py:95
 msgid "Boolean (Yes/No)"
 msgstr "Булево (Да/Нет)"
 
-#: aleksis/core/models.py:83 aleksis/core/models.py:84
+#: aleksis/core/models.py:96
 msgid "Text (one line)"
 msgstr "Текст (одна строка)"
 
-#: aleksis/core/models.py:85 aleksis/core/models.py:86
+#: aleksis/core/models.py:98
 msgid "Date and time"
 msgstr "Дата и время"
 
-#: aleksis/core/models.py:86 aleksis/core/models.py:87
+#: aleksis/core/models.py:99
 msgid "Decimal number"
 msgstr "Десятичное число"
 
-#: aleksis/core/models.py:87 aleksis/core/models.py:210
-#: aleksis/core/models.py:88 aleksis/core/models.py:211
+#: aleksis/core/models.py:100 aleksis/core/models.py:223
 msgid "E-mail address"
 msgstr "Адрес эл.почты"
 
-#: aleksis/core/models.py:88 aleksis/core/models.py:89
+#: aleksis/core/models.py:101
 msgid "Integer"
 msgstr "Целое"
 
-#: aleksis/core/models.py:89 aleksis/core/models.py:90
+#: aleksis/core/models.py:102
 msgid "IP address"
 msgstr "IP адрес"
 
-#: aleksis/core/models.py:90 aleksis/core/models.py:91
+#: aleksis/core/models.py:103
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr "Булево или пустое (Да/Нет/Ничего)"
 
-#: aleksis/core/models.py:91 aleksis/core/models.py:92
+#: aleksis/core/models.py:104
 msgid "Text (multi-line)"
 msgstr "Текст (многострочный)"
 
-#: aleksis/core/models.py:93 aleksis/core/models.py:94
+#: aleksis/core/models.py:106
 msgid "URL / Link"
 msgstr "URL / Ссылка"
 
-#: aleksis/core/models.py:105 aleksis/core/models.py:1077
-#: aleksis/core/models.py:106 aleksis/core/models.py:1078
+#: aleksis/core/models.py:118 aleksis/core/models.py:1100
+#: aleksis/core/models.py:1729
 msgid "Name"
 msgstr "Полное имя"
 
-#: aleksis/core/models.py:107 aleksis/core/models.py:108
+#: aleksis/core/models.py:120 aleksis/core/models.py:1532
 msgid "Start date"
 msgstr "Дата начала"
 
-#: aleksis/core/models.py:108 aleksis/core/models.py:109
+#: aleksis/core/models.py:121 aleksis/core/models.py:1533
 msgid "End date"
 msgstr "Дата окончания"
 
-#: aleksis/core/models.py:127 aleksis/core/models.py:128
+#: aleksis/core/models.py:140 aleksis/core/schema/school_term.py:48
 msgid "The start date must be earlier than the end date."
 msgstr "Дата начала должна быть ранее даты окончания."
 
-#: aleksis/core/models.py:134 aleksis/core/models.py:135
+#: aleksis/core/models.py:147 aleksis/core/schema/school_term.py:53
 msgid "There is already a school term for this time or a part of this time."
 msgstr "На это время или на его часть уже запланирован учебный год."
 
-#: aleksis/core/models.py:142
-#: aleksis/core/templates/core/school_term/list.html:8
-#: aleksis/core/templates/core/school_term/list.html:9
-#: aleksis/core/models.py:143
+#: aleksis/core/models.py:155
 msgid "School terms"
 msgstr "Учебный год"
 
-#: aleksis/core/models.py:163 aleksis/core/models.py:1026
-#: aleksis/core/models.py:164 aleksis/core/models.py:1027
+#: aleksis/core/models.py:176 aleksis/core/models.py:1049
 msgid "Person"
 msgstr "Физлицо"
 
-#: aleksis/core/models.py:166 aleksis/core/models.py:167
+#: aleksis/core/models.py:179
 msgid "Can view address"
 msgstr "Может видеть адрес"
 
-#: aleksis/core/models.py:167 aleksis/core/models.py:168
+#: aleksis/core/models.py:180
 msgid "Can view contact details"
 msgstr "Может видеть контактные данные"
 
-#: aleksis/core/models.py:168 aleksis/core/models.py:169
+#: aleksis/core/models.py:181
 msgid "Can view photo"
 msgstr "Может видеть фото"
 
-#: aleksis/core/models.py:169 aleksis/core/models.py:170
+#: aleksis/core/models.py:182
 msgid "Can view avatar image"
 msgstr "Может видеть аватар"
 
-#: aleksis/core/models.py:170 aleksis/core/models.py:171
+#: aleksis/core/models.py:183
 msgid "Can view persons groups"
 msgstr "Может видеть группы лиц"
 
-#: aleksis/core/models.py:171 aleksis/core/models.py:172
+#: aleksis/core/models.py:184
 msgid "Can view personal details"
 msgstr "Может видеть личные данные"
 
-#: aleksis/core/models.py:181 aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "female"
 msgstr "жен"
 
-#: aleksis/core/models.py:181 aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "male"
 msgstr "муж"
 
-#: aleksis/core/models.py:181 aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "other"
 msgstr "другой"
 
-#: aleksis/core/models.py:189 aleksis/core/models.py:1353
-#: aleksis/core/models.py:190 aleksis/core/models.py:1382
+#: aleksis/core/models.py:202 aleksis/core/models.py:1404
 msgid "Linked user"
 msgstr "Связанный пользователь"
 
-#: aleksis/core/models.py:195 aleksis/core/models.py:196
+#: aleksis/core/models.py:208
 msgid "Additional name(s)"
 msgstr "Дополнительные имена"
 
-#: aleksis/core/models.py:199 aleksis/core/models.py:511
-#: aleksis/core/models.py:1439 aleksis/core/models.py:200
-#: aleksis/core/models.py:512 aleksis/core/models.py:1468
+#: aleksis/core/models.py:212 aleksis/core/models.py:534
+#: aleksis/core/models.py:1490
 msgid "Short name"
 msgstr "Короткое имя"
 
-#: aleksis/core/models.py:202 aleksis/core/models.py:203
+#: aleksis/core/models.py:215
 msgid "Street"
 msgstr "Улица"
 
-#: aleksis/core/models.py:203 aleksis/core/models.py:204
+#: aleksis/core/models.py:216
 msgid "Street number"
 msgstr "Номер дома"
 
-#: aleksis/core/models.py:204 aleksis/core/models.py:205
+#: aleksis/core/models.py:217
 msgid "Postal code"
 msgstr "Почтовый индекс"
 
-#: aleksis/core/models.py:205 aleksis/core/models.py:206
+#: aleksis/core/models.py:218
 msgid "Place"
 msgstr "Город/место"
 
-#: aleksis/core/models.py:207 aleksis/core/models.py:208
+#: aleksis/core/models.py:220
 msgid "Home phone"
 msgstr "Домашний телефон"
 
-#: aleksis/core/models.py:208 aleksis/core/models.py:209
+#: aleksis/core/models.py:221
 msgid "Mobile phone"
 msgstr "Мобильный телефон"
 
-#: aleksis/core/models.py:212 aleksis/core/models.py:213
+#: aleksis/core/models.py:225
 msgid "Date of birth"
 msgstr "Дата рождения"
 
-#: aleksis/core/models.py:213 aleksis/core/models.py:214
+#: aleksis/core/models.py:226
 msgid "Place of birth"
 msgstr "Место рождения"
 
-#: aleksis/core/models.py:214 aleksis/core/models.py:215
+#: aleksis/core/models.py:227
 msgid "Sex"
 msgstr "Пол"
 
-#: aleksis/core/models.py:221 aleksis/core/models.py:550
-#: aleksis/core/models.py:222 aleksis/core/models.py:551
-msgid ""
-"This is an official photo, used for official documents and for internal use "
-"cases."
-msgstr ""
-"Это официальное фото, которое используется для документов и внутренних нужд."
+#: aleksis/core/models.py:234 aleksis/core/models.py:573
+msgid "This is an official photo, used for official documents and for internal use cases."
+msgstr "Это официальное фото, которое используется для документов и внутренних нужд."
 
-#: aleksis/core/models.py:226 aleksis/core/models.py:554
-#: aleksis/core/models.py:227 aleksis/core/models.py:555
+#: aleksis/core/models.py:239 aleksis/core/models.py:577
 msgid "Display picture / Avatar"
 msgstr "Отобразить фото/аватар"
 
-#: aleksis/core/models.py:229 aleksis/core/models.py:557
-#: aleksis/core/models.py:230 aleksis/core/models.py:558
+#: aleksis/core/models.py:242 aleksis/core/models.py:580
 msgid "This is a picture or an avatar for public display."
 msgstr "Это фото или аватар для общего отображения."
 
-#: aleksis/core/models.py:234 aleksis/core/models.py:235
+#: aleksis/core/models.py:247
 msgid "Guardians / Parents"
 msgstr "Опекуны / Родители"
 
-#: aleksis/core/models.py:241 aleksis/core/models.py:242
+#: aleksis/core/models.py:254
 msgid "Primary group"
 msgstr "Основная группа"
 
-#: aleksis/core/models.py:244 aleksis/core/models.py:724
-#: aleksis/core/models.py:748 aleksis/core/models.py:843
-#: aleksis/core/models.py:1112 aleksis/core/models.py:245
-#: aleksis/core/models.py:725 aleksis/core/models.py:749
-#: aleksis/core/models.py:844 aleksis/core/models.py:1113
+#: aleksis/core/models.py:257 aleksis/core/models.py:747
+#: aleksis/core/models.py:771 aleksis/core/models.py:866
+#: aleksis/core/models.py:1135
 msgid "Description"
 msgstr "Описание"
 
-#: aleksis/core/models.py:464 aleksis/core/models.py:465
+#: aleksis/core/models.py:487
 msgid "Title of field"
 msgstr "Название поля"
 
-#: aleksis/core/models.py:466 aleksis/core/models.py:467
+#: aleksis/core/models.py:489
 msgid "Type of field"
 msgstr "Тип поля"
 
-#: aleksis/core/models.py:468 aleksis/core/models.py:469
+#: aleksis/core/models.py:491
 msgid "Required"
 msgstr "Необходимое"
 
-#: aleksis/core/models.py:469 aleksis/core/models.py:470
+#: aleksis/core/models.py:492
 msgid "Help text / description"
 msgstr "Вспомогательный текст / описание"
 
-#: aleksis/core/models.py:475 aleksis/core/models.py:476
+#: aleksis/core/models.py:498
 msgid "Addtitional field for groups"
 msgstr "Дополнительное поле для групп"
 
-#: aleksis/core/models.py:476 aleksis/core/models.py:477
+#: aleksis/core/models.py:499
 msgid "Addtitional fields for groups"
 msgstr "Дополнительные поля для групп"
 
-#: aleksis/core/models.py:496 aleksis/core/models.py:497
+#: aleksis/core/models.py:519
 msgid "Can assign child groups to groups"
 msgstr "Может определять дочерние группы в группы"
 
-#: aleksis/core/models.py:497 aleksis/core/models.py:498
+#: aleksis/core/models.py:520
 msgid "Can view statistics about group."
 msgstr "Может видеть статистику группы."
 
-#: aleksis/core/models.py:509 aleksis/core/models.py:1440
-#: aleksis/core/models.py:510 aleksis/core/models.py:1469
+#: aleksis/core/models.py:532 aleksis/core/models.py:1491
 msgid "Long name"
 msgstr "Длинное имя"
 
-#: aleksis/core/models.py:519 aleksis/core/templates/core/group/full.html:105
-#: aleksis/core/models.py:520
+#: aleksis/core/models.py:542 aleksis/core/templates/core/group/full.html:105
 msgid "Members"
 msgstr "Участники"
 
-#: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:102
-#: aleksis/core/models.py:523
+#: aleksis/core/models.py:545 aleksis/core/templates/core/group/full.html:102
 msgid "Owners"
 msgstr "Владельцы"
 
-#: aleksis/core/models.py:529 aleksis/core/templates/core/group/full.html:59
-#: aleksis/core/models.py:530
+#: aleksis/core/models.py:552 aleksis/core/templates/core/group/full.html:59
 msgid "Parent groups"
 msgstr "Родительские группы"
 
-#: aleksis/core/models.py:537 aleksis/core/models.py:538
+#: aleksis/core/models.py:560
 msgid "Type of group"
 msgstr "Тип группы"
 
-#: aleksis/core/models.py:542
+#: aleksis/core/models.py:565
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
-#: aleksis/core/models.py:543
 msgid "Additional fields"
 msgstr "Дополнительные поля"
 
-#: aleksis/core/models.py:723 aleksis/core/models.py:747
-#: aleksis/core/models.py:842 aleksis/core/models.py:1270
+#: aleksis/core/models.py:746 aleksis/core/models.py:770
+#: aleksis/core/models.py:865 aleksis/core/models.py:1321
 #: aleksis/core/templates/core/announcement/list.html:18
-#: aleksis/core/models.py:724 aleksis/core/models.py:748
-#: aleksis/core/models.py:843 aleksis/core/models.py:1299
 msgid "Title"
 msgstr "Название"
 
-#: aleksis/core/models.py:726 aleksis/core/models.py:727
+#: aleksis/core/models.py:749
 msgid "Application"
 msgstr "Приложение"
 
-#: aleksis/core/models.py:732 aleksis/core/models.py:733
+#: aleksis/core/models.py:755
 msgid "Activity"
 msgstr "Активность"
 
-#: aleksis/core/models.py:733 aleksis/core/models.py:734
+#: aleksis/core/models.py:756
 msgid "Activities"
 msgstr "Активности"
 
-#: aleksis/core/models.py:739 aleksis/core/models.py:740
+#: aleksis/core/models.py:762
 msgid "Sender"
 msgstr "Отправитель"
 
-#: aleksis/core/models.py:744 aleksis/core/models.py:745
+#: aleksis/core/models.py:767
 msgid "Recipient"
 msgstr "Получатель"
 
-#: aleksis/core/models.py:749 aleksis/core/models.py:1078
-#: aleksis/core/models.py:750 aleksis/core/models.py:1079
+#: aleksis/core/models.py:772 aleksis/core/models.py:1101
 msgid "Link"
 msgstr "Ссылка"
 
-#: aleksis/core/models.py:752 aleksis/core/models.py:1079
-#: aleksis/core/models.py:1400
+#: aleksis/core/models.py:775 aleksis/core/models.py:1102
+#: aleksis/core/models.py:1451
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
-#: aleksis/core/models.py:753 aleksis/core/models.py:1080
-#: aleksis/core/models.py:1429
 msgid "Icon"
 msgstr "Иконка"
 
-#: aleksis/core/models.py:755 aleksis/core/models.py:756
+#: aleksis/core/models.py:778
 msgid "Send notification at"
 msgstr "Отправить уведомление в"
 
-#: aleksis/core/models.py:757 aleksis/core/models.py:758
+#: aleksis/core/models.py:780
 msgid "Read"
 msgstr "Читать"
 
-#: aleksis/core/models.py:758 aleksis/core/models.py:759
+#: aleksis/core/models.py:781
 msgid "Sent"
 msgstr "Отправлено"
 
-#: aleksis/core/models.py:775 aleksis/core/models.py:776
+#: aleksis/core/models.py:798
 msgid "Notification"
 msgstr "Уведомление"
 
-#: aleksis/core/models.py:776 aleksis/core/preferences.py:29
-#: aleksis/core/models.py:777
+#: aleksis/core/models.py:799 aleksis/core/preferences.py:28
 msgid "Notifications"
 msgstr "Уведомления"
 
-#: aleksis/core/models.py:844 aleksis/core/models.py:845
+#: aleksis/core/models.py:867
 msgid "Link to detailed view"
 msgstr "Ссылка на подробный обзор"
 
-#: aleksis/core/models.py:847 aleksis/core/models.py:848
+#: aleksis/core/models.py:870
 msgid "Date and time from when to show"
 msgstr "Дата и время, с которого показывать"
 
-#: aleksis/core/models.py:850 aleksis/core/models.py:851
+#: aleksis/core/models.py:873
 msgid "Date and time until when to show"
 msgstr "Дата и время, по какое показывать"
 
-#: aleksis/core/models.py:875 aleksis/core/models.py:876
+#: aleksis/core/models.py:898
 msgid "Announcement"
 msgstr "Объявление"
 
-#: aleksis/core/models.py:876
+#: aleksis/core/models.py:899
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
-#: aleksis/core/models.py:877
 msgid "Announcements"
 msgstr "Объявление"
 
-#: aleksis/core/models.py:913 aleksis/core/models.py:914
+#: aleksis/core/models.py:936
 msgid "Announcement recipient"
 msgstr "Получатель объявления"
 
-#: aleksis/core/models.py:914 aleksis/core/models.py:915
+#: aleksis/core/models.py:937
 msgid "Announcement recipients"
 msgstr "Получатели объявления"
 
-#: aleksis/core/models.py:934 aleksis/core/models.py:935
+#: aleksis/core/models.py:957
 msgid "Widget Title"
 msgstr "Название виджета"
 
-#: aleksis/core/models.py:935 aleksis/core/models.py:936
+#: aleksis/core/models.py:958
 msgid "Activate Widget"
 msgstr "Активировать виджет"
 
-#: aleksis/core/models.py:936 aleksis/core/models.py:937
+#: aleksis/core/models.py:959
 msgid "Widget is broken"
 msgstr "Виджет поломался"
 
-#: aleksis/core/models.py:939 aleksis/core/models.py:940
+#: aleksis/core/models.py:962
 msgid "Size on mobile devices"
 msgstr "Размер на мобильных"
 
-#: aleksis/core/models.py:940 aleksis/core/models.py:941
+#: aleksis/core/models.py:963
 msgid "<= 600 px, 12 columns"
 msgstr "<= 600 пикс, 12 столбцов"
 
-#: aleksis/core/models.py:945 aleksis/core/models.py:946
+#: aleksis/core/models.py:968
 msgid "Size on tablet devices"
 msgstr "Размер на планшетах"
 
-#: aleksis/core/models.py:946 aleksis/core/models.py:947
+#: aleksis/core/models.py:969
 msgid "> 600 px, 12 columns"
 msgstr "> 600 пикс, 12 столбцов"
 
-#: aleksis/core/models.py:951 aleksis/core/models.py:952
+#: aleksis/core/models.py:974
 msgid "Size on desktop devices"
 msgstr "Размер на ПК"
 
-#: aleksis/core/models.py:952 aleksis/core/models.py:953
+#: aleksis/core/models.py:975
 msgid "> 992 px, 12 columns"
 msgstr "> 992 пикс, 12 столбцов"
 
-#: aleksis/core/models.py:957 aleksis/core/models.py:958
+#: aleksis/core/models.py:980
 msgid "Size on large desktop devices"
 msgstr "Размер для больших экранов"
 
-#: aleksis/core/models.py:958 aleksis/core/models.py:959
+#: aleksis/core/models.py:981
 msgid "> 1200 px>, 12 columns"
 msgstr "> 1200 пикс, 12 столбцов"
 
-#: aleksis/core/models.py:989 aleksis/core/models.py:990
+#: aleksis/core/models.py:1012
 msgid "Can edit default dashboard"
 msgstr "Может редактировать типовую/стандартную информпанель"
 
-#: aleksis/core/models.py:990 aleksis/core/models.py:991
+#: aleksis/core/models.py:1013
 msgid "Dashboard Widget"
 msgstr "Виджет информпанели"
 
-#: aleksis/core/models.py:991 aleksis/core/models.py:992
+#: aleksis/core/models.py:1014
 msgid "Dashboard Widgets"
 msgstr "Виджеты информпанели"
 
-#: aleksis/core/models.py:997 aleksis/core/models.py:998
+#: aleksis/core/models.py:1020
 msgid "URL"
 msgstr "URL"
 
-#: aleksis/core/models.py:998 aleksis/core/models.py:999
+#: aleksis/core/models.py:1021
 msgid "Icon URL"
 msgstr "Иконка URL"
 
-#: aleksis/core/models.py:1004 aleksis/core/models.py:1005
+#: aleksis/core/models.py:1027
 msgid "External link widget"
 msgstr "Внешняя ссылка на виджет"
 
-#: aleksis/core/models.py:1005 aleksis/core/models.py:1006
+#: aleksis/core/models.py:1028
 msgid "External link widgets"
 msgstr "Внешние ссылки на виджеты"
 
-#: aleksis/core/models.py:1011 aleksis/core/models.py:1012
+#: aleksis/core/models.py:1034
 msgid "Content"
 msgstr "Содержимое"
 
-#: aleksis/core/models.py:1017 aleksis/core/models.py:1018
+#: aleksis/core/models.py:1040
 msgid "Static content widget"
 msgstr "Виджет с постоянным содержимым"
 
-#: aleksis/core/models.py:1018 aleksis/core/models.py:1019
+#: aleksis/core/models.py:1041
 msgid "Static content widgets"
 msgstr "Виджеты с постоянным содержимым"
 
-#: aleksis/core/models.py:1023 aleksis/core/models.py:1024
+#: aleksis/core/models.py:1046
 msgid "Dashboard widget"
 msgstr "Виджет информпанели"
 
-#: aleksis/core/models.py:1028 aleksis/core/models.py:1029
+#: aleksis/core/models.py:1051
 msgid "Order"
 msgstr "Порядок"
 
-#: aleksis/core/models.py:1029 aleksis/core/models.py:1030
+#: aleksis/core/models.py:1052
 msgid "Part of the default dashboard"
 msgstr "Часть типовой информпанели"
 
-#: aleksis/core/models.py:1044 aleksis/core/models.py:1045
+#: aleksis/core/models.py:1067
 msgid "Dashboard widget order"
 msgstr "Порядок виджета на информпанели"
 
-#: aleksis/core/models.py:1045 aleksis/core/models.py:1046
+#: aleksis/core/models.py:1068
 msgid "Dashboard widget orders"
 msgstr "Порядок виджетов на информпанели"
 
-#: aleksis/core/models.py:1051 aleksis/core/models.py:1052
+#: aleksis/core/models.py:1074
 msgid "Menu ID"
 msgstr "Меню ID"
 
-#: aleksis/core/models.py:1064 aleksis/core/models.py:1065
+#: aleksis/core/models.py:1087
 msgid "Custom menu"
 msgstr "Пользовательское меню"
 
-#: aleksis/core/models.py:1065 aleksis/core/models.py:1066
+#: aleksis/core/models.py:1088
 msgid "Custom menus"
 msgstr "Пользовательские меню"
 
-#: aleksis/core/models.py:1075 aleksis/core/models.py:1076
+#: aleksis/core/models.py:1098
 msgid "Menu"
 msgstr "Меню"
 
-#: aleksis/core/models.py:1085 aleksis/core/models.py:1086
+#: aleksis/core/models.py:1108
 msgid "Custom menu item"
 msgstr "Пункт пользовательского меню"
 
-#: aleksis/core/models.py:1086 aleksis/core/models.py:1087
+#: aleksis/core/models.py:1109
 msgid "Custom menu items"
 msgstr "Пункты пользовательского меню"
 
-#: aleksis/core/models.py:1111 aleksis/core/models.py:1112
+#: aleksis/core/models.py:1134
 msgid "Title of type"
 msgstr "Название типа"
 
-#: aleksis/core/models.py:1118 aleksis/core/templates/core/group/full.html:50
-#: aleksis/core/models.py:1119
+#: aleksis/core/models.py:1141 aleksis/core/templates/core/group/full.html:50
 msgid "Group type"
 msgstr "Тип группы"
 
-#: aleksis/core/models.py:1119
+#: aleksis/core/models.py:1142
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
-#: aleksis/core/models.py:1120
 msgid "Group types"
 msgstr "Типы групп"
 
-#: aleksis/core/models.py:1132 aleksis/core/models.py:1133
+#: aleksis/core/models.py:1155
 msgid "Can view system status"
 msgstr "Может просматривать состояние системы"
 
-#: aleksis/core/models.py:1133 aleksis/core/models.py:1134
+#: aleksis/core/models.py:1156
 msgid "Can manage data"
 msgstr "Может управлять данными"
 
-#: aleksis/core/models.py:1134 aleksis/core/models.py:1135
+#: aleksis/core/models.py:1157
 msgid "Can impersonate"
 msgstr "Может маскироваться"
 
-#: aleksis/core/models.py:1135 aleksis/core/models.py:1136
+#: aleksis/core/models.py:1158
 msgid "Can use search"
 msgstr "Может использовать поиск"
 
-#: aleksis/core/models.py:1136 aleksis/core/models.py:1137
+#: aleksis/core/models.py:1159
 msgid "Can change site preferences"
 msgstr "Может менять свойства сайта"
 
-#: aleksis/core/models.py:1137 aleksis/core/models.py:1138
+#: aleksis/core/models.py:1160
 msgid "Can change person preferences"
 msgstr "Может менять персональные свойства"
 
-#: aleksis/core/models.py:1138 aleksis/core/models.py:1139
+#: aleksis/core/models.py:1161
 msgid "Can change group preferences"
 msgstr "Может менять свойства группы"
 
-#: aleksis/core/models.py:1139 aleksis/core/models.py:1140
+#: aleksis/core/models.py:1162
 msgid "Can test PDF generation"
 msgstr "Может генерировать тестовые PDF"
 
-#: aleksis/core/models.py:1140 aleksis/core/models.py:1141
+#: aleksis/core/models.py:1163
 msgid "Can invite persons"
 msgstr "Может приглашать других"
 
-#: aleksis/core/models.py:1176 aleksis/core/models.py:1177
+#: aleksis/core/models.py:1199
 msgid "Related data check task"
 msgstr "Задание проверки связанных данных"
 
-#: aleksis/core/models.py:1184 aleksis/core/models.py:1185
+#: aleksis/core/models.py:1207
 msgid "Issue solved"
 msgstr "Проблема решена"
 
-#: aleksis/core/models.py:1185 aleksis/core/models.py:1186
+#: aleksis/core/models.py:1208
 msgid "Notification sent"
 msgstr "Уведомление отправлено"
 
-#: aleksis/core/models.py:1198 aleksis/core/models.py:1199
+#: aleksis/core/models.py:1221
 msgid "Data check result"
 msgstr "Результат проверки данных"
 
-#: aleksis/core/models.py:1199 aleksis/core/models.py:1200
+#: aleksis/core/models.py:1222
 msgid "Data check results"
 msgstr "Результаты проверки данных"
 
-#: aleksis/core/models.py:1201 aleksis/core/models.py:1202
+#: aleksis/core/models.py:1224
 msgid "Can run data checks"
 msgstr "Может запускать проверки данных"
 
-#: aleksis/core/models.py:1202 aleksis/core/models.py:1203
+#: aleksis/core/models.py:1225
 msgid "Can solve data check problems"
 msgstr "Может решать проблемы проверки данных"
 
-#: aleksis/core/models.py:1209 aleksis/core/models.py:1210
+#: aleksis/core/models.py:1232
 msgid "E-Mail address"
 msgstr "Адрес эл.почты"
 
-#: aleksis/core/models.py:1241 aleksis/core/models.py:1270
+#: aleksis/core/models.py:1292
 msgid "Owner"
 msgstr "Владелец"
 
-#: aleksis/core/models.py:1245 aleksis/core/models.py:1274
+#: aleksis/core/models.py:1296
 msgid "File expires at"
 msgstr "Файл действителен до"
 
-#: aleksis/core/models.py:1248 aleksis/core/models.py:1277
+#: aleksis/core/models.py:1299
 msgid "Generated HTML file"
 msgstr "Сгенерированный файл HTML"
 
-#: aleksis/core/models.py:1251 aleksis/core/models.py:1280
+#: aleksis/core/models.py:1302
 msgid "Generated PDF file"
 msgstr "Сгенерированный файл PDF"
 
-#: aleksis/core/models.py:1258 aleksis/core/models.py:1287
+#: aleksis/core/models.py:1309
 msgid "PDF file"
 msgstr "Файл PDF"
 
-#: aleksis/core/models.py:1259 aleksis/core/models.py:1288
+#: aleksis/core/models.py:1310
 msgid "PDF files"
 msgstr "Файлы PDF"
 
-#: aleksis/core/models.py:1264 aleksis/core/models.py:1293
+#: aleksis/core/models.py:1315
 msgid "Task result"
 msgstr "Результат задания"
 
-#: aleksis/core/models.py:1267 aleksis/core/models.py:1296
+#: aleksis/core/models.py:1318
 msgid "Task user"
 msgstr "Пользователь задания"
 
-#: aleksis/core/models.py:1271 aleksis/core/models.py:1300
+#: aleksis/core/models.py:1322
 msgid "Back URL"
 msgstr "URL для возврата"
 
-#: aleksis/core/models.py:1272 aleksis/core/models.py:1301
+#: aleksis/core/models.py:1323
 msgid "Progress title"
 msgstr "Название процесса"
 
-#: aleksis/core/models.py:1273 aleksis/core/models.py:1302
+#: aleksis/core/models.py:1324
 msgid "Error message"
 msgstr "Сообщение об ошибке"
 
-#: aleksis/core/models.py:1274 aleksis/core/models.py:1303
+#: aleksis/core/models.py:1325
 msgid "Success message"
 msgstr "Сообщение об успехе"
 
-#: aleksis/core/models.py:1275 aleksis/core/models.py:1304
+#: aleksis/core/models.py:1326
 msgid "Redirect on success URL"
 msgstr "URL для перенаправления в случае успеха"
 
-#: aleksis/core/models.py:1277 aleksis/core/models.py:1306
+#: aleksis/core/models.py:1328
 msgid "Additional button title"
 msgstr "Название дополнительной кнопки"
 
-#: aleksis/core/models.py:1279 aleksis/core/models.py:1308
+#: aleksis/core/models.py:1330
 msgid "Additional button URL"
 msgstr "URL дополнительной кнопки"
 
-#: aleksis/core/models.py:1281 aleksis/core/models.py:1310
+#: aleksis/core/models.py:1332
 msgid "Additional button icon"
 msgstr "Иконка дополнительной кнопки"
 
-#: aleksis/core/models.py:1283 aleksis/core/models.py:1312
+#: aleksis/core/models.py:1334
 msgid "Result fetched"
 msgstr "Полученный результат"
 
-#: aleksis/core/models.py:1308 aleksis/core/models.py:1337
+#: aleksis/core/models.py:1359
 msgid "Background task completed successfully"
 msgstr "Фоновое задание успешно завершено"
 
-#: aleksis/core/models.py:1309 aleksis/core/models.py:1338
+#: aleksis/core/models.py:1360
 msgid "The background task '{}' has been completed successfully."
 msgstr "Фоновое задание \"{}\" успешно завершено."
 
-#: aleksis/core/models.py:1315 aleksis/core/models.py:1344
+#: aleksis/core/models.py:1366
 msgid "Background task failed"
 msgstr "Ошибка фонового задания"
 
-#: aleksis/core/models.py:1316 aleksis/core/models.py:1345
+#: aleksis/core/models.py:1367
 msgid "The background task '{}' has failed."
 msgstr "Ошибка фонового задания \"{}\"."
 
-#: aleksis/core/models.py:1325 aleksis/core/models.py:1354
+#: aleksis/core/models.py:1376
 msgid "Background task"
 msgstr "Фоновое задание"
 
-#: aleksis/core/models.py:1339 aleksis/core/models.py:1368
+#: aleksis/core/models.py:1390
 msgid "Task user assignment"
 msgstr "Назначение пользователя задания"
 
-#: aleksis/core/models.py:1340 aleksis/core/models.py:1369
+#: aleksis/core/models.py:1391
 msgid "Task user assignments"
 msgstr "Назначения пользователей задания"
 
-#: aleksis/core/models.py:1356 aleksis/core/models.py:1385
+#: aleksis/core/models.py:1407
 msgid "Additional attributes"
 msgstr "Дополнительные атрибуты"
 
-#: aleksis/core/models.py:1394 aleksis/core/models.py:1423
+#: aleksis/core/models.py:1445
 msgid "Allowed scopes that clients can request"
 msgstr "Разрешённые пределы действия, которые могут запрашивать клиенты"
 
-#: aleksis/core/models.py:1404 aleksis/core/models.py:1433
-msgid ""
-"This image will be shown as icon in the authorization flow. It should be "
-"squared."
-msgstr ""
-"Это изображение будет использоваться в качестве значка во время авторизации. "
-"Должно быть квадратным."
+#: aleksis/core/models.py:1455
+msgid "This image will be shown as icon in the authorization flow. It should be squared."
+msgstr "Это изображение будет использоваться в качестве значка во время авторизации. Должно быть квадратным."
 
-#: aleksis/core/models.py:1449 aleksis/core/models.py:1478
+#: aleksis/core/models.py:1500
 msgid "Can view room timetable"
 msgstr "Может просмативать расписание комнаты"
 
-#: aleksis/core/models.py:1451 aleksis/core/models.py:1480
+#: aleksis/core/models.py:1502
 msgid "Room"
 msgstr "Комната"
 
-#: aleksis/core/models.py:1452 aleksis/core/models.py:1481
+#: aleksis/core/models.py:1503
 msgid "Rooms"
 msgstr "Комнаты"
 
-#: aleksis/core/preferences.py:25
+#: aleksis/core/models.py:1528
+#, fuzzy
+#| msgid "Date and time"
+msgid "Start date and time"
+msgstr "Дата и время"
+
+#: aleksis/core/models.py:1530
+#, fuzzy
+#| msgid "Date and time"
+msgid "End date and time"
+msgstr "Дата и время"
+
+#: aleksis/core/models.py:1531
+#, fuzzy
+#| msgid "Time"
+msgid "Timezone"
+msgstr "Время"
+
+#: aleksis/core/models.py:1534
+#, fuzzy
+#| msgid "Preferences"
+msgid "Recurrences"
+msgstr "Свойства"
+
+#: aleksis/core/models.py:1540
+msgid "Amended base event"
+msgstr ""
+
+#: aleksis/core/models.py:1643
+#, fuzzy
+#| msgid "Calendar Feeds"
+msgid "Calendar Event"
+msgstr "Ленты календарей"
+
+#: aleksis/core/models.py:1644
+#, fuzzy
+#| msgid "Calendar Feeds"
+msgid "Calendar Events"
+msgstr "Ленты календарей"
+
+#: aleksis/core/models.py:1670
+#, fuzzy
+#| msgid "Birthday Calendar"
+msgid "Birthdays"
+msgstr "Календарь Дней Рождения"
+
+#: aleksis/core/models.py:1674
+#, fuzzy
+#| msgid "%(name)s's birthday"
+msgid "{}'s birthday"
+msgstr "%(name)s отмечает День Рождения"
+
+#: aleksis/core/models.py:1713 aleksis/core/models.py:1775
+msgid "Holidays"
+msgstr ""
+
+#: aleksis/core/models.py:1774
+msgid "Holiday"
+msgstr ""
+
+#: aleksis/core/preferences.py:24
 msgid "General"
 msgstr "Общее"
 
-#: aleksis/core/preferences.py:26
+#: aleksis/core/preferences.py:25
 msgid "School"
 msgstr "Школа / уч.заведение"
 
-#: aleksis/core/preferences.py:27
+#: aleksis/core/preferences.py:26
 msgid "Theme"
 msgstr "Тема"
 
-#: aleksis/core/preferences.py:28
+#: aleksis/core/preferences.py:27
 msgid "Mail"
 msgstr "Почта"
 
-#: aleksis/core/preferences.py:30
+#: aleksis/core/preferences.py:29
 msgid "Footer"
 msgstr "Нижний колонтитул (подвал)"
 
-#: aleksis/core/preferences.py:31
+#: aleksis/core/preferences.py:30
 msgid "Accounts"
 msgstr "Учётные записи"
 
-#: aleksis/core/preferences.py:32
+#: aleksis/core/preferences.py:31
 msgid "Authentication"
 msgstr "Авторизация"
 
-#: aleksis/core/preferences.py:33
+#: aleksis/core/preferences.py:32
 msgid "Internationalisation"
 msgstr "Интернационализация"
 
+#: aleksis/core/preferences.py:33
+#, fuzzy
+#| msgid "Calendar Feeds"
+msgid "Calendar"
+msgstr "Ленты календарей"
+
 #: aleksis/core/preferences.py:43
 msgid "Site title"
 msgstr "Название сайта"
@@ -1106,11 +1125,8 @@ msgid "Automatically create new persons for new users"
 msgstr "Новые физлица для новых пользователей создавать автоматически"
 
 #: aleksis/core/preferences.py:256
-msgid ""
-"Automatically link existing persons to new users by their e-mail address"
-msgstr ""
-"Связывать существующие физлица с новыми пользователями автоматически по эл."
-"адресам"
+msgid "Automatically link existing persons to new users by their e-mail address"
+msgstr "Связывать существующие физлица с новыми пользователями автоматически по эл.адресам"
 
 #: aleksis/core/preferences.py:267
 msgid "Display name of the school"
@@ -1118,9 +1134,7 @@ msgstr "Название школы / уч.заведения для отобр
 
 #: aleksis/core/preferences.py:278
 msgid "Official name of the school, e.g. as given by supervisory authority"
-msgstr ""
-"Официальное название школы / уч.заведения, напр., как в регистрационных "
-"документах"
+msgstr "Официальное название школы / уч.заведения, напр., как в регистрационных документах"
 
 #: aleksis/core/preferences.py:286
 msgid "Allow users to change their passwords"
@@ -1179,11 +1193,8 @@ msgid "Fields on person model which are editable by themselves."
 msgstr "Поля с описанием физлица, которые можно редактировать самостоятельно."
 
 #: aleksis/core/preferences.py:424
-msgid ""
-"Editable fields on person model which should trigger a notification on change"
-msgstr ""
-"Изменяемые поля описания физлица, при изменении которых должен срабатывать "
-"триггер для уведомления"
+msgid "Editable fields on person model which should trigger a notification on change"
+msgstr "Изменяемые поля описания физлица, при изменении которых должен срабатывать триггер для уведомления"
 
 #: aleksis/core/preferences.py:438
 msgid "Contact for notification if a person changes their data"
@@ -1210,46 +1221,48 @@ msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr "Автоматически обновлять информпанель и её виджеты (для всего сайта)"
 
 #: aleksis/core/preferences.py:490
-msgid "Country for phone number parsing"
-msgstr "Страна для парсинга номера телефона"
+#, fuzzy
+#| msgid "Birthday Calendar"
+msgid "Birthday calendar feed color"
+msgstr "Календарь Дней Рождения"
 
-#: aleksis/core/settings.py:549 aleksis/core/settings.py:551
+#: aleksis/core/preferences.py:502
+msgid "Holiday calendar feed color"
+msgstr ""
+
+#: aleksis/core/preferences.py:515
+#, fuzzy
+#| msgid "Birthday Calendar"
+msgid "Activated calendars"
+msgstr "Календарь Дней Рождения"
+
+#: aleksis/core/settings.py:551
 msgid "English"
 msgstr "Английский"
 
-#: aleksis/core/settings.py:550 aleksis/core/settings.py:552
+#: aleksis/core/settings.py:552
 msgid "German"
 msgstr "Немецкий"
 
-#: aleksis/core/settings.py:551 aleksis/core/settings.py:553
+#: aleksis/core/settings.py:553
 msgid "Ukrainian"
 msgstr "Украинский"
 
-#: aleksis/core/tables.py:25
-#: aleksis/core/templates/core/announcement/list.html:36
-#: aleksis/core/templates/core/group/full.html:26
-#: aleksis/core/templates/oauth2_provider/application/detail.html:17
-msgid "Edit"
-msgstr "Редактировать"
-
-#: aleksis/core/tables.py:27 aleksis/core/tables.py:148
-#: aleksis/core/tables.py:192
-#: aleksis/core/templates/core/announcement/list.html:22
-#: aleksis/core/tables.py:185
-msgid "Actions"
-msgstr "Действия"
-
-#: 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/tables.py:97 aleksis/core/tables.py:98
+#: aleksis/core/tables.py:112 aleksis/core/tables.py:128
+#: aleksis/core/tables.py:165
 #: aleksis/core/templates/core/announcement/list.html:42
 #: aleksis/core/templates/core/group/full.html:33
 #: aleksis/core/templates/core/pages/delete.html:22
 #: aleksis/core/templates/oauth2_provider/application/detail.html:21
-#: aleksis/core/tables.py:183
 msgid "Delete"
 msgstr "Удалить"
 
+#: aleksis/core/tables.py:130 aleksis/core/tables.py:167
+#: aleksis/core/templates/core/announcement/list.html:22
+msgid "Actions"
+msgstr "Действия"
+
 #: aleksis/core/templates/403.html:14 aleksis/core/templates/500.html:10
 #: aleksis/core/templates/oauth2_provider/authorize.html:54
 msgid "Error"
@@ -1266,14 +1279,12 @@ msgstr ""
 #: aleksis/core/templates/403.html:19 aleksis/core/templates/404.html:16
 msgid ""
 "\n"
-"            If you think this is an error in AlekSIS, please contact your "
-"site\n"
+"            If you think this is an error in AlekSIS, please contact your site\n"
 "            administrators:\n"
 "          "
 msgstr ""
 "\n"
-"            Если Вы думаете, что это ошибка AlekSIS, обратитесь, "
-"пожалуйста,\n"
+"            Если Вы думаете, что это ошибка AlekSIS, обратитесь, пожалуйста,\n"
 "            к администраторам сайта:\n"
 "          "
 
@@ -1300,14 +1311,12 @@ msgstr ""
 #: aleksis/core/templates/500.html:13
 msgid ""
 "\n"
-"            Your site administrators will automatically be notified about "
-"this\n"
+"            Your site administrators will automatically be notified about this\n"
 "            error. You can also contact them directly:\n"
 "          "
 msgstr ""
 "\n"
-"            Администраторы сайта будут уведомлены об этой ошибке "
-"автоматически.\n"
+"            Администраторы сайта будут уведомлены об этой ошибке автоматически.\n"
 "            Вы также можете обратиться к ним непосредственно:\n"
 "          "
 
@@ -1344,6 +1353,13 @@ msgstr "Привет!"
 msgid "Your AlekSIS team"
 msgstr "Команда AlekSIS"
 
+#: aleksis/core/templates/account/email/email_confirmation_message.txt:6
+#, python-format
+msgid ""
+"Someone tried to register an account with the username %(user_display)s and your e-mail address on %(site_domain)s.\n"
+"If it was you, please confirm the registration by clicking on the following link:"
+msgstr ""
+
 #: aleksis/core/templates/account/email_confirm.html:5
 #: aleksis/core/templates/account/email_confirm.html:6
 #: aleksis/core/templates/account/email_confirm.html:17
@@ -1353,21 +1369,13 @@ msgstr "Подтвердить"
 
 #: aleksis/core/templates/account/email_confirm.html:12
 #, python-format
-msgid ""
-"Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an e-mail "
-"address for user %(user_display)s."
-msgstr ""
-"Подтвердите, пожалуйста, что <a href=\"mailto:%(email)s\">%(email)s</a> — эл."
-"адрес пользователя %(user_display)s."
+msgid "Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an e-mail address for user %(user_display)s."
+msgstr "Подтвердите, пожалуйста, что <a href=\"mailto:%(email)s\">%(email)s</a> — эл.адрес пользователя %(user_display)s."
 
 #: aleksis/core/templates/account/email_confirm.html:25
 #, python-format
-msgid ""
-"This e-mail confirmation link expired or is invalid. Please <a href="
-"\"%(email_url)s\">issue a new e-mail confirmation request</a>."
-msgstr ""
-"Эта ссылка для подтверждения эл.почты просрочена или недействительна. "
-"Сделайте, пожалуйста, <a href=\"%(email_url)s\">новый запрос</a>."
+msgid "This e-mail confirmation link expired or is invalid. Please <a href=\"%(email_url)s\">issue a new e-mail confirmation request</a>."
+msgstr "Эта ссылка для подтверждения эл.почты просрочена или недействительна. Сделайте, пожалуйста, <a href=\"%(email_url)s\">новый запрос</a>."
 
 #: aleksis/core/templates/account/password_change.html:5
 #: aleksis/core/templates/account/password_change.html:6
@@ -1401,8 +1409,7 @@ msgstr "Изменение пароля отключено."
 msgid ""
 "\n"
 "            Users are not allowed to edit their own passwords. If you think\n"
-"            this is an error please contact one of your site "
-"administrators.\n"
+"            this is an error please contact one of your site administrators.\n"
 "          "
 msgstr ""
 "\n"
@@ -1421,12 +1428,8 @@ msgid "Reset password"
 msgstr "Сбросить пароль"
 
 #: aleksis/core/templates/account/password_reset.html:17
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll send you "
-"an e-mail allowing you to reset it."
-msgstr ""
-"Забыли пароль? Укажите ниже свою эл.почту и мы отправим Вам письмо для "
-"сброса пароля."
+msgid "Forgotten your password? Enter your e-mail address below, and we'll send you an e-mail allowing you to reset it."
+msgstr "Забыли пароль? Укажите ниже свою эл.почту и мы отправим Вам письмо для сброса пароля."
 
 #: aleksis/core/templates/account/password_reset.html:30
 msgid ""
@@ -1449,10 +1452,8 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Мы отправили Вам эл.письмо. Если Вы не получите его на "
-"протяжении\n"
-"            нескольких минут, обратитесь, пожалуйста, к администраторам "
-"сайта.\n"
+"            Мы отправили Вам эл.письмо. Если Вы не получите его на протяжении\n"
+"            нескольких минут, обратитесь, пожалуйста, к администраторам сайта.\n"
 "          "
 
 #: aleksis/core/templates/account/password_reset_from_key.html:15
@@ -1463,16 +1464,13 @@ msgstr "Неправильный токен"
 #, python-format
 msgid ""
 "\n"
-"              The password reset link was invalid, possibly because it has "
-"already been used. Please request a <a href=\"%(passwd_reset_url)s\"\n"
+"              The password reset link was invalid, possibly because it has already been used. Please request a <a href=\"%(passwd_reset_url)s\"\n"
 "              class=\"blue-text text-lighten-2\">new password reset</a>.\n"
 "            "
 msgstr ""
 "\n"
-"              Ссылка на сброс пароля недействительна или, возможно, уже "
-"использована. Сделайте, пожалуйста, <a href=\"%(passwd_reset_url)s\"\n"
-"              class=\"blue-text text-lighten-2\">новый запрос на сброс "
-"пароля</a>.\n"
+"              Ссылка на сброс пароля недействительна или, возможно, уже использована. Сделайте, пожалуйста, <a href=\"%(passwd_reset_url)s\"\n"
+"              class=\"blue-text text-lighten-2\">новый запрос на сброс пароля</a>.\n"
 "            "
 
 #: aleksis/core/templates/account/password_reset_from_key.html:25
@@ -1521,11 +1519,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>."
-msgstr ""
-"У Вас уже есть учётная запись? В таком случае можете <a href=\"%(login_url)s"
-"\">войти</a>."
+msgid "Already have an account? Then please <a href=\"%(login_url)s\">sign in</a>."
+msgstr "У Вас уже есть учётная запись? В таком случае можете <a href=\"%(login_url)s\">войти</a>."
 
 #: aleksis/core/templates/account/signup.html:22
 #: aleksis/core/templates/socialaccount/signup.html:23
@@ -1569,17 +1564,13 @@ msgstr "Подтвердите свой адрес эл.почты!"
 #: aleksis/core/templates/account/verification_sent.html:16
 msgid ""
 "\n"
-"            This part of the site requires us to verify that you are who you "
-"claim to be.\n"
-"            For this purpose, we require that you verify ownership of your e-"
-"mail address.\n"
+"            This part of the site requires us to verify that you are who you claim to be.\n"
+"            For this purpose, we require that you verify ownership of your e-mail address.\n"
 "          "
 msgstr ""
 "\n"
-"            Для этой части сайта необходимо пройти проверку, что Вы - именно "
-"Ð’Ñ‹.\n"
-"            Для этого нам нужно проверить как минимум, что адрес эл.почты "
-"принадлежит именно Вам\n"
+"            Для этой части сайта необходимо пройти проверку, что Вы - именно Вы.\n"
+"            Для этого нам нужно проверить как минимум, что адрес эл.почты принадлежит именно Вам\n"
 "          "
 
 #: aleksis/core/templates/account/verification_sent.html:22
@@ -1593,8 +1584,7 @@ msgstr ""
 "\n"
 "            Мы отправили Вам для проверки эл.письмо.\n"
 "            Пожалуйста, перейдите по указанной ссылке. Если Вы не получите\n"
-"            письмо в ближайшие несколько минут, обратитесь, пожалуйста, к "
-"нам.\n"
+"            письмо в ближайшие несколько минут, обратитесь, пожалуйста, к нам.\n"
 "          "
 
 #: aleksis/core/templates/core/additional_field/edit.html:6
@@ -1636,6 +1626,12 @@ msgstr "Действует до"
 msgid "Recipients"
 msgstr "Получатели"
 
+#: aleksis/core/templates/core/announcement/list.html:36
+#: aleksis/core/templates/core/group/full.html:26
+#: aleksis/core/templates/oauth2_provider/application/detail.html:17
+msgid "Edit"
+msgstr "Редактировать"
+
 #: aleksis/core/templates/core/announcement/list.html:50
 msgid "There are no announcements."
 msgstr "Объявлений нет."
@@ -1693,23 +1689,19 @@ msgstr "Создать %(name)s"
 msgid "Edit default dashboard"
 msgstr "Редактировать стандартную информпанель"
 
-#: aleksis/core/templates/core/data_check/list.html:9
 #: aleksis/core/templates/core/data_check/list.html:10
 #: aleksis/core/templates/core/data_check/list.html:11
 msgid "Data checks"
 msgstr "Проверки данных"
 
-#: aleksis/core/templates/core/data_check/list.html:15
 #: aleksis/core/templates/core/data_check/list.html:16
 msgid "Check data again"
 msgstr "Проверить данные ещё раз"
 
-#: aleksis/core/templates/core/data_check/list.html:22
 #: aleksis/core/templates/core/data_check/list.html:23
 msgid "The system detected some problems with your data."
 msgstr "Система обнаружила некоторые проблемы с Вашими данными."
 
-#: aleksis/core/templates/core/data_check/list.html:23
 #: aleksis/core/templates/core/data_check/list.html:24
 msgid ""
 "Please go through all data and check whether some extra action is\n"
@@ -1718,52 +1710,42 @@ msgstr ""
 "Пожалуйста, пересмотрите внимательно все данные и проверьте не нужно ли\n"
 "          что-то сделать."
 
-#: aleksis/core/templates/core/data_check/list.html:31
 #: aleksis/core/templates/core/data_check/list.html:32
 msgid "Everything is fine."
 msgstr "Всё прекрасно."
 
-#: aleksis/core/templates/core/data_check/list.html:32
 #: aleksis/core/templates/core/data_check/list.html:33
 msgid "The system hasn't detected any problems with your data."
 msgstr "Система не обнаружила никаких проблем с Вашими данными."
 
-#: aleksis/core/templates/core/data_check/list.html:40
 #: aleksis/core/templates/core/data_check/list.html:41
 msgid "Detected problems"
 msgstr "Обнаруженные проблемы"
 
-#: aleksis/core/templates/core/data_check/list.html:45
 #: aleksis/core/templates/core/data_check/list.html:46
 msgid "Affected object"
 msgstr "Зависимые объекты"
 
-#: aleksis/core/templates/core/data_check/list.html:46
 #: aleksis/core/templates/core/data_check/list.html:47
 msgid "Detected problem"
 msgstr "Обнаружена проблема"
 
-#: aleksis/core/templates/core/data_check/list.html:47
 #: aleksis/core/templates/core/data_check/list.html:48
 msgid "Show details"
 msgstr "Подробнее"
 
-#: aleksis/core/templates/core/data_check/list.html:48
 #: aleksis/core/templates/core/data_check/list.html:49
 msgid "Options to solve the problem"
 msgstr "Варианты решения проблемы"
 
-#: aleksis/core/templates/core/data_check/list.html:63
 #: aleksis/core/templates/core/data_check/list.html:65
 msgid "Show object"
 msgstr "Посмотреть объект"
 
-#: aleksis/core/templates/core/data_check/list.html:86
 #: aleksis/core/templates/core/data_check/list.html:89
 msgid "Registered checks"
 msgstr "Зарегистрированные проверки"
 
-#: aleksis/core/templates/core/data_check/list.html:90
 #: aleksis/core/templates/core/data_check/list.html:93
 msgid ""
 "\n"
@@ -1783,39 +1765,29 @@ msgstr "Редактировать информпанель"
 #: aleksis/core/templates/core/edit_dashboard.html:24
 msgid ""
 "\n"
-"          On this page you can arrange your personal dashboard. You can drag "
-"any items from \"Available widgets\" to \"Your\n"
-"          Dashboard\" or change the order by moving the widgets. After you "
-"have finished, please don't forget to click on\n"
+"          On this page you can arrange your personal dashboard. You can drag any items from \"Available widgets\" to \"Your\n"
+"          Dashboard\" or change the order by moving the widgets. After you have finished, please don't forget to click on\n"
 "          \"Save\".\n"
 "        "
 msgstr ""
 "\n"
-"          На этой странице Вы можете упорядочить свою информпанель. "
-"Перетаскивайте любые элементы из \"Доступных виджетов\"\n"
-"          в \"Свою информпанель\" или меняйте порядок, перетягивая виджеты. "
-"После завершения не забудьте нажать\n"
+"          На этой странице Вы можете упорядочить свою информпанель. Перетаскивайте любые элементы из \"Доступных виджетов\"\n"
+"          в \"Свою информпанель\" или меняйте порядок, перетягивая виджеты. После завершения не забудьте нажать\n"
 "          \"Сохранить\".\n"
 "        "
 
 #: aleksis/core/templates/core/edit_dashboard.html:30
 msgid ""
 "\n"
-"          On this page you can arrange the default dashboard which is shown "
-"when a user doesn't arrange his own\n"
-"          dashboard. You can drag any items from \"Available widgets\" to "
-"\"Default Dashboard\" or change the order\n"
-"          by moving the widgets. After you have finished, please don't "
-"forget to click on \"Save\".\n"
+"          On this page you can arrange the default dashboard which is shown when a user doesn't arrange his own\n"
+"          dashboard. You can drag any items from \"Available widgets\" to \"Default Dashboard\" or change the order\n"
+"          by moving the widgets. After you have finished, please don't forget to click on \"Save\".\n"
 "        "
 msgstr ""
 "\n"
-"          На этой странице Вы можете упорядочить типовую/стандартную "
-"информпанель, которая отображается, если пользователь\n"
-"          не настроил свою. Перетягивайте любые элементы из \"Доступных "
-"виджетов\" в \"Типовую информпанель\" или меняйте \n"
-"          порядок, перетягивая виджеты. После заврешения не забудьте нажать "
-"\"Сохранить\".\n"
+"          На этой странице Вы можете упорядочить типовую/стандартную информпанель, которая отображается, если пользователь\n"
+"          не настроил свою. Перетягивайте любые элементы из \"Доступных виджетов\" в \"Типовую информпанель\" или меняйте \n"
+"          порядок, перетягивая виджеты. После заврешения не забудьте нажать \"Сохранить\".\n"
 "        "
 
 #: aleksis/core/templates/core/edit_dashboard.html:48
@@ -1838,16 +1810,13 @@ msgstr "Определить дочерние группы к группе"
 #: aleksis/core/templates/core/group/child_groups.html:18
 msgid ""
 "\n"
-"          You can use this to assign child groups to groups. Please use the "
-"filters below to select groups you want to\n"
+"          You can use this to assign child groups to groups. Please use the filters below to select groups you want to\n"
 "          change and click \"Next\".\n"
 "        "
 msgstr ""
 "\n"
-"          Вы можете воспользоваться этим для привязки дочерних групп к "
-"основным. Для выбора групп,\n"
-"          которые хотите изменить, используйте фильтры, расположенные ниже и "
-"нажмите \"Далее\".\n"
+"          Вы можете воспользоваться этим для привязки дочерних групп к основным. Для выбора групп,\n"
+"          которые хотите изменить, используйте фильтры, расположенные ниже и нажмите \"Далее\".\n"
 "        "
 
 #: aleksis/core/templates/core/group/child_groups.html:31
@@ -1873,8 +1842,7 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Выберите, пожалуйста, несколько групп в порядке, по какому "
-"привязывать.\n"
+"            Выберите, пожалуйста, несколько групп в порядке, по какому привязывать.\n"
 "          "
 
 #: aleksis/core/templates/core/group/child_groups.html:72
@@ -1888,18 +1856,14 @@ msgstr "Пожалуйста, будьте аккуратны!"
 #: aleksis/core/templates/core/group/child_groups.html:79
 msgid ""
 "\n"
-"            If you click \"Back\" or \"Next\" the current group assignments "
-"are not saved.\n"
-"            If you click \"Save\", you will overwrite all existing child "
-"group relations for this group with what you\n"
+"            If you click \"Back\" or \"Next\" the current group assignments are not saved.\n"
+"            If you click \"Save\", you will overwrite all existing child group relations for this group with what you\n"
 "            selected on this page.\n"
 "          "
 msgstr ""
 "\n"
-"            Если нажмёте \"Назад\" или \"Далее\" привязки этой группы не "
-"сохранятся.\n"
-"            Если нажмёте \"Сохранить\", все существующие связи дочерней "
-"группы с этой группой будут заменены на\n"
+"            Если нажмёте \"Назад\" или \"Далее\" привязки этой группы не сохранятся.\n"
+"            Если нажмёте \"Сохранить\", все существующие связи дочерней группы с этой группой будут заменены на\n"
 "            выбранные на этой странице.\n"
 "          "
 
@@ -1997,14 +1961,12 @@ msgstr "Домой"
 #: aleksis/core/templates/core/index.html:34
 msgid ""
 "\n"
-"        You didn't customise your dashboard so that you see the system "
-"default. Please click on \"Edit dashboard\" to\n"
+"        You didn't customise your dashboard so that you see the system default. Please click on \"Edit dashboard\" to\n"
 "        customise your personal dashboard.\n"
 "      "
 msgstr ""
 "\n"
-"        Вы ещё не настроили свою информпанель, так что пока наблюдаете "
-"типовую по-умолчанию. Для настройки \n"
+"        Вы ещё не настроили свою информпанель, так что пока наблюдаете типовую по-умолчанию. Для настройки \n"
 "         своей информпанели клацните \"Редактировать информпанель\".\n"
 "      "
 
@@ -2041,114 +2003,92 @@ msgstr "Состояние системы"
 msgid "System checks"
 msgstr "Системные проверки"
 
-#: aleksis/core/templates/core/pages/system_status.html:22
 #: aleksis/core/templates/core/pages/system_status.html:26
 msgid "Maintenance mode enabled"
 msgstr "Включен режим обслуживания"
 
-#: aleksis/core/templates/core/pages/system_status.html:24
+#: aleksis/core/templates/core/pages/system_status.html:28
+#, fuzzy
 msgid ""
 "\n"
-"                Only admin and visitors from internal IPs can access the "
-"site.\n"
-"              "
+"                  Only admin and visitors from internal IPs can access the site.\n"
+"                "
 msgstr ""
 "\n"
-"                Доступ к сайту имеют только администратор и пользователи с "
-"внутренними IP-адресами.\n"
+"                Доступ к сайту имеют только администратор и пользователи с внутренними IP-адресами.\n"
 "              "
 
-#: aleksis/core/templates/core/pages/system_status.html:36
 #: aleksis/core/templates/core/pages/system_status.html:39
 msgid "Maintenance mode disabled"
 msgstr "Режим обслуживания выключен"
 
-#: aleksis/core/templates/core/pages/system_status.html:37
 #: aleksis/core/templates/core/pages/system_status.html:40
 msgid "Everyone can access the site."
 msgstr "Доступ к сайту есть у всех."
 
-#: aleksis/core/templates/core/pages/system_status.html:47
 #: aleksis/core/templates/core/pages/system_status.html:51
 msgid "Debug mode enabled"
 msgstr "Режим отладки включен"
 
-#: aleksis/core/templates/core/pages/system_status.html:49
 #: aleksis/core/templates/core/pages/system_status.html:53
 msgid ""
 "\n"
-"                The web server throws back debug information on errors. Do "
-"not use in production!\n"
+"                The web server throws back debug information on errors. Do not use in production!\n"
 "              "
 msgstr ""
 "\n"
-"                Веб-сервер во время ошибок пишет отладочную информацию. Не "
-"используйте в продакшене!\n"
+"                Веб-сервер во время ошибок пишет отладочную информацию. Не используйте в продакшене!\n"
 "              "
 
-#: aleksis/core/templates/core/pages/system_status.html:56
 #: aleksis/core/templates/core/pages/system_status.html:60
 msgid "Debug mode disabled"
 msgstr "Режим отладки отключен"
 
-#: aleksis/core/templates/core/pages/system_status.html:58
 #: aleksis/core/templates/core/pages/system_status.html:62
 msgid ""
 "\n"
-"                Debug mode is disabled. Default error pages are displayed on "
-"errors.\n"
+"                Debug mode is disabled. Default error pages are displayed on errors.\n"
 "              "
 msgstr ""
 "\n"
-"                Режим отладки отключен. В случае ошибок будут отображаться "
-"стандартные страницы об ошибках.\n"
+"                Режим отладки отключен. В случае ошибок будут отображаться стандартные страницы об ошибках.\n"
 "              "
 
-#: aleksis/core/templates/core/pages/system_status.html:71
 #: aleksis/core/templates/core/pages/system_status.html:75
 msgid "System health checks"
 msgstr "Проверки работы системы"
 
-#: aleksis/core/templates/core/pages/system_status.html:77
 #: aleksis/core/templates/core/pages/system_status.html:81
 msgid "Service"
 msgstr "Служба"
 
-#: aleksis/core/templates/core/pages/system_status.html:78
-#: aleksis/core/templates/core/pages/system_status.html:119
 #: aleksis/core/templates/core/pages/system_status.html:82
 #: aleksis/core/templates/core/pages/system_status.html:123
 msgid "Status"
 msgstr "Состояние"
 
-#: aleksis/core/templates/core/pages/system_status.html:79
 #: aleksis/core/templates/core/pages/system_status.html:83
 msgid "Time taken"
 msgstr "Продолжительность"
 
-#: aleksis/core/templates/core/pages/system_status.html:100
 #: aleksis/core/templates/core/pages/system_status.html:104
 msgid "seconds"
 msgstr "сек"
 
-#: aleksis/core/templates/core/pages/system_status.html:111
 #: aleksis/core/templates/core/pages/system_status.html:115
 msgid "Celery task results"
 msgstr "Результаты выполнения Celery"
 
-#: aleksis/core/templates/core/pages/system_status.html:116
+#: aleksis/core/templates/core/pages/system_status.html:120
 #: aleksis/core/templates/templated_email/celery_failure.email:9
 #: aleksis/core/templates/templated_email/celery_failure.email:28
-#: aleksis/core/templates/core/pages/system_status.html:120
 msgid "Task"
 msgstr "Задания"
 
-#: aleksis/core/templates/core/pages/system_status.html:117
 #: aleksis/core/templates/core/pages/system_status.html:121
 msgid "ID"
 msgstr "ID"
 
-#: aleksis/core/templates/core/pages/system_status.html:118
 #: aleksis/core/templates/core/pages/system_status.html:122
 msgid "Date done"
 msgstr "Время завершения"
@@ -2161,13 +2101,11 @@ msgstr "Пробное генерирование PDF"
 #: aleksis/core/templates/core/pages/test_pdf.html:14
 msgid ""
 "\n"
-"        This simple view can be used to ensure the correct function of the "
-"built-in PDF generation system.\n"
+"        This simple view can be used to ensure the correct function of the built-in PDF generation system.\n"
 "      "
 msgstr ""
 "\n"
-"        Эта простая страница может помочь проверить корректность настроек "
-"встроенной системы генерирования PDF.\n"
+"        Эта простая страница может помочь проверить корректность настроек встроенной системы генерирования PDF.\n"
 "      "
 
 #: aleksis/core/templates/core/partials/announcements.html:8
@@ -2225,14 +2163,11 @@ msgstr "Неизвестно"
 #: aleksis/core/templates/core/partials/splash_screen.html:11
 msgid ""
 "\n"
-"      This webbrowser doesn't support JavaScript, or its execution is "
-"blocked. Please use another browser to continue.\n"
+"      This webbrowser doesn't support JavaScript, or its execution is blocked. Please use another browser to continue.\n"
 "    "
 msgstr ""
 "\n"
-"      Этот веб-браузер не поддерживает JavaScript или его обработка "
-"заблокирована. Для продолжения воспользуйтесь, пожалуйста, другим "
-"браузером.\n"
+"      Этот веб-браузер не поддерживает JavaScript или его обработка заблокирована. Для продолжения воспользуйтесь, пожалуйста, другим браузером.\n"
 "    "
 
 #: aleksis/core/templates/core/partials/splash_screen.html:17
@@ -2314,17 +2249,6 @@ msgstr "Фильтр физлиц"
 msgid "Selected persons"
 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 "Создать Учебный год"
-
-#: aleksis/core/templates/core/school_term/edit.html:6
-#: aleksis/core/templates/core/school_term/edit.html:7
-msgid "Edit school term"
-msgstr "Редактировать Учебный год"
-
 #: aleksis/core/templates/dynamic_preferences/form.html:5
 msgid "Preferences"
 msgstr "Свойства"
@@ -2355,11 +2279,8 @@ msgid "The invite feature is disabled."
 msgstr "Фукция приглашения выключена."
 
 #: aleksis/core/templates/invitations/disabled.html:15
-msgid ""
-"To enable it, switch on the corresponding checkbox in the authentication "
-"section of the "
-msgstr ""
-"Для активации включите соответствующий чекбокс в разделе авторизации на "
+msgid "To enable it, switch on the corresponding checkbox in the authentication section of the "
+msgstr "Для активации включите соответствующий чекбокс в разделе авторизации на "
 
 #: aleksis/core/templates/invitations/disabled.html:16
 msgid "site preferences page"
@@ -2403,12 +2324,10 @@ msgstr "Приглашение по эл.почте"
 msgid "Generate invitation code"
 msgstr "Создать код приглашения"
 
-#: aleksis/core/templates/invitations/forms/_invite.html:29
 #: aleksis/core/templates/invitations/forms/_invite.html:30
 msgid "Generate code"
 msgstr "Генерирование кода"
 
-#: aleksis/core/templates/invitations/forms/_invite.html:33
 #: aleksis/core/templates/invitations/forms/_invite.html:34
 msgid "Invitations"
 msgstr "Приглашения"
@@ -2425,7 +2344,6 @@ msgstr "Регистрация приложения OAuth2"
 
 #: 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 "Отменить"
@@ -2499,52 +2417,25 @@ msgstr "Разрешить"
 msgid "Disallow"
 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 "Отозвать доступ"
-
-#: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:12
-msgid "Are you sure to revoke the access for this application?"
-msgstr "Ви действительно хотите отозвать доступ для этого приложения?"
-
-#: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:20
-msgid "Revoke"
-msgstr "Отозвать"
-
-#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5
-#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6
-msgid "Authorized applications"
-msgstr "Авторизованные приложения"
-
-#: aleksis/core/templates/oauth2_provider/authorized-tokens.html:33
-msgid "No authorized applications."
-msgstr "Авторизованных приложений нет."
-
 #: aleksis/core/templates/offline.html:5
 msgid "Network error"
 msgstr "Ошибка сети"
 
 #: aleksis/core/templates/offline.html:10
-msgid "Page not available offline."
-msgstr "В автономном режиме страница не доступна."
+msgid "No connection to server."
+msgstr ""
 
 #: aleksis/core/templates/offline.html:14
+#, fuzzy
 msgid ""
 "\n"
-"      This page is not available offline. Since you probably don't have an "
-"internet connection, check to see if your WiFi\n"
-"      or mobile data is turned on and try again. If you think you are "
-"connected, please contact the system\n"
-"      administrators:\n"
+"      This page is not available without a connection to the server. Please check your internet connection and try again.\n"
+"      If you are connected and the error persists, please contact the system administrators:\n"
 "    "
 msgstr ""
 "\n"
-"      Эта страница в автономном режимен не доступна. Возможно, у Вас "
-"проблема с интернетом. Убедитесь, что Ваш WiFi\n"
-"      или мобильный интернет включены и попробуйте ещё раз. Если считаете, "
-"что с подключением всё хорошо, обратитесь,\n"
+"      Эта страница в автономном режимен не доступна. Возможно, у Вас проблема с интернетом. Убедитесь, что Ваш WiFi\n"
+"      или мобильный интернет включены и попробуйте ещё раз. Если считаете, что с подключением всё хорошо, обратитесь,\n"
 "      пожалуйста, к системным администраторам:\n"
 "    "
 
@@ -2580,14 +2471,12 @@ msgstr "Ошибка входа учётной записи третьей ст
 #: aleksis/core/templates/socialaccount/authentication_error.html:15
 msgid ""
 "\n"
-"            An error occurred while attempting to login via your third-party "
-"account.\n"
+"            An error occurred while attempting to login via your third-party account.\n"
 "            Please contact one of your site administrators.\n"
 "          "
 msgstr ""
 "\n"
-"            Во время попытки входа с Вашей сторонней учётной записью "
-"возникла ошибка входа.\n"
+"            Во время попытки входа с Вашей сторонней учётной записью возникла ошибка входа.\n"
 "            Обратитесь, пожалуйста, к администратору сайта.\n"
 "          "
 
@@ -2602,9 +2491,7 @@ msgstr "Удалить"
 
 #: aleksis/core/templates/socialaccount/connections.html:34
 msgid "You currently have no third-party accounts connected to this account."
-msgstr ""
-"Сейчас у Вас нет учётных записей третих сторон, соединённых с этой учётной "
-"записью."
+msgstr "Сейчас у Вас нет учётных записей третих сторон, соединённых с этой учётной записью."
 
 #: aleksis/core/templates/socialaccount/connections.html:37
 msgid "Add a Third-party Account"
@@ -2634,15 +2521,11 @@ msgstr "Вход отменён"
 #, python-format
 msgid ""
 "\n"
-"            You decided to cancel logging in to our site using one of your "
-"existing accounts. If this was a mistake, please proceed to <a href="
-"\"%(login_url)s\">sign in</a>.\n"
+"            You decided to cancel logging in to our site using one of your existing accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s\">sign in</a>.\n"
 "          "
 msgstr ""
 "\n"
-"            Похоже, Вы отменили вход на наш сайт с одной из Ваших учётных "
-"записей. Если это произошло случайно, Вы можете <a href=\"%(login_url)s"
-"\">продолжить вход здесь</a>.\n"
+"            Похоже, Вы отменили вход на наш сайт с одной из Ваших учётных записей. Если это произошло случайно, Вы можете <a href=\"%(login_url)s\">продолжить вход здесь</a>.\n"
 "          "
 
 #: aleksis/core/templates/socialaccount/signup.html:12
@@ -2652,8 +2535,7 @@ msgid ""
 "        %(site_name)s. As a final step, please complete the following form:"
 msgstr ""
 "Вы на пути к использованию своей учётной записи %(provider_name)s\n"
-"        для входа в %(site_name)s. Заполните, пожалуйста, для завершения эту "
-"форму:"
+"        для входа в %(site_name)s. Заполните, пожалуйста, для завершения эту форму:"
 
 #: aleksis/core/templates/socialaccount/snippets/provider_list.html:12
 #, python-format
@@ -2742,25 +2624,21 @@ msgstr "Система обнаружила новые проблемы с Ва
 #: aleksis/core/templates/templated_email/data_checks.email:6
 msgid ""
 "the system detected some new problems with your data.\n"
-"Please take some time to inspect them and solve the issues or mark them as "
-"ignored."
+"Please take some time to inspect them and solve the issues or mark them as ignored."
 msgstr ""
 "система обнаружила новые проблемы с Вашими данными.\n"
-"Уделите, пожалуйста, немного времени для их проверки и решения проблем, или "
-"же отметьте их для игнорирования."
+"Уделите, пожалуйста, немного времени для их проверки и решения проблем, или же отметьте их для игнорирования."
 
 #: aleksis/core/templates/templated_email/data_checks.email:15
 msgid ""
 "\n"
 "   the system detected some new problems with your data.\n"
-"   Please take some time to inspect them and solve the issues or mark them "
-"as ignored.\n"
+"   Please take some time to inspect them and solve the issues or mark them as ignored.\n"
 "  "
 msgstr ""
 "\n"
 "   система обнаружила новые проблемы с Вашими данными.\n"
-"   Уделите, пожалуйста, немного времени для их проверки и решения проблем, "
-"или же отметьте их для игнорирования.\n"
+"   Уделите, пожалуйста, немного времени для их проверки и решения проблем, или же отметьте их для игнорирования.\n"
 "  "
 
 #: aleksis/core/templates/templated_email/data_checks.email:23
@@ -2771,6 +2649,23 @@ msgstr "Описание проблемы"
 msgid "Count of objects with new problems"
 msgstr "Количество объектов с новыми проблемами"
 
+#: aleksis/core/templates/templated_email/invitation.email:4
+#, python-format
+msgid "Invitation to register on %(site)s"
+msgstr ""
+
+#: aleksis/core/templates/templated_email/invitation.email:6
+#: aleksis/core/templates/templated_email/invitation.email:14
+#, fuzzy, python-format
+msgid "Hello %(person)s"
+msgstr "Выбранные физлица"
+
+#: aleksis/core/templates/templated_email/invitation.email:9
+#: aleksis/core/templates/templated_email/invitation.email:18
+#, python-format
+msgid "you have been invited to register on %(site)s. If you would like to accept this invitation, please click on the following link:"
+msgstr ""
+
 #: aleksis/core/templates/templated_email/notification.email:4
 msgid "New notification for"
 msgstr "Новое уведомление для"
@@ -2843,22 +2738,16 @@ msgid ""
 "\n"
 "        Backup tokens can be used when your primary and backup\n"
 "        phone numbers aren't available. The backup tokens below can be used\n"
-"        for login verification. If you've used up all your backup tokens, "
-"you\n"
-"        can generate a new set of backup tokens. Only the backup tokens "
-"shown\n"
+"        for login verification. If you've used up all your backup tokens, you\n"
+"        can generate a new set of backup tokens. Only the backup tokens shown\n"
 "        below will be valid.\n"
 "      "
 msgstr ""
 "\n"
-"        Резервные токены могут быть использованы, когда Ваши основной и "
-"резервный\n"
-"        телефонные номера недоступны. Резервные токены, указанные ниже, "
-"могут быть\n"
-"        использованы для верификации входа. Когда Вы используете все "
-"резервные токены,\n"
-"        Вы сможете сгенерировать новый набор резервных токенов. "
-"Действительными будут только\n"
+"        Резервные токены могут быть использованы, когда Ваши основной и резервный\n"
+"        телефонные номера недоступны. Резервные токены, указанные ниже, могут быть\n"
+"        использованы для верификации входа. Когда Вы используете все резервные токены,\n"
+"        Вы сможете сгенерировать новый набор резервных токенов. Действительными будут только\n"
 "        токены, указанные ниже.\n"
 "      "
 
@@ -2909,9 +2798,7 @@ msgstr ""
 
 #: aleksis/core/templates/two_factor/core/login.html:51
 msgid "Please login with your account to use the external application."
-msgstr ""
-"Для использования внешнего приложения войдите, пожалуйста, в свою учётную "
-"запись."
+msgstr "Для использования внешнего приложения войдите, пожалуйста, в свою учётную запись."
 
 #: aleksis/core/templates/two_factor/core/login.html:58
 msgid "Please login to see this page."
@@ -2920,83 +2807,67 @@ msgstr "Для просмотра этой страницы, пожалуйст
 #: aleksis/core/templates/two_factor/core/login.html:69
 msgid ""
 "\n"
-"                        We are calling your phone right now, please enter "
-"the\n"
+"                        We are calling your phone right now, please enter the\n"
 "                        digits you hear.\n"
 "                      "
 msgstr ""
 "\n"
-"                        Мы сейчас позвоним на Ваш номер. Напишите, "
-"пожалуйста, цифры,\n"
+"                        Мы сейчас позвоним на Ваш номер. Напишите, пожалуйста, цифры,\n"
 "                        которые Вы услышите.\n"
 "                      "
 
 #: aleksis/core/templates/two_factor/core/login.html:74
 msgid ""
 "\n"
-"                        We sent you a text message, please enter the code we "
-"sent.\n"
+"                        We sent you a text message, please enter the code we sent.\n"
 "                      "
 msgstr ""
 "\n"
-"                        Мы отправили Вам текстовое сообщение. Напишите, "
-"пожалуйста, полученный код.\n"
+"                        Мы отправили Вам текстовое сообщение. Напишите, пожалуйста, полученный код.\n"
 "                      "
 
 #: aleksis/core/templates/two_factor/core/login.html:78
 msgid ""
 "\n"
-"                        We sent you an email, please enter the code we "
-"sent.\n"
+"                        We sent you an email, please enter the code we sent.\n"
 "                      "
 msgstr ""
 "\n"
-"                        Мы отправили Вам на эл.почту код. Введите, "
-"пожалуйста, его.\n"
+"                        Мы отправили Вам на эл.почту код. Введите, пожалуйста, его.\n"
 "                      "
 
 #: aleksis/core/templates/two_factor/core/login.html:82
 msgid ""
 "\n"
-"                        Please use your Webauthn-compatible device to "
-"authenticate.\n"
+"                        Please use your Webauthn-compatible device to authenticate.\n"
 "                      "
 msgstr ""
 "\n"
-"                        Пожалуйста, для аутентификации пользуйтесь "
-"устройством, совместимым с Webauthn.\n"
+"                        Пожалуйста, для аутентификации пользуйтесь устройством, совместимым с Webauthn.\n"
 "                      "
 
 #: aleksis/core/templates/two_factor/core/login.html:86
 msgid ""
 "\n"
-"                        Please enter the code generated by your code "
-"generator.\n"
+"                        Please enter the code generated by your code generator.\n"
 "                      "
 msgstr ""
 "\n"
-"                        Введите, пожалуйста, токен с Вашего генератора "
-"токенов.\n"
+"                        Введите, пожалуйста, токен с Вашего генератора токенов.\n"
 "                      "
 
 #: aleksis/core/templates/two_factor/core/login.html:91
 msgid ""
 "\n"
-"                      Use this form for entering backup tokens for logging "
-"in.\n"
-"                      These tokens have been generated for you to print and "
-"keep safe. Please\n"
-"                      enter one of these backup tokens to login to your "
-"account.\n"
+"                      Use this form for entering backup tokens for logging in.\n"
+"                      These tokens have been generated for you to print and keep safe. Please\n"
+"                      enter one of these backup tokens to login to your account.\n"
 "                    "
 msgstr ""
 "\n"
-"                      Для входа воспользуйтесь формой для ввода резервных "
-"токенов.\n"
-"                      Эти токены были сгенерированы, чтобы Вы распечатали их "
-"и сохранили в надёжном месте.\n"
-"                      Для входа укажите, пожалуйста, один из резервных "
-"токенов.\n"
+"                      Для входа воспользуйтесь формой для ввода резервных токенов.\n"
+"                      Эти токены были сгенерированы, чтобы Вы распечатали их и сохранили в надёжном месте.\n"
+"                      Для входа укажите, пожалуйста, один из резервных токенов.\n"
 "                    "
 
 #: aleksis/core/templates/two_factor/core/login.html:119
@@ -3009,8 +2880,7 @@ msgstr "Или можете воспользоваться альтернати
 
 #: aleksis/core/templates/two_factor/core/login.html:133
 msgid "As a last resort, you can use a backup token:"
-msgstr ""
-"В качестве последней возможности можете воспользоваться резервным токеном:"
+msgstr "В качестве последней возможности можете воспользоваться резервным токеном:"
 
 #: aleksis/core/templates/two_factor/core/login.html:136
 msgid "Use Backup Token"
@@ -3027,16 +2897,12 @@ 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 "
-"this\n"
+"          two-factor authentication for security reasons. You need to enable this\n"
 "          security feature in order to access this page."
 msgstr ""
-"Для просмотра запрошенной страницы, с оглядкой на безопасность, необходима "
-"дополнительная\n"
-"          проверка пользователя с использованием двухфакторной "
-"аутентификации.\n"
-"          Для доступа к данной странице Вы должны включить эти функции "
-"безопасности."
+"Для просмотра запрошенной страницы, с оглядкой на безопасность, необходима дополнительная\n"
+"          проверка пользователя с использованием двухфакторной аутентификации.\n"
+"          Для доступа к данной странице Вы должны включить эти функции безопасности."
 
 #: aleksis/core/templates/two_factor/core/otp_required.html:16
 msgid "Go back"
@@ -3078,10 +2944,8 @@ msgid ""
 "      "
 msgstr ""
 "\n"
-"        Вы устанавливаете для своей учётной записи новый уровень "
-"безопасности.\n"
-"        Для добавления двухфакторной аутентификации пройдите несколько "
-"шагов\n"
+"        Вы устанавливаете для своей учётной записи новый уровень безопасности.\n"
+"        Для добавления двухфакторной аутентификации пройдите несколько шагов\n"
 "        мастера настройки.\n"
 "      "
 
@@ -3092,24 +2956,20 @@ msgid ""
 "      "
 msgstr ""
 "\n"
-"        Выберите, пожалуйста, метод аутентификации, который Вы хотите "
-"использовать:\n"
+"        Выберите, пожалуйста, метод аутентификации, который Вы хотите использовать:\n"
 "      "
 
 #: aleksis/core/templates/two_factor/core/setup.html:27
 msgid ""
 "\n"
 "        To start using a code generator, please use your\n"
-"        favourite two-factor authentication (TOTP) app to scan the QR code "
-"below.\n"
+"        favourite two-factor authentication (TOTP) app to scan the QR code below.\n"
 "        Then enter the token generated by the app.\n"
 "      "
 msgstr ""
 "\n"
-"        Для того, чтобы начать пользоваться генератором кодов, "
-"воспользуйтесь, пожалуйста, своим\n"
-"        любимым приложением для двухфакторной аутентификации (TOTP) и "
-"отсканируйте QR-код, который видите ниже.\n"
+"        Для того, чтобы начать пользоваться генератором кодов, воспользуйтесь, пожалуйста, своим\n"
+"        любимым приложением для двухфакторной аутентификации (TOTP) и отсканируйте QR-код, который видите ниже.\n"
 "        После этого напишите сгенерированный программой токен.\n"
 "      "
 
@@ -3150,13 +3010,11 @@ msgstr ""
 #: aleksis/core/templates/two_factor/core/setup.html:60
 msgid ""
 "\n"
-"            We are calling your phone right now, please enter the digits you "
-"hear.\n"
+"            We are calling your phone right now, please enter the digits you hear.\n"
 "          "
 msgstr ""
 "\n"
-"            Мы сейчас звоним на Ваш номер, – напишите, пожалуйста, цифры, "
-"которые услышите.\n"
+"            Мы сейчас звоним на Ваш номер, – напишите, пожалуйста, цифры, которые услышите.\n"
 "          "
 
 #: aleksis/core/templates/two_factor/core/setup.html:66
@@ -3166,29 +3024,22 @@ msgid ""
 "          "
 msgstr ""
 "\n"
-"            Мы отправили Вам текстовое сообщение. Напишите, пожалуйста, "
-"полученный код.\n"
+"            Мы отправили Вам текстовое сообщение. Напишите, пожалуйста, полученный код.\n"
 "          "
 
 #: aleksis/core/templates/two_factor/core/setup.html:73
 msgid ""
 "\n"
-"          We've encountered an issue with the selected authentication "
-"method. Please\n"
-"          go back and verify that you entered your information correctly, "
-"try\n"
-"          again, or use a different authentication method instead. If the "
-"issue\n"
+"          We've encountered an issue with the selected authentication method. Please\n"
+"          go back and verify that you entered your information correctly, try\n"
+"          again, or use a different authentication method instead. If the issue\n"
 "          persists, contact the site administrator.\n"
 "        "
 msgstr ""
 "\n"
-"          Мы заметили, что существует проблема с использованием выбранного "
-"метода авторизации. Вернитесь,\n"
-"          пожалуйста, назад, и убедитесь, что необходимые данные указаны "
-"правильно,\n"
-"          после чего попробуйте зайти ешё раз, или же воспользуйтесь другим "
-"вариантом входа. Если же\n"
+"          Мы заметили, что существует проблема с использованием выбранного метода авторизации. Вернитесь,\n"
+"          пожалуйста, назад, и убедитесь, что необходимые данные указаны правильно,\n"
+"          после чего попробуйте зайти ешё раз, или же воспользуйтесь другим вариантом входа. Если же\n"
 "          проблема остаётся, обратитесь к администратору сайта.\n"
 "        "
 
@@ -3214,8 +3065,7 @@ msgstr "Двухфакторная аутентификация успешно 
 #: aleksis/core/templates/two_factor/core/setup_complete.html:13
 msgid ""
 "\n"
-"        Congratulations, you've successfully enabled two-factor "
-"authentication.\n"
+"        Congratulations, you've successfully enabled two-factor authentication.\n"
 "      "
 msgstr ""
 "\n"
@@ -3236,16 +3086,13 @@ msgstr "Создать резервные коды"
 msgid ""
 "\n"
 "          However, it might happen that you don't have access to\n"
-"          your primary device. To enable account recovery, generate backup "
-"codes\n"
+"          your primary device. To enable account recovery, generate backup codes\n"
 "          or add other authentication methods.\n"
 "        "
 msgstr ""
 "\n"
-"          Между прочим, может так случиться, что у Вас не будет доступа к "
-"своему основному\n"
-"          устройству. Для включения восстановления учётки создайте резервные "
-"коды\n"
+"          Между прочим, может так случиться, что у Вас не будет доступа к своему основному\n"
+"          устройству. Для включения восстановления учётки создайте резервные коды\n"
 "          или добавьте другие методы аутентификации.\n"
 "        "
 
@@ -3259,12 +3106,8 @@ msgid "Disable Two-Factor Authentication"
 msgstr "Отключить двухфакторную аутентификацию"
 
 #: aleksis/core/templates/two_factor/profile/disable.html:12
-msgid ""
-"You are about to disable two-factor authentication. This weakens your "
-"account security, are you sure?"
-msgstr ""
-"Вы отключаете двухфакторную аутентификацию. Это снизит защиту Вашей учётной "
-"записи. Вы уверены?"
+msgid "You are about to disable two-factor authentication. This weakens your account security, are you sure?"
+msgstr "Вы отключаете двухфакторную аутентификацию. Это снизит защиту Вашей учётной записи. Вы уверены?"
 
 #: aleksis/core/templates/two_factor/profile/disable.html:26
 msgid "Disable"
@@ -3298,238 +3141,215 @@ msgstr "Во время создания файла PDF возникла про
 msgid "Download PDF"
 msgstr "Скачать PDF"
 
-#: aleksis/core/views.py:280 aleksis/core/views.py:285
-msgid "The school term has been created."
-msgstr "Учебный год создан."
-
-#: aleksis/core/views.py:292 aleksis/core/views.py:297
-msgid "The school term has been saved."
-msgstr "Учебный год сохранён."
-
-#: aleksis/core/views.py:396 aleksis/core/views.py:401
+#: aleksis/core/views.py:371
 msgid "The child groups were successfully saved."
 msgstr "Дочерние группы сохранены."
 
-#: aleksis/core/views.py:415 aleksis/core/views.py:425
-#: aleksis/core/views.py:420 aleksis/core/views.py:430
+#: aleksis/core/views.py:390 aleksis/core/views.py:400
 msgid "The person has been saved."
 msgstr "Физлицо сохранено."
 
-#: aleksis/core/views.py:475 aleksis/core/views.py:480
+#: aleksis/core/views.py:450
 msgid "The group has been saved."
 msgstr "Группа сохранена."
 
-#: aleksis/core/views.py:558 aleksis/core/views.py:588
+#: aleksis/core/views.py:498
+#, fuzzy
+msgid "Maintenance mode was turned on successfully."
+msgstr "Проверка данных успешно запущена."
+
+#: aleksis/core/views.py:500
+msgid "Maintenance mode was turned off successfully."
+msgstr ""
+
+#: aleksis/core/views.py:558
 msgid "The announcement has been saved."
 msgstr "Объявление сохранено."
 
-#: aleksis/core/views.py:574 aleksis/core/views.py:604
+#: aleksis/core/views.py:574
 msgid "The announcement has been deleted."
 msgstr "Объявление удалено."
 
-#: aleksis/core/views.py:643 aleksis/core/views.py:673
+#: aleksis/core/views.py:643
 msgid "The requested preference registry does not exist"
 msgstr "Журнал с запрошенными свойствами не существует"
 
-#: aleksis/core/views.py:662 aleksis/core/views.py:692
+#: aleksis/core/views.py:662
 msgid "The preferences have been saved successfully."
 msgstr "Свойства сохранены."
 
-#: aleksis/core/views.py:686 aleksis/core/views.py:716
+#: aleksis/core/views.py:686
 msgid "The person has been deleted."
 msgstr "Физлицо удалено."
 
-#: aleksis/core/views.py:700 aleksis/core/views.py:730
+#: aleksis/core/views.py:700
 msgid "The group has been deleted."
 msgstr "Группа удалена."
 
-#: aleksis/core/views.py:732 aleksis/core/views.py:762
+#: aleksis/core/views.py:732
 msgid "The additional field has been saved."
 msgstr "Дополнительное поле сохранено."
 
-#: aleksis/core/views.py:767 aleksis/core/views.py:797
+#: aleksis/core/views.py:767
 msgid "The additional field has been deleted."
 msgstr "Дополнительное поле удалено."
 
-#: aleksis/core/views.py:792 aleksis/core/views.py:822
+#: aleksis/core/views.py:792
 msgid "The group type has been saved."
 msgstr "Тип группы сохранён."
 
-#: aleksis/core/views.py:823 aleksis/core/views.py:853
+#: aleksis/core/views.py:823
 msgid "The group type has been deleted."
 msgstr "Тип группы удалён."
 
-#: aleksis/core/views.py:858 aleksis/core/views.py:888
+#: aleksis/core/views.py:858
 msgid "Progress: Run data checks"
 msgstr "В процессе: Запуск проверки данных"
 
-#: aleksis/core/views.py:859 aleksis/core/views.py:889
+#: aleksis/core/views.py:859
 msgid "Run data checks …"
 msgstr "Запускается проверка данных …"
 
-#: aleksis/core/views.py:860 aleksis/core/views.py:890
+#: aleksis/core/views.py:860
 msgid "The data checks were run successfully."
 msgstr "Проверка данных успешно запущена."
 
-#: aleksis/core/views.py:861 aleksis/core/views.py:891
+#: aleksis/core/views.py:861
 msgid "There was a problem while running data checks."
 msgstr "Во время запуска проверки данных возникла проблема."
 
-#: aleksis/core/views.py:878 aleksis/core/views.py:908
+#: aleksis/core/views.py:878
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr "Вариант решения \"{solve_option_obj.verbose_name}\" "
 
-#: aleksis/core/views.py:888 aleksis/core/views.py:918
+#: aleksis/core/views.py:888
 msgid "The requested solve option does not exist"
 msgstr "Запрошенный вариант решения не существует"
 
-#: aleksis/core/views.py:921 aleksis/core/views.py:951
+#: aleksis/core/views.py:921
 msgid "The dashboard widget has been saved."
 msgstr "Виджет информпанели сохранён."
 
-#: aleksis/core/views.py:951 aleksis/core/views.py:981
+#: aleksis/core/views.py:951
 msgid "The dashboard widget has been created."
 msgstr "Виджет информпанели создан."
 
-#: aleksis/core/views.py:961 aleksis/core/views.py:991
+#: aleksis/core/views.py:961
 msgid "The dashboard widget has been deleted."
 msgstr "Виджет информпанели удалён."
 
-#: aleksis/core/views.py:1033 aleksis/core/views.py:1063
+#: aleksis/core/views.py:1033
 msgid "Your dashboard configuration has been saved successfully."
 msgstr "Ваша конфигурация информпанели сохранена."
 
-#: aleksis/core/views.py:1035 aleksis/core/views.py:1065
+#: aleksis/core/views.py:1035
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr "Конфигурация типовой/стандартной информпанели."
 
-#: aleksis/core/views.py:1106 aleksis/core/views.py:1136
+#: aleksis/core/views.py:1106
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr "Приглашение успешно создано. Код приглашения: {code}"
 
-#: aleksis/core/views.py:1203 aleksis/core/views.py:1233
+#: aleksis/core/views.py:1203
 msgid "We have successfully assigned the permissions."
 msgstr "Мы успешно назначили доступы."
 
-#: aleksis/core/views.py:1213 aleksis/core/views.py:1243
+#: aleksis/core/views.py:1213
 msgid "The global user permission has been deleted."
 msgstr "Глобальный пользовательский доступ удалён."
 
-#: aleksis/core/views.py:1223 aleksis/core/views.py:1253
+#: aleksis/core/views.py:1223
 msgid "The global group permission has been deleted."
 msgstr "Глобальный групповой доступ удалён."
 
-#: aleksis/core/views.py:1233 aleksis/core/views.py:1263
+#: aleksis/core/views.py:1233
 msgid "The object user permission has been deleted."
 msgstr "Объектный пользовательский доступ удалён."
 
-#: aleksis/core/views.py:1243 aleksis/core/views.py:1273
+#: aleksis/core/views.py:1243
 msgid "The object group permission has been deleted."
 msgstr "Объектный групповой доступ удалён."
 
-#: aleksis/core/views.py:1352 aleksis/core/views.py:1382
-msgid ""
-"The third-party account could not be disconnected because it is the only "
-"login method available."
-msgstr ""
-"Учётную запись третьей стороны нельзя отключить, т.к. это единственный "
-"способ входа."
+#: aleksis/core/views.py:1352
+msgid "The third-party account could not be disconnected because it is the only login method available."
+msgstr "Учётную запись третьей стороны нельзя отключить, т.к. это единственный способ входа."
 
-#: aleksis/core/views.py:1359 aleksis/core/views.py:1389
+#: aleksis/core/views.py:1359
 msgid "The third-party account has been successfully disconnected."
 msgstr "Учётная запись третьей стороны успешно отключена."
 
-#: aleksis/core/views.py:1435 aleksis/core/views.py:1465
-msgid ""
-"Person was invited successfully and an email with further instructions has "
-"been send to them."
-msgstr ""
-"Владелец указанного эл.адреса успешно приглашён. Инструкции о дальнейших "
-"действиях отправлены на эл.почту."
+#: aleksis/core/views.py:1435
+msgid "Person was invited successfully and an email with further instructions has been send to them."
+msgstr "Владелец указанного эл.адреса успешно приглашён. Инструкции о дальнейших действиях отправлены на эл.почту."
 
-#: aleksis/core/views.py:1446 aleksis/core/views.py:1476
+#: aleksis/core/views.py:1446
 msgid "Person was already invited."
 msgstr "Кто-то уже пригласил его/её."
 
-#: aleksis/core/apps.py:151
-#, fuzzy
-msgid "You have been logged out successfully."
-msgstr "Свойства сохранены."
+#~ msgid "Country for phone number parsing"
+#~ msgstr "Страна для парсинга номера телефона"
 
-#: aleksis/core/templates/core/pages/system_status.html:28
-#, fuzzy
-msgid ""
-"\n"
-"                  Only admin and visitors from internal IPs can access the "
-"site.\n"
-"                "
-msgstr ""
-"\n"
-"                Доступ к сайту имеют только администратор и пользователи с "
-"внутренними IP-адресами.\n"
-"              "
+#~ msgid ""
+#~ "\n"
+#~ "                Only admin and visitors from internal IPs can access the site.\n"
+#~ "              "
+#~ msgstr ""
+#~ "\n"
+#~ "                Доступ к сайту имеют только администратор и пользователи с внутренними IP-адресами.\n"
+#~ "              "
 
-#: aleksis/core/templates/offline.html:10
-msgid "No connection to server."
-msgstr ""
+#~ msgid "Create school term"
+#~ msgstr "Создать Учебный год"
 
-#: aleksis/core/templates/offline.html:14
-#, fuzzy
-msgid ""
-"\n"
-"      This page is not available without a connection to the server. Please "
-"check your internet connection and try again.\n"
-"      If you are connected and the error persists, please contact the system "
-"administrators:\n"
-"    "
-msgstr ""
-"\n"
-"      Эта страница в автономном режимен не доступна. Возможно, у Вас "
-"проблема с интернетом. Убедитесь, что Ваш WiFi\n"
-"      или мобильный интернет включены и попробуйте ещё раз. Если считаете, "
-"что с подключением всё хорошо, обратитесь,\n"
-"      пожалуйста, к системным администраторам:\n"
-"    "
+#~ msgid "Edit school term"
+#~ msgstr "Редактировать Учебный год"
 
-#: aleksis/core/templates/templated_email/invitation.email:4
-#, python-format
-msgid "Invitation to register on %(site)s"
-msgstr ""
+#~ msgid "Revoke access"
+#~ msgstr "Отозвать доступ"
 
-#: aleksis/core/templates/templated_email/invitation.email:6
-#: aleksis/core/templates/templated_email/invitation.email:14
-#, fuzzy, python-format
-msgid "Hello %(person)s"
-msgstr "Выбранные физлица"
+#~ msgid "Are you sure to revoke the access for this application?"
+#~ msgstr "Ви действительно хотите отозвать доступ для этого приложения?"
 
-#: aleksis/core/templates/templated_email/invitation.email:9
-#: aleksis/core/templates/templated_email/invitation.email:18
-#, python-format
-msgid ""
-"you have been invited to register on %(site)s. If you would like to accept "
-"this invitation, please click on the following link:"
-msgstr ""
+#~ msgid "Revoke"
+#~ msgstr "Отозвать"
 
-#: aleksis/core/views.py:528
-#, fuzzy
-msgid "Maintenance mode was turned on successfully."
-msgstr "Проверка данных успешно запущена."
+#~ msgid "Authorized applications"
+#~ msgstr "Авторизованные приложения"
 
-#: aleksis/core/views.py:530
-msgid "Maintenance mode was turned off successfully."
-msgstr ""
+#~ msgid "No authorized applications."
+#~ msgstr "Авторизованных приложений нет."
+
+#~ msgid "Page not available offline."
+#~ msgstr "В автономном режиме страница не доступна."
 
 #~ msgid ""
 #~ "\n"
-#~ "            This page is currently unavailable. If this error persists, "
-#~ "contact your site administrators:\n"
+#~ "      This page is not available offline. Since you probably don't have an internet connection, check to see if your WiFi\n"
+#~ "      or mobile data is turned on and try again. If you think you are connected, please contact the system\n"
+#~ "      administrators:\n"
+#~ "    "
+#~ msgstr ""
+#~ "\n"
+#~ "      Эта страница в автономном режимен не доступна. Возможно, у Вас проблема с интернетом. Убедитесь, что Ваш WiFi\n"
+#~ "      или мобильный интернет включены и попробуйте ещё раз. Если считаете, что с подключением всё хорошо, обратитесь,\n"
+#~ "      пожалуйста, к системным администраторам:\n"
+#~ "    "
+
+#~ msgid "The school term has been created."
+#~ msgstr "Учебный год создан."
+
+#~ msgid "The school term has been saved."
+#~ msgstr "Учебный год сохранён."
+
+#~ msgid ""
+#~ "\n"
+#~ "            This page is currently unavailable. If this error persists, contact your site administrators:\n"
 #~ "          "
 #~ msgstr ""
 #~ "\n"
-#~ "            Эта страница сейчас недоступна. Если ошибка проявится ещё "
-#~ "раз, обратитесь к администраторам сайта:\n"
+#~ "            Эта страница сейчас недоступна. Если ошибка проявится ещё раз, обратитесь к администраторам сайта:\n"
 #~ "          "
 
 #~ msgid ""
@@ -3613,10 +3433,8 @@ msgstr ""
 #~ "      "
 #~ msgstr ""
 #~ "\n"
-#~ "        Не смотря на то, что мы Вам рекомендуем этого не делать, Вы "
-#~ "можете \n"
-#~ "        также отключить двухфакторную аутентификацию для своей учётной "
-#~ "записи.\n"
+#~ "        Не смотря на то, что мы Вам рекомендуем этого не делать, Вы можете \n"
+#~ "        также отключить двухфакторную аутентификацию для своей учётной записи.\n"
 #~ "      "
 
 #~ msgid ""
@@ -3628,21 +3446,13 @@ msgstr ""
 #~ msgstr ""
 #~ "\n"
 #~ "        Двухфакторная аутентификация для Вашей учётной записи\n"
-#~ "        не активирована. Для повышения безопасности учётной записи "
-#~ "включите\n"
+#~ "        не активирована. Для повышения безопасности учётной записи включите\n"
 #~ "        двухфакторную аутентификацию.\n"
 #~ "      "
 
-#~ msgid "Birthday Calendar"
-#~ msgstr "Календарь Дней Рождения"
-
 #~ msgid "A Calendar of Birthdays"
 #~ msgstr "Календарь Дней Рождения"
 
-#, python-format
-#~ msgid "%(name)s's birthday"
-#~ msgstr "%(name)s отмечает День Рождения"
-
 #, python-format
 #~ msgid "%(name)s was born on %(birthday)s"
 #~ msgstr "%(name)s родился(-лась) %(birthday)s"
@@ -3683,9 +3493,6 @@ msgstr ""
 #~ msgid "Third-party accounts"
 #~ msgstr "Учётные записи третих сторон"
 
-#~ msgid "Calendar Feeds"
-#~ msgstr "Ленты календарей"
-
 #~ msgid "Logout"
 #~ msgstr "Выйти"
 
@@ -3736,14 +3543,8 @@ msgstr ""
 #~ msgid "ICal Feeds"
 #~ msgstr "iCal-ленты"
 
-#~ msgid ""
-#~ "These are URLs for different Calendar Feeds in the iCal (.ics) format. "
-#~ "You can create as many as you want and import them in your calendar "
-#~ "software."
-#~ msgstr ""
-#~ "Здесь находятся ссылки на разные ленты календарей в формате iCal (.ics). "
-#~ "Вы можете создать их столько, сколько будет необходимо и импортировать их "
-#~ "в ПО для работы с календарями."
+#~ msgid "These are URLs for different Calendar Feeds in the iCal (.ics) format. You can create as many as you want and import them in your calendar software."
+#~ msgstr "Здесь находятся ссылки на разные ленты календарей в формате iCal (.ics). Вы можете создать их столько, сколько будет необходимо и импортировать их в ПО для работы с календарями."
 
 #~ msgid "Your iCal URLs"
 #~ msgstr "Ваши ссылки iCal"
@@ -3768,30 +3569,24 @@ msgstr ""
 
 #~ msgid ""
 #~ "\n"
-#~ "              This platform is powered by AlekSIS®, a web-based school "
-#~ "information system (SIS) which can be used\n"
-#~ "              to manage and/or publish organisational artifacts of "
-#~ "educational institutions. AlekSIS is free software and\n"
+#~ "              This platform is powered by AlekSIS®, a web-based school information system (SIS) which can be used\n"
+#~ "              to manage and/or publish organisational artifacts of educational institutions. AlekSIS is free software and\n"
 #~ "              can be used by anyone.\n"
 #~ "            "
 #~ msgstr ""
 #~ "\n"
-#~ "              Эта платформа использует AlekSIS®, веб-инструмент "
-#~ "информационной системы для обучения (SIS) при помощи которой\n"
-#~ "              можно управлять и/или публиковать оргинформацию учебных "
-#~ "заведений. AlekSIS - бесплатное ПО\n"
+#~ "              Эта платформа использует AlekSIS®, веб-инструмент информационной системы для обучения (SIS) при помощи которой\n"
+#~ "              можно управлять и/или публиковать оргинформацию учебных заведений. AlekSIS - бесплатное ПО\n"
 #~ "              и его может использовать любой желающий.\n"
 #~ "            "
 
 #~ msgid ""
 #~ "\n"
-#~ "              AlekSIS® is a registered trademark of the AlekSIS open "
-#~ "source project, represented by Teckids e.V.\n"
+#~ "              AlekSIS® is a registered trademark of the AlekSIS open source project, represented by Teckids e.V.\n"
 #~ "            "
 #~ msgstr ""
 #~ "\n"
-#~ "              AlekSIS® – зарегистрированная торговая марка проекта с "
-#~ "открытым исходным кодом AlekSIS, которая представлена Teckids e.V.\n"
+#~ "              AlekSIS® – зарегистрированная торговая марка проекта с открытым исходным кодом AlekSIS, которая представлена Teckids e.V.\n"
 #~ "            "
 
 #~ msgid "Website of AlekSIS"
@@ -3805,18 +3600,14 @@ msgstr ""
 
 #~ msgid ""
 #~ "\n"
-#~ "              The core and the official apps of AlekSIS are licenced "
-#~ "under the EUPL, version 1.2 or later. For licence\n"
-#~ "              information from third-party apps, if installed, refer to "
-#~ "the respective components below. The\n"
+#~ "              The core and the official apps of AlekSIS are licenced under the EUPL, version 1.2 or later. For licence\n"
+#~ "              information from third-party apps, if installed, refer to the respective components below. The\n"
 #~ "              licences are marked like this:\n"
 #~ "            "
 #~ msgstr ""
 #~ "\n"
-#~ "              Ядро и официальные дополнения AlekSIS лицензированы под "
-#~ "лицензией EUPL, версии 1.2 или новее. Для получения информации\n"
-#~ "              о компонентах третих сторон, если таковы установлены, "
-#~ "перейдите к соответствующим компонентам ниже.\n"
+#~ "              Ядро и официальные дополнения AlekSIS лицензированы под лицензией EUPL, версии 1.2 или новее. Для получения информации\n"
+#~ "              о компонентах третих сторон, если таковы установлены, перейдите к соответствующим компонентам ниже.\n"
 #~ "              Эти лицензии обозначены такой отметкой:\n"
 #~ "            "
 
@@ -3834,13 +3625,11 @@ msgstr ""
 
 #~ msgid ""
 #~ "\n"
-#~ "              Without activated JavaScript the progress status can't be "
-#~ "updated.\n"
+#~ "              Without activated JavaScript the progress status can't be updated.\n"
 #~ "            "
 #~ msgstr ""
 #~ "\n"
-#~ "              Без активного JavaScript статус выполнения обновляться не "
-#~ "сможет.\n"
+#~ "              Без активного JavaScript статус выполнения обновляться не сможет.\n"
 #~ "            "
 
 #~ msgid "Language"
@@ -3851,14 +3640,12 @@ msgstr ""
 
 #~ msgid ""
 #~ "\n"
-#~ "            Your administrator account is not linked to any person. "
-#~ "Therefore,\n"
+#~ "            Your administrator account is not linked to any person. Therefore,\n"
 #~ "            a dummy person has been linked to your account.\n"
 #~ "          "
 #~ msgstr ""
 #~ "\n"
-#~ "            Ваша административная учётная запись не соединена на с одним "
-#~ "физлицом. Поэтому\n"
+#~ "            Ваша административная учётная запись не соединена на с одним физлицом. Поэтому\n"
 #~ "            к Вашей учётной записи привязано фейковое физлицо.\n"
 #~ "          "
 
@@ -3871,10 +3658,8 @@ msgstr ""
 #~ msgstr ""
 #~ "\n"
 #~ "            Ваша учётная запись не связана с физлицом. Это значит,\n"
-#~ "            что у Вас нет доступа на к какой учебной информации. "
-#~ "Обратитесь,\n"
-#~ "            пожалуйста, к администраторам AlekSIS в Вашем учебном "
-#~ "заведении.\n"
+#~ "            что у Вас нет доступа на к какой учебной информации. Обратитесь,\n"
+#~ "            пожалуйста, к администраторам AlekSIS в Вашем учебном заведении.\n"
 #~ "          "
 
 #~ msgid "Impersonate"
diff --git a/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po b/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po
index 1b5c47ccd..1e24c46a4 100644
--- a/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: AlekSIS (School Information System) 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-05-09 18:40+0200\n"
+"POT-Creation-Date: 2023-07-23 13:39+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"
@@ -41,8 +41,8 @@ msgstr ""
 msgid "Home and mobile phone"
 msgstr ""
 
-#: aleksis/core/apps.py:166 aleksis/core/forms.py:221
-#: aleksis/core/models.py:495 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:166 aleksis/core/forms.py:231
+#: aleksis/core/models.py:517 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
 msgid "Groups"
 msgstr ""
@@ -101,172 +101,172 @@ msgstr ""
 msgid "Content type"
 msgstr ""
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:721
+#: aleksis/core/filters.py:113 aleksis/core/models.py:743
 msgid "User"
 msgstr ""
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:494
+#: aleksis/core/filters.py:135 aleksis/core/models.py:516
 msgid "Group"
 msgstr ""
 
-#: aleksis/core/forms.py:51 aleksis/core/forms.py:582
+#: aleksis/core/forms.py:50 aleksis/core/forms.py:591
 msgid "Base data"
 msgstr ""
 
-#: aleksis/core/forms.py:56 aleksis/core/tables.py:47
+#: aleksis/core/forms.py:55 aleksis/core/tables.py:29
 msgid "Address"
 msgstr ""
 
-#: aleksis/core/forms.py:57 aleksis/core/forms.py:591
+#: aleksis/core/forms.py:56 aleksis/core/forms.py:600
 msgid "Contact data"
 msgstr ""
 
-#: aleksis/core/forms.py:59
+#: aleksis/core/forms.py:58
 msgid "Advanced personal data"
 msgstr ""
 
-#: aleksis/core/forms.py:107
+#: aleksis/core/forms.py:106
 msgid "New user"
 msgstr ""
 
-#: aleksis/core/forms.py:107
+#: aleksis/core/forms.py:106
 msgid "Create a new account"
 msgstr ""
 
-#: aleksis/core/forms.py:133
+#: aleksis/core/forms.py:132
 msgid "You cannot set a new username when also selecting an existing user."
 msgstr ""
 
-#: aleksis/core/forms.py:137
+#: aleksis/core/forms.py:136
 msgid "This username is already in use."
 msgstr ""
 
-#: aleksis/core/forms.py:154 aleksis/core/models.py:142
+#: aleksis/core/forms.py:153 aleksis/core/models.py:154
 msgid "School term"
 msgstr ""
 
-#: aleksis/core/forms.py:155
+#: aleksis/core/forms.py:154
 msgid "Common data"
 msgstr ""
 
-#: aleksis/core/forms.py:156 aleksis/core/forms.py:208
-#: aleksis/core/models.py:165 aleksis/core/templates/core/person/list.html:8
+#: aleksis/core/forms.py:155 aleksis/core/forms.py:218
+#: aleksis/core/models.py:177 aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
 msgstr ""
 
-#: aleksis/core/forms.py:157 aleksis/core/forms.py:593
+#: aleksis/core/forms.py:156 aleksis/core/forms.py:602
 msgid "Additional data"
 msgstr ""
 
-#: aleksis/core/forms.py:158 aleksis/core/models.py:218
-#: aleksis/core/models.py:547 aleksis/core/tables.py:46
+#: aleksis/core/forms.py:157 aleksis/core/models.py:230
+#: aleksis/core/models.py:569 aleksis/core/tables.py:28
 msgid "Photo"
 msgstr ""
 
-#: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:85
+#: aleksis/core/forms.py:210 aleksis/core/forms.py:213
+#: aleksis/core/models.py:97
 msgid "Date"
 msgstr ""
 
-#: aleksis/core/forms.py:201 aleksis/core/forms.py:204
-#: aleksis/core/models.py:93
+#: aleksis/core/forms.py:211 aleksis/core/forms.py:214
+#: aleksis/core/models.py:105
 msgid "Time"
 msgstr ""
 
-#: aleksis/core/forms.py:234
+#: aleksis/core/forms.py:244
 msgid "From when until when should the announcement be displayed?"
 msgstr ""
 
-#: aleksis/core/forms.py:237
+#: aleksis/core/forms.py:247
 msgid "Who should see the announcement?"
 msgstr ""
 
-#: aleksis/core/forms.py:238
+#: aleksis/core/forms.py:248
 msgid "Write your announcement:"
 msgstr ""
 
-#: aleksis/core/forms.py:277
+#: aleksis/core/forms.py:287
 msgid "You are not allowed to create announcements which are only valid in the past."
 msgstr ""
 
-#: aleksis/core/forms.py:281
+#: aleksis/core/forms.py:291
 msgid "The from date and time must be earlier then the until date and time."
 msgstr ""
 
-#: aleksis/core/forms.py:290
+#: aleksis/core/forms.py:300
 msgid "You need at least one recipient."
 msgstr ""
 
-#: aleksis/core/forms.py:399
+#: aleksis/core/forms.py:408
 msgid "Invitation code"
 msgstr ""
 
-#: aleksis/core/forms.py:400
+#: aleksis/core/forms.py:409
 msgid "Please enter your invitation code."
 msgstr ""
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:193
+#: aleksis/core/forms.py:428 aleksis/core/models.py:205
 msgid "First name"
 msgstr ""
 
-#: aleksis/core/forms.py:420 aleksis/core/models.py:194
+#: aleksis/core/forms.py:429 aleksis/core/models.py:206
 msgid "Last name"
 msgstr ""
 
-#: aleksis/core/forms.py:429
+#: aleksis/core/forms.py:438
 msgid "A person is using this e-mail address"
 msgstr ""
 
-#: aleksis/core/forms.py:457
+#: aleksis/core/forms.py:466
 msgid "Who should get the permission?"
 msgstr ""
 
-#: aleksis/core/forms.py:458
+#: aleksis/core/forms.py:467
 msgid "On what?"
 msgstr ""
 
-#: aleksis/core/forms.py:484
+#: aleksis/core/forms.py:493
 msgid "Select objects which the permission should be granted for:"
 msgstr ""
 
-#: aleksis/core/forms.py:487
+#: aleksis/core/forms.py:496
 msgid "Grant the permission for all objects"
 msgstr ""
 
-#: aleksis/core/forms.py:495
+#: aleksis/core/forms.py:504
 msgid "You must select at least one group or person which should get the permission."
 msgstr ""
 
-#: aleksis/core/forms.py:500
+#: aleksis/core/forms.py:509
 msgid "You must grant the permission to all objects or to specific objects."
 msgstr ""
 
-#: aleksis/core/forms.py:587
+#: aleksis/core/forms.py:596
 msgid "Address data"
 msgstr ""
 
-#: aleksis/core/forms.py:599
+#: aleksis/core/forms.py:608
 msgid "Account data"
 msgstr ""
 
-#: aleksis/core/forms.py:606
+#: aleksis/core/forms.py:615
 msgid "Password"
 msgstr ""
 
-#: aleksis/core/forms.py:609
+#: aleksis/core/forms.py:618
 msgid "Password (again)"
 msgstr ""
 
-#: aleksis/core/forms.py:762
+#: aleksis/core/forms.py:771
 msgid "The selected action does not exist."
 msgstr ""
 
-#: aleksis/core/forms.py:773
+#: aleksis/core/forms.py:782
 msgid "You do not have permission to run {} on all selected objects."
 msgstr ""
 
-#: aleksis/core/forms.py:829
+#: aleksis/core/forms.py:838
 msgid "No valid selection."
 msgstr ""
 
@@ -290,697 +290,744 @@ msgstr ""
 msgid "No backup result found!"
 msgstr ""
 
-#: aleksis/core/mixins.py:511
+#: aleksis/core/mixins.py:539
 msgid "Linked school term"
 msgstr ""
 
-#: aleksis/core/models.py:83
+#: aleksis/core/models.py:95
 msgid "Boolean (Yes/No)"
 msgstr ""
 
-#: aleksis/core/models.py:84
+#: aleksis/core/models.py:96
 msgid "Text (one line)"
 msgstr ""
 
-#: aleksis/core/models.py:86
+#: aleksis/core/models.py:98
 msgid "Date and time"
 msgstr ""
 
-#: aleksis/core/models.py:87
+#: aleksis/core/models.py:99
 msgid "Decimal number"
 msgstr ""
 
-#: aleksis/core/models.py:88 aleksis/core/models.py:211
+#: aleksis/core/models.py:100 aleksis/core/models.py:223
 msgid "E-mail address"
 msgstr ""
 
-#: aleksis/core/models.py:89
+#: aleksis/core/models.py:101
 msgid "Integer"
 msgstr ""
 
-#: aleksis/core/models.py:90
+#: aleksis/core/models.py:102
 msgid "IP address"
 msgstr ""
 
-#: aleksis/core/models.py:91
+#: aleksis/core/models.py:103
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr ""
 
-#: aleksis/core/models.py:92
+#: aleksis/core/models.py:104
 msgid "Text (multi-line)"
 msgstr ""
 
-#: aleksis/core/models.py:94
+#: aleksis/core/models.py:106
 msgid "URL / Link"
 msgstr ""
 
-#: aleksis/core/models.py:106 aleksis/core/models.py:1078
+#: aleksis/core/models.py:118 aleksis/core/models.py:1100
+#: aleksis/core/models.py:1729
 msgid "Name"
 msgstr ""
 
-#: aleksis/core/models.py:108
+#: aleksis/core/models.py:120 aleksis/core/models.py:1532
 msgid "Start date"
 msgstr ""
 
-#: aleksis/core/models.py:109
+#: aleksis/core/models.py:121 aleksis/core/models.py:1533
 msgid "End date"
 msgstr ""
 
-#: aleksis/core/models.py:128
+#: aleksis/core/models.py:140 aleksis/core/schema/school_term.py:48
 msgid "The start date must be earlier than the end date."
 msgstr ""
 
-#: aleksis/core/models.py:135
+#: aleksis/core/models.py:147 aleksis/core/schema/school_term.py:53
 msgid "There is already a school term for this time or a part of this time."
 msgstr ""
 
-#: aleksis/core/models.py:143
-#: aleksis/core/templates/core/school_term/list.html:8
-#: aleksis/core/templates/core/school_term/list.html:9
+#: aleksis/core/models.py:155
 msgid "School terms"
 msgstr ""
 
-#: aleksis/core/models.py:164 aleksis/core/models.py:1027
+#: aleksis/core/models.py:176 aleksis/core/models.py:1049
 msgid "Person"
 msgstr ""
 
-#: aleksis/core/models.py:167
+#: aleksis/core/models.py:179
 msgid "Can view address"
 msgstr ""
 
-#: aleksis/core/models.py:168
+#: aleksis/core/models.py:180
 msgid "Can view contact details"
 msgstr ""
 
-#: aleksis/core/models.py:169
+#: aleksis/core/models.py:181
 msgid "Can view photo"
 msgstr ""
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:182
 msgid "Can view avatar image"
 msgstr ""
 
-#: aleksis/core/models.py:171
+#: aleksis/core/models.py:183
 msgid "Can view persons groups"
 msgstr ""
 
-#: aleksis/core/models.py:172
+#: aleksis/core/models.py:184
 msgid "Can view personal details"
 msgstr ""
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "female"
 msgstr ""
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "male"
 msgstr ""
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "other"
 msgstr ""
 
-#: aleksis/core/models.py:190 aleksis/core/models.py:1382
+#: aleksis/core/models.py:202 aleksis/core/models.py:1404
 msgid "Linked user"
 msgstr ""
 
-#: aleksis/core/models.py:196
+#: aleksis/core/models.py:208
 msgid "Additional name(s)"
 msgstr ""
 
-#: aleksis/core/models.py:200 aleksis/core/models.py:512
-#: aleksis/core/models.py:1468
+#: aleksis/core/models.py:212 aleksis/core/models.py:534
+#: aleksis/core/models.py:1490
 msgid "Short name"
 msgstr ""
 
-#: aleksis/core/models.py:203
+#: aleksis/core/models.py:215
 msgid "Street"
 msgstr ""
 
-#: aleksis/core/models.py:204
+#: aleksis/core/models.py:216
 msgid "Street number"
 msgstr ""
 
-#: aleksis/core/models.py:205
+#: aleksis/core/models.py:217
 msgid "Postal code"
 msgstr ""
 
-#: aleksis/core/models.py:206
+#: aleksis/core/models.py:218
 msgid "Place"
 msgstr ""
 
-#: aleksis/core/models.py:208
+#: aleksis/core/models.py:220
 msgid "Home phone"
 msgstr ""
 
-#: aleksis/core/models.py:209
+#: aleksis/core/models.py:221
 msgid "Mobile phone"
 msgstr ""
 
-#: aleksis/core/models.py:213
+#: aleksis/core/models.py:225
 msgid "Date of birth"
 msgstr ""
 
-#: aleksis/core/models.py:214
+#: aleksis/core/models.py:226
 msgid "Place of birth"
 msgstr ""
 
-#: aleksis/core/models.py:215
+#: aleksis/core/models.py:227
 msgid "Sex"
 msgstr ""
 
-#: aleksis/core/models.py:222 aleksis/core/models.py:551
+#: aleksis/core/models.py:234 aleksis/core/models.py:573
 msgid "This is an official photo, used for official documents and for internal use cases."
 msgstr ""
 
-#: aleksis/core/models.py:227 aleksis/core/models.py:555
+#: aleksis/core/models.py:239 aleksis/core/models.py:577
 msgid "Display picture / Avatar"
 msgstr ""
 
-#: aleksis/core/models.py:230 aleksis/core/models.py:558
+#: aleksis/core/models.py:242 aleksis/core/models.py:580
 msgid "This is a picture or an avatar for public display."
 msgstr ""
 
-#: aleksis/core/models.py:235
+#: aleksis/core/models.py:247
 msgid "Guardians / Parents"
 msgstr ""
 
-#: aleksis/core/models.py:242
+#: aleksis/core/models.py:254
 msgid "Primary group"
 msgstr ""
 
-#: aleksis/core/models.py:245 aleksis/core/models.py:725
-#: aleksis/core/models.py:749 aleksis/core/models.py:844
-#: aleksis/core/models.py:1113
+#: aleksis/core/models.py:257 aleksis/core/models.py:747
+#: aleksis/core/models.py:771 aleksis/core/models.py:866
+#: aleksis/core/models.py:1135
 msgid "Description"
 msgstr ""
 
-#: aleksis/core/models.py:465
+#: aleksis/core/models.py:487
 msgid "Title of field"
 msgstr ""
 
-#: aleksis/core/models.py:467
+#: aleksis/core/models.py:489
 msgid "Type of field"
 msgstr ""
 
-#: aleksis/core/models.py:469
+#: aleksis/core/models.py:491
 msgid "Required"
 msgstr ""
 
-#: aleksis/core/models.py:470
+#: aleksis/core/models.py:492
 msgid "Help text / description"
 msgstr ""
 
-#: aleksis/core/models.py:476
+#: aleksis/core/models.py:498
 msgid "Addtitional field for groups"
 msgstr ""
 
-#: aleksis/core/models.py:477
+#: aleksis/core/models.py:499
 msgid "Addtitional fields for groups"
 msgstr ""
 
-#: aleksis/core/models.py:497
+#: aleksis/core/models.py:519
 msgid "Can assign child groups to groups"
 msgstr ""
 
-#: aleksis/core/models.py:498
+#: aleksis/core/models.py:520
 msgid "Can view statistics about group."
 msgstr ""
 
-#: aleksis/core/models.py:510 aleksis/core/models.py:1469
+#: aleksis/core/models.py:532 aleksis/core/models.py:1491
 msgid "Long name"
 msgstr ""
 
-#: aleksis/core/models.py:520 aleksis/core/templates/core/group/full.html:105
+#: aleksis/core/models.py:542 aleksis/core/templates/core/group/full.html:105
 msgid "Members"
 msgstr ""
 
-#: aleksis/core/models.py:523 aleksis/core/templates/core/group/full.html:102
+#: aleksis/core/models.py:545 aleksis/core/templates/core/group/full.html:102
 msgid "Owners"
 msgstr ""
 
-#: aleksis/core/models.py:530 aleksis/core/templates/core/group/full.html:59
+#: aleksis/core/models.py:552 aleksis/core/templates/core/group/full.html:59
 msgid "Parent groups"
 msgstr ""
 
-#: aleksis/core/models.py:538
+#: aleksis/core/models.py:560
 msgid "Type of group"
 msgstr ""
 
-#: aleksis/core/models.py:543
+#: aleksis/core/models.py:565
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 msgid "Additional fields"
 msgstr ""
 
-#: aleksis/core/models.py:724 aleksis/core/models.py:748
-#: aleksis/core/models.py:843 aleksis/core/models.py:1299
+#: aleksis/core/models.py:746 aleksis/core/models.py:770
+#: aleksis/core/models.py:865 aleksis/core/models.py:1321
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr ""
 
-#: aleksis/core/models.py:727
+#: aleksis/core/models.py:749
 msgid "Application"
 msgstr ""
 
-#: aleksis/core/models.py:733
+#: aleksis/core/models.py:755
 msgid "Activity"
 msgstr ""
 
-#: aleksis/core/models.py:734
+#: aleksis/core/models.py:756
 msgid "Activities"
 msgstr ""
 
-#: aleksis/core/models.py:740
+#: aleksis/core/models.py:762
 msgid "Sender"
 msgstr ""
 
-#: aleksis/core/models.py:745
+#: aleksis/core/models.py:767
 msgid "Recipient"
 msgstr ""
 
-#: aleksis/core/models.py:750 aleksis/core/models.py:1079
+#: aleksis/core/models.py:772 aleksis/core/models.py:1101
 msgid "Link"
 msgstr ""
 
-#: aleksis/core/models.py:753 aleksis/core/models.py:1080
-#: aleksis/core/models.py:1429
+#: aleksis/core/models.py:775 aleksis/core/models.py:1102
+#: aleksis/core/models.py:1451
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr ""
 
-#: aleksis/core/models.py:756
+#: aleksis/core/models.py:778
 msgid "Send notification at"
 msgstr ""
 
-#: aleksis/core/models.py:758
+#: aleksis/core/models.py:780
 msgid "Read"
 msgstr ""
 
-#: aleksis/core/models.py:759
+#: aleksis/core/models.py:781
 msgid "Sent"
 msgstr ""
 
-#: aleksis/core/models.py:776
+#: aleksis/core/models.py:798
 msgid "Notification"
 msgstr ""
 
-#: aleksis/core/models.py:777 aleksis/core/preferences.py:29
+#: aleksis/core/models.py:799 aleksis/core/preferences.py:28
 msgid "Notifications"
 msgstr ""
 
-#: aleksis/core/models.py:845
+#: aleksis/core/models.py:867
 msgid "Link to detailed view"
 msgstr ""
 
-#: aleksis/core/models.py:848
+#: aleksis/core/models.py:870
 msgid "Date and time from when to show"
 msgstr ""
 
-#: aleksis/core/models.py:851
+#: aleksis/core/models.py:873
 msgid "Date and time until when to show"
 msgstr ""
 
-#: aleksis/core/models.py:876
+#: aleksis/core/models.py:898
 msgid "Announcement"
 msgstr ""
 
-#: aleksis/core/models.py:877
+#: aleksis/core/models.py:899
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
 msgstr ""
 
-#: aleksis/core/models.py:914
+#: aleksis/core/models.py:936
 msgid "Announcement recipient"
 msgstr ""
 
-#: aleksis/core/models.py:915
+#: aleksis/core/models.py:937
 msgid "Announcement recipients"
 msgstr ""
 
-#: aleksis/core/models.py:935
+#: aleksis/core/models.py:957
 msgid "Widget Title"
 msgstr ""
 
-#: aleksis/core/models.py:936
+#: aleksis/core/models.py:958
 msgid "Activate Widget"
 msgstr ""
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:959
 msgid "Widget is broken"
 msgstr ""
 
-#: aleksis/core/models.py:940
+#: aleksis/core/models.py:962
 msgid "Size on mobile devices"
 msgstr ""
 
-#: aleksis/core/models.py:941
+#: aleksis/core/models.py:963
 msgid "<= 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:946
+#: aleksis/core/models.py:968
 msgid "Size on tablet devices"
 msgstr ""
 
-#: aleksis/core/models.py:947
+#: aleksis/core/models.py:969
 msgid "> 600 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:952
+#: aleksis/core/models.py:974
 msgid "Size on desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:953
+#: aleksis/core/models.py:975
 msgid "> 992 px, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:958
+#: aleksis/core/models.py:980
 msgid "Size on large desktop devices"
 msgstr ""
 
-#: aleksis/core/models.py:959
+#: aleksis/core/models.py:981
 msgid "> 1200 px>, 12 columns"
 msgstr ""
 
-#: aleksis/core/models.py:990
+#: aleksis/core/models.py:1012
 msgid "Can edit default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:991
+#: aleksis/core/models.py:1013
 msgid "Dashboard Widget"
 msgstr ""
 
-#: aleksis/core/models.py:992
+#: aleksis/core/models.py:1014
 msgid "Dashboard Widgets"
 msgstr ""
 
-#: aleksis/core/models.py:998
+#: aleksis/core/models.py:1020
 msgid "URL"
 msgstr ""
 
-#: aleksis/core/models.py:999
+#: aleksis/core/models.py:1021
 msgid "Icon URL"
 msgstr ""
 
-#: aleksis/core/models.py:1005
+#: aleksis/core/models.py:1027
 msgid "External link widget"
 msgstr ""
 
-#: aleksis/core/models.py:1006
+#: aleksis/core/models.py:1028
 msgid "External link widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1012
+#: aleksis/core/models.py:1034
 msgid "Content"
 msgstr ""
 
-#: aleksis/core/models.py:1018
+#: aleksis/core/models.py:1040
 msgid "Static content widget"
 msgstr ""
 
-#: aleksis/core/models.py:1019
+#: aleksis/core/models.py:1041
 msgid "Static content widgets"
 msgstr ""
 
-#: aleksis/core/models.py:1024
+#: aleksis/core/models.py:1046
 msgid "Dashboard widget"
 msgstr ""
 
-#: aleksis/core/models.py:1029
+#: aleksis/core/models.py:1051
 msgid "Order"
 msgstr ""
 
-#: aleksis/core/models.py:1030
+#: aleksis/core/models.py:1052
 msgid "Part of the default dashboard"
 msgstr ""
 
-#: aleksis/core/models.py:1045
+#: aleksis/core/models.py:1067
 msgid "Dashboard widget order"
 msgstr ""
 
-#: aleksis/core/models.py:1046
+#: aleksis/core/models.py:1068
 msgid "Dashboard widget orders"
 msgstr ""
 
-#: aleksis/core/models.py:1052
+#: aleksis/core/models.py:1074
 msgid "Menu ID"
 msgstr ""
 
-#: aleksis/core/models.py:1065
+#: aleksis/core/models.py:1087
 msgid "Custom menu"
 msgstr ""
 
-#: aleksis/core/models.py:1066
+#: aleksis/core/models.py:1088
 msgid "Custom menus"
 msgstr ""
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1098
 msgid "Menu"
 msgstr ""
 
-#: aleksis/core/models.py:1086
+#: aleksis/core/models.py:1108
 msgid "Custom menu item"
 msgstr ""
 
-#: aleksis/core/models.py:1087
+#: aleksis/core/models.py:1109
 msgid "Custom menu items"
 msgstr ""
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1134
 msgid "Title of type"
 msgstr ""
 
-#: aleksis/core/models.py:1119 aleksis/core/templates/core/group/full.html:50
+#: aleksis/core/models.py:1141 aleksis/core/templates/core/group/full.html:50
 msgid "Group type"
 msgstr ""
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1142
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
 msgstr ""
 
-#: aleksis/core/models.py:1133
+#: aleksis/core/models.py:1155
 msgid "Can view system status"
 msgstr ""
 
-#: aleksis/core/models.py:1134
+#: aleksis/core/models.py:1156
 msgid "Can manage data"
 msgstr ""
 
-#: aleksis/core/models.py:1135
+#: aleksis/core/models.py:1157
 msgid "Can impersonate"
 msgstr ""
 
-#: aleksis/core/models.py:1136
+#: aleksis/core/models.py:1158
 msgid "Can use search"
 msgstr ""
 
-#: aleksis/core/models.py:1137
+#: aleksis/core/models.py:1159
 msgid "Can change site preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1138
+#: aleksis/core/models.py:1160
 msgid "Can change person preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1139
+#: aleksis/core/models.py:1161
 msgid "Can change group preferences"
 msgstr ""
 
-#: aleksis/core/models.py:1140
+#: aleksis/core/models.py:1162
 msgid "Can test PDF generation"
 msgstr ""
 
-#: aleksis/core/models.py:1141
+#: aleksis/core/models.py:1163
 msgid "Can invite persons"
 msgstr ""
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1199
 msgid "Related data check task"
 msgstr ""
 
-#: aleksis/core/models.py:1185
+#: aleksis/core/models.py:1207
 msgid "Issue solved"
 msgstr ""
 
-#: aleksis/core/models.py:1186
+#: aleksis/core/models.py:1208
 msgid "Notification sent"
 msgstr ""
 
-#: aleksis/core/models.py:1199
+#: aleksis/core/models.py:1221
 msgid "Data check result"
 msgstr ""
 
-#: aleksis/core/models.py:1200
+#: aleksis/core/models.py:1222
 msgid "Data check results"
 msgstr ""
 
-#: aleksis/core/models.py:1202
+#: aleksis/core/models.py:1224
 msgid "Can run data checks"
 msgstr ""
 
-#: aleksis/core/models.py:1203
+#: aleksis/core/models.py:1225
 msgid "Can solve data check problems"
 msgstr ""
 
-#: aleksis/core/models.py:1210
+#: aleksis/core/models.py:1232
 msgid "E-Mail address"
 msgstr ""
 
-#: aleksis/core/models.py:1270
+#: aleksis/core/models.py:1292
 msgid "Owner"
 msgstr ""
 
-#: aleksis/core/models.py:1274
+#: aleksis/core/models.py:1296
 msgid "File expires at"
 msgstr ""
 
-#: aleksis/core/models.py:1277
+#: aleksis/core/models.py:1299
 msgid "Generated HTML file"
 msgstr ""
 
-#: aleksis/core/models.py:1280
+#: aleksis/core/models.py:1302
 msgid "Generated PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1287
+#: aleksis/core/models.py:1309
 msgid "PDF file"
 msgstr ""
 
-#: aleksis/core/models.py:1288
+#: aleksis/core/models.py:1310
 msgid "PDF files"
 msgstr ""
 
-#: aleksis/core/models.py:1293
+#: aleksis/core/models.py:1315
 msgid "Task result"
 msgstr ""
 
-#: aleksis/core/models.py:1296
+#: aleksis/core/models.py:1318
 msgid "Task user"
 msgstr ""
 
-#: aleksis/core/models.py:1300
+#: aleksis/core/models.py:1322
 msgid "Back URL"
 msgstr ""
 
-#: aleksis/core/models.py:1301
+#: aleksis/core/models.py:1323
 msgid "Progress title"
 msgstr ""
 
-#: aleksis/core/models.py:1302
+#: aleksis/core/models.py:1324
 msgid "Error message"
 msgstr ""
 
-#: aleksis/core/models.py:1303
+#: aleksis/core/models.py:1325
 msgid "Success message"
 msgstr ""
 
-#: aleksis/core/models.py:1304
+#: aleksis/core/models.py:1326
 msgid "Redirect on success URL"
 msgstr ""
 
-#: aleksis/core/models.py:1306
+#: aleksis/core/models.py:1328
 msgid "Additional button title"
 msgstr ""
 
-#: aleksis/core/models.py:1308
+#: aleksis/core/models.py:1330
 msgid "Additional button URL"
 msgstr ""
 
-#: aleksis/core/models.py:1310
+#: aleksis/core/models.py:1332
 msgid "Additional button icon"
 msgstr ""
 
-#: aleksis/core/models.py:1312
+#: aleksis/core/models.py:1334
 msgid "Result fetched"
 msgstr ""
 
-#: aleksis/core/models.py:1337
+#: aleksis/core/models.py:1359
 msgid "Background task completed successfully"
 msgstr ""
 
-#: aleksis/core/models.py:1338
+#: aleksis/core/models.py:1360
 msgid "The background task '{}' has been completed successfully."
 msgstr ""
 
-#: aleksis/core/models.py:1344
+#: aleksis/core/models.py:1366
 msgid "Background task failed"
 msgstr ""
 
-#: aleksis/core/models.py:1345
+#: aleksis/core/models.py:1367
 msgid "The background task '{}' has failed."
 msgstr ""
 
-#: aleksis/core/models.py:1354
+#: aleksis/core/models.py:1376
 msgid "Background task"
 msgstr ""
 
-#: aleksis/core/models.py:1368
+#: aleksis/core/models.py:1390
 msgid "Task user assignment"
 msgstr ""
 
-#: aleksis/core/models.py:1369
+#: aleksis/core/models.py:1391
 msgid "Task user assignments"
 msgstr ""
 
-#: aleksis/core/models.py:1385
+#: aleksis/core/models.py:1407
 msgid "Additional attributes"
 msgstr ""
 
-#: aleksis/core/models.py:1423
+#: aleksis/core/models.py:1445
 msgid "Allowed scopes that clients can request"
 msgstr ""
 
-#: aleksis/core/models.py:1433
+#: aleksis/core/models.py:1455
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr ""
 
-#: aleksis/core/models.py:1478
+#: aleksis/core/models.py:1500
 msgid "Can view room timetable"
 msgstr ""
 
-#: aleksis/core/models.py:1480
+#: aleksis/core/models.py:1502
 msgid "Room"
 msgstr ""
 
-#: aleksis/core/models.py:1481
+#: aleksis/core/models.py:1503
 msgid "Rooms"
 msgstr ""
 
-#: aleksis/core/preferences.py:25
+#: aleksis/core/models.py:1528
+msgid "Start date and time"
+msgstr ""
+
+#: aleksis/core/models.py:1530
+msgid "End date and time"
+msgstr ""
+
+#: aleksis/core/models.py:1531
+msgid "Timezone"
+msgstr ""
+
+#: aleksis/core/models.py:1534
+msgid "Recurrences"
+msgstr ""
+
+#: aleksis/core/models.py:1540
+msgid "Amended base event"
+msgstr ""
+
+#: aleksis/core/models.py:1643
+msgid "Calendar Event"
+msgstr ""
+
+#: aleksis/core/models.py:1644
+msgid "Calendar Events"
+msgstr ""
+
+#: aleksis/core/models.py:1670
+msgid "Birthdays"
+msgstr ""
+
+#: aleksis/core/models.py:1674
+msgid "{}'s birthday"
+msgstr ""
+
+#: aleksis/core/models.py:1713 aleksis/core/models.py:1775
+msgid "Holidays"
+msgstr ""
+
+#: aleksis/core/models.py:1774
+msgid "Holiday"
+msgstr ""
+
+#: aleksis/core/preferences.py:24
 msgid "General"
 msgstr ""
 
-#: aleksis/core/preferences.py:26
+#: aleksis/core/preferences.py:25
 msgid "School"
 msgstr ""
 
-#: aleksis/core/preferences.py:27
+#: aleksis/core/preferences.py:26
 msgid "Theme"
 msgstr ""
 
-#: aleksis/core/preferences.py:28
+#: aleksis/core/preferences.py:27
 msgid "Mail"
 msgstr ""
 
-#: aleksis/core/preferences.py:30
+#: aleksis/core/preferences.py:29
 msgid "Footer"
 msgstr ""
 
-#: aleksis/core/preferences.py:31
+#: aleksis/core/preferences.py:30
 msgid "Accounts"
 msgstr ""
 
-#: aleksis/core/preferences.py:32
+#: aleksis/core/preferences.py:31
 msgid "Authentication"
 msgstr ""
 
-#: aleksis/core/preferences.py:33
+#: aleksis/core/preferences.py:32
 msgid "Internationalisation"
 msgstr ""
 
+#: aleksis/core/preferences.py:33
+msgid "Calendar"
+msgstr ""
+
 #: aleksis/core/preferences.py:43
 msgid "Site title"
 msgstr ""
@@ -1154,7 +1201,15 @@ msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr ""
 
 #: aleksis/core/preferences.py:490
-msgid "Country for phone number parsing"
+msgid "Birthday calendar feed color"
+msgstr ""
+
+#: aleksis/core/preferences.py:502
+msgid "Holiday calendar feed color"
+msgstr ""
+
+#: aleksis/core/preferences.py:515
+msgid "Activated calendars"
 msgstr ""
 
 #: aleksis/core/settings.py:551
@@ -1169,22 +1224,9 @@ msgstr ""
 msgid "Ukrainian"
 msgstr ""
 
-#: aleksis/core/tables.py:25
-#: aleksis/core/templates/core/announcement/list.html:36
-#: aleksis/core/templates/core/group/full.html:26
-#: aleksis/core/templates/oauth2_provider/application/detail.html:17
-msgid "Edit"
-msgstr ""
-
-#: aleksis/core/tables.py:27 aleksis/core/tables.py:148
-#: aleksis/core/tables.py:185
-#: aleksis/core/templates/core/announcement/list.html:22
-msgid "Actions"
-msgstr ""
-
-#: aleksis/core/tables.py:115 aleksis/core/tables.py:116
-#: aleksis/core/tables.py:130 aleksis/core/tables.py:146
-#: aleksis/core/tables.py:183
+#: aleksis/core/tables.py:97 aleksis/core/tables.py:98
+#: aleksis/core/tables.py:112 aleksis/core/tables.py:128
+#: aleksis/core/tables.py:165
 #: aleksis/core/templates/core/announcement/list.html:42
 #: aleksis/core/templates/core/group/full.html:33
 #: aleksis/core/templates/core/pages/delete.html:22
@@ -1192,6 +1234,11 @@ msgstr ""
 msgid "Delete"
 msgstr ""
 
+#: aleksis/core/tables.py:130 aleksis/core/tables.py:167
+#: aleksis/core/templates/core/announcement/list.html:22
+msgid "Actions"
+msgstr ""
+
 #: aleksis/core/templates/403.html:14 aleksis/core/templates/500.html:10
 #: aleksis/core/templates/oauth2_provider/authorize.html:54
 msgid "Error"
@@ -1262,6 +1309,13 @@ msgstr ""
 msgid "Your AlekSIS team"
 msgstr ""
 
+#: aleksis/core/templates/account/email/email_confirmation_message.txt:6
+#, python-format
+msgid ""
+"Someone tried to register an account with the username %(user_display)s and your e-mail address on %(site_domain)s.\n"
+"If it was you, please confirm the registration by clicking on the following link:"
+msgstr ""
+
 #: aleksis/core/templates/account/email_confirm.html:5
 #: aleksis/core/templates/account/email_confirm.html:6
 #: aleksis/core/templates/account/email_confirm.html:17
@@ -1494,6 +1548,12 @@ msgstr ""
 msgid "Recipients"
 msgstr ""
 
+#: aleksis/core/templates/core/announcement/list.html:36
+#: aleksis/core/templates/core/group/full.html:26
+#: aleksis/core/templates/oauth2_provider/application/detail.html:17
+msgid "Edit"
+msgstr ""
+
 #: aleksis/core/templates/core/announcement/list.html:50
 msgid "There are no announcements."
 msgstr ""
@@ -2042,17 +2102,6 @@ msgstr ""
 msgid "Selected persons"
 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 ""
-
-#: aleksis/core/templates/core/school_term/edit.html:6
-#: aleksis/core/templates/core/school_term/edit.html:7
-msgid "Edit school term"
-msgstr ""
-
 #: aleksis/core/templates/dynamic_preferences/form.html:5
 msgid "Preferences"
 msgstr ""
@@ -2812,156 +2861,148 @@ msgstr ""
 msgid "Download PDF"
 msgstr ""
 
-#: aleksis/core/views.py:285
-msgid "The school term has been created."
-msgstr ""
-
-#: aleksis/core/views.py:297
-msgid "The school term has been saved."
-msgstr ""
-
-#: aleksis/core/views.py:401
+#: aleksis/core/views.py:371
 msgid "The child groups were successfully saved."
 msgstr ""
 
-#: aleksis/core/views.py:420 aleksis/core/views.py:430
+#: aleksis/core/views.py:390 aleksis/core/views.py:400
 msgid "The person has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:480
+#: aleksis/core/views.py:450
 msgid "The group has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:528
+#: aleksis/core/views.py:498
 msgid "Maintenance mode was turned on successfully."
 msgstr ""
 
-#: aleksis/core/views.py:530
+#: aleksis/core/views.py:500
 msgid "Maintenance mode was turned off successfully."
 msgstr ""
 
-#: aleksis/core/views.py:588
+#: aleksis/core/views.py:558
 msgid "The announcement has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:604
+#: aleksis/core/views.py:574
 msgid "The announcement has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:673
+#: aleksis/core/views.py:643
 msgid "The requested preference registry does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:692
+#: aleksis/core/views.py:662
 msgid "The preferences have been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:716
+#: aleksis/core/views.py:686
 msgid "The person has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:730
+#: aleksis/core/views.py:700
 msgid "The group has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:762
+#: aleksis/core/views.py:732
 msgid "The additional field has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:797
+#: aleksis/core/views.py:767
 msgid "The additional field has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:822
+#: aleksis/core/views.py:792
 msgid "The group type has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:853
+#: aleksis/core/views.py:823
 msgid "The group type has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:888
+#: aleksis/core/views.py:858
 msgid "Progress: Run data checks"
 msgstr ""
 
-#: aleksis/core/views.py:889
+#: aleksis/core/views.py:859
 msgid "Run data checks …"
 msgstr ""
 
-#: aleksis/core/views.py:890
+#: aleksis/core/views.py:860
 msgid "The data checks were run successfully."
 msgstr ""
 
-#: aleksis/core/views.py:891
+#: aleksis/core/views.py:861
 msgid "There was a problem while running data checks."
 msgstr ""
 
-#: aleksis/core/views.py:908
+#: aleksis/core/views.py:878
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr ""
 
-#: aleksis/core/views.py:918
+#: aleksis/core/views.py:888
 msgid "The requested solve option does not exist"
 msgstr ""
 
-#: aleksis/core/views.py:951
+#: aleksis/core/views.py:921
 msgid "The dashboard widget has been saved."
 msgstr ""
 
-#: aleksis/core/views.py:981
+#: aleksis/core/views.py:951
 msgid "The dashboard widget has been created."
 msgstr ""
 
-#: aleksis/core/views.py:991
+#: aleksis/core/views.py:961
 msgid "The dashboard widget has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1063
+#: aleksis/core/views.py:1033
 msgid "Your dashboard configuration has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1065
+#: aleksis/core/views.py:1035
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr ""
 
-#: aleksis/core/views.py:1136
+#: aleksis/core/views.py:1106
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr ""
 
-#: aleksis/core/views.py:1233
+#: aleksis/core/views.py:1203
 msgid "We have successfully assigned the permissions."
 msgstr ""
 
-#: aleksis/core/views.py:1243
+#: aleksis/core/views.py:1213
 msgid "The global user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1253
+#: aleksis/core/views.py:1223
 msgid "The global group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1263
+#: aleksis/core/views.py:1233
 msgid "The object user permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1273
+#: aleksis/core/views.py:1243
 msgid "The object group permission has been deleted."
 msgstr ""
 
-#: aleksis/core/views.py:1382
+#: aleksis/core/views.py:1352
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr ""
 
-#: aleksis/core/views.py:1389
+#: aleksis/core/views.py:1359
 msgid "The third-party account has been successfully disconnected."
 msgstr ""
 
-#: aleksis/core/views.py:1465
+#: aleksis/core/views.py:1435
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr ""
 
-#: aleksis/core/views.py:1476
+#: aleksis/core/views.py:1446
 msgid "Person was already invited."
 msgstr ""
diff --git a/aleksis/core/locale/uk/LC_MESSAGES/django.po b/aleksis/core/locale/uk/LC_MESSAGES/django.po
index ee55e2d09..5c3090544 100644
--- a/aleksis/core/locale/uk/LC_MESSAGES/django.po
+++ b/aleksis/core/locale/uk/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-02-27 13:23+0100\n"
+"POT-Creation-Date: 2023-07-23 13:39+0200\n"
 "PO-Revision-Date: 2023-04-13 23:05+0000\n"
 "Last-Translator: Serhii Horichenko <m@sgg.im>\n"
 "Language-Team: Ukrainian <https://translate.edugit.org/projects/aleksis/aleksis-core/uk/>\n"
@@ -44,8 +44,8 @@ msgstr "Ел.адреса"
 msgid "Home and mobile phone"
 msgstr "Домашній та мобільний телефони"
 
-#: aleksis/core/apps.py:166 aleksis/core/forms.py:221
-#: aleksis/core/models.py:495 aleksis/core/templates/core/group/list.html:8
+#: aleksis/core/apps.py:166 aleksis/core/forms.py:231
+#: aleksis/core/models.py:517 aleksis/core/templates/core/group/list.html:8
 #: aleksis/core/templates/core/group/list.html:9
 msgid "Groups"
 msgstr "Групи"
@@ -104,172 +104,172 @@ msgstr "Дозвіл"
 msgid "Content type"
 msgstr "Тип змісту"
 
-#: aleksis/core/filters.py:113 aleksis/core/models.py:721
+#: aleksis/core/filters.py:113 aleksis/core/models.py:743
 msgid "User"
 msgstr "Користувач"
 
-#: aleksis/core/filters.py:135 aleksis/core/models.py:494
+#: aleksis/core/filters.py:135 aleksis/core/models.py:516
 msgid "Group"
 msgstr "Група"
 
-#: aleksis/core/forms.py:51 aleksis/core/forms.py:582
+#: aleksis/core/forms.py:50 aleksis/core/forms.py:591
 msgid "Base data"
 msgstr "Основні дані"
 
-#: aleksis/core/forms.py:56 aleksis/core/tables.py:47
+#: aleksis/core/forms.py:55 aleksis/core/tables.py:29
 msgid "Address"
 msgstr "Адреса"
 
-#: aleksis/core/forms.py:57 aleksis/core/forms.py:591
+#: aleksis/core/forms.py:56 aleksis/core/forms.py:600
 msgid "Contact data"
 msgstr "Контактні дані"
 
-#: aleksis/core/forms.py:59
+#: aleksis/core/forms.py:58
 msgid "Advanced personal data"
 msgstr "Додаткові особисті дані"
 
-#: aleksis/core/forms.py:107
+#: aleksis/core/forms.py:106
 msgid "New user"
 msgstr "Новий користувач"
 
-#: aleksis/core/forms.py:107
+#: aleksis/core/forms.py:106
 msgid "Create a new account"
 msgstr "Створити новий обліковий запис"
 
-#: aleksis/core/forms.py:133
+#: aleksis/core/forms.py:132
 msgid "You cannot set a new username when also selecting an existing user."
 msgstr "Обравши вже існуючого користувача неможливо створити новий логін."
 
-#: aleksis/core/forms.py:137
+#: aleksis/core/forms.py:136
 msgid "This username is already in use."
 msgstr "Такий логін вже зайнятий."
 
-#: aleksis/core/forms.py:154 aleksis/core/models.py:142
+#: aleksis/core/forms.py:153 aleksis/core/models.py:154
 msgid "School term"
 msgstr "Навчальний рік"
 
-#: aleksis/core/forms.py:155
+#: aleksis/core/forms.py:154
 msgid "Common data"
 msgstr "Загальні дані"
 
-#: aleksis/core/forms.py:156 aleksis/core/forms.py:208
-#: aleksis/core/models.py:165 aleksis/core/templates/core/person/list.html:8
+#: aleksis/core/forms.py:155 aleksis/core/forms.py:218
+#: aleksis/core/models.py:177 aleksis/core/templates/core/person/list.html:8
 #: aleksis/core/templates/core/person/list.html:9
 msgid "Persons"
 msgstr "Особи"
 
-#: aleksis/core/forms.py:157 aleksis/core/forms.py:593
+#: aleksis/core/forms.py:156 aleksis/core/forms.py:602
 msgid "Additional data"
 msgstr "Додаткові дані"
 
-#: aleksis/core/forms.py:158 aleksis/core/models.py:218
-#: aleksis/core/models.py:547 aleksis/core/tables.py:46
+#: aleksis/core/forms.py:157 aleksis/core/models.py:230
+#: aleksis/core/models.py:569 aleksis/core/tables.py:28
 msgid "Photo"
 msgstr "Фото"
 
-#: aleksis/core/forms.py:200 aleksis/core/forms.py:203
-#: aleksis/core/models.py:85
+#: aleksis/core/forms.py:210 aleksis/core/forms.py:213
+#: aleksis/core/models.py:97
 msgid "Date"
 msgstr "Дата"
 
-#: aleksis/core/forms.py:201 aleksis/core/forms.py:204
-#: aleksis/core/models.py:93
+#: aleksis/core/forms.py:211 aleksis/core/forms.py:214
+#: aleksis/core/models.py:105
 msgid "Time"
 msgstr "Час"
 
-#: aleksis/core/forms.py:234
+#: aleksis/core/forms.py:244
 msgid "From when until when should the announcement be displayed?"
 msgstr "З якого по який час повинно відображатися це оголошення?"
 
-#: aleksis/core/forms.py:237
+#: aleksis/core/forms.py:247
 msgid "Who should see the announcement?"
 msgstr "Хто повинен бачити це оголошення?"
 
-#: aleksis/core/forms.py:238
+#: aleksis/core/forms.py:248
 msgid "Write your announcement:"
 msgstr "Складіть своє оголошеня:"
 
-#: aleksis/core/forms.py:277
+#: aleksis/core/forms.py:287
 msgid "You are not allowed to create announcements which are only valid in the past."
 msgstr "Оголошення для минулого Вам створювати не дозволено."
 
-#: aleksis/core/forms.py:281
+#: aleksis/core/forms.py:291
 msgid "The from date and time must be earlier then the until date and time."
 msgstr "Дата і час початку повинні бути раніше за дату і час закінчення."
 
-#: aleksis/core/forms.py:290
+#: aleksis/core/forms.py:300
 msgid "You need at least one recipient."
 msgstr "Вам потрібен принаймні один отримувач."
 
-#: aleksis/core/forms.py:399
+#: aleksis/core/forms.py:408
 msgid "Invitation code"
 msgstr "Код запрошення"
 
-#: aleksis/core/forms.py:400
+#: aleksis/core/forms.py:409
 msgid "Please enter your invitation code."
 msgstr "Напишіть, будь ласка, свій код запрошення."
 
-#: aleksis/core/forms.py:419 aleksis/core/models.py:193
+#: aleksis/core/forms.py:428 aleksis/core/models.py:205
 msgid "First name"
 msgstr "Ім'я"
 
-#: aleksis/core/forms.py:420 aleksis/core/models.py:194
+#: aleksis/core/forms.py:429 aleksis/core/models.py:206
 msgid "Last name"
 msgstr "Прізвище"
 
-#: aleksis/core/forms.py:429
+#: aleksis/core/forms.py:438
 msgid "A person is using this e-mail address"
 msgstr "Цією ел.адресою хтось користується"
 
-#: aleksis/core/forms.py:457
+#: aleksis/core/forms.py:466
 msgid "Who should get the permission?"
 msgstr "Хто повинен отримати такий дозвіл?"
 
-#: aleksis/core/forms.py:458
+#: aleksis/core/forms.py:467
 msgid "On what?"
 msgstr "В разі чого?"
 
-#: aleksis/core/forms.py:484
+#: aleksis/core/forms.py:493
 msgid "Select objects which the permission should be granted for:"
 msgstr "Оберіть об'єкти, до яких буде наданий дозвіл:"
 
-#: aleksis/core/forms.py:487
+#: aleksis/core/forms.py:496
 msgid "Grant the permission for all objects"
 msgstr "Надати дозвіл до всіх об'єктів"
 
-#: aleksis/core/forms.py:495
+#: aleksis/core/forms.py:504
 msgid "You must select at least one group or person which should get the permission."
 msgstr "Ви повинні обрати принаймні одну групу або особу, хто буде мати дозвіл."
 
-#: aleksis/core/forms.py:500
+#: aleksis/core/forms.py:509
 msgid "You must grant the permission to all objects or to specific objects."
 msgstr "Ви повинні надати дозвіл до всіх або до конкретних об'єктів."
 
-#: aleksis/core/forms.py:587
+#: aleksis/core/forms.py:596
 msgid "Address data"
 msgstr "Дані адреси"
 
-#: aleksis/core/forms.py:599
+#: aleksis/core/forms.py:608
 msgid "Account data"
 msgstr "Дані облікового запису"
 
-#: aleksis/core/forms.py:606
+#: aleksis/core/forms.py:615
 msgid "Password"
 msgstr "Пароль"
 
-#: aleksis/core/forms.py:609
+#: aleksis/core/forms.py:618
 msgid "Password (again)"
 msgstr "Пароль (ще раз)"
 
-#: aleksis/core/forms.py:762
+#: aleksis/core/forms.py:771
 msgid "The selected action does not exist."
 msgstr "Обрана дія не існує."
 
-#: aleksis/core/forms.py:773
+#: aleksis/core/forms.py:782
 msgid "You do not have permission to run {} on all selected objects."
 msgstr "У Вас відсутній дозвіл на запуск {} на усіх обраних об'єктах."
 
-#: aleksis/core/forms.py:829
+#: aleksis/core/forms.py:838
 msgid "No valid selection."
 msgstr "Неправильний вибір."
 
@@ -293,697 +293,762 @@ msgstr "Резервна копія не знайдена!"
 msgid "No backup result found!"
 msgstr "Результат резервного копіювання не знайдений!"
 
-#: aleksis/core/mixins.py:511
+#: aleksis/core/mixins.py:539
 msgid "Linked school term"
 msgstr "Пов'язаний навчальний рік"
 
-#: aleksis/core/models.py:83
+#: aleksis/core/models.py:95
 msgid "Boolean (Yes/No)"
 msgstr "Логічне (Так/Ні)"
 
-#: aleksis/core/models.py:84
+#: aleksis/core/models.py:96
 msgid "Text (one line)"
 msgstr "Текст (один рядок)"
 
-#: aleksis/core/models.py:86
+#: aleksis/core/models.py:98
 msgid "Date and time"
 msgstr "Дата і час"
 
-#: aleksis/core/models.py:87
+#: aleksis/core/models.py:99
 msgid "Decimal number"
 msgstr "Десятичне число"
 
-#: aleksis/core/models.py:88 aleksis/core/models.py:211
+#: aleksis/core/models.py:100 aleksis/core/models.py:223
 msgid "E-mail address"
 msgstr "Адреса ел.пошти"
 
-#: aleksis/core/models.py:89
+#: aleksis/core/models.py:101
 msgid "Integer"
 msgstr "Ціле"
 
-#: aleksis/core/models.py:90
+#: aleksis/core/models.py:102
 msgid "IP address"
 msgstr "IP адреса"
 
-#: aleksis/core/models.py:91
+#: aleksis/core/models.py:103
 msgid "Boolean or empty (Yes/No/Neither)"
 msgstr "Логічне або порожнє (Так/Ні/Нічого)"
 
-#: aleksis/core/models.py:92
+#: aleksis/core/models.py:104
 msgid "Text (multi-line)"
 msgstr "Текст (багаторядковий)"
 
-#: aleksis/core/models.py:94
+#: aleksis/core/models.py:106
 msgid "URL / Link"
 msgstr "URL / Посилання"
 
-#: aleksis/core/models.py:106 aleksis/core/models.py:1078
+#: aleksis/core/models.py:118 aleksis/core/models.py:1100
+#: aleksis/core/models.py:1729
 msgid "Name"
 msgstr "Повне ім'я"
 
-#: aleksis/core/models.py:108
+#: aleksis/core/models.py:120 aleksis/core/models.py:1532
 msgid "Start date"
 msgstr "Дата початку"
 
-#: aleksis/core/models.py:109
+#: aleksis/core/models.py:121 aleksis/core/models.py:1533
 msgid "End date"
 msgstr "Дата закінчення"
 
-#: aleksis/core/models.py:128
+#: aleksis/core/models.py:140 aleksis/core/schema/school_term.py:48
 msgid "The start date must be earlier than the end date."
 msgstr "Початкова дата повинна бути раніше кінцевої."
 
-#: aleksis/core/models.py:135
+#: aleksis/core/models.py:147 aleksis/core/schema/school_term.py:53
 msgid "There is already a school term for this time or a part of this time."
 msgstr "На цей час або на частину цього часу вже припадає навчальний рік."
 
-#: aleksis/core/models.py:143
-#: aleksis/core/templates/core/school_term/list.html:8
-#: aleksis/core/templates/core/school_term/list.html:9
+#: aleksis/core/models.py:155
 msgid "School terms"
 msgstr "Навчальний рік"
 
-#: aleksis/core/models.py:164 aleksis/core/models.py:1027
+#: aleksis/core/models.py:176 aleksis/core/models.py:1049
 msgid "Person"
 msgstr "Особа"
 
-#: aleksis/core/models.py:167
+#: aleksis/core/models.py:179
 msgid "Can view address"
 msgstr "Може бачити адресу"
 
-#: aleksis/core/models.py:168
+#: aleksis/core/models.py:180
 msgid "Can view contact details"
 msgstr "Може бачити контактні дані"
 
-#: aleksis/core/models.py:169
+#: aleksis/core/models.py:181
 msgid "Can view photo"
 msgstr "Може бачити фото"
 
-#: aleksis/core/models.py:170
+#: aleksis/core/models.py:182
 msgid "Can view avatar image"
 msgstr "Може бачити аватар"
 
-#: aleksis/core/models.py:171
+#: aleksis/core/models.py:183
 msgid "Can view persons groups"
 msgstr "Може бачити групи особи"
 
-#: aleksis/core/models.py:172
+#: aleksis/core/models.py:184
 msgid "Can view personal details"
 msgstr "Може бачити особисті дані"
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "female"
 msgstr "жін"
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "male"
 msgstr "чол"
 
-#: aleksis/core/models.py:182
+#: aleksis/core/models.py:194
 msgid "other"
 msgstr "інший"
 
-#: aleksis/core/models.py:190 aleksis/core/models.py:1382
+#: aleksis/core/models.py:202 aleksis/core/models.py:1404
 msgid "Linked user"
 msgstr "Пов'язаний користувач"
 
-#: aleksis/core/models.py:196
+#: aleksis/core/models.py:208
 msgid "Additional name(s)"
 msgstr "Додаткові імена"
 
-#: aleksis/core/models.py:200 aleksis/core/models.py:512
-#: aleksis/core/models.py:1468
+#: aleksis/core/models.py:212 aleksis/core/models.py:534
+#: aleksis/core/models.py:1490
 msgid "Short name"
 msgstr "Коротке ім'я"
 
-#: aleksis/core/models.py:203
+#: aleksis/core/models.py:215
 msgid "Street"
 msgstr "Вулиця"
 
-#: aleksis/core/models.py:204
+#: aleksis/core/models.py:216
 msgid "Street number"
 msgstr "Номер будинку"
 
-#: aleksis/core/models.py:205
+#: aleksis/core/models.py:217
 msgid "Postal code"
 msgstr "Поштовий індекс"
 
-#: aleksis/core/models.py:206
+#: aleksis/core/models.py:218
 msgid "Place"
 msgstr "Місто"
 
-#: aleksis/core/models.py:208
+#: aleksis/core/models.py:220
 msgid "Home phone"
 msgstr "Домашній телефон"
 
-#: aleksis/core/models.py:209
+#: aleksis/core/models.py:221
 msgid "Mobile phone"
 msgstr "Мобільний телефон"
 
-#: aleksis/core/models.py:213
+#: aleksis/core/models.py:225
 msgid "Date of birth"
 msgstr "Дата народження"
 
-#: aleksis/core/models.py:214
+#: aleksis/core/models.py:226
 msgid "Place of birth"
 msgstr "Місце народження"
 
-#: aleksis/core/models.py:215
+#: aleksis/core/models.py:227
 msgid "Sex"
 msgstr "Стать"
 
-#: aleksis/core/models.py:222 aleksis/core/models.py:551
+#: aleksis/core/models.py:234 aleksis/core/models.py:573
 msgid "This is an official photo, used for official documents and for internal use cases."
 msgstr "Це офіційне фото, яке використовується для документів та внутрішніх потреб."
 
-#: aleksis/core/models.py:227 aleksis/core/models.py:555
+#: aleksis/core/models.py:239 aleksis/core/models.py:577
 msgid "Display picture / Avatar"
 msgstr "Відобразити фото/аватар"
 
-#: aleksis/core/models.py:230 aleksis/core/models.py:558
+#: aleksis/core/models.py:242 aleksis/core/models.py:580
 msgid "This is a picture or an avatar for public display."
 msgstr "Це фото або аватар для загального відображення."
 
-#: aleksis/core/models.py:235
+#: aleksis/core/models.py:247
 msgid "Guardians / Parents"
 msgstr "Опікуни / батьки"
 
-#: aleksis/core/models.py:242
+#: aleksis/core/models.py:254
 msgid "Primary group"
 msgstr "Основна група"
 
-#: aleksis/core/models.py:245 aleksis/core/models.py:725
-#: aleksis/core/models.py:749 aleksis/core/models.py:844
-#: aleksis/core/models.py:1113
+#: aleksis/core/models.py:257 aleksis/core/models.py:747
+#: aleksis/core/models.py:771 aleksis/core/models.py:866
+#: aleksis/core/models.py:1135
 msgid "Description"
 msgstr "Опис"
 
-#: aleksis/core/models.py:465
+#: aleksis/core/models.py:487
 msgid "Title of field"
 msgstr "Назва поля"
 
-#: aleksis/core/models.py:467
+#: aleksis/core/models.py:489
 msgid "Type of field"
 msgstr "Тип поля"
 
-#: aleksis/core/models.py:469
+#: aleksis/core/models.py:491
 msgid "Required"
 msgstr "Необхідне"
 
-#: aleksis/core/models.py:470
+#: aleksis/core/models.py:492
 msgid "Help text / description"
 msgstr "Допоміжний текст/опис"
 
-#: aleksis/core/models.py:476
+#: aleksis/core/models.py:498
 msgid "Addtitional field for groups"
 msgstr "Додаткове поле для груп"
 
-#: aleksis/core/models.py:477
+#: aleksis/core/models.py:499
 msgid "Addtitional fields for groups"
 msgstr "Додаткові поля для груп"
 
-#: aleksis/core/models.py:497
+#: aleksis/core/models.py:519
 msgid "Can assign child groups to groups"
 msgstr "Може призначати підлеглі групи до груп"
 
-#: aleksis/core/models.py:498
+#: aleksis/core/models.py:520
 msgid "Can view statistics about group."
 msgstr "Може бачити статистику групи."
 
-#: aleksis/core/models.py:510 aleksis/core/models.py:1469
+#: aleksis/core/models.py:532 aleksis/core/models.py:1491
 msgid "Long name"
 msgstr "Довге ім'я"
 
-#: aleksis/core/models.py:520 aleksis/core/templates/core/group/full.html:105
+#: aleksis/core/models.py:542 aleksis/core/templates/core/group/full.html:105
 msgid "Members"
 msgstr "Учасники"
 
-#: aleksis/core/models.py:523 aleksis/core/templates/core/group/full.html:102
+#: aleksis/core/models.py:545 aleksis/core/templates/core/group/full.html:102
 msgid "Owners"
 msgstr "Власники"
 
-#: aleksis/core/models.py:530 aleksis/core/templates/core/group/full.html:59
+#: aleksis/core/models.py:552 aleksis/core/templates/core/group/full.html:59
 msgid "Parent groups"
 msgstr "Батьківські групи"
 
-#: aleksis/core/models.py:538
+#: aleksis/core/models.py:560
 msgid "Type of group"
 msgstr "Тип групи"
 
-#: aleksis/core/models.py:543
+#: aleksis/core/models.py:565
 #: aleksis/core/templates/core/additional_field/list.html:8
 #: aleksis/core/templates/core/additional_field/list.html:9
 msgid "Additional fields"
 msgstr "Додаткові поля"
 
-#: aleksis/core/models.py:724 aleksis/core/models.py:748
-#: aleksis/core/models.py:843 aleksis/core/models.py:1299
+#: aleksis/core/models.py:746 aleksis/core/models.py:770
+#: aleksis/core/models.py:865 aleksis/core/models.py:1321
 #: aleksis/core/templates/core/announcement/list.html:18
 msgid "Title"
 msgstr "Назва"
 
-#: aleksis/core/models.py:727
+#: aleksis/core/models.py:749
 msgid "Application"
 msgstr "Додаток"
 
-#: aleksis/core/models.py:733
+#: aleksis/core/models.py:755
 msgid "Activity"
 msgstr "Активність"
 
-#: aleksis/core/models.py:734
+#: aleksis/core/models.py:756
 msgid "Activities"
 msgstr "Активності"
 
-#: aleksis/core/models.py:740
+#: aleksis/core/models.py:762
 msgid "Sender"
 msgstr "Відправник"
 
-#: aleksis/core/models.py:745
+#: aleksis/core/models.py:767
 msgid "Recipient"
 msgstr "Отримувач"
 
-#: aleksis/core/models.py:750 aleksis/core/models.py:1079
+#: aleksis/core/models.py:772 aleksis/core/models.py:1101
 msgid "Link"
 msgstr "Посилання"
 
-#: aleksis/core/models.py:753 aleksis/core/models.py:1080
-#: aleksis/core/models.py:1429
+#: aleksis/core/models.py:775 aleksis/core/models.py:1102
+#: aleksis/core/models.py:1451
 #: aleksis/core/templates/oauth2_provider/application/detail.html:26
 msgid "Icon"
 msgstr "Піктограма"
 
-#: aleksis/core/models.py:756
+#: aleksis/core/models.py:778
 msgid "Send notification at"
 msgstr "Надіслати сповіщення о"
 
-#: aleksis/core/models.py:758
+#: aleksis/core/models.py:780
 msgid "Read"
 msgstr "Читати"
 
-#: aleksis/core/models.py:759
+#: aleksis/core/models.py:781
 msgid "Sent"
 msgstr "Надіслано"
 
-#: aleksis/core/models.py:776
+#: aleksis/core/models.py:798
 msgid "Notification"
 msgstr "Сповіщення"
 
-#: aleksis/core/models.py:777 aleksis/core/preferences.py:29
+#: aleksis/core/models.py:799 aleksis/core/preferences.py:28
 msgid "Notifications"
 msgstr "Сповіщення"
 
-#: aleksis/core/models.py:845
+#: aleksis/core/models.py:867
 msgid "Link to detailed view"
 msgstr "Посилання на детальний перегляд"
 
-#: aleksis/core/models.py:848
+#: aleksis/core/models.py:870
 msgid "Date and time from when to show"
 msgstr "Дата і час, з якого показувати"
 
-#: aleksis/core/models.py:851
+#: aleksis/core/models.py:873
 msgid "Date and time until when to show"
 msgstr "Дата і час, до якого показувати"
 
-#: aleksis/core/models.py:876
+#: aleksis/core/models.py:898
 msgid "Announcement"
 msgstr "Оголошення"
 
-#: aleksis/core/models.py:877
+#: aleksis/core/models.py:899
 #: aleksis/core/templates/core/announcement/list.html:7
 #: aleksis/core/templates/core/announcement/list.html:8
 msgid "Announcements"
 msgstr "Оголошення"
 
-#: aleksis/core/models.py:914
+#: aleksis/core/models.py:936
 msgid "Announcement recipient"
 msgstr "Отримувач оголошення"
 
-#: aleksis/core/models.py:915
+#: aleksis/core/models.py:937
 msgid "Announcement recipients"
 msgstr "Отримувачі оголошення"
 
-#: aleksis/core/models.py:935
+#: aleksis/core/models.py:957
 msgid "Widget Title"
 msgstr "Назва віджета"
 
-#: aleksis/core/models.py:936
+#: aleksis/core/models.py:958
 msgid "Activate Widget"
 msgstr "Активувати віджет"
 
-#: aleksis/core/models.py:937
+#: aleksis/core/models.py:959
 msgid "Widget is broken"
 msgstr "Віджет зламався"
 
-#: aleksis/core/models.py:940
+#: aleksis/core/models.py:962
 msgid "Size on mobile devices"
 msgstr "Розмір на мобільних"
 
-#: aleksis/core/models.py:941
+#: aleksis/core/models.py:963
 msgid "<= 600 px, 12 columns"
 msgstr "<= 600 пікс, 12 стовпчиків"
 
-#: aleksis/core/models.py:946
+#: aleksis/core/models.py:968
 msgid "Size on tablet devices"
 msgstr "Розмір на планшетах"
 
-#: aleksis/core/models.py:947
+#: aleksis/core/models.py:969
 msgid "> 600 px, 12 columns"
 msgstr "> 600 пікс, 12 стовпчиків"
 
-#: aleksis/core/models.py:952
+#: aleksis/core/models.py:974
 msgid "Size on desktop devices"
 msgstr "Розмір на ПК"
 
-#: aleksis/core/models.py:953
+#: aleksis/core/models.py:975
 msgid "> 992 px, 12 columns"
 msgstr "> 992 пікс, 12 стовпчиків"
 
-#: aleksis/core/models.py:958
+#: aleksis/core/models.py:980
 msgid "Size on large desktop devices"
 msgstr "Розмір на великих екранах"
 
-#: aleksis/core/models.py:959
+#: aleksis/core/models.py:981
 msgid "> 1200 px>, 12 columns"
 msgstr "> 1200 пікс, 12 стовпчиків"
 
-#: aleksis/core/models.py:990
+#: aleksis/core/models.py:1012
 msgid "Can edit default dashboard"
 msgstr "Може редагувати типову/стандартну інформпанель"
 
-#: aleksis/core/models.py:991
+#: aleksis/core/models.py:1013
 msgid "Dashboard Widget"
 msgstr "Віджет інформпанелі"
 
-#: aleksis/core/models.py:992
+#: aleksis/core/models.py:1014
 msgid "Dashboard Widgets"
 msgstr "Віджети інформпанелі"
 
-#: aleksis/core/models.py:998
+#: aleksis/core/models.py:1020
 msgid "URL"
 msgstr "URL"
 
-#: aleksis/core/models.py:999
+#: aleksis/core/models.py:1021
 msgid "Icon URL"
 msgstr "Піктограма URL"
 
-#: aleksis/core/models.py:1005
+#: aleksis/core/models.py:1027
 msgid "External link widget"
 msgstr "Зовнішнє посилання на віджет"
 
-#: aleksis/core/models.py:1006
+#: aleksis/core/models.py:1028
 msgid "External link widgets"
 msgstr "Зовнішні посилання на віджети"
 
-#: aleksis/core/models.py:1012
+#: aleksis/core/models.py:1034
 msgid "Content"
 msgstr "Зміст"
 
-#: aleksis/core/models.py:1018
+#: aleksis/core/models.py:1040
 msgid "Static content widget"
 msgstr "Віджет з постійним змістом"
 
-#: aleksis/core/models.py:1019
+#: aleksis/core/models.py:1041
 msgid "Static content widgets"
 msgstr "Віджети з постійним змістом"
 
-#: aleksis/core/models.py:1024
+#: aleksis/core/models.py:1046
 msgid "Dashboard widget"
 msgstr "Віджет інформпанелі"
 
-#: aleksis/core/models.py:1029
+#: aleksis/core/models.py:1051
 msgid "Order"
 msgstr "Порядок"
 
-#: aleksis/core/models.py:1030
+#: aleksis/core/models.py:1052
 msgid "Part of the default dashboard"
 msgstr "Частина типової інформпанелі"
 
-#: aleksis/core/models.py:1045
+#: aleksis/core/models.py:1067
 msgid "Dashboard widget order"
 msgstr "Порядок віджету на інформпанелі"
 
-#: aleksis/core/models.py:1046
+#: aleksis/core/models.py:1068
 msgid "Dashboard widget orders"
 msgstr "Порядок віджетів на інформпанелі"
 
-#: aleksis/core/models.py:1052
+#: aleksis/core/models.py:1074
 msgid "Menu ID"
 msgstr "Меню ID"
 
-#: aleksis/core/models.py:1065
+#: aleksis/core/models.py:1087
 msgid "Custom menu"
 msgstr "Користувацьке меню"
 
-#: aleksis/core/models.py:1066
+#: aleksis/core/models.py:1088
 msgid "Custom menus"
 msgstr "Користувацькі меню"
 
-#: aleksis/core/models.py:1076
+#: aleksis/core/models.py:1098
 msgid "Menu"
 msgstr "Меню"
 
-#: aleksis/core/models.py:1086
+#: aleksis/core/models.py:1108
 msgid "Custom menu item"
 msgstr "Пункт користувацького меню"
 
-#: aleksis/core/models.py:1087
+#: aleksis/core/models.py:1109
 msgid "Custom menu items"
 msgstr "Пункти користувацького меню"
 
-#: aleksis/core/models.py:1112
+#: aleksis/core/models.py:1134
 msgid "Title of type"
 msgstr "Назва типу"
 
-#: aleksis/core/models.py:1119 aleksis/core/templates/core/group/full.html:50
+#: aleksis/core/models.py:1141 aleksis/core/templates/core/group/full.html:50
 msgid "Group type"
 msgstr "Тип групи"
 
-#: aleksis/core/models.py:1120
+#: aleksis/core/models.py:1142
 #: aleksis/core/templates/core/group_type/list.html:8
 #: aleksis/core/templates/core/group_type/list.html:9
 msgid "Group types"
 msgstr "Типи груп"
 
-#: aleksis/core/models.py:1133
+#: aleksis/core/models.py:1155
 msgid "Can view system status"
 msgstr "Може переглядати стан системи"
 
-#: aleksis/core/models.py:1134
+#: aleksis/core/models.py:1156
 msgid "Can manage data"
 msgstr "Може керувати даними"
 
-#: aleksis/core/models.py:1135
+#: aleksis/core/models.py:1157
 msgid "Can impersonate"
 msgstr "Може маскуватися"
 
-#: aleksis/core/models.py:1136
+#: aleksis/core/models.py:1158
 msgid "Can use search"
 msgstr "Може шукати"
 
-#: aleksis/core/models.py:1137
+#: aleksis/core/models.py:1159
 msgid "Can change site preferences"
 msgstr "Може змінювати властивості сайту"
 
-#: aleksis/core/models.py:1138
+#: aleksis/core/models.py:1160
 msgid "Can change person preferences"
 msgstr "Може змінювати властивості особи"
 
-#: aleksis/core/models.py:1139
+#: aleksis/core/models.py:1161
 msgid "Can change group preferences"
 msgstr "Може змінювати властивості групи"
 
-#: aleksis/core/models.py:1140
+#: aleksis/core/models.py:1162
 msgid "Can test PDF generation"
 msgstr "Може генерувати тестові PDF"
 
-#: aleksis/core/models.py:1141
+#: aleksis/core/models.py:1163
 msgid "Can invite persons"
 msgstr "Може запрошувати осіб"
 
-#: aleksis/core/models.py:1177
+#: aleksis/core/models.py:1199
 msgid "Related data check task"
 msgstr "Завдання перевірки пов'язаних даних"
 
-#: aleksis/core/models.py:1185
+#: aleksis/core/models.py:1207
 msgid "Issue solved"
 msgstr "Проблема вирішена"
 
-#: aleksis/core/models.py:1186
+#: aleksis/core/models.py:1208
 msgid "Notification sent"
 msgstr "Сповіщення надіслане"
 
-#: aleksis/core/models.py:1199
+#: aleksis/core/models.py:1221
 msgid "Data check result"
 msgstr "Результат перевірки даних"
 
-#: aleksis/core/models.py:1200
+#: aleksis/core/models.py:1222
 msgid "Data check results"
 msgstr "Результати перевірки даних"
 
-#: aleksis/core/models.py:1202
+#: aleksis/core/models.py:1224
 msgid "Can run data checks"
 msgstr "Може запускати перевірки даних"
 
-#: aleksis/core/models.py:1203
+#: aleksis/core/models.py:1225
 msgid "Can solve data check problems"
 msgstr "Може розв'язувати проблеми перевірки даних"
 
-#: aleksis/core/models.py:1210
+#: aleksis/core/models.py:1232
 msgid "E-Mail address"
 msgstr "Адреса ел.пошти"
 
-#: aleksis/core/models.py:1270
+#: aleksis/core/models.py:1292
 msgid "Owner"
 msgstr "Власник"
 
-#: aleksis/core/models.py:1274
+#: aleksis/core/models.py:1296
 msgid "File expires at"
 msgstr "Файл дійсний до"
 
-#: aleksis/core/models.py:1277
+#: aleksis/core/models.py:1299
 msgid "Generated HTML file"
 msgstr "Згенерований файл HTML"
 
-#: aleksis/core/models.py:1280
+#: aleksis/core/models.py:1302
 msgid "Generated PDF file"
 msgstr "Згенерований файл PDF"
 
-#: aleksis/core/models.py:1287
+#: aleksis/core/models.py:1309
 msgid "PDF file"
 msgstr "Файл PDF"
 
-#: aleksis/core/models.py:1288
+#: aleksis/core/models.py:1310
 msgid "PDF files"
 msgstr "Файли PDF"
 
-#: aleksis/core/models.py:1293
+#: aleksis/core/models.py:1315
 msgid "Task result"
 msgstr "Результат завдання"
 
-#: aleksis/core/models.py:1296
+#: aleksis/core/models.py:1318
 msgid "Task user"
 msgstr "Користувач завдання"
 
-#: aleksis/core/models.py:1300
+#: aleksis/core/models.py:1322
 msgid "Back URL"
 msgstr "URL для повернення"
 
-#: aleksis/core/models.py:1301
+#: aleksis/core/models.py:1323
 msgid "Progress title"
 msgstr "Назва процесу"
 
-#: aleksis/core/models.py:1302
+#: aleksis/core/models.py:1324
 msgid "Error message"
 msgstr "Повідомлення про помилку"
 
-#: aleksis/core/models.py:1303
+#: aleksis/core/models.py:1325
 msgid "Success message"
 msgstr "Повідомлення про успіх"
 
-#: aleksis/core/models.py:1304
+#: aleksis/core/models.py:1326
 msgid "Redirect on success URL"
 msgstr "Посилання для перенаправлення в разі успіху"
 
-#: aleksis/core/models.py:1306
+#: aleksis/core/models.py:1328
 msgid "Additional button title"
 msgstr "Назва додаткової кнопки"
 
-#: aleksis/core/models.py:1308
+#: aleksis/core/models.py:1330
 msgid "Additional button URL"
 msgstr "Посилання додаткової кнопки"
 
-#: aleksis/core/models.py:1310
+#: aleksis/core/models.py:1332
 msgid "Additional button icon"
 msgstr "Піктограма додаткової кнопки"
 
-#: aleksis/core/models.py:1312
+#: aleksis/core/models.py:1334
 msgid "Result fetched"
 msgstr "Отриманий результат"
 
-#: aleksis/core/models.py:1337
+#: aleksis/core/models.py:1359
 msgid "Background task completed successfully"
 msgstr "Фонове завдання успішно завершене"
 
-#: aleksis/core/models.py:1338
+#: aleksis/core/models.py:1360
 msgid "The background task '{}' has been completed successfully."
 msgstr "Фонове завдання '{}' було успішно завершене."
 
-#: aleksis/core/models.py:1344
+#: aleksis/core/models.py:1366
 msgid "Background task failed"
 msgstr "Збій фонового завдання"
 
-#: aleksis/core/models.py:1345
+#: aleksis/core/models.py:1367
 msgid "The background task '{}' has failed."
 msgstr "У фонового завдання '{}' стався збій."
 
-#: aleksis/core/models.py:1354
+#: aleksis/core/models.py:1376
 msgid "Background task"
 msgstr "Фонове завдання"
 
-#: aleksis/core/models.py:1368
+#: aleksis/core/models.py:1390
 msgid "Task user assignment"
 msgstr "Призначення користувача завдання"
 
-#: aleksis/core/models.py:1369
+#: aleksis/core/models.py:1391
 msgid "Task user assignments"
 msgstr "Призначення користувачів завдання"
 
-#: aleksis/core/models.py:1385
+#: aleksis/core/models.py:1407
 msgid "Additional attributes"
 msgstr "Додаткові атрибути"
 
-#: aleksis/core/models.py:1423
+#: aleksis/core/models.py:1445
 msgid "Allowed scopes that clients can request"
 msgstr "Дозволені межі дії, які можуть запитувати клієнти"
 
-#: aleksis/core/models.py:1433
+#: aleksis/core/models.py:1455
 msgid "This image will be shown as icon in the authorization flow. It should be squared."
 msgstr "Це зображення буде іконкою під час авторизації. Воно повинне бути квадратним."
 
-#: aleksis/core/models.py:1478
+#: aleksis/core/models.py:1500
 msgid "Can view room timetable"
 msgstr "Може переглядати розклад кімнати"
 
-#: aleksis/core/models.py:1480
+#: aleksis/core/models.py:1502
 msgid "Room"
 msgstr "Кімната"
 
-#: aleksis/core/models.py:1481
+#: aleksis/core/models.py:1503
 msgid "Rooms"
 msgstr "Кімнати"
 
-#: aleksis/core/preferences.py:25
+#: aleksis/core/models.py:1528
+#, fuzzy
+#| msgid "Date and time"
+msgid "Start date and time"
+msgstr "Дата і час"
+
+#: aleksis/core/models.py:1530
+#, fuzzy
+#| msgid "Date and time"
+msgid "End date and time"
+msgstr "Дата і час"
+
+#: aleksis/core/models.py:1531
+#, fuzzy
+#| msgid "Time"
+msgid "Timezone"
+msgstr "Час"
+
+#: aleksis/core/models.py:1534
+#, fuzzy
+#| msgid "Preferences"
+msgid "Recurrences"
+msgstr "Властивості"
+
+#: aleksis/core/models.py:1540
+msgid "Amended base event"
+msgstr ""
+
+#: aleksis/core/models.py:1643
+#, fuzzy
+#| msgid "Calendar Feeds"
+msgid "Calendar Event"
+msgstr "Канали календарів"
+
+#: aleksis/core/models.py:1644
+#, fuzzy
+#| msgid "Calendar Feeds"
+msgid "Calendar Events"
+msgstr "Канали календарів"
+
+#: aleksis/core/models.py:1670
+#, fuzzy
+#| msgid "Birthday Calendar"
+msgid "Birthdays"
+msgstr "Календар Днів Народження"
+
+#: aleksis/core/models.py:1674
+#, fuzzy
+#| msgid "%(name)s's birthday"
+msgid "{}'s birthday"
+msgstr "%(name)s має День Народження"
+
+#: aleksis/core/models.py:1713 aleksis/core/models.py:1775
+msgid "Holidays"
+msgstr ""
+
+#: aleksis/core/models.py:1774
+msgid "Holiday"
+msgstr ""
+
+#: aleksis/core/preferences.py:24
 msgid "General"
 msgstr "Загальне"
 
-#: aleksis/core/preferences.py:26
+#: aleksis/core/preferences.py:25
 msgid "School"
 msgstr "Школа / навч.заклад"
 
-#: aleksis/core/preferences.py:27
+#: aleksis/core/preferences.py:26
 msgid "Theme"
 msgstr "Тема"
 
-#: aleksis/core/preferences.py:28
+#: aleksis/core/preferences.py:27
 msgid "Mail"
 msgstr "Пошта"
 
-#: aleksis/core/preferences.py:30
+#: aleksis/core/preferences.py:29
 msgid "Footer"
 msgstr "Нижній колонтитул (footer)"
 
-#: aleksis/core/preferences.py:31
+#: aleksis/core/preferences.py:30
 msgid "Accounts"
 msgstr "Облікові записи"
 
-#: aleksis/core/preferences.py:32
+#: aleksis/core/preferences.py:31
 msgid "Authentication"
 msgstr "Авторизація"
 
-#: aleksis/core/preferences.py:33
+#: aleksis/core/preferences.py:32
 msgid "Internationalisation"
 msgstr "Інтернаціоналізація"
 
+#: aleksis/core/preferences.py:33
+#, fuzzy
+#| msgid "Calendar Feeds"
+msgid "Calendar"
+msgstr "Канали календарів"
+
 #: aleksis/core/preferences.py:43
 msgid "Site title"
 msgstr "Назва сайту"
@@ -1157,8 +1222,20 @@ msgid "Automatically update the dashboard and its widgets sitewide"
 msgstr "Автоматично оновлювати інформпанель та її віджети (для всього сайту)"
 
 #: aleksis/core/preferences.py:490
-msgid "Country for phone number parsing"
-msgstr "Країна для розбору номера телефона"
+#, fuzzy
+#| msgid "Birthday Calendar"
+msgid "Birthday calendar feed color"
+msgstr "Календар Днів Народження"
+
+#: aleksis/core/preferences.py:502
+msgid "Holiday calendar feed color"
+msgstr ""
+
+#: aleksis/core/preferences.py:515
+#, fuzzy
+#| msgid "Birthday Calendar"
+msgid "Activated calendars"
+msgstr "Календар Днів Народження"
 
 #: aleksis/core/settings.py:551
 msgid "English"
@@ -1172,22 +1249,9 @@ msgstr "Німецька"
 msgid "Ukrainian"
 msgstr "Українська"
 
-#: aleksis/core/tables.py:25
-#: aleksis/core/templates/core/announcement/list.html:36
-#: aleksis/core/templates/core/group/full.html:26
-#: aleksis/core/templates/oauth2_provider/application/detail.html:17
-msgid "Edit"
-msgstr "Редагувати"
-
-#: aleksis/core/tables.py:27 aleksis/core/tables.py:148
-#: aleksis/core/tables.py:185
-#: aleksis/core/templates/core/announcement/list.html:22
-msgid "Actions"
-msgstr "Дії"
-
-#: aleksis/core/tables.py:115 aleksis/core/tables.py:116
-#: aleksis/core/tables.py:130 aleksis/core/tables.py:146
-#: aleksis/core/tables.py:183
+#: aleksis/core/tables.py:97 aleksis/core/tables.py:98
+#: aleksis/core/tables.py:112 aleksis/core/tables.py:128
+#: aleksis/core/tables.py:165
 #: aleksis/core/templates/core/announcement/list.html:42
 #: aleksis/core/templates/core/group/full.html:33
 #: aleksis/core/templates/core/pages/delete.html:22
@@ -1195,6 +1259,11 @@ msgstr "Дії"
 msgid "Delete"
 msgstr "Видалити"
 
+#: aleksis/core/tables.py:130 aleksis/core/tables.py:167
+#: aleksis/core/templates/core/announcement/list.html:22
+msgid "Actions"
+msgstr "Дії"
+
 #: aleksis/core/templates/403.html:14 aleksis/core/templates/500.html:10
 #: aleksis/core/templates/oauth2_provider/authorize.html:54
 msgid "Error"
@@ -1285,6 +1354,13 @@ msgstr "Привіт!"
 msgid "Your AlekSIS team"
 msgstr "Команда AlekSIS"
 
+#: aleksis/core/templates/account/email/email_confirmation_message.txt:6
+#, python-format
+msgid ""
+"Someone tried to register an account with the username %(user_display)s and your e-mail address on %(site_domain)s.\n"
+"If it was you, please confirm the registration by clicking on the following link:"
+msgstr ""
+
 #: aleksis/core/templates/account/email_confirm.html:5
 #: aleksis/core/templates/account/email_confirm.html:6
 #: aleksis/core/templates/account/email_confirm.html:17
@@ -1551,6 +1627,12 @@ msgstr "Діє до"
 msgid "Recipients"
 msgstr "Отримувачі"
 
+#: aleksis/core/templates/core/announcement/list.html:36
+#: aleksis/core/templates/core/group/full.html:26
+#: aleksis/core/templates/oauth2_provider/application/detail.html:17
+msgid "Edit"
+msgstr "Редагувати"
+
 #: aleksis/core/templates/core/announcement/list.html:50
 msgid "There are no announcements."
 msgstr "Оголошень немає."
@@ -2172,17 +2254,6 @@ msgstr "Фільтр осіб"
 msgid "Selected persons"
 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 "Створити Навчальний рік"
-
-#: aleksis/core/templates/core/school_term/edit.html:6
-#: aleksis/core/templates/core/school_term/edit.html:7
-msgid "Edit school term"
-msgstr "Редагувати Навчальний рік"
-
 #: aleksis/core/templates/dynamic_preferences/form.html:5
 msgid "Preferences"
 msgstr "Властивості"
@@ -3082,162 +3153,169 @@ msgstr "Під час створення файлу PDF виникла проб
 msgid "Download PDF"
 msgstr "Звантажити PDF"
 
-#: aleksis/core/views.py:285
-msgid "The school term has been created."
-msgstr "Навчальний рік створений."
-
-#: aleksis/core/views.py:297
-msgid "The school term has been saved."
-msgstr "Навчальний рік збережений."
-
-#: aleksis/core/views.py:401
+#: aleksis/core/views.py:371
 msgid "The child groups were successfully saved."
 msgstr "Підлеглі групи збережені."
 
-#: aleksis/core/views.py:420 aleksis/core/views.py:430
+#: aleksis/core/views.py:390 aleksis/core/views.py:400
 msgid "The person has been saved."
 msgstr "Особа збережена."
 
-#: aleksis/core/views.py:480
+#: aleksis/core/views.py:450
 msgid "The group has been saved."
 msgstr "Група збережена."
 
-#: aleksis/core/views.py:528
+#: aleksis/core/views.py:498
 #, fuzzy
 #| msgid "The data checks were run successfully."
 msgid "Maintenance mode was turned on successfully."
 msgstr "Перевірка даних успішно запущена."
 
-#: aleksis/core/views.py:530
+#: aleksis/core/views.py:500
 msgid "Maintenance mode was turned off successfully."
 msgstr ""
 
-#: aleksis/core/views.py:588
+#: aleksis/core/views.py:558
 msgid "The announcement has been saved."
 msgstr "Оголошення збережене."
 
-#: aleksis/core/views.py:604
+#: aleksis/core/views.py:574
 msgid "The announcement has been deleted."
 msgstr "Оголошення видалене."
 
-#: aleksis/core/views.py:673
+#: aleksis/core/views.py:643
 msgid "The requested preference registry does not exist"
 msgstr "Журналу із запитаними властивостями не існує"
 
-#: aleksis/core/views.py:692
+#: aleksis/core/views.py:662
 msgid "The preferences have been saved successfully."
 msgstr "Властивості збережені."
 
-#: aleksis/core/views.py:716
+#: aleksis/core/views.py:686
 msgid "The person has been deleted."
 msgstr "Особа видалена."
 
-#: aleksis/core/views.py:730
+#: aleksis/core/views.py:700
 msgid "The group has been deleted."
 msgstr "Група видалена."
 
-#: aleksis/core/views.py:762
+#: aleksis/core/views.py:732
 msgid "The additional field has been saved."
 msgstr "Додаткове поле збережене."
 
-#: aleksis/core/views.py:797
+#: aleksis/core/views.py:767
 msgid "The additional field has been deleted."
 msgstr "Додаткове поле видалене."
 
-#: aleksis/core/views.py:822
+#: aleksis/core/views.py:792
 msgid "The group type has been saved."
 msgstr "Тип групи збережений."
 
-#: aleksis/core/views.py:853
+#: aleksis/core/views.py:823
 msgid "The group type has been deleted."
 msgstr "Тип групи видалений."
 
-#: aleksis/core/views.py:888
+#: aleksis/core/views.py:858
 msgid "Progress: Run data checks"
 msgstr "Перебіг: Запуск перевірки даних"
 
-#: aleksis/core/views.py:889
+#: aleksis/core/views.py:859
 msgid "Run data checks …"
 msgstr "Запускається перевірка даних …"
 
-#: aleksis/core/views.py:890
+#: aleksis/core/views.py:860
 msgid "The data checks were run successfully."
 msgstr "Перевірка даних успішно запущена."
 
-#: aleksis/core/views.py:891
+#: aleksis/core/views.py:861
 msgid "There was a problem while running data checks."
 msgstr "Під час запуску перевірки даних виникла проблема."
 
-#: aleksis/core/views.py:908
+#: aleksis/core/views.py:878
 #, python-brace-format
 msgid "The solve option '{solve_option_obj.verbose_name}' "
 msgstr "Варіант розв'язання \"{solve_option_obj.verbose_name}\" "
 
-#: aleksis/core/views.py:918
+#: aleksis/core/views.py:888
 msgid "The requested solve option does not exist"
 msgstr "Запитаний варіант розв'язання не існує"
 
-#: aleksis/core/views.py:951
+#: aleksis/core/views.py:921
 msgid "The dashboard widget has been saved."
 msgstr "Віджет інформпанелі збережений."
 
-#: aleksis/core/views.py:981
+#: aleksis/core/views.py:951
 msgid "The dashboard widget has been created."
 msgstr "Віджет інформпанелі створений."
 
-#: aleksis/core/views.py:991
+#: aleksis/core/views.py:961
 msgid "The dashboard widget has been deleted."
 msgstr "Віджет інформпанелі видалений."
 
-#: aleksis/core/views.py:1063
+#: aleksis/core/views.py:1033
 msgid "Your dashboard configuration has been saved successfully."
 msgstr "Ваша конфігурація інформпанелі збережена."
 
-#: aleksis/core/views.py:1065
+#: aleksis/core/views.py:1035
 msgid "The configuration of the default dashboard has been saved successfully."
 msgstr "Конфігурація типової/стандартної інформпанелі збережена."
 
-#: aleksis/core/views.py:1136
+#: aleksis/core/views.py:1106
 #, python-brace-format
 msgid "The invitation was successfully created. The invitation code is {code}"
 msgstr "Запрошення успішно створене. Код запрошення: {code}"
 
-#: aleksis/core/views.py:1233
+#: aleksis/core/views.py:1203
 msgid "We have successfully assigned the permissions."
 msgstr "Ми успішно призначили дозволи."
 
-#: aleksis/core/views.py:1243
+#: aleksis/core/views.py:1213
 msgid "The global user permission has been deleted."
 msgstr "Глобальний користувацький дозвіл видалений."
 
-#: aleksis/core/views.py:1253
+#: aleksis/core/views.py:1223
 msgid "The global group permission has been deleted."
 msgstr "Глобальний груповий дозвіл видалений."
 
-#: aleksis/core/views.py:1263
+#: aleksis/core/views.py:1233
 msgid "The object user permission has been deleted."
 msgstr "Об'єктний користувацький дозвіл видалений."
 
-#: aleksis/core/views.py:1273
+#: aleksis/core/views.py:1243
 msgid "The object group permission has been deleted."
 msgstr "Об'єктний груповий дозвіл видалений."
 
-#: aleksis/core/views.py:1382
+#: aleksis/core/views.py:1352
 msgid "The third-party account could not be disconnected because it is the only login method available."
 msgstr "Обліковий запис третьої сторони не можна від'єднати оскільки він єдиний спосіб для входу."
 
-#: aleksis/core/views.py:1389
+#: aleksis/core/views.py:1359
 msgid "The third-party account has been successfully disconnected."
 msgstr "Обліковий запис третьої сторони успішно від'єднаний."
 
-#: aleksis/core/views.py:1465
+#: aleksis/core/views.py:1435
 msgid "Person was invited successfully and an email with further instructions has been send to them."
 msgstr "Особа успішно запрошена. Лист з інструкціями щодо наступних дій надісланий на її ел.пошту."
 
-#: aleksis/core/views.py:1476
+#: aleksis/core/views.py:1446
 msgid "Person was already invited."
 msgstr "Особа вже була запрошена."
 
+#~ msgid "Country for phone number parsing"
+#~ msgstr "Країна для розбору номера телефона"
+
+#~ msgid "Create school term"
+#~ msgstr "Створити Навчальний рік"
+
+#~ msgid "Edit school term"
+#~ msgstr "Редагувати Навчальний рік"
+
+#~ msgid "The school term has been created."
+#~ msgstr "Навчальний рік створений."
+
+#~ msgid "The school term has been saved."
+#~ msgstr "Навчальний рік збережений."
+
 #~ msgid "Revoke access"
 #~ msgstr "Відкликати доступ"
 
@@ -3363,16 +3441,9 @@ msgstr "Особа вже була запрошена."
 #~ "        двохфакторну автентифікацію.\n"
 #~ "      "
 
-#~ msgid "Birthday Calendar"
-#~ msgstr "Календар Днів Народження"
-
 #~ msgid "A Calendar of Birthdays"
 #~ msgstr "Календар Днів Народження"
 
-#, python-format
-#~ msgid "%(name)s's birthday"
-#~ msgstr "%(name)s має День Народження"
-
 #, python-format
 #~ msgid "%(name)s was born on %(birthday)s"
 #~ msgstr "%(name)s народився(-лася) %(birthday)s"
@@ -3413,9 +3484,6 @@ msgstr "Особа вже була запрошена."
 #~ msgid "Third-party accounts"
 #~ msgstr "Обліковки третіх сторін"
 
-#~ msgid "Calendar Feeds"
-#~ msgstr "Канали календарів"
-
 #~ msgid "Logout"
 #~ msgstr "Вийти"
 
-- 
GitLab