diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 18c5ea9a0a1b3b6727cb9c57db4ed64930aa1048..471650a9a23bdb75186c4d919c35f9cf99c1848b 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -12,6 +12,34 @@ Unreleased Added ~~~~~ +* Add Ukrainian locale (contributed by Sergiy Gorichenko from Fre(i)e Software GmbH). +* Add third gender to gender choices +* Add DataCheck to validate specific fields of specific models + +Changed +~~~~~~~ + +* Restructure group page and show more information about members. +* django-two-factor-auth >= 1.14.0 is now required due to a + backwards-incompatible breakage in that library + +Fixed +~~~~~~~ + +* Password change view did not redirect to login when accessed unauthenticated. +* Sorting icons were inlined into stylesheet + +Changed +~~~~~~~ + +* Update icon choices for models to new icon set + +`2.9`_ - 2022-05-25 +------------------- + +Added +~~~~~ + * Allow to disable exception mails to admins * Add possibility to create iCal feeds in all apps and dynamically create user-specific urls. @@ -21,19 +49,34 @@ Fixed * The menu button used to be displayed twice on smaller screens. * The icons were loaded from external servers instead from local server. * Weekdays were not translated if system locales were missing + * Added locales-all to base image and note to docs + * The icons in the account menu were still the old ones. * Due to a merge error, the once removed account menu in the sidenav appeared again. * Scheduled notifications were shown on dashboard before time. * Remove broken notifications menu item in favor of item next to account menu. +* [OAuth2] Resources which are protected with client credentials + allowed access if no scopes were allowed (CVE-2022-29773). +* The site logo could overlap with the menu for logos with an unexpected aspect ratio. +* Some OAuth2 views stopped working with long scope names. +* Resetting password was impossible due to a missing rule +* Language selection was broken when only one language was enabled in + preferences. + +Removed +~~~~~~~ + +* Remove option to limit available languages in preferences. Changed ~~~~~~~ * [Dev] ActionForm now checks permissions on objects before executing * [Dev] ActionForm now returns a proper return value from the executed action +* Pin version of javascript dependencies -2.8.1`_ - 2022-03-13 +`2.8.1`_ - 2022-03-13 -------------------- Changed @@ -821,3 +864,4 @@ Fixed .. _2.7.4: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.7.4 .. _2.8: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.8 .. _2.8.1: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.8.1 +.. _2.9: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.9 diff --git a/aleksis/core/data_checks.py b/aleksis/core/data_checks.py index d82c30d5ddf0b5ab11e7b1b5f8c2a595838c07e1..47194ece7a30b3bdf6a4fa6fc9624fd9851d2be9 100644 --- a/aleksis/core/data_checks.py +++ b/aleksis/core/data_checks.py @@ -3,8 +3,11 @@ from datetime import timedelta from django.apps import apps from django.contrib.contenttypes.models import ContentType +from django.core.exceptions import ValidationError +from django.db.models import Model from django.db.models.aggregates import Count from django.utils.functional import classproperty +from django.utils.text import slugify from django.utils.translation import gettext as _ import reversion @@ -316,3 +319,31 @@ class BrokenDashboardWidgetDataCheck(DataCheck): for widget in broken_widgets: logging.info("Check DashboardWidget %s", widget) cls.register_result(widget) + + +def field_validation_data_check_factory(app_name: str, model_name: str, field_name: str) -> type: + from django.apps import apps + + class FieldValidationDataCheck(DataCheck): + name = f"field_validation_{slugify(model_name)}_{slugify(field_name)}" + verbose_name = _( + "Validate field %s of model %s." % (field_name, app_name + "." + model_name) + ) + problem_name = _("The field %s couldn't be validated successfully." % field_name) + solve_options = { + IgnoreSolveOption.name: IgnoreSolveOption, + } + + @classmethod + def check_data(cls): + model: Model = apps.get_model(app_name, model_name) + for obj in model.objects.all(): + try: + model._meta.get_field(field_name).validate(getattr(obj, field_name), obj) + except ValidationError as e: + logging.info(f"Check {model_name} {obj}") + cls.register_result(obj) + + FieldValidationDataCheck.__name__ = model_name + "FieldValidationDataCheck" + + return FieldValidationDataCheck diff --git a/aleksis/core/forms.py b/aleksis/core/forms.py index 3fb938822b093e250299a3fac04f0e0358e6f47a..b3c3493e7d5ee0ee7f9b0fe7d01258a5459f26cf 100644 --- a/aleksis/core/forms.py +++ b/aleksis/core/forms.py @@ -583,7 +583,7 @@ class AccountRegisterForm(SignupForm, ExtensibleForm): "short_name", ), Fieldset( - _("Adress data"), + _("Address data"), Row("street", "housenumber"), Row("postal_code", "place"), ), diff --git a/aleksis/core/locale/ar/LC_MESSAGES/django.po b/aleksis/core/locale/ar/LC_MESSAGES/django.po index ee356cc39b7d01a0aad1fd7fa3e0343f42da7a6c..71b3e82d26258ad34f53d00d6a1b18b6af3a8d24 100644 --- a/aleksis/core/locale/ar/LC_MESSAGES/django.po +++ b/aleksis/core/locale/ar/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: AlekSIS (School Information System) 0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-23 11:19+0100\n" +"POT-Creation-Date: 2022-05-24 19:37+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -38,8 +38,8 @@ msgstr "" msgid "Home and mobile phone" msgstr "" -#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:185 -#: aleksis/core/models.py:487 aleksis/core/templates/core/group/list.html:8 +#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:171 +#: aleksis/core/models.py:489 aleksis/core/templates/core/group/list.html:8 #: aleksis/core/templates/core/group/list.html:9 #: aleksis/core/templates/core/person/full.html:246 msgid "Groups" @@ -66,6 +66,24 @@ msgstr "" msgid "The DashboardWidget was reported broken automatically." msgstr "" +#: aleksis/core/feeds.py:52 +msgid "Birthday Calendar" +msgstr "" + +#: aleksis/core/feeds.py:53 +msgid "A Calendar of Birthdays" +msgstr "" + +#: aleksis/core/feeds.py:66 +#, python-format +msgid "%(name)s's birthday" +msgstr "" + +#: aleksis/core/feeds.py:71 +#, python-format +msgid "%(name)s was born on %(birthday)s" +msgstr "" + #: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:139 #: aleksis/core/templates/core/base.html:140 #: aleksis/core/templates/core/group/list.html:20 @@ -91,11 +109,11 @@ msgstr "" msgid "Content type" msgstr "" -#: aleksis/core/filters.py:113 aleksis/core/models.py:713 +#: aleksis/core/filters.py:113 aleksis/core/models.py:715 msgid "User" msgstr "" -#: aleksis/core/filters.py:135 aleksis/core/models.py:486 +#: aleksis/core/filters.py:135 aleksis/core/models.py:488 msgid "Group" msgstr "" @@ -131,7 +149,7 @@ msgstr "" msgid "This username is already in use." msgstr "" -#: aleksis/core/forms.py:153 aleksis/core/models.py:134 +#: aleksis/core/forms.py:153 aleksis/core/models.py:136 msgid "School term" msgstr "" @@ -140,7 +158,7 @@ msgid "Common data" msgstr "" #: aleksis/core/forms.py:155 aleksis/core/forms.py:207 -#: aleksis/core/menus.py:174 aleksis/core/models.py:157 +#: aleksis/core/menus.py:160 aleksis/core/models.py:159 #: aleksis/core/templates/core/person/list.html:8 #: aleksis/core/templates/core/person/list.html:9 msgid "Persons" @@ -150,18 +168,18 @@ msgstr "" msgid "Additional data" msgstr "" -#: aleksis/core/forms.py:157 aleksis/core/models.py:210 -#: aleksis/core/models.py:539 +#: aleksis/core/forms.py:157 aleksis/core/models.py:212 +#: aleksis/core/models.py:541 msgid "Photo" msgstr "" #: aleksis/core/forms.py:199 aleksis/core/forms.py:202 -#: aleksis/core/models.py:77 +#: aleksis/core/models.py:79 msgid "Date" msgstr "" #: aleksis/core/forms.py:200 aleksis/core/forms.py:203 -#: aleksis/core/models.py:85 +#: aleksis/core/models.py:87 msgid "Time" msgstr "" @@ -197,11 +215,11 @@ msgstr "" msgid "Please enter your invitation code." msgstr "" -#: aleksis/core/forms.py:418 aleksis/core/models.py:185 +#: aleksis/core/forms.py:418 aleksis/core/models.py:187 msgid "First name" msgstr "" -#: aleksis/core/forms.py:419 aleksis/core/models.py:186 +#: aleksis/core/forms.py:419 aleksis/core/models.py:188 msgid "Last name" msgstr "" @@ -234,7 +252,7 @@ msgid "You must grant the permission to all objects and/or to some objects." msgstr "" #: aleksis/core/forms.py:586 -msgid "Adress data" +msgid "Address data" msgstr "" #: aleksis/core/forms.py:598 @@ -281,138 +299,131 @@ msgstr "" msgid "No backup result found!" msgstr "" -#: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6 +#: aleksis/core/menus.py:7 aleksis/core/templates/two_factor/core/login.html:6 #: aleksis/core/templates/two_factor/core/login.html:32 #: aleksis/core/templates/two_factor/core/login.html:95 msgid "Login" msgstr "" -#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:22 +#: aleksis/core/menus.py:13 aleksis/core/templates/account/signup.html:22 #: aleksis/core/templates/socialaccount/signup.html:23 msgid "Sign up" msgstr "" -#: aleksis/core/menus.py:24 aleksis/core/templates/invitations/enter.html:7 +#: aleksis/core/menus.py:22 aleksis/core/templates/invitations/enter.html:7 msgid "Accept invitation" msgstr "" -#: aleksis/core/menus.py:33 +#: aleksis/core/menus.py:31 msgid "Dashboard" msgstr "" -#: aleksis/core/menus.py:41 aleksis/core/models.py:765 -#: aleksis/core/preferences.py:29 aleksis/core/templates/core/base.html:81 -#: aleksis/core/templates/core/notifications.html:4 -#: aleksis/core/templates/core/notifications.html:5 -msgid "Notifications" -msgstr "" - -#: aleksis/core/menus.py:53 +#: aleksis/core/menus.py:39 msgid "Admin" msgstr "" -#: aleksis/core/menus.py:61 aleksis/core/models.py:865 +#: aleksis/core/menus.py:47 aleksis/core/models.py:867 #: aleksis/core/templates/core/announcement/list.html:7 #: aleksis/core/templates/core/announcement/list.html:8 msgid "Announcements" msgstr "" -#: aleksis/core/menus.py:72 aleksis/core/models.py:135 +#: aleksis/core/menus.py:58 aleksis/core/models.py:137 #: aleksis/core/templates/core/school_term/list.html:8 #: aleksis/core/templates/core/school_term/list.html:9 msgid "School terms" msgstr "" -#: aleksis/core/menus.py:83 +#: aleksis/core/menus.py:69 #: aleksis/core/templates/core/dashboard_widget/list.html:8 #: aleksis/core/templates/core/dashboard_widget/list.html:9 msgid "Dashboard widgets" msgstr "" -#: aleksis/core/menus.py:94 +#: aleksis/core/menus.py:80 #: aleksis/core/templates/core/management/data_management.html:6 #: aleksis/core/templates/core/management/data_management.html:7 msgid "Data management" msgstr "" -#: aleksis/core/menus.py:105 +#: aleksis/core/menus.py:91 #: aleksis/core/templates/core/pages/system_status.html:5 #: aleksis/core/templates/core/pages/system_status.html:7 msgid "System status" msgstr "" -#: aleksis/core/menus.py:116 +#: aleksis/core/menus.py:102 msgid "Configuration" msgstr "" -#: aleksis/core/menus.py:127 aleksis/core/templates/core/data_check/list.html:9 +#: aleksis/core/menus.py:113 aleksis/core/templates/core/data_check/list.html:9 #: aleksis/core/templates/core/data_check/list.html:10 msgid "Data checks" msgstr "" -#: aleksis/core/menus.py:133 aleksis/core/templates/core/perms/list.html:13 +#: aleksis/core/menus.py:119 aleksis/core/templates/core/perms/list.html:13 #: aleksis/core/templates/core/perms/list.html:14 msgid "Manage permissions" msgstr "" -#: aleksis/core/menus.py:144 +#: aleksis/core/menus.py:130 msgid "Backend Admin" msgstr "" -#: aleksis/core/menus.py:152 +#: aleksis/core/menus.py:138 #: aleksis/core/templates/oauth2_provider/application/list.html:5 #: aleksis/core/templates/oauth2_provider/application/list.html:6 msgid "OAuth2 Applications" msgstr "" -#: aleksis/core/menus.py:165 +#: aleksis/core/menus.py:151 msgid "People" msgstr "" -#: aleksis/core/menus.py:196 aleksis/core/models.py:1099 +#: aleksis/core/menus.py:182 aleksis/core/models.py:1101 #: aleksis/core/templates/core/group_type/list.html:8 #: aleksis/core/templates/core/group_type/list.html:9 msgid "Group types" msgstr "" -#: aleksis/core/menus.py:207 +#: aleksis/core/menus.py:193 msgid "Groups and child groups" msgstr "" -#: aleksis/core/menus.py:218 aleksis/core/models.py:535 +#: aleksis/core/menus.py:204 aleksis/core/models.py:537 #: aleksis/core/templates/core/additional_field/list.html:8 #: aleksis/core/templates/core/additional_field/list.html:9 msgid "Additional fields" msgstr "" -#: aleksis/core/menus.py:229 +#: aleksis/core/menus.py:215 msgid "Invite person" msgstr "" -#: aleksis/core/menus.py:242 +#: aleksis/core/menus.py:228 #: aleksis/core/templates/core/group/child_groups.html:7 #: aleksis/core/templates/core/group/child_groups.html:9 msgid "Assign child groups to groups" msgstr "" -#: aleksis/core/menus.py:254 +#: aleksis/core/menus.py:240 msgid "Stop impersonation" msgstr "" -#: aleksis/core/menus.py:263 +#: aleksis/core/menus.py:249 msgid "Account" msgstr "" -#: aleksis/core/menus.py:272 +#: aleksis/core/menus.py:258 #: aleksis/core/templates/dynamic_preferences/form.html:5 msgid "Preferences" msgstr "" -#: aleksis/core/menus.py:281 +#: aleksis/core/menus.py:267 msgid "2FA" msgstr "" -#: aleksis/core/menus.py:289 +#: aleksis/core/menus.py:275 #: aleksis/core/templates/account/password_change.html:5 #: aleksis/core/templates/account/password_change.html:6 #: aleksis/core/templates/account/password_change.html:19 @@ -424,17 +435,21 @@ msgstr "" msgid "Change password" msgstr "" -#: aleksis/core/menus.py:301 +#: aleksis/core/menus.py:287 msgid "Third-party accounts" msgstr "" -#: aleksis/core/menus.py:310 +#: aleksis/core/menus.py:296 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6 msgid "Authorized applications" msgstr "" -#: aleksis/core/menus.py:320 +#: aleksis/core/menus.py:305 +msgid "Calendar Feeds" +msgstr "" + +#: aleksis/core/menus.py:318 msgid "Logout" msgstr "" @@ -442,559 +457,584 @@ msgstr "" msgid "Linked school term" msgstr "" -#: aleksis/core/models.py:75 +#: aleksis/core/models.py:77 msgid "Boolean (Yes/No)" msgstr "" -#: aleksis/core/models.py:76 +#: aleksis/core/models.py:78 msgid "Text (one line)" msgstr "" -#: aleksis/core/models.py:78 +#: aleksis/core/models.py:80 msgid "Date and time" msgstr "" -#: aleksis/core/models.py:79 +#: aleksis/core/models.py:81 msgid "Decimal number" msgstr "" -#: aleksis/core/models.py:80 aleksis/core/models.py:203 +#: aleksis/core/models.py:82 aleksis/core/models.py:205 msgid "E-mail address" msgstr "" -#: aleksis/core/models.py:81 +#: aleksis/core/models.py:83 msgid "Integer" msgstr "" -#: aleksis/core/models.py:82 +#: aleksis/core/models.py:84 msgid "IP address" msgstr "" -#: aleksis/core/models.py:83 +#: aleksis/core/models.py:85 msgid "Boolean or empty (Yes/No/Neither)" msgstr "" -#: aleksis/core/models.py:84 +#: aleksis/core/models.py:86 msgid "Text (multi-line)" msgstr "" -#: aleksis/core/models.py:86 +#: aleksis/core/models.py:88 msgid "URL / Link" msgstr "" -#: aleksis/core/models.py:98 aleksis/core/models.py:1068 +#: aleksis/core/models.py:100 aleksis/core/models.py:1070 +#: aleksis/core/models.py:1374 msgid "Name" msgstr "" -#: aleksis/core/models.py:100 +#: aleksis/core/models.py:102 msgid "Start date" msgstr "" -#: aleksis/core/models.py:101 +#: aleksis/core/models.py:103 msgid "End date" msgstr "" -#: aleksis/core/models.py:120 +#: aleksis/core/models.py:122 msgid "The start date must be earlier than the end date." msgstr "" -#: aleksis/core/models.py:127 +#: aleksis/core/models.py:129 msgid "There is already a school term for this time or a part of this time." msgstr "" -#: aleksis/core/models.py:156 aleksis/core/models.py:1017 +#: aleksis/core/models.py:158 aleksis/core/models.py:1019 +#: aleksis/core/models.py:1371 msgid "Person" msgstr "" -#: aleksis/core/models.py:159 +#: aleksis/core/models.py:161 msgid "Can view address" msgstr "" -#: aleksis/core/models.py:160 +#: aleksis/core/models.py:162 msgid "Can view contact details" msgstr "" -#: aleksis/core/models.py:161 +#: aleksis/core/models.py:163 msgid "Can view photo" msgstr "" -#: aleksis/core/models.py:162 +#: aleksis/core/models.py:164 msgid "Can view avatar image" msgstr "" -#: aleksis/core/models.py:163 +#: aleksis/core/models.py:165 msgid "Can view persons groups" msgstr "" -#: aleksis/core/models.py:164 +#: aleksis/core/models.py:166 msgid "Can view personal details" msgstr "" -#: aleksis/core/models.py:174 +#: aleksis/core/models.py:176 msgid "female" msgstr "" -#: aleksis/core/models.py:174 +#: aleksis/core/models.py:176 msgid "male" msgstr "" -#: aleksis/core/models.py:182 aleksis/core/models.py:1271 +#: aleksis/core/models.py:184 aleksis/core/models.py:1273 msgid "Linked user" msgstr "" -#: aleksis/core/models.py:188 +#: aleksis/core/models.py:190 msgid "Additional name(s)" msgstr "" -#: aleksis/core/models.py:192 aleksis/core/models.py:504 +#: aleksis/core/models.py:194 aleksis/core/models.py:506 msgid "Short name" msgstr "" -#: aleksis/core/models.py:195 +#: aleksis/core/models.py:197 msgid "Street" msgstr "" -#: aleksis/core/models.py:196 +#: aleksis/core/models.py:198 msgid "Street number" msgstr "" -#: aleksis/core/models.py:197 +#: aleksis/core/models.py:199 msgid "Postal code" msgstr "" -#: aleksis/core/models.py:198 +#: aleksis/core/models.py:200 msgid "Place" msgstr "" -#: aleksis/core/models.py:200 aleksis/core/templates/core/person/full.html:160 +#: aleksis/core/models.py:202 aleksis/core/templates/core/person/full.html:160 msgid "Home phone" msgstr "" -#: aleksis/core/models.py:201 aleksis/core/templates/core/person/full.html:170 +#: aleksis/core/models.py:203 aleksis/core/templates/core/person/full.html:170 msgid "Mobile phone" msgstr "" -#: aleksis/core/models.py:205 +#: aleksis/core/models.py:207 msgid "Date of birth" msgstr "" -#: aleksis/core/models.py:206 +#: aleksis/core/models.py:208 msgid "Place of birth" msgstr "" -#: aleksis/core/models.py:207 +#: aleksis/core/models.py:209 msgid "Sex" msgstr "" -#: aleksis/core/models.py:214 aleksis/core/models.py:543 +#: aleksis/core/models.py:216 aleksis/core/models.py:545 msgid "This is an official photo, used for official documents and for internal use cases." msgstr "" -#: aleksis/core/models.py:219 aleksis/core/models.py:547 +#: aleksis/core/models.py:221 aleksis/core/models.py:549 msgid "Display picture / Avatar" msgstr "" -#: aleksis/core/models.py:222 aleksis/core/models.py:550 +#: aleksis/core/models.py:224 aleksis/core/models.py:552 msgid "This is a picture or an avatar for public display." msgstr "" -#: aleksis/core/models.py:227 aleksis/core/templates/core/person/full.html:235 +#: aleksis/core/models.py:229 aleksis/core/templates/core/person/full.html:235 msgid "Guardians / Parents" msgstr "" -#: aleksis/core/models.py:234 +#: aleksis/core/models.py:236 msgid "Primary group" msgstr "" -#: aleksis/core/models.py:237 aleksis/core/models.py:717 -#: aleksis/core/models.py:741 aleksis/core/models.py:832 -#: aleksis/core/models.py:1092 +#: aleksis/core/models.py:239 aleksis/core/models.py:719 +#: aleksis/core/models.py:743 aleksis/core/models.py:834 +#: aleksis/core/models.py:1094 msgid "Description" msgstr "" -#: aleksis/core/models.py:457 +#: aleksis/core/models.py:459 msgid "Title of field" msgstr "" -#: aleksis/core/models.py:459 +#: aleksis/core/models.py:461 msgid "Type of field" msgstr "" -#: aleksis/core/models.py:461 +#: aleksis/core/models.py:463 msgid "Required" msgstr "" -#: aleksis/core/models.py:462 +#: aleksis/core/models.py:464 msgid "Help text / description" msgstr "" -#: aleksis/core/models.py:468 +#: aleksis/core/models.py:470 msgid "Addtitional field for groups" msgstr "" -#: aleksis/core/models.py:469 +#: aleksis/core/models.py:471 msgid "Addtitional fields for groups" msgstr "" -#: aleksis/core/models.py:489 +#: aleksis/core/models.py:491 msgid "Can assign child groups to groups" msgstr "" -#: aleksis/core/models.py:490 +#: aleksis/core/models.py:492 msgid "Can view statistics about group." msgstr "" -#: aleksis/core/models.py:502 +#: aleksis/core/models.py:504 msgid "Long name" msgstr "" -#: aleksis/core/models.py:512 aleksis/core/templates/core/group/full.html:85 +#: aleksis/core/models.py:514 aleksis/core/templates/core/group/full.html:85 msgid "Members" msgstr "" -#: aleksis/core/models.py:515 aleksis/core/templates/core/group/full.html:82 +#: aleksis/core/models.py:517 aleksis/core/templates/core/group/full.html:82 msgid "Owners" msgstr "" -#: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:55 +#: aleksis/core/models.py:524 aleksis/core/templates/core/group/full.html:55 msgid "Parent groups" msgstr "" -#: aleksis/core/models.py:530 +#: aleksis/core/models.py:532 msgid "Type of group" msgstr "" -#: aleksis/core/models.py:716 aleksis/core/models.py:740 -#: aleksis/core/models.py:831 +#: aleksis/core/models.py:718 aleksis/core/models.py:742 +#: aleksis/core/models.py:833 #: aleksis/core/templates/core/announcement/list.html:18 msgid "Title" msgstr "" -#: aleksis/core/models.py:719 +#: aleksis/core/models.py:721 msgid "Application" msgstr "" -#: aleksis/core/models.py:725 +#: aleksis/core/models.py:727 msgid "Activity" msgstr "" -#: aleksis/core/models.py:726 +#: aleksis/core/models.py:728 msgid "Activities" msgstr "" -#: aleksis/core/models.py:732 +#: aleksis/core/models.py:734 msgid "Sender" msgstr "" -#: aleksis/core/models.py:737 +#: aleksis/core/models.py:739 msgid "Recipient" msgstr "" -#: aleksis/core/models.py:742 aleksis/core/models.py:1069 +#: aleksis/core/models.py:744 aleksis/core/models.py:1071 msgid "Link" msgstr "" -#: aleksis/core/models.py:744 +#: aleksis/core/models.py:746 msgid "Send notification at" msgstr "" -#: aleksis/core/models.py:746 +#: aleksis/core/models.py:748 msgid "Read" msgstr "" -#: aleksis/core/models.py:747 +#: aleksis/core/models.py:749 msgid "Sent" msgstr "" -#: aleksis/core/models.py:764 +#: aleksis/core/models.py:766 msgid "Notification" msgstr "" -#: aleksis/core/models.py:833 +#: aleksis/core/models.py:767 aleksis/core/preferences.py:29 +#: aleksis/core/templates/core/base.html:81 +#: aleksis/core/templates/core/notifications.html:4 +#: aleksis/core/templates/core/notifications.html:5 +msgid "Notifications" +msgstr "" + +#: aleksis/core/models.py:835 msgid "Link to detailed view" msgstr "" -#: aleksis/core/models.py:836 +#: aleksis/core/models.py:838 msgid "Date and time from when to show" msgstr "" -#: aleksis/core/models.py:839 +#: aleksis/core/models.py:841 msgid "Date and time until when to show" msgstr "" -#: aleksis/core/models.py:864 +#: aleksis/core/models.py:866 msgid "Announcement" msgstr "" -#: aleksis/core/models.py:902 +#: aleksis/core/models.py:904 msgid "Announcement recipient" msgstr "" -#: aleksis/core/models.py:903 +#: aleksis/core/models.py:905 msgid "Announcement recipients" msgstr "" -#: aleksis/core/models.py:925 +#: aleksis/core/models.py:927 msgid "Widget Title" msgstr "" -#: aleksis/core/models.py:926 +#: aleksis/core/models.py:928 msgid "Activate Widget" msgstr "" -#: aleksis/core/models.py:927 +#: aleksis/core/models.py:929 msgid "Widget is broken" msgstr "" -#: aleksis/core/models.py:930 +#: aleksis/core/models.py:932 msgid "Size on mobile devices" msgstr "" -#: aleksis/core/models.py:931 +#: aleksis/core/models.py:933 msgid "<= 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:936 +#: aleksis/core/models.py:938 msgid "Size on tablet devices" msgstr "" -#: aleksis/core/models.py:937 +#: aleksis/core/models.py:939 msgid "> 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:942 +#: aleksis/core/models.py:944 msgid "Size on desktop devices" msgstr "" -#: aleksis/core/models.py:943 +#: aleksis/core/models.py:945 msgid "> 992 px, 12 columns" msgstr "" -#: aleksis/core/models.py:948 +#: aleksis/core/models.py:950 msgid "Size on large desktop devices" msgstr "" -#: aleksis/core/models.py:949 +#: aleksis/core/models.py:951 msgid "> 1200 px>, 12 columns" msgstr "" -#: aleksis/core/models.py:980 +#: aleksis/core/models.py:982 msgid "Can edit default dashboard" msgstr "" -#: aleksis/core/models.py:981 +#: aleksis/core/models.py:983 msgid "Dashboard Widget" msgstr "" -#: aleksis/core/models.py:982 +#: aleksis/core/models.py:984 msgid "Dashboard Widgets" msgstr "" -#: aleksis/core/models.py:988 +#: aleksis/core/models.py:990 msgid "URL" msgstr "" -#: aleksis/core/models.py:989 +#: aleksis/core/models.py:991 msgid "Icon URL" msgstr "" -#: aleksis/core/models.py:995 +#: aleksis/core/models.py:997 msgid "External link widget" msgstr "" -#: aleksis/core/models.py:996 +#: aleksis/core/models.py:998 msgid "External link widgets" msgstr "" -#: aleksis/core/models.py:1002 +#: aleksis/core/models.py:1004 msgid "Content" msgstr "" -#: aleksis/core/models.py:1008 +#: aleksis/core/models.py:1010 msgid "Static content widget" msgstr "" -#: aleksis/core/models.py:1009 +#: aleksis/core/models.py:1011 msgid "Static content widgets" msgstr "" -#: aleksis/core/models.py:1014 +#: aleksis/core/models.py:1016 msgid "Dashboard widget" msgstr "" -#: aleksis/core/models.py:1019 +#: aleksis/core/models.py:1021 msgid "Order" msgstr "" -#: aleksis/core/models.py:1020 +#: aleksis/core/models.py:1022 msgid "Part of the default dashboard" msgstr "" -#: aleksis/core/models.py:1035 +#: aleksis/core/models.py:1037 msgid "Dashboard widget order" msgstr "" -#: aleksis/core/models.py:1036 +#: aleksis/core/models.py:1038 msgid "Dashboard widget orders" msgstr "" -#: aleksis/core/models.py:1042 +#: aleksis/core/models.py:1044 msgid "Menu ID" msgstr "" -#: aleksis/core/models.py:1055 +#: aleksis/core/models.py:1057 msgid "Custom menu" msgstr "" -#: aleksis/core/models.py:1056 +#: aleksis/core/models.py:1058 msgid "Custom menus" msgstr "" -#: aleksis/core/models.py:1066 +#: aleksis/core/models.py:1068 msgid "Menu" msgstr "" -#: aleksis/core/models.py:1070 aleksis/core/models.py:1318 +#: aleksis/core/models.py:1072 aleksis/core/models.py:1320 #: aleksis/core/templates/oauth2_provider/application/detail.html:26 msgid "Icon" msgstr "" -#: aleksis/core/models.py:1076 +#: aleksis/core/models.py:1078 msgid "Custom menu item" msgstr "" -#: aleksis/core/models.py:1077 +#: aleksis/core/models.py:1079 msgid "Custom menu items" msgstr "" -#: aleksis/core/models.py:1091 +#: aleksis/core/models.py:1093 msgid "Title of type" msgstr "" -#: aleksis/core/models.py:1098 aleksis/core/templates/core/group/full.html:47 +#: aleksis/core/models.py:1100 aleksis/core/templates/core/group/full.html:47 msgid "Group type" msgstr "" -#: aleksis/core/models.py:1112 +#: aleksis/core/models.py:1114 msgid "Can view system status" msgstr "" -#: aleksis/core/models.py:1113 +#: aleksis/core/models.py:1115 msgid "Can manage data" msgstr "" -#: aleksis/core/models.py:1114 +#: aleksis/core/models.py:1116 msgid "Can impersonate" msgstr "" -#: aleksis/core/models.py:1115 +#: aleksis/core/models.py:1117 msgid "Can use search" msgstr "" -#: aleksis/core/models.py:1116 +#: aleksis/core/models.py:1118 msgid "Can change site preferences" msgstr "" -#: aleksis/core/models.py:1117 +#: aleksis/core/models.py:1119 msgid "Can change person preferences" msgstr "" -#: aleksis/core/models.py:1118 +#: aleksis/core/models.py:1120 msgid "Can change group preferences" msgstr "" -#: aleksis/core/models.py:1119 +#: aleksis/core/models.py:1121 msgid "Can test PDF generation" msgstr "" -#: aleksis/core/models.py:1120 +#: aleksis/core/models.py:1122 msgid "Can invite persons" msgstr "" -#: aleksis/core/models.py:1156 +#: aleksis/core/models.py:1158 msgid "Related data check task" msgstr "" -#: aleksis/core/models.py:1164 +#: aleksis/core/models.py:1166 msgid "Issue solved" msgstr "" -#: aleksis/core/models.py:1165 +#: aleksis/core/models.py:1167 msgid "Notification sent" msgstr "" -#: aleksis/core/models.py:1178 +#: aleksis/core/models.py:1180 msgid "Data check result" msgstr "" -#: aleksis/core/models.py:1179 +#: aleksis/core/models.py:1181 msgid "Data check results" msgstr "" -#: aleksis/core/models.py:1181 +#: aleksis/core/models.py:1183 msgid "Can run data checks" msgstr "" -#: aleksis/core/models.py:1182 +#: aleksis/core/models.py:1184 msgid "Can solve data check problems" msgstr "" -#: aleksis/core/models.py:1189 +#: aleksis/core/models.py:1191 msgid "E-Mail address" msgstr "" -#: aleksis/core/models.py:1221 +#: aleksis/core/models.py:1223 msgid "Owner" msgstr "" -#: aleksis/core/models.py:1225 +#: aleksis/core/models.py:1227 msgid "File expires at" msgstr "" -#: aleksis/core/models.py:1227 +#: aleksis/core/models.py:1229 msgid "Generated HTML file" msgstr "" -#: aleksis/core/models.py:1229 +#: aleksis/core/models.py:1231 msgid "Generated PDF file" msgstr "" -#: aleksis/core/models.py:1236 +#: aleksis/core/models.py:1238 msgid "PDF file" msgstr "" -#: aleksis/core/models.py:1237 +#: aleksis/core/models.py:1239 msgid "PDF files" msgstr "" -#: aleksis/core/models.py:1242 +#: aleksis/core/models.py:1244 msgid "Task result" msgstr "" -#: aleksis/core/models.py:1245 +#: aleksis/core/models.py:1247 msgid "Task user" msgstr "" -#: aleksis/core/models.py:1257 +#: aleksis/core/models.py:1259 msgid "Task user assignment" msgstr "" -#: aleksis/core/models.py:1258 +#: aleksis/core/models.py:1260 msgid "Task user assignments" msgstr "" -#: aleksis/core/models.py:1274 +#: aleksis/core/models.py:1276 msgid "Additional attributes" msgstr "" -#: aleksis/core/models.py:1312 +#: aleksis/core/models.py:1314 msgid "Allowed scopes that clients can request" msgstr "" -#: aleksis/core/models.py:1322 +#: aleksis/core/models.py:1324 msgid "This image will be shown as icon in the authorization flow. It should be squared." msgstr "" +#: aleksis/core/models.py:1373 +msgid "UUID" +msgstr "" + +#: aleksis/core/models.py:1377 +msgid "Selected ICal feed" +msgstr "" + +#: aleksis/core/models.py:1386 +msgid "Personal Calendar URL" +msgstr "" + +#: aleksis/core/models.py:1387 +msgid "Personal Calendar URLs" +msgstr "" + #: aleksis/core/preferences.py:25 msgid "General" msgstr "" @@ -1519,7 +1559,7 @@ msgid "Publish new announcement" msgstr "" #: aleksis/core/templates/core/announcement/form.html:34 -msgid "Save und publish announcement" +msgid "Save and publish announcement" msgstr "" #: aleksis/core/templates/core/announcement/list.html:19 @@ -1821,6 +1861,40 @@ msgstr "" msgid "Create group type" msgstr "" +#: aleksis/core/templates/core/ical/ical_create.html:4 +#: aleksis/core/templates/core/ical/ical_create.html:5 +#: aleksis/core/templates/core/ical/ical_list.html:12 +msgid "Create iCal URL" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_create.html:16 +#: aleksis/core/templates/core/ical/ical_edit.html:16 +#: aleksis/core/templates/oauth2_provider/application/create.html:14 +#: aleksis/core/templates/oauth2_provider/application/edit.html:14 +#: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:24 +#: aleksis/core/templates/two_factor/_wizard_actions.html:6 +msgid "Cancel" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_edit.html:4 +#: aleksis/core/templates/core/ical/ical_edit.html:5 +#, python-format +msgid "Edit iCal URL %(object)s" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_list.html:4 +#: aleksis/core/templates/core/ical/ical_list.html:5 +msgid "ICal Feeds" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_list.html:8 +msgid "These are URLs for different Calendar Feeds in the iCal (.ics) format. You can create as many as you want and import them in your calendar software." +msgstr "" + +#: aleksis/core/templates/core/ical/ical_list.html:14 +msgid "Your iCal URLs" +msgstr "" + #: aleksis/core/templates/core/index.html:4 msgid "Home" msgstr "" @@ -2297,13 +2371,6 @@ msgstr "" msgid "Register OAuth2 Application" msgstr "" -#: aleksis/core/templates/oauth2_provider/application/create.html:14 -#: aleksis/core/templates/oauth2_provider/application/edit.html:14 -#: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:24 -#: aleksis/core/templates/two_factor/_wizard_actions.html:6 -msgid "Cancel" -msgstr "" - #: aleksis/core/templates/oauth2_provider/application/detail.html:5 msgid "OAuth2 Application" msgstr "" @@ -3027,156 +3094,168 @@ msgstr "" msgid "Download PDF" msgstr "" -#: aleksis/core/views.py:289 +#: aleksis/core/views.py:292 msgid "The school term has been created." msgstr "" -#: aleksis/core/views.py:301 +#: aleksis/core/views.py:304 msgid "The school term has been saved." msgstr "" -#: aleksis/core/views.py:421 +#: aleksis/core/views.py:424 msgid "The child groups were successfully saved." msgstr "" -#: aleksis/core/views.py:440 aleksis/core/views.py:450 +#: aleksis/core/views.py:443 aleksis/core/views.py:453 msgid "The person has been saved." msgstr "" -#: aleksis/core/views.py:500 +#: aleksis/core/views.py:503 msgid "The group has been saved." msgstr "" -#: aleksis/core/views.py:597 +#: aleksis/core/views.py:600 msgid "The announcement has been saved." msgstr "" -#: aleksis/core/views.py:613 +#: aleksis/core/views.py:616 msgid "The announcement has been deleted." msgstr "" -#: aleksis/core/views.py:681 +#: aleksis/core/views.py:684 msgid "The requested preference registry does not exist" msgstr "" -#: aleksis/core/views.py:700 +#: aleksis/core/views.py:703 msgid "The preferences have been saved successfully." msgstr "" -#: aleksis/core/views.py:724 +#: aleksis/core/views.py:727 msgid "The person has been deleted." msgstr "" -#: aleksis/core/views.py:738 +#: aleksis/core/views.py:741 msgid "The group has been deleted." msgstr "" -#: aleksis/core/views.py:770 +#: aleksis/core/views.py:773 msgid "The additional_field has been saved." msgstr "" -#: aleksis/core/views.py:804 +#: aleksis/core/views.py:807 msgid "The additional field has been deleted." msgstr "" -#: aleksis/core/views.py:829 +#: aleksis/core/views.py:832 msgid "The group type has been saved." msgstr "" -#: aleksis/core/views.py:859 +#: aleksis/core/views.py:862 msgid "The group type has been deleted." msgstr "" -#: aleksis/core/views.py:892 +#: aleksis/core/views.py:895 msgid "Progress: Run data checks" msgstr "" -#: aleksis/core/views.py:893 +#: aleksis/core/views.py:896 msgid "Run data checks …" msgstr "" -#: aleksis/core/views.py:894 +#: aleksis/core/views.py:897 msgid "The data checks were run successfully." msgstr "" -#: aleksis/core/views.py:895 +#: aleksis/core/views.py:898 msgid "There was a problem while running data checks." msgstr "" -#: aleksis/core/views.py:911 +#: aleksis/core/views.py:914 #, python-brace-format msgid "The solve option '{solve_option_obj.verbose_name}' " msgstr "" -#: aleksis/core/views.py:921 +#: aleksis/core/views.py:924 msgid "The requested solve option does not exist" msgstr "" -#: aleksis/core/views.py:953 +#: aleksis/core/views.py:956 msgid "The dashboard widget has been saved." msgstr "" -#: aleksis/core/views.py:983 +#: aleksis/core/views.py:986 msgid "The dashboard widget has been created." msgstr "" -#: aleksis/core/views.py:993 +#: aleksis/core/views.py:996 msgid "The dashboard widget has been deleted." msgstr "" -#: aleksis/core/views.py:1064 +#: aleksis/core/views.py:1067 msgid "Your dashboard configuration has been saved successfully." msgstr "" -#: aleksis/core/views.py:1066 +#: aleksis/core/views.py:1069 msgid "The configuration of the default dashboard has been saved successfully." msgstr "" -#: aleksis/core/views.py:1142 +#: aleksis/core/views.py:1145 #, python-brace-format msgid "The invitation was successfully created. The invitation code is {code}" msgstr "" -#: aleksis/core/views.py:1233 +#: aleksis/core/views.py:1236 msgid "We have successfully assigned the permissions." msgstr "" -#: aleksis/core/views.py:1243 +#: aleksis/core/views.py:1246 msgid "The global user permission has been deleted." msgstr "" -#: aleksis/core/views.py:1253 +#: aleksis/core/views.py:1256 msgid "The global group permission has been deleted." msgstr "" -#: aleksis/core/views.py:1263 +#: aleksis/core/views.py:1266 msgid "The object user permission has been deleted." msgstr "" -#: aleksis/core/views.py:1273 +#: aleksis/core/views.py:1276 msgid "The object group permission has been deleted." msgstr "" -#: aleksis/core/views.py:1341 +#: aleksis/core/views.py:1344 msgid "The requested PDF file does not exist" msgstr "" -#: aleksis/core/views.py:1350 aleksis/core/views.py:1354 +#: aleksis/core/views.py:1353 aleksis/core/views.py:1357 msgid "The requested task does not exist or is not accessible" msgstr "" -#: aleksis/core/views.py:1406 +#: aleksis/core/views.py:1409 msgid "The third-party account could not be disconnected because it is the only login method available." msgstr "" -#: aleksis/core/views.py:1413 +#: aleksis/core/views.py:1416 msgid "The third-party account has been successfully disconnected." msgstr "" -#: aleksis/core/views.py:1484 +#: aleksis/core/views.py:1487 msgid "Person was invited successfully and an email with further instructions has been send to them." msgstr "" -#: aleksis/core/views.py:1495 +#: aleksis/core/views.py:1498 msgid "Person was already invited." msgstr "" + +#: aleksis/core/views.py:1598 +msgid "ICal feed updated successfully" +msgstr "" + +#: aleksis/core/views.py:1608 +msgid "ICal feed deleted successfully" +msgstr "" + +#: aleksis/core/views.py:1616 +msgid "ICal feed created successfully" +msgstr "" diff --git a/aleksis/core/locale/ar/LC_MESSAGES/djangojs.po b/aleksis/core/locale/ar/LC_MESSAGES/djangojs.po index 31b839fb203db1208029422282b10d1fa3e95123..5cc7c348c2ab6303aae0b8d753a8cf07f89fe384 100644 --- a/aleksis/core/locale/ar/LC_MESSAGES/djangojs.po +++ b/aleksis/core/locale/ar/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-23 11:20+0100\n" +"POT-Creation-Date: 2022-05-24 19:37+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/aleksis/core/locale/de_DE/LC_MESSAGES/django.po b/aleksis/core/locale/de_DE/LC_MESSAGES/django.po index e39ddc518a4ec11696d1f0cb411139a7615e90c1..7656a3fde8cfff230195b6ec413433dc985fdc2d 100644 --- a/aleksis/core/locale/de_DE/LC_MESSAGES/django.po +++ b/aleksis/core/locale/de_DE/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: AlekSIS (School Information System) 0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-23 11:19+0100\n" -"PO-Revision-Date: 2022-03-23 11:06+0000\n" +"POT-Creation-Date: 2022-05-24 19:37+0200\n" +"PO-Revision-Date: 2022-05-24 17:52+0000\n" "Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n" "Language-Team: German <https://translate.edugit.org/projects/aleksis/" "aleksis-core/de/>\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.8\n" +"X-Generator: Weblate 4.12.1\n" #: aleksis/core/apps.py:166 msgid "OpenID Connect scope" @@ -39,8 +39,8 @@ msgstr "E-Mail-Adresse" msgid "Home and mobile phone" msgstr "Festnetz- und Mobilfunknummer" -#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:185 -#: aleksis/core/models.py:487 aleksis/core/templates/core/group/list.html:8 +#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:171 +#: aleksis/core/models.py:489 aleksis/core/templates/core/group/list.html:8 #: aleksis/core/templates/core/group/list.html:9 #: aleksis/core/templates/core/person/full.html:246 msgid "Groups" @@ -67,6 +67,24 @@ msgstr "Sicherstellen, dass es keine kaputten Dashboard-Widgets gibt." msgid "The DashboardWidget was reported broken automatically." msgstr "Das Dashboard-Widget wurde automatisch als kaputt gemeldet." +#: aleksis/core/feeds.py:52 +msgid "Birthday Calendar" +msgstr "Geburtstagskalender" + +#: aleksis/core/feeds.py:53 +msgid "A Calendar of Birthdays" +msgstr "Ein Kalender mit Geburtstagen" + +#: aleksis/core/feeds.py:66 +#, python-format +msgid "%(name)s's birthday" +msgstr "%(name)ss Geburtstag" + +#: aleksis/core/feeds.py:71 +#, python-format +msgid "%(name)s was born on %(birthday)s" +msgstr "%(name)s wurde am %(birthday)s geborgen" + #: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:139 #: aleksis/core/templates/core/base.html:140 #: aleksis/core/templates/core/group/list.html:20 @@ -92,11 +110,11 @@ msgstr "Berechtigung" msgid "Content type" msgstr "Inhaltstyp" -#: aleksis/core/filters.py:113 aleksis/core/models.py:713 +#: aleksis/core/filters.py:113 aleksis/core/models.py:715 msgid "User" msgstr "Benutzer" -#: aleksis/core/filters.py:135 aleksis/core/models.py:486 +#: aleksis/core/filters.py:135 aleksis/core/models.py:488 msgid "Group" msgstr "Gruppe" @@ -132,7 +150,7 @@ msgstr "Sie können keine neuen Benutzer erstellen, wenn Sie gleichzeitig einen msgid "This username is already in use." msgstr "Dieser Benutzername wird bereits genutzt." -#: aleksis/core/forms.py:153 aleksis/core/models.py:134 +#: aleksis/core/forms.py:153 aleksis/core/models.py:136 msgid "School term" msgstr "Schuljahr" @@ -141,7 +159,7 @@ msgid "Common data" msgstr "Allgemeine Daten" #: aleksis/core/forms.py:155 aleksis/core/forms.py:207 -#: aleksis/core/menus.py:174 aleksis/core/models.py:157 +#: aleksis/core/menus.py:160 aleksis/core/models.py:159 #: aleksis/core/templates/core/person/list.html:8 #: aleksis/core/templates/core/person/list.html:9 msgid "Persons" @@ -151,18 +169,18 @@ msgstr "Personen" msgid "Additional data" msgstr "Zusätzliche Datne" -#: aleksis/core/forms.py:157 aleksis/core/models.py:210 -#: aleksis/core/models.py:539 +#: aleksis/core/forms.py:157 aleksis/core/models.py:212 +#: aleksis/core/models.py:541 msgid "Photo" msgstr "Foto" #: aleksis/core/forms.py:199 aleksis/core/forms.py:202 -#: aleksis/core/models.py:77 +#: aleksis/core/models.py:79 msgid "Date" msgstr "Datum" #: aleksis/core/forms.py:200 aleksis/core/forms.py:203 -#: aleksis/core/models.py:85 +#: aleksis/core/models.py:87 msgid "Time" msgstr "Zeit" @@ -198,11 +216,11 @@ msgstr "Einladungscode" msgid "Please enter your invitation code." msgstr "Bitte geben Sie Ihren Einladungscode ein." -#: aleksis/core/forms.py:418 aleksis/core/models.py:185 +#: aleksis/core/forms.py:418 aleksis/core/models.py:187 msgid "First name" msgstr "Vorname" -#: aleksis/core/forms.py:419 aleksis/core/models.py:186 +#: aleksis/core/forms.py:419 aleksis/core/models.py:188 msgid "Last name" msgstr "Nachname" @@ -235,7 +253,7 @@ msgid "You must grant the permission to all objects and/or to some objects." msgstr "Sie müssen die Berechtigung auf alle Objekte und/oder für einige Objekte vergeben." #: aleksis/core/forms.py:586 -msgid "Adress data" +msgid "Address data" msgstr "Adressdaten" #: aleksis/core/forms.py:598 @@ -256,9 +274,7 @@ msgstr "Die ausgewählte Aktion existiert nicht." #: aleksis/core/forms.py:739 msgid "You do not have permission to run {} on all selected objects." -msgstr "" -"Sie haben nicht die Berechtigung, {} auf alle ausgewählten Objekte " -"auszuführen." +msgstr "Sie haben nicht die Berechtigung, {} auf alle ausgewählten Objekte auszuführen." #: aleksis/core/forms.py:795 msgid "No valid selection." @@ -284,138 +300,131 @@ msgstr "Kein Backup gefunden!" msgid "No backup result found!" msgstr "Kein Backupergebnis gefunden!" -#: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6 +#: aleksis/core/menus.py:7 aleksis/core/templates/two_factor/core/login.html:6 #: aleksis/core/templates/two_factor/core/login.html:32 #: aleksis/core/templates/two_factor/core/login.html:95 msgid "Login" msgstr "Anmelden" -#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:22 +#: aleksis/core/menus.py:13 aleksis/core/templates/account/signup.html:22 #: aleksis/core/templates/socialaccount/signup.html:23 msgid "Sign up" msgstr "Registrieren" -#: aleksis/core/menus.py:24 aleksis/core/templates/invitations/enter.html:7 +#: aleksis/core/menus.py:22 aleksis/core/templates/invitations/enter.html:7 msgid "Accept invitation" msgstr "Einladung akzeptieren" -#: aleksis/core/menus.py:33 +#: aleksis/core/menus.py:31 msgid "Dashboard" msgstr "Dashboard" -#: aleksis/core/menus.py:41 aleksis/core/models.py:765 -#: aleksis/core/preferences.py:29 aleksis/core/templates/core/base.html:81 -#: aleksis/core/templates/core/notifications.html:4 -#: aleksis/core/templates/core/notifications.html:5 -msgid "Notifications" -msgstr "Benachrichtigungen" - -#: aleksis/core/menus.py:53 +#: aleksis/core/menus.py:39 msgid "Admin" msgstr "Admin" -#: aleksis/core/menus.py:61 aleksis/core/models.py:865 +#: aleksis/core/menus.py:47 aleksis/core/models.py:867 #: aleksis/core/templates/core/announcement/list.html:7 #: aleksis/core/templates/core/announcement/list.html:8 msgid "Announcements" msgstr "Ankündigungen" -#: aleksis/core/menus.py:72 aleksis/core/models.py:135 +#: aleksis/core/menus.py:58 aleksis/core/models.py:137 #: aleksis/core/templates/core/school_term/list.html:8 #: aleksis/core/templates/core/school_term/list.html:9 msgid "School terms" msgstr "Schuljahre" -#: aleksis/core/menus.py:83 +#: aleksis/core/menus.py:69 #: aleksis/core/templates/core/dashboard_widget/list.html:8 #: aleksis/core/templates/core/dashboard_widget/list.html:9 msgid "Dashboard widgets" msgstr "Dashboard-Widgets" -#: aleksis/core/menus.py:94 +#: aleksis/core/menus.py:80 #: aleksis/core/templates/core/management/data_management.html:6 #: aleksis/core/templates/core/management/data_management.html:7 msgid "Data management" msgstr "Datenverwaltung" -#: aleksis/core/menus.py:105 +#: aleksis/core/menus.py:91 #: aleksis/core/templates/core/pages/system_status.html:5 #: aleksis/core/templates/core/pages/system_status.html:7 msgid "System status" msgstr "Systemstatus" -#: aleksis/core/menus.py:116 +#: aleksis/core/menus.py:102 msgid "Configuration" msgstr "Konfiguration" -#: aleksis/core/menus.py:127 aleksis/core/templates/core/data_check/list.html:9 +#: aleksis/core/menus.py:113 aleksis/core/templates/core/data_check/list.html:9 #: aleksis/core/templates/core/data_check/list.html:10 msgid "Data checks" msgstr "Datenprüfungen" -#: aleksis/core/menus.py:133 aleksis/core/templates/core/perms/list.html:13 +#: aleksis/core/menus.py:119 aleksis/core/templates/core/perms/list.html:13 #: aleksis/core/templates/core/perms/list.html:14 msgid "Manage permissions" msgstr "Berechtigungen verwalten" -#: aleksis/core/menus.py:144 +#: aleksis/core/menus.py:130 msgid "Backend Admin" msgstr "Backend-Administration" -#: aleksis/core/menus.py:152 +#: aleksis/core/menus.py:138 #: aleksis/core/templates/oauth2_provider/application/list.html:5 #: aleksis/core/templates/oauth2_provider/application/list.html:6 msgid "OAuth2 Applications" msgstr "OAuth2-Anwendungen" -#: aleksis/core/menus.py:165 +#: aleksis/core/menus.py:151 msgid "People" msgstr "Leute" -#: aleksis/core/menus.py:196 aleksis/core/models.py:1099 +#: aleksis/core/menus.py:182 aleksis/core/models.py:1101 #: aleksis/core/templates/core/group_type/list.html:8 #: aleksis/core/templates/core/group_type/list.html:9 msgid "Group types" msgstr "Gruppentypen" -#: aleksis/core/menus.py:207 +#: aleksis/core/menus.py:193 msgid "Groups and child groups" msgstr "Gruppen und Kindgruppen" -#: aleksis/core/menus.py:218 aleksis/core/models.py:535 +#: aleksis/core/menus.py:204 aleksis/core/models.py:537 #: aleksis/core/templates/core/additional_field/list.html:8 #: aleksis/core/templates/core/additional_field/list.html:9 msgid "Additional fields" msgstr "Zusätzliche Felder" -#: aleksis/core/menus.py:229 +#: aleksis/core/menus.py:215 msgid "Invite person" msgstr "Person einladen" -#: aleksis/core/menus.py:242 +#: aleksis/core/menus.py:228 #: aleksis/core/templates/core/group/child_groups.html:7 #: aleksis/core/templates/core/group/child_groups.html:9 msgid "Assign child groups to groups" msgstr "Kindgruppen zu Gruppen zuordnen" -#: aleksis/core/menus.py:254 +#: aleksis/core/menus.py:240 msgid "Stop impersonation" msgstr "Verkleidung beenden" -#: aleksis/core/menus.py:263 +#: aleksis/core/menus.py:249 msgid "Account" msgstr "Konto" -#: aleksis/core/menus.py:272 +#: aleksis/core/menus.py:258 #: aleksis/core/templates/dynamic_preferences/form.html:5 msgid "Preferences" msgstr "Einstellungen" -#: aleksis/core/menus.py:281 +#: aleksis/core/menus.py:267 msgid "2FA" msgstr "2FA" -#: aleksis/core/menus.py:289 +#: aleksis/core/menus.py:275 #: aleksis/core/templates/account/password_change.html:5 #: aleksis/core/templates/account/password_change.html:6 #: aleksis/core/templates/account/password_change.html:19 @@ -427,17 +436,21 @@ msgstr "2FA" msgid "Change password" msgstr "Passwort ändern" -#: aleksis/core/menus.py:301 +#: aleksis/core/menus.py:287 msgid "Third-party accounts" msgstr "Drittanbieter-Konten" -#: aleksis/core/menus.py:310 +#: aleksis/core/menus.py:296 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6 msgid "Authorized applications" msgstr "Autorisierte Anwendungen" -#: aleksis/core/menus.py:320 +#: aleksis/core/menus.py:305 +msgid "Calendar Feeds" +msgstr "Kalender-Feeds" + +#: aleksis/core/menus.py:318 msgid "Logout" msgstr "Abmelden" @@ -445,559 +458,584 @@ msgstr "Abmelden" msgid "Linked school term" msgstr "Zugeordnetes Schuljahr" -#: aleksis/core/models.py:75 +#: aleksis/core/models.py:77 msgid "Boolean (Yes/No)" msgstr "Boolean (Ja/Nein)" -#: aleksis/core/models.py:76 +#: aleksis/core/models.py:78 msgid "Text (one line)" msgstr "Text (eine Zeile)" -#: aleksis/core/models.py:78 +#: aleksis/core/models.py:80 msgid "Date and time" msgstr "Datum und Uhrzeit" -#: aleksis/core/models.py:79 +#: aleksis/core/models.py:81 msgid "Decimal number" msgstr "Dezimalzahl" -#: aleksis/core/models.py:80 aleksis/core/models.py:203 +#: aleksis/core/models.py:82 aleksis/core/models.py:205 msgid "E-mail address" msgstr "E-Mail-Adresse" -#: aleksis/core/models.py:81 +#: aleksis/core/models.py:83 msgid "Integer" msgstr "Ganze Zahl" -#: aleksis/core/models.py:82 +#: aleksis/core/models.py:84 msgid "IP address" msgstr "IP-Adresse" -#: aleksis/core/models.py:83 +#: aleksis/core/models.py:85 msgid "Boolean or empty (Yes/No/Neither)" msgstr "Boolean oder leer (Ja/Nein/weder)" -#: aleksis/core/models.py:84 +#: aleksis/core/models.py:86 msgid "Text (multi-line)" msgstr "Text (mehrzeilig)" -#: aleksis/core/models.py:86 +#: aleksis/core/models.py:88 msgid "URL / Link" msgstr "URL / Link" -#: aleksis/core/models.py:98 aleksis/core/models.py:1068 +#: aleksis/core/models.py:100 aleksis/core/models.py:1070 +#: aleksis/core/models.py:1374 msgid "Name" msgstr "Name" -#: aleksis/core/models.py:100 +#: aleksis/core/models.py:102 msgid "Start date" msgstr "Startdatum" -#: aleksis/core/models.py:101 +#: aleksis/core/models.py:103 msgid "End date" msgstr "Enddatum" -#: aleksis/core/models.py:120 +#: aleksis/core/models.py:122 msgid "The start date must be earlier than the end date." msgstr "Das Startdatum muss vor dem Enddatum liegen." -#: aleksis/core/models.py:127 +#: aleksis/core/models.py:129 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." -#: aleksis/core/models.py:156 aleksis/core/models.py:1017 +#: aleksis/core/models.py:158 aleksis/core/models.py:1019 +#: aleksis/core/models.py:1371 msgid "Person" msgstr "Person" -#: aleksis/core/models.py:159 +#: aleksis/core/models.py:161 msgid "Can view address" msgstr "Kann Adresse sehen" -#: aleksis/core/models.py:160 +#: aleksis/core/models.py:162 msgid "Can view contact details" msgstr "Kann Kontaktdetails sehen" -#: aleksis/core/models.py:161 +#: aleksis/core/models.py:163 msgid "Can view photo" msgstr "Kann Foto sehen" -#: aleksis/core/models.py:162 +#: aleksis/core/models.py:164 msgid "Can view avatar image" msgstr "Kann Avatar-Bild sehen" -#: aleksis/core/models.py:163 +#: aleksis/core/models.py:165 msgid "Can view persons groups" msgstr "Kann Gruppen einer Person sehen" -#: aleksis/core/models.py:164 +#: aleksis/core/models.py:166 msgid "Can view personal details" msgstr "Kann persönliche Daten sehen" -#: aleksis/core/models.py:174 +#: aleksis/core/models.py:176 msgid "female" msgstr "weiblich" -#: aleksis/core/models.py:174 +#: aleksis/core/models.py:176 msgid "male" msgstr "männlich" -#: aleksis/core/models.py:182 aleksis/core/models.py:1271 +#: aleksis/core/models.py:184 aleksis/core/models.py:1273 msgid "Linked user" msgstr "Verknüpfter Benutzer" -#: aleksis/core/models.py:188 +#: aleksis/core/models.py:190 msgid "Additional name(s)" msgstr "Zusätzliche Namen" -#: aleksis/core/models.py:192 aleksis/core/models.py:504 +#: aleksis/core/models.py:194 aleksis/core/models.py:506 msgid "Short name" msgstr "Kurzname" -#: aleksis/core/models.py:195 +#: aleksis/core/models.py:197 msgid "Street" msgstr "Straße" -#: aleksis/core/models.py:196 +#: aleksis/core/models.py:198 msgid "Street number" msgstr "Hausnummer" -#: aleksis/core/models.py:197 +#: aleksis/core/models.py:199 msgid "Postal code" msgstr "Postleitzahl" -#: aleksis/core/models.py:198 +#: aleksis/core/models.py:200 msgid "Place" msgstr "Ort" -#: aleksis/core/models.py:200 aleksis/core/templates/core/person/full.html:160 +#: aleksis/core/models.py:202 aleksis/core/templates/core/person/full.html:160 msgid "Home phone" msgstr "Festnetz" -#: aleksis/core/models.py:201 aleksis/core/templates/core/person/full.html:170 +#: aleksis/core/models.py:203 aleksis/core/templates/core/person/full.html:170 msgid "Mobile phone" msgstr "Handy" -#: aleksis/core/models.py:205 +#: aleksis/core/models.py:207 msgid "Date of birth" msgstr "Geburtsdatum" -#: aleksis/core/models.py:206 +#: aleksis/core/models.py:208 msgid "Place of birth" msgstr "Geburtsort" -#: aleksis/core/models.py:207 +#: aleksis/core/models.py:209 msgid "Sex" msgstr "Geschlecht" -#: aleksis/core/models.py:214 aleksis/core/models.py:543 +#: aleksis/core/models.py:216 aleksis/core/models.py:545 msgid "This is an official photo, used for official documents and for internal use cases." msgstr "Dies ist ein offizielles Foto, genutzt für offizielle Dokumente und interne Zwecke." -#: aleksis/core/models.py:219 aleksis/core/models.py:547 +#: aleksis/core/models.py:221 aleksis/core/models.py:549 msgid "Display picture / Avatar" msgstr "Bild/Avatar anzeigen" -#: aleksis/core/models.py:222 aleksis/core/models.py:550 +#: aleksis/core/models.py:224 aleksis/core/models.py:552 msgid "This is a picture or an avatar for public display." msgstr "Dies ist ein Bild oder ein Avatar für die öffentliche Darstellung." -#: aleksis/core/models.py:227 aleksis/core/templates/core/person/full.html:235 +#: aleksis/core/models.py:229 aleksis/core/templates/core/person/full.html:235 msgid "Guardians / Parents" msgstr "Erziehungsberechtigte / Eltern" -#: aleksis/core/models.py:234 +#: aleksis/core/models.py:236 msgid "Primary group" msgstr "Primärgruppe" -#: aleksis/core/models.py:237 aleksis/core/models.py:717 -#: aleksis/core/models.py:741 aleksis/core/models.py:832 -#: aleksis/core/models.py:1092 +#: aleksis/core/models.py:239 aleksis/core/models.py:719 +#: aleksis/core/models.py:743 aleksis/core/models.py:834 +#: aleksis/core/models.py:1094 msgid "Description" msgstr "Beschreibung" -#: aleksis/core/models.py:457 +#: aleksis/core/models.py:459 msgid "Title of field" msgstr "Feldtitel" -#: aleksis/core/models.py:459 +#: aleksis/core/models.py:461 msgid "Type of field" msgstr "Feldtyp" -#: aleksis/core/models.py:461 +#: aleksis/core/models.py:463 msgid "Required" msgstr "Pflichtfeld" -#: aleksis/core/models.py:462 +#: aleksis/core/models.py:464 msgid "Help text / description" msgstr "Hilfetext/Beschreibung" -#: aleksis/core/models.py:468 +#: aleksis/core/models.py:470 msgid "Addtitional field for groups" msgstr "Zusätzliche Felder für Gruppen" -#: aleksis/core/models.py:469 +#: aleksis/core/models.py:471 msgid "Addtitional fields for groups" msgstr "Zusätzliche Felder für Gruppen" -#: aleksis/core/models.py:489 +#: aleksis/core/models.py:491 msgid "Can assign child groups to groups" msgstr "Kann Kindgruppen zu Gruppen zuordnen" -#: aleksis/core/models.py:490 +#: aleksis/core/models.py:492 msgid "Can view statistics about group." msgstr "Kann Statistiken über Gruppen sehen." -#: aleksis/core/models.py:502 +#: aleksis/core/models.py:504 msgid "Long name" msgstr "Langname" -#: aleksis/core/models.py:512 aleksis/core/templates/core/group/full.html:85 +#: aleksis/core/models.py:514 aleksis/core/templates/core/group/full.html:85 msgid "Members" msgstr "Mitglieder" -#: aleksis/core/models.py:515 aleksis/core/templates/core/group/full.html:82 +#: aleksis/core/models.py:517 aleksis/core/templates/core/group/full.html:82 msgid "Owners" msgstr "Leiter/-innen" -#: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:55 +#: aleksis/core/models.py:524 aleksis/core/templates/core/group/full.html:55 msgid "Parent groups" msgstr "Ãœbergeordnete Gruppen" -#: aleksis/core/models.py:530 +#: aleksis/core/models.py:532 msgid "Type of group" msgstr "Gruppentyp" -#: aleksis/core/models.py:716 aleksis/core/models.py:740 -#: aleksis/core/models.py:831 +#: aleksis/core/models.py:718 aleksis/core/models.py:742 +#: aleksis/core/models.py:833 #: aleksis/core/templates/core/announcement/list.html:18 msgid "Title" msgstr "Titel" -#: aleksis/core/models.py:719 +#: aleksis/core/models.py:721 msgid "Application" msgstr "Anwendung" -#: aleksis/core/models.py:725 +#: aleksis/core/models.py:727 msgid "Activity" msgstr "Aktivität" -#: aleksis/core/models.py:726 +#: aleksis/core/models.py:728 msgid "Activities" msgstr "Aktivitäten" -#: aleksis/core/models.py:732 +#: aleksis/core/models.py:734 msgid "Sender" msgstr "Absender" -#: aleksis/core/models.py:737 +#: aleksis/core/models.py:739 msgid "Recipient" msgstr "Empfänger" -#: aleksis/core/models.py:742 aleksis/core/models.py:1069 +#: aleksis/core/models.py:744 aleksis/core/models.py:1071 msgid "Link" msgstr "Link" -#: aleksis/core/models.py:744 +#: aleksis/core/models.py:746 msgid "Send notification at" msgstr "Benachrichtigung schicken am" -#: aleksis/core/models.py:746 +#: aleksis/core/models.py:748 msgid "Read" msgstr "Gelesen" -#: aleksis/core/models.py:747 +#: aleksis/core/models.py:749 msgid "Sent" msgstr "Versandt" -#: aleksis/core/models.py:764 +#: aleksis/core/models.py:766 msgid "Notification" msgstr "Benachrichtigung" -#: aleksis/core/models.py:833 +#: aleksis/core/models.py:767 aleksis/core/preferences.py:29 +#: aleksis/core/templates/core/base.html:81 +#: aleksis/core/templates/core/notifications.html:4 +#: aleksis/core/templates/core/notifications.html:5 +msgid "Notifications" +msgstr "Benachrichtigungen" + +#: aleksis/core/models.py:835 msgid "Link to detailed view" msgstr "Link zur detaillierten Ansicht" -#: aleksis/core/models.py:836 +#: aleksis/core/models.py:838 msgid "Date and time from when to show" msgstr "Datum und Uhrzeit des Anzeigestarts" -#: aleksis/core/models.py:839 +#: aleksis/core/models.py:841 msgid "Date and time until when to show" msgstr "Anzeigezeitraum" -#: aleksis/core/models.py:864 +#: aleksis/core/models.py:866 msgid "Announcement" msgstr "Ankündigung" -#: aleksis/core/models.py:902 +#: aleksis/core/models.py:904 msgid "Announcement recipient" msgstr "Empfänger der Ankündigung" -#: aleksis/core/models.py:903 +#: aleksis/core/models.py:905 msgid "Announcement recipients" msgstr "Empfänger der Ankündigung" -#: aleksis/core/models.py:925 +#: aleksis/core/models.py:927 msgid "Widget Title" msgstr "Widget-Titel" -#: aleksis/core/models.py:926 +#: aleksis/core/models.py:928 msgid "Activate Widget" msgstr "Widget aktivieren" -#: aleksis/core/models.py:927 +#: aleksis/core/models.py:929 msgid "Widget is broken" msgstr "Widget ist kaputt" -#: aleksis/core/models.py:930 +#: aleksis/core/models.py:932 msgid "Size on mobile devices" msgstr "Größe auf Mobilgeräten" -#: aleksis/core/models.py:931 +#: aleksis/core/models.py:933 msgid "<= 600 px, 12 columns" msgstr "<= 600 px, 12 Spalten" -#: aleksis/core/models.py:936 +#: aleksis/core/models.py:938 msgid "Size on tablet devices" msgstr "Größe auf Tablets" -#: aleksis/core/models.py:937 +#: aleksis/core/models.py:939 msgid "> 600 px, 12 columns" msgstr "> 600px, 12 Spalten" -#: aleksis/core/models.py:942 +#: aleksis/core/models.py:944 msgid "Size on desktop devices" msgstr "Größe auf Desktopgeräten" -#: aleksis/core/models.py:943 +#: aleksis/core/models.py:945 msgid "> 992 px, 12 columns" msgstr "> 992 px, 12 Spalten" -#: aleksis/core/models.py:948 +#: aleksis/core/models.py:950 msgid "Size on large desktop devices" msgstr "Größe auf großen Desktopgeräten" -#: aleksis/core/models.py:949 +#: aleksis/core/models.py:951 msgid "> 1200 px>, 12 columns" msgstr "> 1200 px, 12 Spalten" -#: aleksis/core/models.py:980 +#: aleksis/core/models.py:982 msgid "Can edit default dashboard" msgstr "Kann Standarddashboard bearbeiten" -#: aleksis/core/models.py:981 +#: aleksis/core/models.py:983 msgid "Dashboard Widget" msgstr "Dashboard-Widget" -#: aleksis/core/models.py:982 +#: aleksis/core/models.py:984 msgid "Dashboard Widgets" msgstr "Dashboard-Widgets" -#: aleksis/core/models.py:988 +#: aleksis/core/models.py:990 msgid "URL" msgstr "URL" -#: aleksis/core/models.py:989 +#: aleksis/core/models.py:991 msgid "Icon URL" msgstr "Symbol-URL" -#: aleksis/core/models.py:995 +#: aleksis/core/models.py:997 msgid "External link widget" msgstr "Externer-Link-Widget" -#: aleksis/core/models.py:996 +#: aleksis/core/models.py:998 msgid "External link widgets" msgstr "Externer-Link-Widgets" -#: aleksis/core/models.py:1002 +#: aleksis/core/models.py:1004 msgid "Content" msgstr "Inhalt" -#: aleksis/core/models.py:1008 +#: aleksis/core/models.py:1010 msgid "Static content widget" msgstr "Statischer-Inhalt-Widget" -#: aleksis/core/models.py:1009 +#: aleksis/core/models.py:1011 msgid "Static content widgets" msgstr "Statischer-Inhalt-Widgets" -#: aleksis/core/models.py:1014 +#: aleksis/core/models.py:1016 msgid "Dashboard widget" msgstr "Dashboard-Widget" -#: aleksis/core/models.py:1019 +#: aleksis/core/models.py:1021 msgid "Order" msgstr "Reihenfolge" -#: aleksis/core/models.py:1020 +#: aleksis/core/models.py:1022 msgid "Part of the default dashboard" msgstr "Teil des Standarddashboards" -#: aleksis/core/models.py:1035 +#: aleksis/core/models.py:1037 msgid "Dashboard widget order" msgstr "Reihenfolge der Dashboard-Widgets" -#: aleksis/core/models.py:1036 +#: aleksis/core/models.py:1038 msgid "Dashboard widget orders" msgstr "Reihenfolgen der Dashboard-Widgets" -#: aleksis/core/models.py:1042 +#: aleksis/core/models.py:1044 msgid "Menu ID" msgstr "Menü-ID" -#: aleksis/core/models.py:1055 +#: aleksis/core/models.py:1057 msgid "Custom menu" msgstr "Benutzerdefiniertes Menü" -#: aleksis/core/models.py:1056 +#: aleksis/core/models.py:1058 msgid "Custom menus" msgstr "Benutzerdefinierte Menüs" -#: aleksis/core/models.py:1066 +#: aleksis/core/models.py:1068 msgid "Menu" msgstr "Menü" -#: aleksis/core/models.py:1070 aleksis/core/models.py:1318 +#: aleksis/core/models.py:1072 aleksis/core/models.py:1320 #: aleksis/core/templates/oauth2_provider/application/detail.html:26 msgid "Icon" msgstr "Symbol" -#: aleksis/core/models.py:1076 +#: aleksis/core/models.py:1078 msgid "Custom menu item" msgstr "Benutzerdefiniertes Menüelement" -#: aleksis/core/models.py:1077 +#: aleksis/core/models.py:1079 msgid "Custom menu items" msgstr "Benutzerdefinierte Menüelemente" -#: aleksis/core/models.py:1091 +#: aleksis/core/models.py:1093 msgid "Title of type" msgstr "Titel des Typs" -#: aleksis/core/models.py:1098 aleksis/core/templates/core/group/full.html:47 +#: aleksis/core/models.py:1100 aleksis/core/templates/core/group/full.html:47 msgid "Group type" msgstr "Gruppentyp" -#: aleksis/core/models.py:1112 +#: aleksis/core/models.py:1114 msgid "Can view system status" msgstr "Kann Systemstatus sehen" -#: aleksis/core/models.py:1113 +#: aleksis/core/models.py:1115 msgid "Can manage data" msgstr "Kann Daten verwalten" -#: aleksis/core/models.py:1114 +#: aleksis/core/models.py:1116 msgid "Can impersonate" msgstr "Kann sich verkleiden" -#: aleksis/core/models.py:1115 +#: aleksis/core/models.py:1117 msgid "Can use search" msgstr "Kann Suche benutzen" -#: aleksis/core/models.py:1116 +#: aleksis/core/models.py:1118 msgid "Can change site preferences" msgstr "Kann Konfiguration ändern" -#: aleksis/core/models.py:1117 +#: aleksis/core/models.py:1119 msgid "Can change person preferences" msgstr "Kann Einstellungen einer Person verändern" -#: aleksis/core/models.py:1118 +#: aleksis/core/models.py:1120 msgid "Can change group preferences" msgstr "Kann Einstellungen einer Gruppe verändern" -#: aleksis/core/models.py:1119 +#: aleksis/core/models.py:1121 msgid "Can test PDF generation" msgstr "Kann die PDF-Generierung testen" -#: aleksis/core/models.py:1120 +#: aleksis/core/models.py:1122 msgid "Can invite persons" msgstr "Kann Personen einladen" -#: aleksis/core/models.py:1156 +#: aleksis/core/models.py:1158 msgid "Related data check task" msgstr "Zugehörige Datenprüfungsaufgabe" -#: aleksis/core/models.py:1164 +#: aleksis/core/models.py:1166 msgid "Issue solved" msgstr "Problem gelöst" -#: aleksis/core/models.py:1165 +#: aleksis/core/models.py:1167 msgid "Notification sent" msgstr "Benachrichtigung gesendet" -#: aleksis/core/models.py:1178 +#: aleksis/core/models.py:1180 msgid "Data check result" msgstr "Datenprüfungsergebnis" -#: aleksis/core/models.py:1179 +#: aleksis/core/models.py:1181 msgid "Data check results" msgstr "Datenprüfungsergebnisse" -#: aleksis/core/models.py:1181 +#: aleksis/core/models.py:1183 msgid "Can run data checks" msgstr "Kann Datenprüfungen ausführen" -#: aleksis/core/models.py:1182 +#: aleksis/core/models.py:1184 msgid "Can solve data check problems" msgstr "Kann Datenprüfungsprobleme lösen" -#: aleksis/core/models.py:1189 +#: aleksis/core/models.py:1191 msgid "E-Mail address" msgstr "E-Mail-Adresse" -#: aleksis/core/models.py:1221 +#: aleksis/core/models.py:1223 msgid "Owner" msgstr "Leiter" -#: aleksis/core/models.py:1225 +#: aleksis/core/models.py:1227 msgid "File expires at" msgstr "Datei abgelaufen am" -#: aleksis/core/models.py:1227 +#: aleksis/core/models.py:1229 msgid "Generated HTML file" msgstr "Generierte HTML-Datei" -#: aleksis/core/models.py:1229 +#: aleksis/core/models.py:1231 msgid "Generated PDF file" msgstr "Generierte PDF-Datei" -#: aleksis/core/models.py:1236 +#: aleksis/core/models.py:1238 msgid "PDF file" msgstr "PDF-Datei" -#: aleksis/core/models.py:1237 +#: aleksis/core/models.py:1239 msgid "PDF files" msgstr "PDF-Dateien" -#: aleksis/core/models.py:1242 +#: aleksis/core/models.py:1244 msgid "Task result" msgstr "Task-Ergebnis" -#: aleksis/core/models.py:1245 +#: aleksis/core/models.py:1247 msgid "Task user" msgstr "Task-Benutzer" -#: aleksis/core/models.py:1257 +#: aleksis/core/models.py:1259 msgid "Task user assignment" msgstr "Task-Benutzer-Zuordnung" -#: aleksis/core/models.py:1258 +#: aleksis/core/models.py:1260 msgid "Task user assignments" msgstr "Task-Benutzer-Zuordnungen" -#: aleksis/core/models.py:1274 +#: aleksis/core/models.py:1276 msgid "Additional attributes" msgstr "Zusätzliche Attribute" -#: aleksis/core/models.py:1312 +#: aleksis/core/models.py:1314 msgid "Allowed scopes that clients can request" msgstr "Erlaubte Scopes, die ein Client anfordern kann" -#: aleksis/core/models.py:1322 +#: aleksis/core/models.py:1324 msgid "This image will be shown as icon in the authorization flow. It should be squared." msgstr "Dieses Bild wird im Autorisierungs-Vorgang als Symbol angezeigt werden. Es sollte rechteckig sein." +#: aleksis/core/models.py:1373 +msgid "UUID" +msgstr "UUID" + +#: aleksis/core/models.py:1377 +msgid "Selected ICal feed" +msgstr "Ausgewählter iCal-Feed" + +#: aleksis/core/models.py:1386 +msgid "Personal Calendar URL" +msgstr "Persönliche Kalender-URL" + +#: aleksis/core/models.py:1387 +msgid "Personal Calendar URLs" +msgstr "Persönliche Kalender-URLs" + #: aleksis/core/preferences.py:25 msgid "General" msgstr "Allgemein" @@ -1580,7 +1618,7 @@ msgid "Publish new announcement" msgstr "Neue Ankündigung veröffentlichen" #: aleksis/core/templates/core/announcement/form.html:34 -msgid "Save und publish announcement" +msgid "Save and publish announcement" msgstr "Ankündigung speichern und veröffentlichen" #: aleksis/core/templates/core/announcement/list.html:19 @@ -1913,6 +1951,43 @@ msgstr "Gruppentyp editieren" msgid "Create group type" msgstr "Gruppentyp erstellen" +#: aleksis/core/templates/core/ical/ical_create.html:4 +#: aleksis/core/templates/core/ical/ical_create.html:5 +#: aleksis/core/templates/core/ical/ical_list.html:12 +msgid "Create iCal URL" +msgstr "iCal-URL erstellen" + +#: aleksis/core/templates/core/ical/ical_create.html:16 +#: aleksis/core/templates/core/ical/ical_edit.html:16 +#: aleksis/core/templates/oauth2_provider/application/create.html:14 +#: aleksis/core/templates/oauth2_provider/application/edit.html:14 +#: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:24 +#: aleksis/core/templates/two_factor/_wizard_actions.html:6 +msgid "Cancel" +msgstr "Abbrechen" + +#: aleksis/core/templates/core/ical/ical_edit.html:4 +#: aleksis/core/templates/core/ical/ical_edit.html:5 +#, python-format +msgid "Edit iCal URL %(object)s" +msgstr "iCal-URL %(object)s bearbeiten" + +#: aleksis/core/templates/core/ical/ical_list.html:4 +#: aleksis/core/templates/core/ical/ical_list.html:5 +msgid "ICal Feeds" +msgstr "iCal-Feeds" + +#: aleksis/core/templates/core/ical/ical_list.html:8 +msgid "These are URLs for different Calendar Feeds in the iCal (.ics) format. You can create as many as you want and import them in your calendar software." +msgstr "" +"Dies sind URLs für verschiedene Kalender-Feeds im iCal-Format (.ics). Sie " +"können so viele erstellen, wie sie wollen, und in Ihre Kalender-Software " +"importieren." + +#: aleksis/core/templates/core/ical/ical_list.html:14 +msgid "Your iCal URLs" +msgstr "Deine iCal-URLs" + #: aleksis/core/templates/core/index.html:4 msgid "Home" msgstr "Startseite" @@ -2449,13 +2524,6 @@ msgstr "Die Einladung für %(email)s wurde akzeptiert." msgid "Register OAuth2 Application" msgstr "OAuth2-Anwendung registrieren" -#: aleksis/core/templates/oauth2_provider/application/create.html:14 -#: aleksis/core/templates/oauth2_provider/application/edit.html:14 -#: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:24 -#: aleksis/core/templates/two_factor/_wizard_actions.html:6 -msgid "Cancel" -msgstr "Abbrechen" - #: aleksis/core/templates/oauth2_provider/application/detail.html:5 msgid "OAuth2 Application" msgstr "OAuth2-Anwendung" @@ -3317,169 +3385,178 @@ msgstr "Es ist ein Fehler beim Generieren der PDF-Datei aufgetreten." msgid "Download PDF" msgstr "PDF herunterladen" -#: aleksis/core/views.py:289 +#: aleksis/core/views.py:292 msgid "The school term has been created." msgstr "Das Schuljahr wurde erstellt." -#: aleksis/core/views.py:301 +#: aleksis/core/views.py:304 msgid "The school term has been saved." msgstr "Das Schuljahr wurde gespeichert." -#: aleksis/core/views.py:421 +#: aleksis/core/views.py:424 msgid "The child groups were successfully saved." msgstr "Die Untergruppen wurden gespeichert." -#: aleksis/core/views.py:440 aleksis/core/views.py:450 +#: aleksis/core/views.py:443 aleksis/core/views.py:453 msgid "The person has been saved." msgstr "Die Person wurde gespeichert." -#: aleksis/core/views.py:500 +#: aleksis/core/views.py:503 msgid "The group has been saved." msgstr "Die Gruppe wurde gespeichert." -#: aleksis/core/views.py:597 +#: aleksis/core/views.py:600 msgid "The announcement has been saved." msgstr "Die Ankündigung wurde gespeichert." -#: aleksis/core/views.py:613 +#: aleksis/core/views.py:616 msgid "The announcement has been deleted." msgstr "Ankündigung wurde gelöscht." -#: aleksis/core/views.py:681 +#: aleksis/core/views.py:684 msgid "The requested preference registry does not exist" msgstr "Das angeforderte Einstellungsregister existiert nicht" -#: aleksis/core/views.py:700 +#: aleksis/core/views.py:703 msgid "The preferences have been saved successfully." msgstr "Die Einstellungen wurde gespeichert." -#: aleksis/core/views.py:724 +#: aleksis/core/views.py:727 msgid "The person has been deleted." msgstr "Die Person wurde gelöscht." -#: aleksis/core/views.py:738 +#: aleksis/core/views.py:741 msgid "The group has been deleted." msgstr "Die Gruppe wurde gelöscht." -#: aleksis/core/views.py:770 +#: aleksis/core/views.py:773 msgid "The additional_field has been saved." msgstr "Das zusätzliche Feld wurde gespeichert." -#: aleksis/core/views.py:804 +#: aleksis/core/views.py:807 msgid "The additional field has been deleted." msgstr "Das zusätzliche Feld wurde gelöscht." -#: aleksis/core/views.py:829 +#: aleksis/core/views.py:832 msgid "The group type has been saved." msgstr "Der Gruppentyp wurde gespeichert." -#: aleksis/core/views.py:859 +#: aleksis/core/views.py:862 msgid "The group type has been deleted." msgstr "Der Gruppentyp wurde gelöscht." -#: aleksis/core/views.py:892 +#: aleksis/core/views.py:895 msgid "Progress: Run data checks" msgstr "Fortschritt: Datenprüfungen ausführen" -#: aleksis/core/views.py:893 +#: aleksis/core/views.py:896 msgid "Run data checks …" msgstr "Datenprüfungen laufen …" -#: aleksis/core/views.py:894 +#: aleksis/core/views.py:897 msgid "The data checks were run successfully." msgstr "Die Datenprüfungen wurden erfolgreich ausgeführt." -#: aleksis/core/views.py:895 +#: aleksis/core/views.py:898 msgid "There was a problem while running data checks." msgstr "Es gab ein Problem beim Ausführen der Datenprüfungen." -#: aleksis/core/views.py:911 +#: aleksis/core/views.py:914 #, python-brace-format msgid "The solve option '{solve_option_obj.verbose_name}' " msgstr "Die Lösungsoption \"{solve_option_obj.verbose_name}\" " -#: aleksis/core/views.py:921 +#: aleksis/core/views.py:924 msgid "The requested solve option does not exist" msgstr "Die angeforderte Lösungsoption existiert nicht" -#: aleksis/core/views.py:953 +#: aleksis/core/views.py:956 msgid "The dashboard widget has been saved." msgstr "Das Dashboard-Widget wurde gespeichert." -#: aleksis/core/views.py:983 +#: aleksis/core/views.py:986 msgid "The dashboard widget has been created." msgstr "Das Dashboard-Widget wurde erstellt." -#: aleksis/core/views.py:993 +#: aleksis/core/views.py:996 msgid "The dashboard widget has been deleted." msgstr "Das Dashboard-Widget wurde gelöscht." -#: aleksis/core/views.py:1064 +#: aleksis/core/views.py:1067 msgid "Your dashboard configuration has been saved successfully." msgstr "Ihre Dashboardkonfiguration wurde erfolgreich gespeichert." -#: aleksis/core/views.py:1066 +#: aleksis/core/views.py:1069 msgid "The configuration of the default dashboard has been saved successfully." msgstr "Die Konfiguration des Standard-Dashboardes wurde erfolgreich gespeichert." -#: aleksis/core/views.py:1142 +#: aleksis/core/views.py:1145 #, python-brace-format msgid "The invitation was successfully created. The invitation code is {code}" msgstr "Die Einladung wurde erfolgreich erstellt. Der Einladungscode ist {code}" -#: aleksis/core/views.py:1233 +#: aleksis/core/views.py:1236 msgid "We have successfully assigned the permissions." msgstr "Wir haben die Berechtigungen erfolgreich zugewiesen." -#: aleksis/core/views.py:1243 +#: aleksis/core/views.py:1246 msgid "The global user permission has been deleted." msgstr "Die globale Benutzerberechtigung wurde gelöscht." -#: aleksis/core/views.py:1253 +#: aleksis/core/views.py:1256 msgid "The global group permission has been deleted." msgstr "Die globale Gruppenberechtigung wurde gelöscht." -#: aleksis/core/views.py:1263 +#: aleksis/core/views.py:1266 msgid "The object user permission has been deleted." msgstr "Die Objekt-Benutzerberechtigung wurde gelöscht." -#: aleksis/core/views.py:1273 +#: aleksis/core/views.py:1276 msgid "The object group permission has been deleted." msgstr "Die Objekt-Gruppenberechtigung wurde gelöscht." -#: aleksis/core/views.py:1341 +#: aleksis/core/views.py:1344 msgid "The requested PDF file does not exist" msgstr "Die angeforderte PDF-Datei existiert nicht" -#: aleksis/core/views.py:1350 aleksis/core/views.py:1354 +#: aleksis/core/views.py:1353 aleksis/core/views.py:1357 msgid "The requested task does not exist or is not accessible" msgstr "Der angeforderte Task existiert nicht oder ist nicht abrufbar" -#: aleksis/core/views.py:1406 +#: aleksis/core/views.py:1409 msgid "The third-party account could not be disconnected because it is the only login method available." msgstr "Das Drittanbieter-Konto konnte nicht deaktiviert werden, weil es die einzige verfügbare Anmeldeoption ist." -#: aleksis/core/views.py:1413 +#: aleksis/core/views.py:1416 msgid "The third-party account has been successfully disconnected." msgstr "Das Drittanbieter-Konto wurde erfolgreich getrennt." -#: aleksis/core/views.py:1484 +#: aleksis/core/views.py:1487 msgid "Person was invited successfully and an email with further instructions has been send to them." msgstr "Die Person wurde erfolgreich eingeladen und eine E-Mail mit weiteren Anweisungen wurde an sie verschickt." -#: aleksis/core/views.py:1495 +#: aleksis/core/views.py:1498 msgid "Person was already invited." msgstr "Person wurde bereits eingeladen." +#: aleksis/core/views.py:1598 +msgid "ICal feed updated successfully" +msgstr "Der iCal-Feed wurde erfolgreich aktualisiert" + +#: aleksis/core/views.py:1608 +msgid "ICal feed deleted successfully" +msgstr "Der iCal-Feed wurde erfolgreich gelöscht" + +#: aleksis/core/views.py:1616 +msgid "ICal feed created successfully" +msgstr "Der iCal-Feed wurde erfolgreich erstellt" + #~ msgid "Me" #~ msgstr "Ich" #~ msgid "Logged in as" #~ msgstr "Angemeldet als" -#~ msgid "Person was invited successfully." -#~ msgstr "Person wurde erfolgreich eingeladen." - #, python-brace-format #~ msgid "Last backup {time_gone_since_backup}!" #~ msgstr "Letztes Backup: {time_gone_since_backup}!" diff --git a/aleksis/core/locale/de_DE/LC_MESSAGES/djangojs.po b/aleksis/core/locale/de_DE/LC_MESSAGES/djangojs.po index c0b719bf0961c3f0c22071603f7df5b175571354..46116e73483b8a4b7af5f566700cd6110f8c29dc 100644 --- a/aleksis/core/locale/de_DE/LC_MESSAGES/djangojs.po +++ b/aleksis/core/locale/de_DE/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-23 11:20+0100\n" +"POT-Creation-Date: 2022-05-24 19:37+0200\n" "PO-Revision-Date: 2021-10-28 14:37+0000\n" "Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n" "Language-Team: German <https://translate.edugit.org/projects/aleksis/aleksis-core-js/de/>\n" diff --git a/aleksis/core/locale/fr/LC_MESSAGES/django.po b/aleksis/core/locale/fr/LC_MESSAGES/django.po index 231a5f739692d128aa759a0b397450df36c54169..03ca8ed9426a18b415e7ebe22449010c847dd68e 100644 --- a/aleksis/core/locale/fr/LC_MESSAGES/django.po +++ b/aleksis/core/locale/fr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: AlekSIS (School Information System) 0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-23 11:19+0100\n" +"POT-Creation-Date: 2022-05-24 19:37+0200\n" "PO-Revision-Date: 2021-06-16 12:00+0000\n" "Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n" "Language-Team: French <https://translate.edugit.org/projects/aleksis/aleksis/fr/>\n" @@ -40,8 +40,8 @@ msgstr "Détails de contact" msgid "Home and mobile phone" msgstr "" -#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:185 -#: aleksis/core/models.py:487 aleksis/core/templates/core/group/list.html:8 +#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:171 +#: aleksis/core/models.py:489 aleksis/core/templates/core/group/list.html:8 #: aleksis/core/templates/core/group/list.html:9 #: aleksis/core/templates/core/person/full.html:246 #, fuzzy @@ -70,6 +70,24 @@ msgstr "" msgid "The DashboardWidget was reported broken automatically." msgstr "" +#: aleksis/core/feeds.py:52 +msgid "Birthday Calendar" +msgstr "" + +#: aleksis/core/feeds.py:53 +msgid "A Calendar of Birthdays" +msgstr "" + +#: aleksis/core/feeds.py:66 +#, python-format +msgid "%(name)s's birthday" +msgstr "" + +#: aleksis/core/feeds.py:71 +#, python-format +msgid "%(name)s was born on %(birthday)s" +msgstr "" + #: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:139 #: aleksis/core/templates/core/base.html:140 #: aleksis/core/templates/core/group/list.html:20 @@ -97,11 +115,11 @@ msgstr "" msgid "Content type" msgstr "" -#: aleksis/core/filters.py:113 aleksis/core/models.py:713 +#: aleksis/core/filters.py:113 aleksis/core/models.py:715 msgid "User" msgstr "" -#: aleksis/core/filters.py:135 aleksis/core/models.py:486 +#: aleksis/core/filters.py:135 aleksis/core/models.py:488 msgid "Group" msgstr "groupe" @@ -141,7 +159,7 @@ msgstr "" msgid "This username is already in use." msgstr "Cet nom est deja en utilisation." -#: aleksis/core/forms.py:153 aleksis/core/models.py:134 +#: aleksis/core/forms.py:153 aleksis/core/models.py:136 msgid "School term" msgstr "" @@ -152,7 +170,7 @@ msgid "Common data" msgstr "Détails de contact" #: aleksis/core/forms.py:155 aleksis/core/forms.py:207 -#: aleksis/core/menus.py:174 aleksis/core/models.py:157 +#: aleksis/core/menus.py:160 aleksis/core/models.py:159 #: aleksis/core/templates/core/person/list.html:8 #: aleksis/core/templates/core/person/list.html:9 #, fuzzy @@ -166,18 +184,18 @@ msgstr "Personne" msgid "Additional data" msgstr "Détails de contact" -#: aleksis/core/forms.py:157 aleksis/core/models.py:210 -#: aleksis/core/models.py:539 +#: aleksis/core/forms.py:157 aleksis/core/models.py:212 +#: aleksis/core/models.py:541 msgid "Photo" msgstr "" #: aleksis/core/forms.py:199 aleksis/core/forms.py:202 -#: aleksis/core/models.py:77 +#: aleksis/core/models.py:79 msgid "Date" msgstr "Date" #: aleksis/core/forms.py:200 aleksis/core/forms.py:203 -#: aleksis/core/models.py:85 +#: aleksis/core/models.py:87 msgid "Time" msgstr "" @@ -213,11 +231,11 @@ msgstr "" msgid "Please enter your invitation code." msgstr "" -#: aleksis/core/forms.py:418 aleksis/core/models.py:185 +#: aleksis/core/forms.py:418 aleksis/core/models.py:187 msgid "First name" msgstr "Prénom" -#: aleksis/core/forms.py:419 aleksis/core/models.py:186 +#: aleksis/core/forms.py:419 aleksis/core/models.py:188 msgid "Last name" msgstr "Nom de famille" @@ -250,7 +268,7 @@ msgid "You must grant the permission to all objects and/or to some objects." msgstr "" #: aleksis/core/forms.py:586 -msgid "Adress data" +msgid "Address data" msgstr "" #: aleksis/core/forms.py:598 @@ -299,95 +317,88 @@ msgstr "" msgid "No backup result found!" msgstr "" -#: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6 +#: aleksis/core/menus.py:7 aleksis/core/templates/two_factor/core/login.html:6 #: aleksis/core/templates/two_factor/core/login.html:32 #: aleksis/core/templates/two_factor/core/login.html:95 msgid "Login" msgstr "" -#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:22 +#: aleksis/core/menus.py:13 aleksis/core/templates/account/signup.html:22 #: aleksis/core/templates/socialaccount/signup.html:23 msgid "Sign up" msgstr "" -#: aleksis/core/menus.py:24 aleksis/core/templates/invitations/enter.html:7 +#: aleksis/core/menus.py:22 aleksis/core/templates/invitations/enter.html:7 msgid "Accept invitation" msgstr "" -#: aleksis/core/menus.py:33 +#: aleksis/core/menus.py:31 msgid "Dashboard" msgstr "" -#: aleksis/core/menus.py:41 aleksis/core/models.py:765 -#: aleksis/core/preferences.py:29 aleksis/core/templates/core/base.html:81 -#: aleksis/core/templates/core/notifications.html:4 -#: aleksis/core/templates/core/notifications.html:5 -msgid "Notifications" -msgstr "" - -#: aleksis/core/menus.py:53 +#: aleksis/core/menus.py:39 msgid "Admin" msgstr "" -#: aleksis/core/menus.py:61 aleksis/core/models.py:865 +#: aleksis/core/menus.py:47 aleksis/core/models.py:867 #: aleksis/core/templates/core/announcement/list.html:7 #: aleksis/core/templates/core/announcement/list.html:8 msgid "Announcements" msgstr "" -#: aleksis/core/menus.py:72 aleksis/core/models.py:135 +#: aleksis/core/menus.py:58 aleksis/core/models.py:137 #: aleksis/core/templates/core/school_term/list.html:8 #: aleksis/core/templates/core/school_term/list.html:9 msgid "School terms" msgstr "" -#: aleksis/core/menus.py:83 +#: aleksis/core/menus.py:69 #: aleksis/core/templates/core/dashboard_widget/list.html:8 #: aleksis/core/templates/core/dashboard_widget/list.html:9 msgid "Dashboard widgets" msgstr "" -#: aleksis/core/menus.py:94 +#: aleksis/core/menus.py:80 #: aleksis/core/templates/core/management/data_management.html:6 #: aleksis/core/templates/core/management/data_management.html:7 msgid "Data management" msgstr "" -#: aleksis/core/menus.py:105 +#: aleksis/core/menus.py:91 #: aleksis/core/templates/core/pages/system_status.html:5 #: aleksis/core/templates/core/pages/system_status.html:7 msgid "System status" msgstr "" -#: aleksis/core/menus.py:116 +#: aleksis/core/menus.py:102 msgid "Configuration" msgstr "" -#: aleksis/core/menus.py:127 aleksis/core/templates/core/data_check/list.html:9 +#: aleksis/core/menus.py:113 aleksis/core/templates/core/data_check/list.html:9 #: aleksis/core/templates/core/data_check/list.html:10 msgid "Data checks" msgstr "" -#: aleksis/core/menus.py:133 aleksis/core/templates/core/perms/list.html:13 +#: aleksis/core/menus.py:119 aleksis/core/templates/core/perms/list.html:13 #: aleksis/core/templates/core/perms/list.html:14 msgid "Manage permissions" msgstr "" -#: aleksis/core/menus.py:144 +#: aleksis/core/menus.py:130 msgid "Backend Admin" msgstr "" -#: aleksis/core/menus.py:152 +#: aleksis/core/menus.py:138 #: aleksis/core/templates/oauth2_provider/application/list.html:5 #: aleksis/core/templates/oauth2_provider/application/list.html:6 msgid "OAuth2 Applications" msgstr "" -#: aleksis/core/menus.py:165 +#: aleksis/core/menus.py:151 msgid "People" msgstr "" -#: aleksis/core/menus.py:196 aleksis/core/models.py:1099 +#: aleksis/core/menus.py:182 aleksis/core/models.py:1101 #: aleksis/core/templates/core/group_type/list.html:8 #: aleksis/core/templates/core/group_type/list.html:9 #, fuzzy @@ -395,46 +406,46 @@ msgstr "" msgid "Group types" msgstr "Groupe" -#: aleksis/core/menus.py:207 +#: aleksis/core/menus.py:193 msgid "Groups and child groups" msgstr "" -#: aleksis/core/menus.py:218 aleksis/core/models.py:535 +#: aleksis/core/menus.py:204 aleksis/core/models.py:537 #: aleksis/core/templates/core/additional_field/list.html:8 #: aleksis/core/templates/core/additional_field/list.html:9 msgid "Additional fields" msgstr "" -#: aleksis/core/menus.py:229 +#: aleksis/core/menus.py:215 #, fuzzy #| msgid "Contact details" msgid "Invite person" msgstr "Détails de contact" -#: aleksis/core/menus.py:242 +#: aleksis/core/menus.py:228 #: aleksis/core/templates/core/group/child_groups.html:7 #: aleksis/core/templates/core/group/child_groups.html:9 msgid "Assign child groups to groups" msgstr "" -#: aleksis/core/menus.py:254 +#: aleksis/core/menus.py:240 msgid "Stop impersonation" msgstr "" -#: aleksis/core/menus.py:263 +#: aleksis/core/menus.py:249 msgid "Account" msgstr "" -#: aleksis/core/menus.py:272 +#: aleksis/core/menus.py:258 #: aleksis/core/templates/dynamic_preferences/form.html:5 msgid "Preferences" msgstr "" -#: aleksis/core/menus.py:281 +#: aleksis/core/menus.py:267 msgid "2FA" msgstr "" -#: aleksis/core/menus.py:289 +#: aleksis/core/menus.py:275 #: aleksis/core/templates/account/password_change.html:5 #: aleksis/core/templates/account/password_change.html:6 #: aleksis/core/templates/account/password_change.html:19 @@ -446,17 +457,21 @@ msgstr "" msgid "Change password" msgstr "" -#: aleksis/core/menus.py:301 +#: aleksis/core/menus.py:287 msgid "Third-party accounts" msgstr "" -#: aleksis/core/menus.py:310 +#: aleksis/core/menus.py:296 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6 msgid "Authorized applications" msgstr "" -#: aleksis/core/menus.py:320 +#: aleksis/core/menus.py:305 +msgid "Calendar Feeds" +msgstr "" + +#: aleksis/core/menus.py:318 msgid "Logout" msgstr "" @@ -464,597 +479,622 @@ msgstr "" msgid "Linked school term" msgstr "" -#: aleksis/core/models.py:75 +#: aleksis/core/models.py:77 msgid "Boolean (Yes/No)" msgstr "" -#: aleksis/core/models.py:76 +#: aleksis/core/models.py:78 msgid "Text (one line)" msgstr "" -#: aleksis/core/models.py:78 +#: aleksis/core/models.py:80 msgid "Date and time" msgstr "" -#: aleksis/core/models.py:79 +#: aleksis/core/models.py:81 msgid "Decimal number" msgstr "" -#: aleksis/core/models.py:80 aleksis/core/models.py:203 +#: aleksis/core/models.py:82 aleksis/core/models.py:205 msgid "E-mail address" msgstr "" -#: aleksis/core/models.py:81 +#: aleksis/core/models.py:83 msgid "Integer" msgstr "" -#: aleksis/core/models.py:82 +#: aleksis/core/models.py:84 msgid "IP address" msgstr "" -#: aleksis/core/models.py:83 +#: aleksis/core/models.py:85 msgid "Boolean or empty (Yes/No/Neither)" msgstr "" -#: aleksis/core/models.py:84 +#: aleksis/core/models.py:86 msgid "Text (multi-line)" msgstr "" -#: aleksis/core/models.py:86 +#: aleksis/core/models.py:88 msgid "URL / Link" msgstr "" -#: aleksis/core/models.py:98 aleksis/core/models.py:1068 +#: aleksis/core/models.py:100 aleksis/core/models.py:1070 +#: aleksis/core/models.py:1374 msgid "Name" msgstr "" -#: aleksis/core/models.py:100 +#: aleksis/core/models.py:102 #, fuzzy #| msgid "Contact details" msgid "Start date" msgstr "Détails de contact" -#: aleksis/core/models.py:101 +#: aleksis/core/models.py:103 msgid "End date" msgstr "" -#: aleksis/core/models.py:120 +#: aleksis/core/models.py:122 msgid "The start date must be earlier than the end date." msgstr "" -#: aleksis/core/models.py:127 +#: aleksis/core/models.py:129 msgid "There is already a school term for this time or a part of this time." msgstr "" -#: aleksis/core/models.py:156 aleksis/core/models.py:1017 +#: aleksis/core/models.py:158 aleksis/core/models.py:1019 +#: aleksis/core/models.py:1371 msgid "Person" msgstr "Personne" -#: aleksis/core/models.py:159 +#: aleksis/core/models.py:161 #, fuzzy #| msgid "Contact details" msgid "Can view address" msgstr "Détails de contact" -#: aleksis/core/models.py:160 +#: aleksis/core/models.py:162 #, fuzzy #| msgid "Contact details" msgid "Can view contact details" msgstr "Détails de contact" -#: aleksis/core/models.py:161 +#: aleksis/core/models.py:163 #, fuzzy #| msgid "Contact details" msgid "Can view photo" msgstr "Détails de contact" -#: aleksis/core/models.py:162 +#: aleksis/core/models.py:164 #, fuzzy #| msgid "Contact details" msgid "Can view avatar image" msgstr "Détails de contact" -#: aleksis/core/models.py:163 +#: aleksis/core/models.py:165 #, fuzzy #| msgid "Contact details" msgid "Can view persons groups" msgstr "Détails de contact" -#: aleksis/core/models.py:164 +#: aleksis/core/models.py:166 #, fuzzy #| msgid "Contact details" msgid "Can view personal details" msgstr "Détails de contact" -#: aleksis/core/models.py:174 +#: aleksis/core/models.py:176 msgid "female" msgstr "" -#: aleksis/core/models.py:174 +#: aleksis/core/models.py:176 msgid "male" msgstr "" -#: aleksis/core/models.py:182 aleksis/core/models.py:1271 +#: aleksis/core/models.py:184 aleksis/core/models.py:1273 msgid "Linked user" msgstr "" -#: aleksis/core/models.py:188 +#: aleksis/core/models.py:190 msgid "Additional name(s)" msgstr "" -#: aleksis/core/models.py:192 aleksis/core/models.py:504 +#: aleksis/core/models.py:194 aleksis/core/models.py:506 #, fuzzy #| msgid "First name" msgid "Short name" msgstr "Prénom" -#: aleksis/core/models.py:195 +#: aleksis/core/models.py:197 msgid "Street" msgstr "" -#: aleksis/core/models.py:196 +#: aleksis/core/models.py:198 msgid "Street number" msgstr "" -#: aleksis/core/models.py:197 +#: aleksis/core/models.py:199 msgid "Postal code" msgstr "" -#: aleksis/core/models.py:198 +#: aleksis/core/models.py:200 msgid "Place" msgstr "" -#: aleksis/core/models.py:200 aleksis/core/templates/core/person/full.html:160 +#: aleksis/core/models.py:202 aleksis/core/templates/core/person/full.html:160 msgid "Home phone" msgstr "" -#: aleksis/core/models.py:201 aleksis/core/templates/core/person/full.html:170 +#: aleksis/core/models.py:203 aleksis/core/templates/core/person/full.html:170 msgid "Mobile phone" msgstr "" -#: aleksis/core/models.py:205 +#: aleksis/core/models.py:207 msgid "Date of birth" msgstr "Date d'anniversaire" -#: aleksis/core/models.py:206 +#: aleksis/core/models.py:208 #, fuzzy #| msgid "Date of birth" msgid "Place of birth" msgstr "Date d'anniversaire" -#: aleksis/core/models.py:207 +#: aleksis/core/models.py:209 msgid "Sex" msgstr "Sexe" -#: aleksis/core/models.py:214 aleksis/core/models.py:543 +#: aleksis/core/models.py:216 aleksis/core/models.py:545 msgid "This is an official photo, used for official documents and for internal use cases." msgstr "" -#: aleksis/core/models.py:219 aleksis/core/models.py:547 +#: aleksis/core/models.py:221 aleksis/core/models.py:549 msgid "Display picture / Avatar" msgstr "" -#: aleksis/core/models.py:222 aleksis/core/models.py:550 +#: aleksis/core/models.py:224 aleksis/core/models.py:552 msgid "This is a picture or an avatar for public display." msgstr "" -#: aleksis/core/models.py:227 aleksis/core/templates/core/person/full.html:235 +#: aleksis/core/models.py:229 aleksis/core/templates/core/person/full.html:235 msgid "Guardians / Parents" msgstr "" -#: aleksis/core/models.py:234 +#: aleksis/core/models.py:236 msgid "Primary group" msgstr "" -#: aleksis/core/models.py:237 aleksis/core/models.py:717 -#: aleksis/core/models.py:741 aleksis/core/models.py:832 -#: aleksis/core/models.py:1092 +#: aleksis/core/models.py:239 aleksis/core/models.py:719 +#: aleksis/core/models.py:743 aleksis/core/models.py:834 +#: aleksis/core/models.py:1094 msgid "Description" msgstr "Description" -#: aleksis/core/models.py:457 +#: aleksis/core/models.py:459 msgid "Title of field" msgstr "" -#: aleksis/core/models.py:459 +#: aleksis/core/models.py:461 msgid "Type of field" msgstr "" -#: aleksis/core/models.py:461 +#: aleksis/core/models.py:463 msgid "Required" msgstr "" -#: aleksis/core/models.py:462 +#: aleksis/core/models.py:464 #, fuzzy #| msgid "Description" msgid "Help text / description" msgstr "Description" -#: aleksis/core/models.py:468 +#: aleksis/core/models.py:470 msgid "Addtitional field for groups" msgstr "" -#: aleksis/core/models.py:469 +#: aleksis/core/models.py:471 msgid "Addtitional fields for groups" msgstr "" -#: aleksis/core/models.py:489 +#: aleksis/core/models.py:491 msgid "Can assign child groups to groups" msgstr "" -#: aleksis/core/models.py:490 +#: aleksis/core/models.py:492 #, fuzzy #| msgid "Contact details" msgid "Can view statistics about group." msgstr "Détails de contact" -#: aleksis/core/models.py:502 +#: aleksis/core/models.py:504 #, fuzzy #| msgid "Last name" msgid "Long name" msgstr "Nom de famille" -#: aleksis/core/models.py:512 aleksis/core/templates/core/group/full.html:85 +#: aleksis/core/models.py:514 aleksis/core/templates/core/group/full.html:85 msgid "Members" msgstr "" -#: aleksis/core/models.py:515 aleksis/core/templates/core/group/full.html:82 +#: aleksis/core/models.py:517 aleksis/core/templates/core/group/full.html:82 msgid "Owners" msgstr "Propriétaires" -#: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:55 +#: aleksis/core/models.py:524 aleksis/core/templates/core/group/full.html:55 msgid "Parent groups" msgstr "" -#: aleksis/core/models.py:530 +#: aleksis/core/models.py:532 msgid "Type of group" msgstr "" -#: aleksis/core/models.py:716 aleksis/core/models.py:740 -#: aleksis/core/models.py:831 +#: aleksis/core/models.py:718 aleksis/core/models.py:742 +#: aleksis/core/models.py:833 #: aleksis/core/templates/core/announcement/list.html:18 msgid "Title" msgstr "" -#: aleksis/core/models.py:719 +#: aleksis/core/models.py:721 msgid "Application" msgstr "" -#: aleksis/core/models.py:725 +#: aleksis/core/models.py:727 msgid "Activity" msgstr "" -#: aleksis/core/models.py:726 +#: aleksis/core/models.py:728 msgid "Activities" msgstr "" -#: aleksis/core/models.py:732 +#: aleksis/core/models.py:734 msgid "Sender" msgstr "" -#: aleksis/core/models.py:737 +#: aleksis/core/models.py:739 msgid "Recipient" msgstr "" -#: aleksis/core/models.py:742 aleksis/core/models.py:1069 +#: aleksis/core/models.py:744 aleksis/core/models.py:1071 msgid "Link" msgstr "" -#: aleksis/core/models.py:744 +#: aleksis/core/models.py:746 msgid "Send notification at" msgstr "" -#: aleksis/core/models.py:746 +#: aleksis/core/models.py:748 msgid "Read" msgstr "" -#: aleksis/core/models.py:747 +#: aleksis/core/models.py:749 msgid "Sent" msgstr "" -#: aleksis/core/models.py:764 +#: aleksis/core/models.py:766 msgid "Notification" msgstr "" -#: aleksis/core/models.py:833 +#: aleksis/core/models.py:767 aleksis/core/preferences.py:29 +#: aleksis/core/templates/core/base.html:81 +#: aleksis/core/templates/core/notifications.html:4 +#: aleksis/core/templates/core/notifications.html:5 +msgid "Notifications" +msgstr "" + +#: aleksis/core/models.py:835 msgid "Link to detailed view" msgstr "" -#: aleksis/core/models.py:836 +#: aleksis/core/models.py:838 msgid "Date and time from when to show" msgstr "" -#: aleksis/core/models.py:839 +#: aleksis/core/models.py:841 msgid "Date and time until when to show" msgstr "" -#: aleksis/core/models.py:864 +#: aleksis/core/models.py:866 msgid "Announcement" msgstr "" -#: aleksis/core/models.py:902 +#: aleksis/core/models.py:904 msgid "Announcement recipient" msgstr "" -#: aleksis/core/models.py:903 +#: aleksis/core/models.py:905 msgid "Announcement recipients" msgstr "" -#: aleksis/core/models.py:925 +#: aleksis/core/models.py:927 msgid "Widget Title" msgstr "" -#: aleksis/core/models.py:926 +#: aleksis/core/models.py:928 msgid "Activate Widget" msgstr "" -#: aleksis/core/models.py:927 +#: aleksis/core/models.py:929 msgid "Widget is broken" msgstr "" -#: aleksis/core/models.py:930 +#: aleksis/core/models.py:932 msgid "Size on mobile devices" msgstr "" -#: aleksis/core/models.py:931 +#: aleksis/core/models.py:933 msgid "<= 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:936 +#: aleksis/core/models.py:938 msgid "Size on tablet devices" msgstr "" -#: aleksis/core/models.py:937 +#: aleksis/core/models.py:939 msgid "> 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:942 +#: aleksis/core/models.py:944 msgid "Size on desktop devices" msgstr "" -#: aleksis/core/models.py:943 +#: aleksis/core/models.py:945 msgid "> 992 px, 12 columns" msgstr "" -#: aleksis/core/models.py:948 +#: aleksis/core/models.py:950 msgid "Size on large desktop devices" msgstr "" -#: aleksis/core/models.py:949 +#: aleksis/core/models.py:951 msgid "> 1200 px>, 12 columns" msgstr "" -#: aleksis/core/models.py:980 +#: aleksis/core/models.py:982 msgid "Can edit default dashboard" msgstr "" -#: aleksis/core/models.py:981 +#: aleksis/core/models.py:983 msgid "Dashboard Widget" msgstr "" -#: aleksis/core/models.py:982 +#: aleksis/core/models.py:984 msgid "Dashboard Widgets" msgstr "" -#: aleksis/core/models.py:988 +#: aleksis/core/models.py:990 msgid "URL" msgstr "" -#: aleksis/core/models.py:989 +#: aleksis/core/models.py:991 msgid "Icon URL" msgstr "" -#: aleksis/core/models.py:995 +#: aleksis/core/models.py:997 msgid "External link widget" msgstr "" -#: aleksis/core/models.py:996 +#: aleksis/core/models.py:998 msgid "External link widgets" msgstr "" -#: aleksis/core/models.py:1002 +#: aleksis/core/models.py:1004 msgid "Content" msgstr "" -#: aleksis/core/models.py:1008 +#: aleksis/core/models.py:1010 msgid "Static content widget" msgstr "" -#: aleksis/core/models.py:1009 +#: aleksis/core/models.py:1011 msgid "Static content widgets" msgstr "" -#: aleksis/core/models.py:1014 +#: aleksis/core/models.py:1016 msgid "Dashboard widget" msgstr "" -#: aleksis/core/models.py:1019 +#: aleksis/core/models.py:1021 msgid "Order" msgstr "" -#: aleksis/core/models.py:1020 +#: aleksis/core/models.py:1022 msgid "Part of the default dashboard" msgstr "" -#: aleksis/core/models.py:1035 +#: aleksis/core/models.py:1037 msgid "Dashboard widget order" msgstr "" -#: aleksis/core/models.py:1036 +#: aleksis/core/models.py:1038 msgid "Dashboard widget orders" msgstr "" -#: aleksis/core/models.py:1042 +#: aleksis/core/models.py:1044 msgid "Menu ID" msgstr "" -#: aleksis/core/models.py:1055 +#: aleksis/core/models.py:1057 msgid "Custom menu" msgstr "" -#: aleksis/core/models.py:1056 +#: aleksis/core/models.py:1058 msgid "Custom menus" msgstr "" -#: aleksis/core/models.py:1066 +#: aleksis/core/models.py:1068 msgid "Menu" msgstr "" -#: aleksis/core/models.py:1070 aleksis/core/models.py:1318 +#: aleksis/core/models.py:1072 aleksis/core/models.py:1320 #: aleksis/core/templates/oauth2_provider/application/detail.html:26 msgid "Icon" msgstr "" -#: aleksis/core/models.py:1076 +#: aleksis/core/models.py:1078 msgid "Custom menu item" msgstr "" -#: aleksis/core/models.py:1077 +#: aleksis/core/models.py:1079 msgid "Custom menu items" msgstr "" -#: aleksis/core/models.py:1091 +#: aleksis/core/models.py:1093 msgid "Title of type" msgstr "" -#: aleksis/core/models.py:1098 aleksis/core/templates/core/group/full.html:47 +#: aleksis/core/models.py:1100 aleksis/core/templates/core/group/full.html:47 #, fuzzy #| msgid "Group" msgid "Group type" msgstr "Groupe" -#: aleksis/core/models.py:1112 +#: aleksis/core/models.py:1114 #, fuzzy #| msgid "Contact details" msgid "Can view system status" msgstr "Détails de contact" -#: aleksis/core/models.py:1113 +#: aleksis/core/models.py:1115 msgid "Can manage data" msgstr "" -#: aleksis/core/models.py:1114 +#: aleksis/core/models.py:1116 #, fuzzy #| msgid "Contact details" msgid "Can impersonate" msgstr "Détails de contact" -#: aleksis/core/models.py:1115 +#: aleksis/core/models.py:1117 msgid "Can use search" msgstr "" -#: aleksis/core/models.py:1116 +#: aleksis/core/models.py:1118 msgid "Can change site preferences" msgstr "" -#: aleksis/core/models.py:1117 +#: aleksis/core/models.py:1119 msgid "Can change person preferences" msgstr "" -#: aleksis/core/models.py:1118 +#: aleksis/core/models.py:1120 msgid "Can change group preferences" msgstr "" -#: aleksis/core/models.py:1119 +#: aleksis/core/models.py:1121 msgid "Can test PDF generation" msgstr "" -#: aleksis/core/models.py:1120 +#: aleksis/core/models.py:1122 #, fuzzy #| msgid "Contact details" msgid "Can invite persons" msgstr "Détails de contact" -#: aleksis/core/models.py:1156 +#: aleksis/core/models.py:1158 msgid "Related data check task" msgstr "" -#: aleksis/core/models.py:1164 +#: aleksis/core/models.py:1166 msgid "Issue solved" msgstr "" -#: aleksis/core/models.py:1165 +#: aleksis/core/models.py:1167 msgid "Notification sent" msgstr "" -#: aleksis/core/models.py:1178 +#: aleksis/core/models.py:1180 msgid "Data check result" msgstr "" -#: aleksis/core/models.py:1179 +#: aleksis/core/models.py:1181 msgid "Data check results" msgstr "" -#: aleksis/core/models.py:1181 +#: aleksis/core/models.py:1183 msgid "Can run data checks" msgstr "" -#: aleksis/core/models.py:1182 +#: aleksis/core/models.py:1184 msgid "Can solve data check problems" msgstr "" -#: aleksis/core/models.py:1189 +#: aleksis/core/models.py:1191 #, fuzzy #| msgid "Contact details" msgid "E-Mail address" msgstr "Détails de contact" -#: aleksis/core/models.py:1221 +#: aleksis/core/models.py:1223 #, fuzzy #| msgid "Owners" msgid "Owner" msgstr "Propriétaires" -#: aleksis/core/models.py:1225 +#: aleksis/core/models.py:1227 msgid "File expires at" msgstr "" -#: aleksis/core/models.py:1227 +#: aleksis/core/models.py:1229 msgid "Generated HTML file" msgstr "" -#: aleksis/core/models.py:1229 +#: aleksis/core/models.py:1231 msgid "Generated PDF file" msgstr "" -#: aleksis/core/models.py:1236 +#: aleksis/core/models.py:1238 msgid "PDF file" msgstr "" -#: aleksis/core/models.py:1237 +#: aleksis/core/models.py:1239 msgid "PDF files" msgstr "" -#: aleksis/core/models.py:1242 +#: aleksis/core/models.py:1244 msgid "Task result" msgstr "" -#: aleksis/core/models.py:1245 +#: aleksis/core/models.py:1247 msgid "Task user" msgstr "" -#: aleksis/core/models.py:1257 +#: aleksis/core/models.py:1259 msgid "Task user assignment" msgstr "" -#: aleksis/core/models.py:1258 +#: aleksis/core/models.py:1260 msgid "Task user assignments" msgstr "" -#: aleksis/core/models.py:1274 +#: aleksis/core/models.py:1276 #, fuzzy #| msgid "Contact details" msgid "Additional attributes" msgstr "Détails de contact" -#: aleksis/core/models.py:1312 +#: aleksis/core/models.py:1314 msgid "Allowed scopes that clients can request" msgstr "" -#: aleksis/core/models.py:1322 +#: aleksis/core/models.py:1324 msgid "This image will be shown as icon in the authorization flow. It should be squared." msgstr "" +#: aleksis/core/models.py:1373 +msgid "UUID" +msgstr "" + +#: aleksis/core/models.py:1377 +msgid "Selected ICal feed" +msgstr "" + +#: aleksis/core/models.py:1386 +msgid "Personal Calendar URL" +msgstr "" + +#: aleksis/core/models.py:1387 +msgid "Personal Calendar URLs" +msgstr "" + #: aleksis/core/preferences.py:25 msgid "General" msgstr "" @@ -1587,7 +1627,7 @@ msgid "Publish new announcement" msgstr "" #: aleksis/core/templates/core/announcement/form.html:34 -msgid "Save und publish announcement" +msgid "Save and publish announcement" msgstr "" #: aleksis/core/templates/core/announcement/list.html:19 @@ -1899,6 +1939,40 @@ msgstr "Groupe" msgid "Create group type" msgstr "Groupe" +#: aleksis/core/templates/core/ical/ical_create.html:4 +#: aleksis/core/templates/core/ical/ical_create.html:5 +#: aleksis/core/templates/core/ical/ical_list.html:12 +msgid "Create iCal URL" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_create.html:16 +#: aleksis/core/templates/core/ical/ical_edit.html:16 +#: aleksis/core/templates/oauth2_provider/application/create.html:14 +#: aleksis/core/templates/oauth2_provider/application/edit.html:14 +#: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:24 +#: aleksis/core/templates/two_factor/_wizard_actions.html:6 +msgid "Cancel" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_edit.html:4 +#: aleksis/core/templates/core/ical/ical_edit.html:5 +#, python-format +msgid "Edit iCal URL %(object)s" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_list.html:4 +#: aleksis/core/templates/core/ical/ical_list.html:5 +msgid "ICal Feeds" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_list.html:8 +msgid "These are URLs for different Calendar Feeds in the iCal (.ics) format. You can create as many as you want and import them in your calendar software." +msgstr "" + +#: aleksis/core/templates/core/ical/ical_list.html:14 +msgid "Your iCal URLs" +msgstr "" + #: aleksis/core/templates/core/index.html:4 msgid "Home" msgstr "" @@ -2387,13 +2461,6 @@ msgstr "" msgid "Register OAuth2 Application" msgstr "Détails de contact" -#: aleksis/core/templates/oauth2_provider/application/create.html:14 -#: aleksis/core/templates/oauth2_provider/application/edit.html:14 -#: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:24 -#: aleksis/core/templates/two_factor/_wizard_actions.html:6 -msgid "Cancel" -msgstr "" - #: aleksis/core/templates/oauth2_provider/application/detail.html:5 #, fuzzy #| msgid "Contact details" @@ -3127,162 +3194,174 @@ msgstr "" msgid "Download PDF" msgstr "" -#: aleksis/core/views.py:289 +#: aleksis/core/views.py:292 msgid "The school term has been created." msgstr "" -#: aleksis/core/views.py:301 +#: aleksis/core/views.py:304 msgid "The school term has been saved." msgstr "" -#: aleksis/core/views.py:421 +#: aleksis/core/views.py:424 msgid "The child groups were successfully saved." msgstr "" -#: aleksis/core/views.py:440 aleksis/core/views.py:450 +#: aleksis/core/views.py:443 aleksis/core/views.py:453 msgid "The person has been saved." msgstr "" -#: aleksis/core/views.py:500 +#: aleksis/core/views.py:503 msgid "The group has been saved." msgstr "" -#: aleksis/core/views.py:597 +#: aleksis/core/views.py:600 msgid "The announcement has been saved." msgstr "" -#: aleksis/core/views.py:613 +#: aleksis/core/views.py:616 msgid "The announcement has been deleted." msgstr "" -#: aleksis/core/views.py:681 +#: aleksis/core/views.py:684 msgid "The requested preference registry does not exist" msgstr "" -#: aleksis/core/views.py:700 +#: aleksis/core/views.py:703 msgid "The preferences have been saved successfully." msgstr "" -#: aleksis/core/views.py:724 +#: aleksis/core/views.py:727 msgid "The person has been deleted." msgstr "" -#: aleksis/core/views.py:738 +#: aleksis/core/views.py:741 msgid "The group has been deleted." msgstr "" -#: aleksis/core/views.py:770 +#: aleksis/core/views.py:773 msgid "The additional_field has been saved." msgstr "" -#: aleksis/core/views.py:804 +#: aleksis/core/views.py:807 msgid "The additional field has been deleted." msgstr "" -#: aleksis/core/views.py:829 +#: aleksis/core/views.py:832 msgid "The group type has been saved." msgstr "" -#: aleksis/core/views.py:859 +#: aleksis/core/views.py:862 msgid "The group type has been deleted." msgstr "" -#: aleksis/core/views.py:892 +#: aleksis/core/views.py:895 msgid "Progress: Run data checks" msgstr "" -#: aleksis/core/views.py:893 +#: aleksis/core/views.py:896 msgid "Run data checks …" msgstr "" -#: aleksis/core/views.py:894 +#: aleksis/core/views.py:897 msgid "The data checks were run successfully." msgstr "" -#: aleksis/core/views.py:895 +#: aleksis/core/views.py:898 msgid "There was a problem while running data checks." msgstr "" -#: aleksis/core/views.py:911 +#: aleksis/core/views.py:914 #, python-brace-format msgid "The solve option '{solve_option_obj.verbose_name}' " msgstr "" -#: aleksis/core/views.py:921 +#: aleksis/core/views.py:924 msgid "The requested solve option does not exist" msgstr "" -#: aleksis/core/views.py:953 +#: aleksis/core/views.py:956 msgid "The dashboard widget has been saved." msgstr "" -#: aleksis/core/views.py:983 +#: aleksis/core/views.py:986 msgid "The dashboard widget has been created." msgstr "" -#: aleksis/core/views.py:993 +#: aleksis/core/views.py:996 msgid "The dashboard widget has been deleted." msgstr "" -#: aleksis/core/views.py:1064 +#: aleksis/core/views.py:1067 msgid "Your dashboard configuration has been saved successfully." msgstr "" -#: aleksis/core/views.py:1066 +#: aleksis/core/views.py:1069 msgid "The configuration of the default dashboard has been saved successfully." msgstr "" -#: aleksis/core/views.py:1142 +#: aleksis/core/views.py:1145 #, python-brace-format msgid "The invitation was successfully created. The invitation code is {code}" msgstr "" -#: aleksis/core/views.py:1233 +#: aleksis/core/views.py:1236 msgid "We have successfully assigned the permissions." msgstr "" -#: aleksis/core/views.py:1243 +#: aleksis/core/views.py:1246 msgid "The global user permission has been deleted." msgstr "" -#: aleksis/core/views.py:1253 +#: aleksis/core/views.py:1256 msgid "The global group permission has been deleted." msgstr "" -#: aleksis/core/views.py:1263 +#: aleksis/core/views.py:1266 msgid "The object user permission has been deleted." msgstr "" -#: aleksis/core/views.py:1273 +#: aleksis/core/views.py:1276 msgid "The object group permission has been deleted." msgstr "" -#: aleksis/core/views.py:1341 +#: aleksis/core/views.py:1344 msgid "The requested PDF file does not exist" msgstr "" -#: aleksis/core/views.py:1350 aleksis/core/views.py:1354 +#: aleksis/core/views.py:1353 aleksis/core/views.py:1357 msgid "The requested task does not exist or is not accessible" msgstr "" -#: aleksis/core/views.py:1406 +#: aleksis/core/views.py:1409 msgid "The third-party account could not be disconnected because it is the only login method available." msgstr "" -#: aleksis/core/views.py:1413 +#: aleksis/core/views.py:1416 msgid "The third-party account has been successfully disconnected." msgstr "" -#: aleksis/core/views.py:1484 +#: aleksis/core/views.py:1487 msgid "Person was invited successfully and an email with further instructions has been send to them." msgstr "" -#: aleksis/core/views.py:1495 +#: aleksis/core/views.py:1498 #, fuzzy #| msgid "This username is already in use." msgid "Person was already invited." msgstr "Cet nom est deja en utilisation." +#: aleksis/core/views.py:1598 +msgid "ICal feed updated successfully" +msgstr "" + +#: aleksis/core/views.py:1608 +msgid "ICal feed deleted successfully" +msgstr "" + +#: aleksis/core/views.py:1616 +msgid "ICal feed created successfully" +msgstr "" + #, fuzzy #~| msgid "Contact details" #~ msgid "Can link persons to accounts" diff --git a/aleksis/core/locale/fr/LC_MESSAGES/djangojs.po b/aleksis/core/locale/fr/LC_MESSAGES/djangojs.po index 0f31d087d69a8fca9b3573dfa6d977c8459eaf99..8b09ccccb99d662228f56e974bfc374c48e225fa 100644 --- a/aleksis/core/locale/fr/LC_MESSAGES/djangojs.po +++ b/aleksis/core/locale/fr/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-23 11:20+0100\n" +"POT-Creation-Date: 2022-05-24 19:37+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/aleksis/core/locale/la/LC_MESSAGES/django.po b/aleksis/core/locale/la/LC_MESSAGES/django.po index fd7a3aa487f88448c539f5347f5700188a72d270..2d18ad75e75b9e8c18abb297f12c14b2ba21088d 100644 --- a/aleksis/core/locale/la/LC_MESSAGES/django.po +++ b/aleksis/core/locale/la/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-23 11:19+0100\n" +"POT-Creation-Date: 2022-05-24 19:37+0200\n" "PO-Revision-Date: 2020-12-19 12:57+0000\n" "Last-Translator: Julian <leuckerj@gmail.com>\n" "Language-Team: Latin <https://translate.edugit.org/projects/aleksis/aleksis/la/>\n" @@ -44,8 +44,8 @@ msgstr "Inscriptio electronica" msgid "Home and mobile phone" msgstr "Numerus telephoni mobilis" -#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:185 -#: aleksis/core/models.py:487 aleksis/core/templates/core/group/list.html:8 +#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:171 +#: aleksis/core/models.py:489 aleksis/core/templates/core/group/list.html:8 #: aleksis/core/templates/core/group/list.html:9 #: aleksis/core/templates/core/person/full.html:246 msgid "Groups" @@ -74,6 +74,24 @@ msgstr "" msgid "The DashboardWidget was reported broken automatically." msgstr "" +#: aleksis/core/feeds.py:52 +msgid "Birthday Calendar" +msgstr "" + +#: aleksis/core/feeds.py:53 +msgid "A Calendar of Birthdays" +msgstr "" + +#: aleksis/core/feeds.py:66 +#, python-format +msgid "%(name)s's birthday" +msgstr "" + +#: aleksis/core/feeds.py:71 +#, python-format +msgid "%(name)s was born on %(birthday)s" +msgstr "" + #: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:139 #: aleksis/core/templates/core/base.html:140 #: aleksis/core/templates/core/group/list.html:20 @@ -101,11 +119,11 @@ msgstr "" msgid "Content type" msgstr "" -#: aleksis/core/filters.py:113 aleksis/core/models.py:713 +#: aleksis/core/filters.py:113 aleksis/core/models.py:715 msgid "User" msgstr "" -#: aleksis/core/filters.py:135 aleksis/core/models.py:486 +#: aleksis/core/filters.py:135 aleksis/core/models.py:488 msgid "Group" msgstr "Grex" @@ -145,7 +163,7 @@ msgstr "" msgid "This username is already in use." msgstr "" -#: aleksis/core/forms.py:153 aleksis/core/models.py:134 +#: aleksis/core/forms.py:153 aleksis/core/models.py:136 msgid "School term" msgstr "Anus scolae" @@ -156,7 +174,7 @@ msgid "Common data" msgstr "Adminstratio datarum" #: aleksis/core/forms.py:155 aleksis/core/forms.py:207 -#: aleksis/core/menus.py:174 aleksis/core/models.py:157 +#: aleksis/core/menus.py:160 aleksis/core/models.py:159 #: aleksis/core/templates/core/person/list.html:8 #: aleksis/core/templates/core/person/list.html:9 msgid "Persons" @@ -168,18 +186,18 @@ msgstr "personae" msgid "Additional data" msgstr "addita nomines" -#: aleksis/core/forms.py:157 aleksis/core/models.py:210 -#: aleksis/core/models.py:539 +#: aleksis/core/forms.py:157 aleksis/core/models.py:212 +#: aleksis/core/models.py:541 msgid "Photo" msgstr "Photographia" #: aleksis/core/forms.py:199 aleksis/core/forms.py:202 -#: aleksis/core/models.py:77 +#: aleksis/core/models.py:79 msgid "Date" msgstr "dies" #: aleksis/core/forms.py:200 aleksis/core/forms.py:203 -#: aleksis/core/models.py:85 +#: aleksis/core/models.py:87 msgid "Time" msgstr "tempus" @@ -215,11 +233,11 @@ msgstr "" msgid "Please enter your invitation code." msgstr "" -#: aleksis/core/forms.py:418 aleksis/core/models.py:185 +#: aleksis/core/forms.py:418 aleksis/core/models.py:187 msgid "First name" msgstr "Primus nomen" -#: aleksis/core/forms.py:419 aleksis/core/models.py:186 +#: aleksis/core/forms.py:419 aleksis/core/models.py:188 msgid "Last name" msgstr "Secondus nomen" @@ -258,7 +276,7 @@ msgstr "" #: aleksis/core/forms.py:586 #, fuzzy #| msgid "E-mail address" -msgid "Adress data" +msgid "Address data" msgstr "Inscriptio electronica" #: aleksis/core/forms.py:598 @@ -309,51 +327,44 @@ msgstr "" msgid "No backup result found!" msgstr "" -#: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6 +#: aleksis/core/menus.py:7 aleksis/core/templates/two_factor/core/login.html:6 #: aleksis/core/templates/two_factor/core/login.html:32 #: aleksis/core/templates/two_factor/core/login.html:95 msgid "Login" msgstr "nomen profiteri" -#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:22 +#: aleksis/core/menus.py:13 aleksis/core/templates/account/signup.html:22 #: aleksis/core/templates/socialaccount/signup.html:23 msgid "Sign up" msgstr "" -#: aleksis/core/menus.py:24 aleksis/core/templates/invitations/enter.html:7 +#: aleksis/core/menus.py:22 aleksis/core/templates/invitations/enter.html:7 #, fuzzy #| msgid "Edit school information" msgid "Accept invitation" msgstr "Muta informationes scolae" -#: aleksis/core/menus.py:33 +#: aleksis/core/menus.py:31 msgid "Dashboard" msgstr "Forum" -#: aleksis/core/menus.py:41 aleksis/core/models.py:765 -#: aleksis/core/preferences.py:29 aleksis/core/templates/core/base.html:81 -#: aleksis/core/templates/core/notifications.html:4 -#: aleksis/core/templates/core/notifications.html:5 -msgid "Notifications" -msgstr "Nuntii" - -#: aleksis/core/menus.py:53 +#: aleksis/core/menus.py:39 msgid "Admin" msgstr "Administratio" -#: aleksis/core/menus.py:61 aleksis/core/models.py:865 +#: aleksis/core/menus.py:47 aleksis/core/models.py:867 #: aleksis/core/templates/core/announcement/list.html:7 #: aleksis/core/templates/core/announcement/list.html:8 msgid "Announcements" msgstr "Nuntii" -#: aleksis/core/menus.py:72 aleksis/core/models.py:135 +#: aleksis/core/menus.py:58 aleksis/core/models.py:137 #: aleksis/core/templates/core/school_term/list.html:8 #: aleksis/core/templates/core/school_term/list.html:9 msgid "School terms" msgstr "ani scolae" -#: aleksis/core/menus.py:83 +#: aleksis/core/menus.py:69 #: aleksis/core/templates/core/dashboard_widget/list.html:8 #: aleksis/core/templates/core/dashboard_widget/list.html:9 #, fuzzy @@ -361,41 +372,41 @@ msgstr "ani scolae" msgid "Dashboard widgets" msgstr "Forum" -#: aleksis/core/menus.py:94 +#: aleksis/core/menus.py:80 #: aleksis/core/templates/core/management/data_management.html:6 #: aleksis/core/templates/core/management/data_management.html:7 msgid "Data management" msgstr "Adminstratio datarum" -#: aleksis/core/menus.py:105 +#: aleksis/core/menus.py:91 #: aleksis/core/templates/core/pages/system_status.html:5 #: aleksis/core/templates/core/pages/system_status.html:7 msgid "System status" msgstr "Status systemae" -#: aleksis/core/menus.py:116 +#: aleksis/core/menus.py:102 #, fuzzy #| msgid "Notification" msgid "Configuration" msgstr "Nuntius" -#: aleksis/core/menus.py:127 aleksis/core/templates/core/data_check/list.html:9 +#: aleksis/core/menus.py:113 aleksis/core/templates/core/data_check/list.html:9 #: aleksis/core/templates/core/data_check/list.html:10 #, fuzzy #| msgid "System status" msgid "Data checks" msgstr "Status systemae" -#: aleksis/core/menus.py:133 aleksis/core/templates/core/perms/list.html:13 +#: aleksis/core/menus.py:119 aleksis/core/templates/core/perms/list.html:13 #: aleksis/core/templates/core/perms/list.html:14 msgid "Manage permissions" msgstr "" -#: aleksis/core/menus.py:144 +#: aleksis/core/menus.py:130 msgid "Backend Admin" msgstr "" -#: aleksis/core/menus.py:152 +#: aleksis/core/menus.py:138 #: aleksis/core/templates/oauth2_provider/application/list.html:5 #: aleksis/core/templates/oauth2_provider/application/list.html:6 #, fuzzy @@ -403,11 +414,11 @@ msgstr "" msgid "OAuth2 Applications" msgstr "Nuntii" -#: aleksis/core/menus.py:165 +#: aleksis/core/menus.py:151 msgid "People" msgstr "Personae" -#: aleksis/core/menus.py:196 aleksis/core/models.py:1099 +#: aleksis/core/menus.py:182 aleksis/core/models.py:1101 #: aleksis/core/templates/core/group_type/list.html:8 #: aleksis/core/templates/core/group_type/list.html:9 #, fuzzy @@ -415,11 +426,11 @@ msgstr "Personae" msgid "Group types" msgstr "Greges" -#: aleksis/core/menus.py:207 +#: aleksis/core/menus.py:193 msgid "Groups and child groups" msgstr "" -#: aleksis/core/menus.py:218 aleksis/core/models.py:535 +#: aleksis/core/menus.py:204 aleksis/core/models.py:537 #: aleksis/core/templates/core/additional_field/list.html:8 #: aleksis/core/templates/core/additional_field/list.html:9 #, fuzzy @@ -427,36 +438,36 @@ msgstr "" msgid "Additional fields" msgstr "addita nomines" -#: aleksis/core/menus.py:229 +#: aleksis/core/menus.py:215 #, fuzzy #| msgid "Stop impersonation" msgid "Invite person" msgstr "Simulandum aliquem finire" -#: aleksis/core/menus.py:242 +#: aleksis/core/menus.py:228 #: aleksis/core/templates/core/group/child_groups.html:7 #: aleksis/core/templates/core/group/child_groups.html:9 msgid "Assign child groups to groups" msgstr "" -#: aleksis/core/menus.py:254 +#: aleksis/core/menus.py:240 msgid "Stop impersonation" msgstr "Simulandum aliquem finire" -#: aleksis/core/menus.py:263 +#: aleksis/core/menus.py:249 msgid "Account" msgstr "" -#: aleksis/core/menus.py:272 +#: aleksis/core/menus.py:258 #: aleksis/core/templates/dynamic_preferences/form.html:5 msgid "Preferences" msgstr "" -#: aleksis/core/menus.py:281 +#: aleksis/core/menus.py:267 msgid "2FA" msgstr "" -#: aleksis/core/menus.py:289 +#: aleksis/core/menus.py:275 #: aleksis/core/templates/account/password_change.html:5 #: aleksis/core/templates/account/password_change.html:6 #: aleksis/core/templates/account/password_change.html:19 @@ -468,13 +479,13 @@ msgstr "" msgid "Change password" msgstr "" -#: aleksis/core/menus.py:301 +#: aleksis/core/menus.py:287 #, fuzzy #| msgid "Persons and accounts" msgid "Third-party accounts" msgstr "Personae et computi" -#: aleksis/core/menus.py:310 +#: aleksis/core/menus.py:296 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6 #, fuzzy @@ -482,7 +493,11 @@ msgstr "Personae et computi" msgid "Authorized applications" msgstr "Nuntii" -#: aleksis/core/menus.py:320 +#: aleksis/core/menus.py:305 +msgid "Calendar Feeds" +msgstr "" + +#: aleksis/core/menus.py:318 msgid "Logout" msgstr "nomen retractare" @@ -492,629 +507,654 @@ msgstr "nomen retractare" msgid "Linked school term" msgstr "Muta anum scolae" -#: aleksis/core/models.py:75 +#: aleksis/core/models.py:77 msgid "Boolean (Yes/No)" msgstr "" -#: aleksis/core/models.py:76 +#: aleksis/core/models.py:78 msgid "Text (one line)" msgstr "" -#: aleksis/core/models.py:78 +#: aleksis/core/models.py:80 msgid "Date and time" msgstr "Dies et hora" -#: aleksis/core/models.py:79 +#: aleksis/core/models.py:81 msgid "Decimal number" msgstr "" -#: aleksis/core/models.py:80 aleksis/core/models.py:203 +#: aleksis/core/models.py:82 aleksis/core/models.py:205 msgid "E-mail address" msgstr "Inscriptio electronica" -#: aleksis/core/models.py:81 +#: aleksis/core/models.py:83 msgid "Integer" msgstr "" -#: aleksis/core/models.py:82 +#: aleksis/core/models.py:84 #, fuzzy #| msgid "E-mail address" msgid "IP address" msgstr "Inscriptio electronica" -#: aleksis/core/models.py:83 +#: aleksis/core/models.py:85 msgid "Boolean or empty (Yes/No/Neither)" msgstr "" -#: aleksis/core/models.py:84 +#: aleksis/core/models.py:86 msgid "Text (multi-line)" msgstr "" -#: aleksis/core/models.py:86 +#: aleksis/core/models.py:88 msgid "URL / Link" msgstr "" -#: aleksis/core/models.py:98 aleksis/core/models.py:1068 +#: aleksis/core/models.py:100 aleksis/core/models.py:1070 +#: aleksis/core/models.py:1374 msgid "Name" msgstr "Nomen" -#: aleksis/core/models.py:100 +#: aleksis/core/models.py:102 msgid "Start date" msgstr "" -#: aleksis/core/models.py:101 +#: aleksis/core/models.py:103 msgid "End date" msgstr "" -#: aleksis/core/models.py:120 +#: aleksis/core/models.py:122 msgid "The start date must be earlier than the end date." msgstr "" -#: aleksis/core/models.py:127 +#: aleksis/core/models.py:129 msgid "There is already a school term for this time or a part of this time." msgstr "" -#: aleksis/core/models.py:156 aleksis/core/models.py:1017 +#: aleksis/core/models.py:158 aleksis/core/models.py:1019 +#: aleksis/core/models.py:1371 msgid "Person" msgstr "Persona" -#: aleksis/core/models.py:159 +#: aleksis/core/models.py:161 #, fuzzy #| msgid "E-mail address" msgid "Can view address" msgstr "Inscriptio electronica" -#: aleksis/core/models.py:160 +#: aleksis/core/models.py:162 #, fuzzy #| msgid "E-mail address" msgid "Can view contact details" msgstr "Inscriptio electronica" -#: aleksis/core/models.py:161 +#: aleksis/core/models.py:163 #, fuzzy #| msgid "E-mail address" msgid "Can view photo" msgstr "Inscriptio electronica" -#: aleksis/core/models.py:162 +#: aleksis/core/models.py:164 #, fuzzy #| msgid "E-mail address" msgid "Can view avatar image" msgstr "Inscriptio electronica" -#: aleksis/core/models.py:163 +#: aleksis/core/models.py:165 #, fuzzy #| msgid "Persons and accounts" msgid "Can view persons groups" msgstr "Personae et computi" -#: aleksis/core/models.py:164 +#: aleksis/core/models.py:166 #, fuzzy #| msgid "Stop impersonation" msgid "Can view personal details" msgstr "Simulandum aliquem finire" -#: aleksis/core/models.py:174 +#: aleksis/core/models.py:176 msgid "female" msgstr "femininum" -#: aleksis/core/models.py:174 +#: aleksis/core/models.py:176 msgid "male" msgstr "maskulinum" -#: aleksis/core/models.py:182 aleksis/core/models.py:1271 +#: aleksis/core/models.py:184 aleksis/core/models.py:1273 msgid "Linked user" msgstr "" -#: aleksis/core/models.py:188 +#: aleksis/core/models.py:190 msgid "Additional name(s)" msgstr "addita nomines" -#: aleksis/core/models.py:192 aleksis/core/models.py:504 +#: aleksis/core/models.py:194 aleksis/core/models.py:506 msgid "Short name" msgstr "Breve nomen" -#: aleksis/core/models.py:195 +#: aleksis/core/models.py:197 msgid "Street" msgstr "Via" -#: aleksis/core/models.py:196 +#: aleksis/core/models.py:198 msgid "Street number" msgstr "Numerus domini" -#: aleksis/core/models.py:197 +#: aleksis/core/models.py:199 msgid "Postal code" msgstr "Numerus directorius" -#: aleksis/core/models.py:198 +#: aleksis/core/models.py:200 msgid "Place" msgstr "Urbs" -#: aleksis/core/models.py:200 aleksis/core/templates/core/person/full.html:160 +#: aleksis/core/models.py:202 aleksis/core/templates/core/person/full.html:160 msgid "Home phone" msgstr "Numerus telephoni domi" -#: aleksis/core/models.py:201 aleksis/core/templates/core/person/full.html:170 +#: aleksis/core/models.py:203 aleksis/core/templates/core/person/full.html:170 msgid "Mobile phone" msgstr "Numerus telephoni mobilis" -#: aleksis/core/models.py:205 +#: aleksis/core/models.py:207 msgid "Date of birth" msgstr "Dies natalis" -#: aleksis/core/models.py:206 +#: aleksis/core/models.py:208 #, fuzzy #| msgid "Date of birth" msgid "Place of birth" msgstr "Dies natalis" -#: aleksis/core/models.py:207 +#: aleksis/core/models.py:209 msgid "Sex" msgstr "Genus" -#: aleksis/core/models.py:214 aleksis/core/models.py:543 +#: aleksis/core/models.py:216 aleksis/core/models.py:545 msgid "This is an official photo, used for official documents and for internal use cases." msgstr "" -#: aleksis/core/models.py:219 aleksis/core/models.py:547 +#: aleksis/core/models.py:221 aleksis/core/models.py:549 msgid "Display picture / Avatar" msgstr "" -#: aleksis/core/models.py:222 aleksis/core/models.py:550 +#: aleksis/core/models.py:224 aleksis/core/models.py:552 msgid "This is a picture or an avatar for public display." msgstr "" -#: aleksis/core/models.py:227 aleksis/core/templates/core/person/full.html:235 +#: aleksis/core/models.py:229 aleksis/core/templates/core/person/full.html:235 msgid "Guardians / Parents" msgstr "Parentes" -#: aleksis/core/models.py:234 +#: aleksis/core/models.py:236 msgid "Primary group" msgstr "" -#: aleksis/core/models.py:237 aleksis/core/models.py:717 -#: aleksis/core/models.py:741 aleksis/core/models.py:832 -#: aleksis/core/models.py:1092 +#: aleksis/core/models.py:239 aleksis/core/models.py:719 +#: aleksis/core/models.py:743 aleksis/core/models.py:834 +#: aleksis/core/models.py:1094 msgid "Description" msgstr "Descriptio" -#: aleksis/core/models.py:457 +#: aleksis/core/models.py:459 msgid "Title of field" msgstr "" -#: aleksis/core/models.py:459 +#: aleksis/core/models.py:461 msgid "Type of field" msgstr "" -#: aleksis/core/models.py:461 +#: aleksis/core/models.py:463 msgid "Required" msgstr "" -#: aleksis/core/models.py:462 +#: aleksis/core/models.py:464 #, fuzzy #| msgid "Site description" msgid "Help text / description" msgstr "Descriptio paginae" -#: aleksis/core/models.py:468 +#: aleksis/core/models.py:470 #, fuzzy #| msgid "Additional name(s)" msgid "Addtitional field for groups" msgstr "addita nomines" -#: aleksis/core/models.py:469 +#: aleksis/core/models.py:471 #, fuzzy #| msgid "Additional name(s)" msgid "Addtitional fields for groups" msgstr "addita nomines" -#: aleksis/core/models.py:489 +#: aleksis/core/models.py:491 msgid "Can assign child groups to groups" msgstr "" -#: aleksis/core/models.py:490 +#: aleksis/core/models.py:492 #, fuzzy #| msgid "Persons and accounts" msgid "Can view statistics about group." msgstr "Personae et computi" -#: aleksis/core/models.py:502 +#: aleksis/core/models.py:504 #, fuzzy #| msgid "Last name" msgid "Long name" msgstr "Secondus nomen" -#: aleksis/core/models.py:512 aleksis/core/templates/core/group/full.html:85 +#: aleksis/core/models.py:514 aleksis/core/templates/core/group/full.html:85 msgid "Members" msgstr "" -#: aleksis/core/models.py:515 aleksis/core/templates/core/group/full.html:82 +#: aleksis/core/models.py:517 aleksis/core/templates/core/group/full.html:82 msgid "Owners" msgstr "" -#: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:55 +#: aleksis/core/models.py:524 aleksis/core/templates/core/group/full.html:55 msgid "Parent groups" msgstr "" -#: aleksis/core/models.py:530 +#: aleksis/core/models.py:532 msgid "Type of group" msgstr "" -#: aleksis/core/models.py:716 aleksis/core/models.py:740 -#: aleksis/core/models.py:831 +#: aleksis/core/models.py:718 aleksis/core/models.py:742 +#: aleksis/core/models.py:833 #: aleksis/core/templates/core/announcement/list.html:18 msgid "Title" msgstr "Titulus" -#: aleksis/core/models.py:719 +#: aleksis/core/models.py:721 msgid "Application" msgstr "" -#: aleksis/core/models.py:725 +#: aleksis/core/models.py:727 msgid "Activity" msgstr "" -#: aleksis/core/models.py:726 +#: aleksis/core/models.py:728 msgid "Activities" msgstr "" -#: aleksis/core/models.py:732 +#: aleksis/core/models.py:734 msgid "Sender" msgstr "Mittens" -#: aleksis/core/models.py:737 +#: aleksis/core/models.py:739 msgid "Recipient" msgstr "" -#: aleksis/core/models.py:742 aleksis/core/models.py:1069 +#: aleksis/core/models.py:744 aleksis/core/models.py:1071 msgid "Link" msgstr "" -#: aleksis/core/models.py:744 +#: aleksis/core/models.py:746 #, fuzzy #| msgid "Notification" msgid "Send notification at" msgstr "Nuntius" -#: aleksis/core/models.py:746 +#: aleksis/core/models.py:748 msgid "Read" msgstr "" -#: aleksis/core/models.py:747 +#: aleksis/core/models.py:749 msgid "Sent" msgstr "" -#: aleksis/core/models.py:764 +#: aleksis/core/models.py:766 #, fuzzy #| msgid "Notifications" msgid "Notification" msgstr "Nuntii" -#: aleksis/core/models.py:833 +#: aleksis/core/models.py:767 aleksis/core/preferences.py:29 +#: aleksis/core/templates/core/base.html:81 +#: aleksis/core/templates/core/notifications.html:4 +#: aleksis/core/templates/core/notifications.html:5 +msgid "Notifications" +msgstr "Nuntii" + +#: aleksis/core/models.py:835 msgid "Link to detailed view" msgstr "" -#: aleksis/core/models.py:836 +#: aleksis/core/models.py:838 msgid "Date and time from when to show" msgstr "" -#: aleksis/core/models.py:839 +#: aleksis/core/models.py:841 msgid "Date and time until when to show" msgstr "" -#: aleksis/core/models.py:864 +#: aleksis/core/models.py:866 #, fuzzy #| msgid "Announcements" msgid "Announcement" msgstr "Nuntii" -#: aleksis/core/models.py:902 +#: aleksis/core/models.py:904 #, fuzzy #| msgid "Announcements" msgid "Announcement recipient" msgstr "Nuntii" -#: aleksis/core/models.py:903 +#: aleksis/core/models.py:905 #, fuzzy #| msgid "Announcements" msgid "Announcement recipients" msgstr "Nuntii" -#: aleksis/core/models.py:925 +#: aleksis/core/models.py:927 #, fuzzy #| msgid "Site title" msgid "Widget Title" msgstr "Titulus paginae" -#: aleksis/core/models.py:926 +#: aleksis/core/models.py:928 msgid "Activate Widget" msgstr "" -#: aleksis/core/models.py:927 +#: aleksis/core/models.py:929 #, fuzzy #| msgid "Site title" msgid "Widget is broken" msgstr "Titulus paginae" -#: aleksis/core/models.py:930 +#: aleksis/core/models.py:932 msgid "Size on mobile devices" msgstr "" -#: aleksis/core/models.py:931 +#: aleksis/core/models.py:933 msgid "<= 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:936 +#: aleksis/core/models.py:938 msgid "Size on tablet devices" msgstr "" -#: aleksis/core/models.py:937 +#: aleksis/core/models.py:939 msgid "> 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:942 +#: aleksis/core/models.py:944 msgid "Size on desktop devices" msgstr "" -#: aleksis/core/models.py:943 +#: aleksis/core/models.py:945 msgid "> 992 px, 12 columns" msgstr "" -#: aleksis/core/models.py:948 +#: aleksis/core/models.py:950 msgid "Size on large desktop devices" msgstr "" -#: aleksis/core/models.py:949 +#: aleksis/core/models.py:951 msgid "> 1200 px>, 12 columns" msgstr "" -#: aleksis/core/models.py:980 +#: aleksis/core/models.py:982 #, fuzzy #| msgid "Dashboard" msgid "Can edit default dashboard" msgstr "Forum" -#: aleksis/core/models.py:981 +#: aleksis/core/models.py:983 #, fuzzy #| msgid "Dashboard" msgid "Dashboard Widget" msgstr "Forum" -#: aleksis/core/models.py:982 +#: aleksis/core/models.py:984 #, fuzzy #| msgid "Dashboard" msgid "Dashboard Widgets" msgstr "Forum" -#: aleksis/core/models.py:988 +#: aleksis/core/models.py:990 msgid "URL" msgstr "" -#: aleksis/core/models.py:989 +#: aleksis/core/models.py:991 #, fuzzy #| msgid "Icon" msgid "Icon URL" msgstr "Nota" -#: aleksis/core/models.py:995 +#: aleksis/core/models.py:997 msgid "External link widget" msgstr "" -#: aleksis/core/models.py:996 +#: aleksis/core/models.py:998 msgid "External link widgets" msgstr "" -#: aleksis/core/models.py:1002 +#: aleksis/core/models.py:1004 msgid "Content" msgstr "" -#: aleksis/core/models.py:1008 +#: aleksis/core/models.py:1010 msgid "Static content widget" msgstr "" -#: aleksis/core/models.py:1009 +#: aleksis/core/models.py:1011 msgid "Static content widgets" msgstr "" -#: aleksis/core/models.py:1014 +#: aleksis/core/models.py:1016 #, fuzzy #| msgid "Dashboard" msgid "Dashboard widget" msgstr "Forum" -#: aleksis/core/models.py:1019 +#: aleksis/core/models.py:1021 msgid "Order" msgstr "" -#: aleksis/core/models.py:1020 +#: aleksis/core/models.py:1022 msgid "Part of the default dashboard" msgstr "" -#: aleksis/core/models.py:1035 +#: aleksis/core/models.py:1037 #, fuzzy #| msgid "Dashboard" msgid "Dashboard widget order" msgstr "Forum" -#: aleksis/core/models.py:1036 +#: aleksis/core/models.py:1038 #, fuzzy #| msgid "Dashboard" msgid "Dashboard widget orders" msgstr "Forum" -#: aleksis/core/models.py:1042 +#: aleksis/core/models.py:1044 msgid "Menu ID" msgstr "" -#: aleksis/core/models.py:1055 +#: aleksis/core/models.py:1057 msgid "Custom menu" msgstr "" -#: aleksis/core/models.py:1056 +#: aleksis/core/models.py:1058 msgid "Custom menus" msgstr "" -#: aleksis/core/models.py:1066 +#: aleksis/core/models.py:1068 msgid "Menu" msgstr "" -#: aleksis/core/models.py:1070 aleksis/core/models.py:1318 +#: aleksis/core/models.py:1072 aleksis/core/models.py:1320 #: aleksis/core/templates/oauth2_provider/application/detail.html:26 msgid "Icon" msgstr "Nota" -#: aleksis/core/models.py:1076 +#: aleksis/core/models.py:1078 msgid "Custom menu item" msgstr "" -#: aleksis/core/models.py:1077 +#: aleksis/core/models.py:1079 msgid "Custom menu items" msgstr "" -#: aleksis/core/models.py:1091 +#: aleksis/core/models.py:1093 msgid "Title of type" msgstr "" -#: aleksis/core/models.py:1098 aleksis/core/templates/core/group/full.html:47 +#: aleksis/core/models.py:1100 aleksis/core/templates/core/group/full.html:47 #, fuzzy #| msgid "Group" msgid "Group type" msgstr "Grex" -#: aleksis/core/models.py:1112 +#: aleksis/core/models.py:1114 #, fuzzy #| msgid "System status" msgid "Can view system status" msgstr "Status systemae" -#: aleksis/core/models.py:1113 +#: aleksis/core/models.py:1115 #, fuzzy #| msgid "Data management" msgid "Can manage data" msgstr "Adminstratio datarum" -#: aleksis/core/models.py:1114 +#: aleksis/core/models.py:1116 #, fuzzy #| msgid "Stop impersonation" msgid "Can impersonate" msgstr "Simulandum aliquem finire" -#: aleksis/core/models.py:1115 +#: aleksis/core/models.py:1117 msgid "Can use search" msgstr "" -#: aleksis/core/models.py:1116 +#: aleksis/core/models.py:1118 msgid "Can change site preferences" msgstr "" -#: aleksis/core/models.py:1117 +#: aleksis/core/models.py:1119 msgid "Can change person preferences" msgstr "" -#: aleksis/core/models.py:1118 +#: aleksis/core/models.py:1120 msgid "Can change group preferences" msgstr "" -#: aleksis/core/models.py:1119 +#: aleksis/core/models.py:1121 msgid "Can test PDF generation" msgstr "" -#: aleksis/core/models.py:1120 +#: aleksis/core/models.py:1122 #, fuzzy #| msgid "Stop impersonation" msgid "Can invite persons" msgstr "Simulandum aliquem finire" -#: aleksis/core/models.py:1156 +#: aleksis/core/models.py:1158 msgid "Related data check task" msgstr "" -#: aleksis/core/models.py:1164 +#: aleksis/core/models.py:1166 msgid "Issue solved" msgstr "" -#: aleksis/core/models.py:1165 +#: aleksis/core/models.py:1167 #, fuzzy #| msgid "Notifications" msgid "Notification sent" msgstr "Nuntii" -#: aleksis/core/models.py:1178 +#: aleksis/core/models.py:1180 msgid "Data check result" msgstr "" -#: aleksis/core/models.py:1179 +#: aleksis/core/models.py:1181 msgid "Data check results" msgstr "" -#: aleksis/core/models.py:1181 +#: aleksis/core/models.py:1183 msgid "Can run data checks" msgstr "" -#: aleksis/core/models.py:1182 +#: aleksis/core/models.py:1184 msgid "Can solve data check problems" msgstr "" -#: aleksis/core/models.py:1189 +#: aleksis/core/models.py:1191 #, fuzzy #| msgid "E-mail address" msgid "E-Mail address" msgstr "Inscriptio electronica" -#: aleksis/core/models.py:1221 +#: aleksis/core/models.py:1223 msgid "Owner" msgstr "" -#: aleksis/core/models.py:1225 +#: aleksis/core/models.py:1227 msgid "File expires at" msgstr "" -#: aleksis/core/models.py:1227 +#: aleksis/core/models.py:1229 msgid "Generated HTML file" msgstr "" -#: aleksis/core/models.py:1229 +#: aleksis/core/models.py:1231 msgid "Generated PDF file" msgstr "" -#: aleksis/core/models.py:1236 +#: aleksis/core/models.py:1238 msgid "PDF file" msgstr "" -#: aleksis/core/models.py:1237 +#: aleksis/core/models.py:1239 msgid "PDF files" msgstr "" -#: aleksis/core/models.py:1242 +#: aleksis/core/models.py:1244 msgid "Task result" msgstr "" -#: aleksis/core/models.py:1245 +#: aleksis/core/models.py:1247 msgid "Task user" msgstr "" -#: aleksis/core/models.py:1257 +#: aleksis/core/models.py:1259 msgid "Task user assignment" msgstr "" -#: aleksis/core/models.py:1258 +#: aleksis/core/models.py:1260 msgid "Task user assignments" msgstr "" -#: aleksis/core/models.py:1274 +#: aleksis/core/models.py:1276 #, fuzzy #| msgid "Additional name(s)" msgid "Additional attributes" msgstr "addita nomines" -#: aleksis/core/models.py:1312 +#: aleksis/core/models.py:1314 msgid "Allowed scopes that clients can request" msgstr "" -#: aleksis/core/models.py:1322 +#: aleksis/core/models.py:1324 msgid "This image will be shown as icon in the authorization flow. It should be squared." msgstr "" +#: aleksis/core/models.py:1373 +msgid "UUID" +msgstr "" + +#: aleksis/core/models.py:1377 +msgid "Selected ICal feed" +msgstr "" + +#: aleksis/core/models.py:1386 +msgid "Personal Calendar URL" +msgstr "" + +#: aleksis/core/models.py:1387 +msgid "Personal Calendar URLs" +msgstr "" + #: aleksis/core/preferences.py:25 msgid "General" msgstr "" @@ -1673,7 +1713,7 @@ msgstr "Quis nuntium videatne?" #: aleksis/core/templates/core/announcement/form.html:34 #, fuzzy #| msgid "Who should see the announcement?" -msgid "Save und publish announcement" +msgid "Save and publish announcement" msgstr "Quis nuntium videatne?" #: aleksis/core/templates/core/announcement/list.html:19 @@ -1997,6 +2037,40 @@ msgstr "Grex" msgid "Create group type" msgstr "Grex" +#: aleksis/core/templates/core/ical/ical_create.html:4 +#: aleksis/core/templates/core/ical/ical_create.html:5 +#: aleksis/core/templates/core/ical/ical_list.html:12 +msgid "Create iCal URL" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_create.html:16 +#: aleksis/core/templates/core/ical/ical_edit.html:16 +#: aleksis/core/templates/oauth2_provider/application/create.html:14 +#: aleksis/core/templates/oauth2_provider/application/edit.html:14 +#: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:24 +#: aleksis/core/templates/two_factor/_wizard_actions.html:6 +msgid "Cancel" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_edit.html:4 +#: aleksis/core/templates/core/ical/ical_edit.html:5 +#, python-format +msgid "Edit iCal URL %(object)s" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_list.html:4 +#: aleksis/core/templates/core/ical/ical_list.html:5 +msgid "ICal Feeds" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_list.html:8 +msgid "These are URLs for different Calendar Feeds in the iCal (.ics) format. You can create as many as you want and import them in your calendar software." +msgstr "" + +#: aleksis/core/templates/core/ical/ical_list.html:14 +msgid "Your iCal URLs" +msgstr "" + #: aleksis/core/templates/core/index.html:4 msgid "Home" msgstr "" @@ -2505,13 +2579,6 @@ msgstr "" msgid "Register OAuth2 Application" msgstr "Nuntii" -#: aleksis/core/templates/oauth2_provider/application/create.html:14 -#: aleksis/core/templates/oauth2_provider/application/edit.html:14 -#: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:24 -#: aleksis/core/templates/two_factor/_wizard_actions.html:6 -msgid "Cancel" -msgstr "" - #: aleksis/core/templates/oauth2_provider/application/detail.html:5 #, fuzzy #| msgid "Notifications" @@ -3258,162 +3325,174 @@ msgstr "" msgid "Download PDF" msgstr "" -#: aleksis/core/views.py:289 +#: aleksis/core/views.py:292 msgid "The school term has been created." msgstr "" -#: aleksis/core/views.py:301 +#: aleksis/core/views.py:304 msgid "The school term has been saved." msgstr "" -#: aleksis/core/views.py:421 +#: aleksis/core/views.py:424 msgid "The child groups were successfully saved." msgstr "" -#: aleksis/core/views.py:440 aleksis/core/views.py:450 +#: aleksis/core/views.py:443 aleksis/core/views.py:453 msgid "The person has been saved." msgstr "" -#: aleksis/core/views.py:500 +#: aleksis/core/views.py:503 msgid "The group has been saved." msgstr "" -#: aleksis/core/views.py:597 +#: aleksis/core/views.py:600 msgid "The announcement has been saved." msgstr "" -#: aleksis/core/views.py:613 +#: aleksis/core/views.py:616 msgid "The announcement has been deleted." msgstr "" -#: aleksis/core/views.py:681 +#: aleksis/core/views.py:684 msgid "The requested preference registry does not exist" msgstr "" -#: aleksis/core/views.py:700 +#: aleksis/core/views.py:703 msgid "The preferences have been saved successfully." msgstr "" -#: aleksis/core/views.py:724 +#: aleksis/core/views.py:727 msgid "The person has been deleted." msgstr "" -#: aleksis/core/views.py:738 +#: aleksis/core/views.py:741 msgid "The group has been deleted." msgstr "" -#: aleksis/core/views.py:770 +#: aleksis/core/views.py:773 msgid "The additional_field has been saved." msgstr "" -#: aleksis/core/views.py:804 +#: aleksis/core/views.py:807 msgid "The additional field has been deleted." msgstr "" -#: aleksis/core/views.py:829 +#: aleksis/core/views.py:832 msgid "The group type has been saved." msgstr "" -#: aleksis/core/views.py:859 +#: aleksis/core/views.py:862 msgid "The group type has been deleted." msgstr "" -#: aleksis/core/views.py:892 +#: aleksis/core/views.py:895 msgid "Progress: Run data checks" msgstr "" -#: aleksis/core/views.py:893 +#: aleksis/core/views.py:896 #, fuzzy #| msgid "System status" msgid "Run data checks …" msgstr "Status systemae" -#: aleksis/core/views.py:894 +#: aleksis/core/views.py:897 msgid "The data checks were run successfully." msgstr "" -#: aleksis/core/views.py:895 +#: aleksis/core/views.py:898 msgid "There was a problem while running data checks." msgstr "" -#: aleksis/core/views.py:911 +#: aleksis/core/views.py:914 #, python-brace-format msgid "The solve option '{solve_option_obj.verbose_name}' " msgstr "" -#: aleksis/core/views.py:921 +#: aleksis/core/views.py:924 msgid "The requested solve option does not exist" msgstr "" -#: aleksis/core/views.py:953 +#: aleksis/core/views.py:956 msgid "The dashboard widget has been saved." msgstr "" -#: aleksis/core/views.py:983 +#: aleksis/core/views.py:986 msgid "The dashboard widget has been created." msgstr "" -#: aleksis/core/views.py:993 +#: aleksis/core/views.py:996 msgid "The dashboard widget has been deleted." msgstr "" -#: aleksis/core/views.py:1064 +#: aleksis/core/views.py:1067 msgid "Your dashboard configuration has been saved successfully." msgstr "" -#: aleksis/core/views.py:1066 +#: aleksis/core/views.py:1069 msgid "The configuration of the default dashboard has been saved successfully." msgstr "" -#: aleksis/core/views.py:1142 +#: aleksis/core/views.py:1145 #, python-brace-format msgid "The invitation was successfully created. The invitation code is {code}" msgstr "" -#: aleksis/core/views.py:1233 +#: aleksis/core/views.py:1236 msgid "We have successfully assigned the permissions." msgstr "" -#: aleksis/core/views.py:1243 +#: aleksis/core/views.py:1246 msgid "The global user permission has been deleted." msgstr "" -#: aleksis/core/views.py:1253 +#: aleksis/core/views.py:1256 msgid "The global group permission has been deleted." msgstr "" -#: aleksis/core/views.py:1263 +#: aleksis/core/views.py:1266 msgid "The object user permission has been deleted." msgstr "" -#: aleksis/core/views.py:1273 +#: aleksis/core/views.py:1276 msgid "The object group permission has been deleted." msgstr "" -#: aleksis/core/views.py:1341 +#: aleksis/core/views.py:1344 msgid "The requested PDF file does not exist" msgstr "" -#: aleksis/core/views.py:1350 aleksis/core/views.py:1354 +#: aleksis/core/views.py:1353 aleksis/core/views.py:1357 msgid "The requested task does not exist or is not accessible" msgstr "" -#: aleksis/core/views.py:1406 +#: aleksis/core/views.py:1409 msgid "The third-party account could not be disconnected because it is the only login method available." msgstr "" -#: aleksis/core/views.py:1413 +#: aleksis/core/views.py:1416 msgid "The third-party account has been successfully disconnected." msgstr "" -#: aleksis/core/views.py:1484 +#: aleksis/core/views.py:1487 msgid "Person was invited successfully and an email with further instructions has been send to them." msgstr "" -#: aleksis/core/views.py:1495 +#: aleksis/core/views.py:1498 msgid "Person was already invited." msgstr "" +#: aleksis/core/views.py:1598 +msgid "ICal feed updated successfully" +msgstr "" + +#: aleksis/core/views.py:1608 +msgid "ICal feed deleted successfully" +msgstr "" + +#: aleksis/core/views.py:1616 +msgid "ICal feed created successfully" +msgstr "" + #, fuzzy #~| msgid "Street number" #~ msgid "home number" diff --git a/aleksis/core/locale/la/LC_MESSAGES/djangojs.po b/aleksis/core/locale/la/LC_MESSAGES/djangojs.po index f3df4c3fc6d2848a739ddd1faac44cb9048c97b2..509b8a65f4bdbc6ac9c1ec0282c1ff99b6f1f8c1 100644 --- a/aleksis/core/locale/la/LC_MESSAGES/djangojs.po +++ b/aleksis/core/locale/la/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-23 11:20+0100\n" +"POT-Creation-Date: 2022-05-24 19:37+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po b/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po index 71dc8727c985e991974f2700347f6fb37e4f7b47..9f0be4386a3358d3d0594f80838759c88c9c6c08 100644 --- a/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po +++ b/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: AlekSIS (School Information System) 0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-23 11:19+0100\n" +"POT-Creation-Date: 2022-05-24 19:37+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -37,8 +37,8 @@ msgstr "" msgid "Home and mobile phone" msgstr "" -#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:185 -#: aleksis/core/models.py:487 aleksis/core/templates/core/group/list.html:8 +#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:171 +#: aleksis/core/models.py:489 aleksis/core/templates/core/group/list.html:8 #: aleksis/core/templates/core/group/list.html:9 #: aleksis/core/templates/core/person/full.html:246 msgid "Groups" @@ -65,6 +65,24 @@ msgstr "" msgid "The DashboardWidget was reported broken automatically." msgstr "" +#: aleksis/core/feeds.py:52 +msgid "Birthday Calendar" +msgstr "" + +#: aleksis/core/feeds.py:53 +msgid "A Calendar of Birthdays" +msgstr "" + +#: aleksis/core/feeds.py:66 +#, python-format +msgid "%(name)s's birthday" +msgstr "" + +#: aleksis/core/feeds.py:71 +#, python-format +msgid "%(name)s was born on %(birthday)s" +msgstr "" + #: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:139 #: aleksis/core/templates/core/base.html:140 #: aleksis/core/templates/core/group/list.html:20 @@ -90,11 +108,11 @@ msgstr "" msgid "Content type" msgstr "" -#: aleksis/core/filters.py:113 aleksis/core/models.py:713 +#: aleksis/core/filters.py:113 aleksis/core/models.py:715 msgid "User" msgstr "" -#: aleksis/core/filters.py:135 aleksis/core/models.py:486 +#: aleksis/core/filters.py:135 aleksis/core/models.py:488 msgid "Group" msgstr "" @@ -130,7 +148,7 @@ msgstr "" msgid "This username is already in use." msgstr "" -#: aleksis/core/forms.py:153 aleksis/core/models.py:134 +#: aleksis/core/forms.py:153 aleksis/core/models.py:136 msgid "School term" msgstr "" @@ -139,7 +157,7 @@ msgid "Common data" msgstr "" #: aleksis/core/forms.py:155 aleksis/core/forms.py:207 -#: aleksis/core/menus.py:174 aleksis/core/models.py:157 +#: aleksis/core/menus.py:160 aleksis/core/models.py:159 #: aleksis/core/templates/core/person/list.html:8 #: aleksis/core/templates/core/person/list.html:9 msgid "Persons" @@ -149,18 +167,18 @@ msgstr "" msgid "Additional data" msgstr "" -#: aleksis/core/forms.py:157 aleksis/core/models.py:210 -#: aleksis/core/models.py:539 +#: aleksis/core/forms.py:157 aleksis/core/models.py:212 +#: aleksis/core/models.py:541 msgid "Photo" msgstr "" #: aleksis/core/forms.py:199 aleksis/core/forms.py:202 -#: aleksis/core/models.py:77 +#: aleksis/core/models.py:79 msgid "Date" msgstr "" #: aleksis/core/forms.py:200 aleksis/core/forms.py:203 -#: aleksis/core/models.py:85 +#: aleksis/core/models.py:87 msgid "Time" msgstr "" @@ -196,11 +214,11 @@ msgstr "" msgid "Please enter your invitation code." msgstr "" -#: aleksis/core/forms.py:418 aleksis/core/models.py:185 +#: aleksis/core/forms.py:418 aleksis/core/models.py:187 msgid "First name" msgstr "" -#: aleksis/core/forms.py:419 aleksis/core/models.py:186 +#: aleksis/core/forms.py:419 aleksis/core/models.py:188 msgid "Last name" msgstr "" @@ -233,7 +251,7 @@ msgid "You must grant the permission to all objects and/or to some objects." msgstr "" #: aleksis/core/forms.py:586 -msgid "Adress data" +msgid "Address data" msgstr "" #: aleksis/core/forms.py:598 @@ -280,138 +298,131 @@ msgstr "" msgid "No backup result found!" msgstr "" -#: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6 +#: aleksis/core/menus.py:7 aleksis/core/templates/two_factor/core/login.html:6 #: aleksis/core/templates/two_factor/core/login.html:32 #: aleksis/core/templates/two_factor/core/login.html:95 msgid "Login" msgstr "" -#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:22 +#: aleksis/core/menus.py:13 aleksis/core/templates/account/signup.html:22 #: aleksis/core/templates/socialaccount/signup.html:23 msgid "Sign up" msgstr "" -#: aleksis/core/menus.py:24 aleksis/core/templates/invitations/enter.html:7 +#: aleksis/core/menus.py:22 aleksis/core/templates/invitations/enter.html:7 msgid "Accept invitation" msgstr "" -#: aleksis/core/menus.py:33 +#: aleksis/core/menus.py:31 msgid "Dashboard" msgstr "" -#: aleksis/core/menus.py:41 aleksis/core/models.py:765 -#: aleksis/core/preferences.py:29 aleksis/core/templates/core/base.html:81 -#: aleksis/core/templates/core/notifications.html:4 -#: aleksis/core/templates/core/notifications.html:5 -msgid "Notifications" -msgstr "" - -#: aleksis/core/menus.py:53 +#: aleksis/core/menus.py:39 msgid "Admin" msgstr "" -#: aleksis/core/menus.py:61 aleksis/core/models.py:865 +#: aleksis/core/menus.py:47 aleksis/core/models.py:867 #: aleksis/core/templates/core/announcement/list.html:7 #: aleksis/core/templates/core/announcement/list.html:8 msgid "Announcements" msgstr "" -#: aleksis/core/menus.py:72 aleksis/core/models.py:135 +#: aleksis/core/menus.py:58 aleksis/core/models.py:137 #: aleksis/core/templates/core/school_term/list.html:8 #: aleksis/core/templates/core/school_term/list.html:9 msgid "School terms" msgstr "" -#: aleksis/core/menus.py:83 +#: aleksis/core/menus.py:69 #: aleksis/core/templates/core/dashboard_widget/list.html:8 #: aleksis/core/templates/core/dashboard_widget/list.html:9 msgid "Dashboard widgets" msgstr "" -#: aleksis/core/menus.py:94 +#: aleksis/core/menus.py:80 #: aleksis/core/templates/core/management/data_management.html:6 #: aleksis/core/templates/core/management/data_management.html:7 msgid "Data management" msgstr "" -#: aleksis/core/menus.py:105 +#: aleksis/core/menus.py:91 #: aleksis/core/templates/core/pages/system_status.html:5 #: aleksis/core/templates/core/pages/system_status.html:7 msgid "System status" msgstr "" -#: aleksis/core/menus.py:116 +#: aleksis/core/menus.py:102 msgid "Configuration" msgstr "" -#: aleksis/core/menus.py:127 aleksis/core/templates/core/data_check/list.html:9 +#: aleksis/core/menus.py:113 aleksis/core/templates/core/data_check/list.html:9 #: aleksis/core/templates/core/data_check/list.html:10 msgid "Data checks" msgstr "" -#: aleksis/core/menus.py:133 aleksis/core/templates/core/perms/list.html:13 +#: aleksis/core/menus.py:119 aleksis/core/templates/core/perms/list.html:13 #: aleksis/core/templates/core/perms/list.html:14 msgid "Manage permissions" msgstr "" -#: aleksis/core/menus.py:144 +#: aleksis/core/menus.py:130 msgid "Backend Admin" msgstr "" -#: aleksis/core/menus.py:152 +#: aleksis/core/menus.py:138 #: aleksis/core/templates/oauth2_provider/application/list.html:5 #: aleksis/core/templates/oauth2_provider/application/list.html:6 msgid "OAuth2 Applications" msgstr "" -#: aleksis/core/menus.py:165 +#: aleksis/core/menus.py:151 msgid "People" msgstr "" -#: aleksis/core/menus.py:196 aleksis/core/models.py:1099 +#: aleksis/core/menus.py:182 aleksis/core/models.py:1101 #: aleksis/core/templates/core/group_type/list.html:8 #: aleksis/core/templates/core/group_type/list.html:9 msgid "Group types" msgstr "" -#: aleksis/core/menus.py:207 +#: aleksis/core/menus.py:193 msgid "Groups and child groups" msgstr "" -#: aleksis/core/menus.py:218 aleksis/core/models.py:535 +#: aleksis/core/menus.py:204 aleksis/core/models.py:537 #: aleksis/core/templates/core/additional_field/list.html:8 #: aleksis/core/templates/core/additional_field/list.html:9 msgid "Additional fields" msgstr "" -#: aleksis/core/menus.py:229 +#: aleksis/core/menus.py:215 msgid "Invite person" msgstr "" -#: aleksis/core/menus.py:242 +#: aleksis/core/menus.py:228 #: aleksis/core/templates/core/group/child_groups.html:7 #: aleksis/core/templates/core/group/child_groups.html:9 msgid "Assign child groups to groups" msgstr "" -#: aleksis/core/menus.py:254 +#: aleksis/core/menus.py:240 msgid "Stop impersonation" msgstr "" -#: aleksis/core/menus.py:263 +#: aleksis/core/menus.py:249 msgid "Account" msgstr "" -#: aleksis/core/menus.py:272 +#: aleksis/core/menus.py:258 #: aleksis/core/templates/dynamic_preferences/form.html:5 msgid "Preferences" msgstr "" -#: aleksis/core/menus.py:281 +#: aleksis/core/menus.py:267 msgid "2FA" msgstr "" -#: aleksis/core/menus.py:289 +#: aleksis/core/menus.py:275 #: aleksis/core/templates/account/password_change.html:5 #: aleksis/core/templates/account/password_change.html:6 #: aleksis/core/templates/account/password_change.html:19 @@ -423,17 +434,21 @@ msgstr "" msgid "Change password" msgstr "" -#: aleksis/core/menus.py:301 +#: aleksis/core/menus.py:287 msgid "Third-party accounts" msgstr "" -#: aleksis/core/menus.py:310 +#: aleksis/core/menus.py:296 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6 msgid "Authorized applications" msgstr "" -#: aleksis/core/menus.py:320 +#: aleksis/core/menus.py:305 +msgid "Calendar Feeds" +msgstr "" + +#: aleksis/core/menus.py:318 msgid "Logout" msgstr "" @@ -441,559 +456,584 @@ msgstr "" msgid "Linked school term" msgstr "" -#: aleksis/core/models.py:75 +#: aleksis/core/models.py:77 msgid "Boolean (Yes/No)" msgstr "" -#: aleksis/core/models.py:76 +#: aleksis/core/models.py:78 msgid "Text (one line)" msgstr "" -#: aleksis/core/models.py:78 +#: aleksis/core/models.py:80 msgid "Date and time" msgstr "" -#: aleksis/core/models.py:79 +#: aleksis/core/models.py:81 msgid "Decimal number" msgstr "" -#: aleksis/core/models.py:80 aleksis/core/models.py:203 +#: aleksis/core/models.py:82 aleksis/core/models.py:205 msgid "E-mail address" msgstr "" -#: aleksis/core/models.py:81 +#: aleksis/core/models.py:83 msgid "Integer" msgstr "" -#: aleksis/core/models.py:82 +#: aleksis/core/models.py:84 msgid "IP address" msgstr "" -#: aleksis/core/models.py:83 +#: aleksis/core/models.py:85 msgid "Boolean or empty (Yes/No/Neither)" msgstr "" -#: aleksis/core/models.py:84 +#: aleksis/core/models.py:86 msgid "Text (multi-line)" msgstr "" -#: aleksis/core/models.py:86 +#: aleksis/core/models.py:88 msgid "URL / Link" msgstr "" -#: aleksis/core/models.py:98 aleksis/core/models.py:1068 +#: aleksis/core/models.py:100 aleksis/core/models.py:1070 +#: aleksis/core/models.py:1374 msgid "Name" msgstr "" -#: aleksis/core/models.py:100 +#: aleksis/core/models.py:102 msgid "Start date" msgstr "" -#: aleksis/core/models.py:101 +#: aleksis/core/models.py:103 msgid "End date" msgstr "" -#: aleksis/core/models.py:120 +#: aleksis/core/models.py:122 msgid "The start date must be earlier than the end date." msgstr "" -#: aleksis/core/models.py:127 +#: aleksis/core/models.py:129 msgid "There is already a school term for this time or a part of this time." msgstr "" -#: aleksis/core/models.py:156 aleksis/core/models.py:1017 +#: aleksis/core/models.py:158 aleksis/core/models.py:1019 +#: aleksis/core/models.py:1371 msgid "Person" msgstr "" -#: aleksis/core/models.py:159 +#: aleksis/core/models.py:161 msgid "Can view address" msgstr "" -#: aleksis/core/models.py:160 +#: aleksis/core/models.py:162 msgid "Can view contact details" msgstr "" -#: aleksis/core/models.py:161 +#: aleksis/core/models.py:163 msgid "Can view photo" msgstr "" -#: aleksis/core/models.py:162 +#: aleksis/core/models.py:164 msgid "Can view avatar image" msgstr "" -#: aleksis/core/models.py:163 +#: aleksis/core/models.py:165 msgid "Can view persons groups" msgstr "" -#: aleksis/core/models.py:164 +#: aleksis/core/models.py:166 msgid "Can view personal details" msgstr "" -#: aleksis/core/models.py:174 +#: aleksis/core/models.py:176 msgid "female" msgstr "" -#: aleksis/core/models.py:174 +#: aleksis/core/models.py:176 msgid "male" msgstr "" -#: aleksis/core/models.py:182 aleksis/core/models.py:1271 +#: aleksis/core/models.py:184 aleksis/core/models.py:1273 msgid "Linked user" msgstr "" -#: aleksis/core/models.py:188 +#: aleksis/core/models.py:190 msgid "Additional name(s)" msgstr "" -#: aleksis/core/models.py:192 aleksis/core/models.py:504 +#: aleksis/core/models.py:194 aleksis/core/models.py:506 msgid "Short name" msgstr "" -#: aleksis/core/models.py:195 +#: aleksis/core/models.py:197 msgid "Street" msgstr "" -#: aleksis/core/models.py:196 +#: aleksis/core/models.py:198 msgid "Street number" msgstr "" -#: aleksis/core/models.py:197 +#: aleksis/core/models.py:199 msgid "Postal code" msgstr "" -#: aleksis/core/models.py:198 +#: aleksis/core/models.py:200 msgid "Place" msgstr "" -#: aleksis/core/models.py:200 aleksis/core/templates/core/person/full.html:160 +#: aleksis/core/models.py:202 aleksis/core/templates/core/person/full.html:160 msgid "Home phone" msgstr "" -#: aleksis/core/models.py:201 aleksis/core/templates/core/person/full.html:170 +#: aleksis/core/models.py:203 aleksis/core/templates/core/person/full.html:170 msgid "Mobile phone" msgstr "" -#: aleksis/core/models.py:205 +#: aleksis/core/models.py:207 msgid "Date of birth" msgstr "" -#: aleksis/core/models.py:206 +#: aleksis/core/models.py:208 msgid "Place of birth" msgstr "" -#: aleksis/core/models.py:207 +#: aleksis/core/models.py:209 msgid "Sex" msgstr "" -#: aleksis/core/models.py:214 aleksis/core/models.py:543 +#: aleksis/core/models.py:216 aleksis/core/models.py:545 msgid "This is an official photo, used for official documents and for internal use cases." msgstr "" -#: aleksis/core/models.py:219 aleksis/core/models.py:547 +#: aleksis/core/models.py:221 aleksis/core/models.py:549 msgid "Display picture / Avatar" msgstr "" -#: aleksis/core/models.py:222 aleksis/core/models.py:550 +#: aleksis/core/models.py:224 aleksis/core/models.py:552 msgid "This is a picture or an avatar for public display." msgstr "" -#: aleksis/core/models.py:227 aleksis/core/templates/core/person/full.html:235 +#: aleksis/core/models.py:229 aleksis/core/templates/core/person/full.html:235 msgid "Guardians / Parents" msgstr "" -#: aleksis/core/models.py:234 +#: aleksis/core/models.py:236 msgid "Primary group" msgstr "" -#: aleksis/core/models.py:237 aleksis/core/models.py:717 -#: aleksis/core/models.py:741 aleksis/core/models.py:832 -#: aleksis/core/models.py:1092 +#: aleksis/core/models.py:239 aleksis/core/models.py:719 +#: aleksis/core/models.py:743 aleksis/core/models.py:834 +#: aleksis/core/models.py:1094 msgid "Description" msgstr "" -#: aleksis/core/models.py:457 +#: aleksis/core/models.py:459 msgid "Title of field" msgstr "" -#: aleksis/core/models.py:459 +#: aleksis/core/models.py:461 msgid "Type of field" msgstr "" -#: aleksis/core/models.py:461 +#: aleksis/core/models.py:463 msgid "Required" msgstr "" -#: aleksis/core/models.py:462 +#: aleksis/core/models.py:464 msgid "Help text / description" msgstr "" -#: aleksis/core/models.py:468 +#: aleksis/core/models.py:470 msgid "Addtitional field for groups" msgstr "" -#: aleksis/core/models.py:469 +#: aleksis/core/models.py:471 msgid "Addtitional fields for groups" msgstr "" -#: aleksis/core/models.py:489 +#: aleksis/core/models.py:491 msgid "Can assign child groups to groups" msgstr "" -#: aleksis/core/models.py:490 +#: aleksis/core/models.py:492 msgid "Can view statistics about group." msgstr "" -#: aleksis/core/models.py:502 +#: aleksis/core/models.py:504 msgid "Long name" msgstr "" -#: aleksis/core/models.py:512 aleksis/core/templates/core/group/full.html:85 +#: aleksis/core/models.py:514 aleksis/core/templates/core/group/full.html:85 msgid "Members" msgstr "" -#: aleksis/core/models.py:515 aleksis/core/templates/core/group/full.html:82 +#: aleksis/core/models.py:517 aleksis/core/templates/core/group/full.html:82 msgid "Owners" msgstr "" -#: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:55 +#: aleksis/core/models.py:524 aleksis/core/templates/core/group/full.html:55 msgid "Parent groups" msgstr "" -#: aleksis/core/models.py:530 +#: aleksis/core/models.py:532 msgid "Type of group" msgstr "" -#: aleksis/core/models.py:716 aleksis/core/models.py:740 -#: aleksis/core/models.py:831 +#: aleksis/core/models.py:718 aleksis/core/models.py:742 +#: aleksis/core/models.py:833 #: aleksis/core/templates/core/announcement/list.html:18 msgid "Title" msgstr "" -#: aleksis/core/models.py:719 +#: aleksis/core/models.py:721 msgid "Application" msgstr "" -#: aleksis/core/models.py:725 +#: aleksis/core/models.py:727 msgid "Activity" msgstr "" -#: aleksis/core/models.py:726 +#: aleksis/core/models.py:728 msgid "Activities" msgstr "" -#: aleksis/core/models.py:732 +#: aleksis/core/models.py:734 msgid "Sender" msgstr "" -#: aleksis/core/models.py:737 +#: aleksis/core/models.py:739 msgid "Recipient" msgstr "" -#: aleksis/core/models.py:742 aleksis/core/models.py:1069 +#: aleksis/core/models.py:744 aleksis/core/models.py:1071 msgid "Link" msgstr "" -#: aleksis/core/models.py:744 +#: aleksis/core/models.py:746 msgid "Send notification at" msgstr "" -#: aleksis/core/models.py:746 +#: aleksis/core/models.py:748 msgid "Read" msgstr "" -#: aleksis/core/models.py:747 +#: aleksis/core/models.py:749 msgid "Sent" msgstr "" -#: aleksis/core/models.py:764 +#: aleksis/core/models.py:766 msgid "Notification" msgstr "" -#: aleksis/core/models.py:833 +#: aleksis/core/models.py:767 aleksis/core/preferences.py:29 +#: aleksis/core/templates/core/base.html:81 +#: aleksis/core/templates/core/notifications.html:4 +#: aleksis/core/templates/core/notifications.html:5 +msgid "Notifications" +msgstr "" + +#: aleksis/core/models.py:835 msgid "Link to detailed view" msgstr "" -#: aleksis/core/models.py:836 +#: aleksis/core/models.py:838 msgid "Date and time from when to show" msgstr "" -#: aleksis/core/models.py:839 +#: aleksis/core/models.py:841 msgid "Date and time until when to show" msgstr "" -#: aleksis/core/models.py:864 +#: aleksis/core/models.py:866 msgid "Announcement" msgstr "" -#: aleksis/core/models.py:902 +#: aleksis/core/models.py:904 msgid "Announcement recipient" msgstr "" -#: aleksis/core/models.py:903 +#: aleksis/core/models.py:905 msgid "Announcement recipients" msgstr "" -#: aleksis/core/models.py:925 +#: aleksis/core/models.py:927 msgid "Widget Title" msgstr "" -#: aleksis/core/models.py:926 +#: aleksis/core/models.py:928 msgid "Activate Widget" msgstr "" -#: aleksis/core/models.py:927 +#: aleksis/core/models.py:929 msgid "Widget is broken" msgstr "" -#: aleksis/core/models.py:930 +#: aleksis/core/models.py:932 msgid "Size on mobile devices" msgstr "" -#: aleksis/core/models.py:931 +#: aleksis/core/models.py:933 msgid "<= 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:936 +#: aleksis/core/models.py:938 msgid "Size on tablet devices" msgstr "" -#: aleksis/core/models.py:937 +#: aleksis/core/models.py:939 msgid "> 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:942 +#: aleksis/core/models.py:944 msgid "Size on desktop devices" msgstr "" -#: aleksis/core/models.py:943 +#: aleksis/core/models.py:945 msgid "> 992 px, 12 columns" msgstr "" -#: aleksis/core/models.py:948 +#: aleksis/core/models.py:950 msgid "Size on large desktop devices" msgstr "" -#: aleksis/core/models.py:949 +#: aleksis/core/models.py:951 msgid "> 1200 px>, 12 columns" msgstr "" -#: aleksis/core/models.py:980 +#: aleksis/core/models.py:982 msgid "Can edit default dashboard" msgstr "" -#: aleksis/core/models.py:981 +#: aleksis/core/models.py:983 msgid "Dashboard Widget" msgstr "" -#: aleksis/core/models.py:982 +#: aleksis/core/models.py:984 msgid "Dashboard Widgets" msgstr "" -#: aleksis/core/models.py:988 +#: aleksis/core/models.py:990 msgid "URL" msgstr "" -#: aleksis/core/models.py:989 +#: aleksis/core/models.py:991 msgid "Icon URL" msgstr "" -#: aleksis/core/models.py:995 +#: aleksis/core/models.py:997 msgid "External link widget" msgstr "" -#: aleksis/core/models.py:996 +#: aleksis/core/models.py:998 msgid "External link widgets" msgstr "" -#: aleksis/core/models.py:1002 +#: aleksis/core/models.py:1004 msgid "Content" msgstr "" -#: aleksis/core/models.py:1008 +#: aleksis/core/models.py:1010 msgid "Static content widget" msgstr "" -#: aleksis/core/models.py:1009 +#: aleksis/core/models.py:1011 msgid "Static content widgets" msgstr "" -#: aleksis/core/models.py:1014 +#: aleksis/core/models.py:1016 msgid "Dashboard widget" msgstr "" -#: aleksis/core/models.py:1019 +#: aleksis/core/models.py:1021 msgid "Order" msgstr "" -#: aleksis/core/models.py:1020 +#: aleksis/core/models.py:1022 msgid "Part of the default dashboard" msgstr "" -#: aleksis/core/models.py:1035 +#: aleksis/core/models.py:1037 msgid "Dashboard widget order" msgstr "" -#: aleksis/core/models.py:1036 +#: aleksis/core/models.py:1038 msgid "Dashboard widget orders" msgstr "" -#: aleksis/core/models.py:1042 +#: aleksis/core/models.py:1044 msgid "Menu ID" msgstr "" -#: aleksis/core/models.py:1055 +#: aleksis/core/models.py:1057 msgid "Custom menu" msgstr "" -#: aleksis/core/models.py:1056 +#: aleksis/core/models.py:1058 msgid "Custom menus" msgstr "" -#: aleksis/core/models.py:1066 +#: aleksis/core/models.py:1068 msgid "Menu" msgstr "" -#: aleksis/core/models.py:1070 aleksis/core/models.py:1318 +#: aleksis/core/models.py:1072 aleksis/core/models.py:1320 #: aleksis/core/templates/oauth2_provider/application/detail.html:26 msgid "Icon" msgstr "" -#: aleksis/core/models.py:1076 +#: aleksis/core/models.py:1078 msgid "Custom menu item" msgstr "" -#: aleksis/core/models.py:1077 +#: aleksis/core/models.py:1079 msgid "Custom menu items" msgstr "" -#: aleksis/core/models.py:1091 +#: aleksis/core/models.py:1093 msgid "Title of type" msgstr "" -#: aleksis/core/models.py:1098 aleksis/core/templates/core/group/full.html:47 +#: aleksis/core/models.py:1100 aleksis/core/templates/core/group/full.html:47 msgid "Group type" msgstr "" -#: aleksis/core/models.py:1112 +#: aleksis/core/models.py:1114 msgid "Can view system status" msgstr "" -#: aleksis/core/models.py:1113 +#: aleksis/core/models.py:1115 msgid "Can manage data" msgstr "" -#: aleksis/core/models.py:1114 +#: aleksis/core/models.py:1116 msgid "Can impersonate" msgstr "" -#: aleksis/core/models.py:1115 +#: aleksis/core/models.py:1117 msgid "Can use search" msgstr "" -#: aleksis/core/models.py:1116 +#: aleksis/core/models.py:1118 msgid "Can change site preferences" msgstr "" -#: aleksis/core/models.py:1117 +#: aleksis/core/models.py:1119 msgid "Can change person preferences" msgstr "" -#: aleksis/core/models.py:1118 +#: aleksis/core/models.py:1120 msgid "Can change group preferences" msgstr "" -#: aleksis/core/models.py:1119 +#: aleksis/core/models.py:1121 msgid "Can test PDF generation" msgstr "" -#: aleksis/core/models.py:1120 +#: aleksis/core/models.py:1122 msgid "Can invite persons" msgstr "" -#: aleksis/core/models.py:1156 +#: aleksis/core/models.py:1158 msgid "Related data check task" msgstr "" -#: aleksis/core/models.py:1164 +#: aleksis/core/models.py:1166 msgid "Issue solved" msgstr "" -#: aleksis/core/models.py:1165 +#: aleksis/core/models.py:1167 msgid "Notification sent" msgstr "" -#: aleksis/core/models.py:1178 +#: aleksis/core/models.py:1180 msgid "Data check result" msgstr "" -#: aleksis/core/models.py:1179 +#: aleksis/core/models.py:1181 msgid "Data check results" msgstr "" -#: aleksis/core/models.py:1181 +#: aleksis/core/models.py:1183 msgid "Can run data checks" msgstr "" -#: aleksis/core/models.py:1182 +#: aleksis/core/models.py:1184 msgid "Can solve data check problems" msgstr "" -#: aleksis/core/models.py:1189 +#: aleksis/core/models.py:1191 msgid "E-Mail address" msgstr "" -#: aleksis/core/models.py:1221 +#: aleksis/core/models.py:1223 msgid "Owner" msgstr "" -#: aleksis/core/models.py:1225 +#: aleksis/core/models.py:1227 msgid "File expires at" msgstr "" -#: aleksis/core/models.py:1227 +#: aleksis/core/models.py:1229 msgid "Generated HTML file" msgstr "" -#: aleksis/core/models.py:1229 +#: aleksis/core/models.py:1231 msgid "Generated PDF file" msgstr "" -#: aleksis/core/models.py:1236 +#: aleksis/core/models.py:1238 msgid "PDF file" msgstr "" -#: aleksis/core/models.py:1237 +#: aleksis/core/models.py:1239 msgid "PDF files" msgstr "" -#: aleksis/core/models.py:1242 +#: aleksis/core/models.py:1244 msgid "Task result" msgstr "" -#: aleksis/core/models.py:1245 +#: aleksis/core/models.py:1247 msgid "Task user" msgstr "" -#: aleksis/core/models.py:1257 +#: aleksis/core/models.py:1259 msgid "Task user assignment" msgstr "" -#: aleksis/core/models.py:1258 +#: aleksis/core/models.py:1260 msgid "Task user assignments" msgstr "" -#: aleksis/core/models.py:1274 +#: aleksis/core/models.py:1276 msgid "Additional attributes" msgstr "" -#: aleksis/core/models.py:1312 +#: aleksis/core/models.py:1314 msgid "Allowed scopes that clients can request" msgstr "" -#: aleksis/core/models.py:1322 +#: aleksis/core/models.py:1324 msgid "This image will be shown as icon in the authorization flow. It should be squared." msgstr "" +#: aleksis/core/models.py:1373 +msgid "UUID" +msgstr "" + +#: aleksis/core/models.py:1377 +msgid "Selected ICal feed" +msgstr "" + +#: aleksis/core/models.py:1386 +msgid "Personal Calendar URL" +msgstr "" + +#: aleksis/core/models.py:1387 +msgid "Personal Calendar URLs" +msgstr "" + #: aleksis/core/preferences.py:25 msgid "General" msgstr "" @@ -1518,7 +1558,7 @@ msgid "Publish new announcement" msgstr "" #: aleksis/core/templates/core/announcement/form.html:34 -msgid "Save und publish announcement" +msgid "Save and publish announcement" msgstr "" #: aleksis/core/templates/core/announcement/list.html:19 @@ -1820,6 +1860,40 @@ msgstr "" msgid "Create group type" msgstr "" +#: aleksis/core/templates/core/ical/ical_create.html:4 +#: aleksis/core/templates/core/ical/ical_create.html:5 +#: aleksis/core/templates/core/ical/ical_list.html:12 +msgid "Create iCal URL" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_create.html:16 +#: aleksis/core/templates/core/ical/ical_edit.html:16 +#: aleksis/core/templates/oauth2_provider/application/create.html:14 +#: aleksis/core/templates/oauth2_provider/application/edit.html:14 +#: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:24 +#: aleksis/core/templates/two_factor/_wizard_actions.html:6 +msgid "Cancel" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_edit.html:4 +#: aleksis/core/templates/core/ical/ical_edit.html:5 +#, python-format +msgid "Edit iCal URL %(object)s" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_list.html:4 +#: aleksis/core/templates/core/ical/ical_list.html:5 +msgid "ICal Feeds" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_list.html:8 +msgid "These are URLs for different Calendar Feeds in the iCal (.ics) format. You can create as many as you want and import them in your calendar software." +msgstr "" + +#: aleksis/core/templates/core/ical/ical_list.html:14 +msgid "Your iCal URLs" +msgstr "" + #: aleksis/core/templates/core/index.html:4 msgid "Home" msgstr "" @@ -2296,13 +2370,6 @@ msgstr "" msgid "Register OAuth2 Application" msgstr "" -#: aleksis/core/templates/oauth2_provider/application/create.html:14 -#: aleksis/core/templates/oauth2_provider/application/edit.html:14 -#: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:24 -#: aleksis/core/templates/two_factor/_wizard_actions.html:6 -msgid "Cancel" -msgstr "" - #: aleksis/core/templates/oauth2_provider/application/detail.html:5 msgid "OAuth2 Application" msgstr "" @@ -3022,159 +3089,171 @@ msgstr "" msgid "Download PDF" msgstr "" -#: aleksis/core/views.py:289 +#: aleksis/core/views.py:292 msgid "The school term has been created." msgstr "" -#: aleksis/core/views.py:301 +#: aleksis/core/views.py:304 msgid "The school term has been saved." msgstr "" -#: aleksis/core/views.py:421 +#: aleksis/core/views.py:424 msgid "The child groups were successfully saved." msgstr "" -#: aleksis/core/views.py:440 aleksis/core/views.py:450 +#: aleksis/core/views.py:443 aleksis/core/views.py:453 msgid "The person has been saved." msgstr "" -#: aleksis/core/views.py:500 +#: aleksis/core/views.py:503 msgid "The group has been saved." msgstr "" -#: aleksis/core/views.py:597 +#: aleksis/core/views.py:600 msgid "The announcement has been saved." msgstr "" -#: aleksis/core/views.py:613 +#: aleksis/core/views.py:616 msgid "The announcement has been deleted." msgstr "" -#: aleksis/core/views.py:681 +#: aleksis/core/views.py:684 msgid "The requested preference registry does not exist" msgstr "" -#: aleksis/core/views.py:700 +#: aleksis/core/views.py:703 msgid "The preferences have been saved successfully." msgstr "" -#: aleksis/core/views.py:724 +#: aleksis/core/views.py:727 msgid "The person has been deleted." msgstr "" -#: aleksis/core/views.py:738 +#: aleksis/core/views.py:741 msgid "The group has been deleted." msgstr "" -#: aleksis/core/views.py:770 +#: aleksis/core/views.py:773 msgid "The additional_field has been saved." msgstr "" -#: aleksis/core/views.py:804 +#: aleksis/core/views.py:807 msgid "The additional field has been deleted." msgstr "" -#: aleksis/core/views.py:829 +#: aleksis/core/views.py:832 msgid "The group type has been saved." msgstr "" -#: aleksis/core/views.py:859 +#: aleksis/core/views.py:862 msgid "The group type has been deleted." msgstr "" -#: aleksis/core/views.py:892 +#: aleksis/core/views.py:895 msgid "Progress: Run data checks" msgstr "" -#: aleksis/core/views.py:893 +#: aleksis/core/views.py:896 msgid "Run data checks …" msgstr "" -#: aleksis/core/views.py:894 +#: aleksis/core/views.py:897 msgid "The data checks were run successfully." msgstr "" -#: aleksis/core/views.py:895 +#: aleksis/core/views.py:898 msgid "There was a problem while running data checks." msgstr "" -#: aleksis/core/views.py:911 +#: aleksis/core/views.py:914 #, python-brace-format msgid "The solve option '{solve_option_obj.verbose_name}' " msgstr "" -#: aleksis/core/views.py:921 +#: aleksis/core/views.py:924 msgid "The requested solve option does not exist" msgstr "" -#: aleksis/core/views.py:953 +#: aleksis/core/views.py:956 msgid "The dashboard widget has been saved." msgstr "" -#: aleksis/core/views.py:983 +#: aleksis/core/views.py:986 msgid "The dashboard widget has been created." msgstr "" -#: aleksis/core/views.py:993 +#: aleksis/core/views.py:996 msgid "The dashboard widget has been deleted." msgstr "" -#: aleksis/core/views.py:1064 +#: aleksis/core/views.py:1067 msgid "Your dashboard configuration has been saved successfully." msgstr "" -#: aleksis/core/views.py:1066 +#: aleksis/core/views.py:1069 msgid "The configuration of the default dashboard has been saved successfully." msgstr "" -#: aleksis/core/views.py:1142 +#: aleksis/core/views.py:1145 #, python-brace-format msgid "The invitation was successfully created. The invitation code is {code}" msgstr "" -#: aleksis/core/views.py:1233 +#: aleksis/core/views.py:1236 msgid "We have successfully assigned the permissions." msgstr "" -#: aleksis/core/views.py:1243 +#: aleksis/core/views.py:1246 msgid "The global user permission has been deleted." msgstr "" -#: aleksis/core/views.py:1253 +#: aleksis/core/views.py:1256 msgid "The global group permission has been deleted." msgstr "" -#: aleksis/core/views.py:1263 +#: aleksis/core/views.py:1266 msgid "The object user permission has been deleted." msgstr "" -#: aleksis/core/views.py:1273 +#: aleksis/core/views.py:1276 msgid "The object group permission has been deleted." msgstr "" -#: aleksis/core/views.py:1341 +#: aleksis/core/views.py:1344 msgid "The requested PDF file does not exist" msgstr "" -#: aleksis/core/views.py:1350 aleksis/core/views.py:1354 +#: aleksis/core/views.py:1353 aleksis/core/views.py:1357 msgid "The requested task does not exist or is not accessible" msgstr "" -#: aleksis/core/views.py:1406 +#: aleksis/core/views.py:1409 msgid "The third-party account could not be disconnected because it is the only login method available." msgstr "" -#: aleksis/core/views.py:1413 +#: aleksis/core/views.py:1416 msgid "The third-party account has been successfully disconnected." msgstr "" -#: aleksis/core/views.py:1484 +#: aleksis/core/views.py:1487 msgid "Person was invited successfully and an email with further instructions has been send to them." msgstr "" -#: aleksis/core/views.py:1495 +#: aleksis/core/views.py:1498 msgid "Person was already invited." msgstr "" +#: aleksis/core/views.py:1598 +msgid "ICal feed updated successfully" +msgstr "" + +#: aleksis/core/views.py:1608 +msgid "ICal feed deleted successfully" +msgstr "" + +#: aleksis/core/views.py:1616 +msgid "ICal feed created successfully" +msgstr "" + #~ msgid "Norwegian (bokmÃ¥l)" #~ msgstr "Norsk (bokmÃ¥l)" diff --git a/aleksis/core/locale/nb_NO/LC_MESSAGES/djangojs.po b/aleksis/core/locale/nb_NO/LC_MESSAGES/djangojs.po index f3df4c3fc6d2848a739ddd1faac44cb9048c97b2..509b8a65f4bdbc6ac9c1ec0282c1ff99b6f1f8c1 100644 --- a/aleksis/core/locale/nb_NO/LC_MESSAGES/djangojs.po +++ b/aleksis/core/locale/nb_NO/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-23 11:20+0100\n" +"POT-Creation-Date: 2022-05-24 19:37+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/aleksis/core/locale/ru/LC_MESSAGES/django.po b/aleksis/core/locale/ru/LC_MESSAGES/django.po index b2b7031722e061ea2bbf974779f8e95456846337..d71890f30d63586d52c2df9eeef982226dc4b8d5 100644 --- a/aleksis/core/locale/ru/LC_MESSAGES/django.po +++ b/aleksis/core/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-23 12:58+0000\n" +"POT-Creation-Date: 2022-05-24 19:37+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -16,9 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n%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" #: aleksis/core/apps.py:166 msgid "OpenID Connect scope" @@ -254,7 +252,7 @@ msgid "You must grant the permission to all objects and/or to some objects." msgstr "" #: aleksis/core/forms.py:586 -msgid "Adress data" +msgid "Address data" msgstr "" #: aleksis/core/forms.py:598 @@ -1561,7 +1559,7 @@ msgid "Publish new announcement" msgstr "" #: aleksis/core/templates/core/announcement/form.html:34 -msgid "Save und publish announcement" +msgid "Save and publish announcement" msgstr "" #: aleksis/core/templates/core/announcement/list.html:19 diff --git a/aleksis/core/locale/ru/LC_MESSAGES/djangojs.po b/aleksis/core/locale/ru/LC_MESSAGES/djangojs.po index d6da3e02221f450be360e4dfc522f83e32df5a60..6582e048b98e35a122c8c015c91a1e0fc5283362 100644 --- a/aleksis/core/locale/ru/LC_MESSAGES/djangojs.po +++ b/aleksis/core/locale/ru/LC_MESSAGES/djangojs.po @@ -3,34 +3,38 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-23 12:58+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" +"POT-Creation-Date: 2022-05-24 19:37+0200\n" +"PO-Revision-Date: 2022-06-03 01:59+0000\n" +"Last-Translator: Serhii Horichenko <m@sgg.im>\n" +"Language-Team: Russian <https://translate.edugit.org/projects/aleksis/" +"aleksis-core-js/ru/>\n" +"Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" "%100>=11 && n%100<=14)? 2 : 3);\n" +"X-Generator: Weblate 4.12.1\n" + #: aleksis/core/static/js/main.js:66 msgid "Today" -msgstr "" +msgstr "СегоднÑ" #: aleksis/core/static/js/main.js:67 msgid "Cancel" -msgstr "" +msgstr "Отменить" #: aleksis/core/static/js/main.js:68 msgid "OK" -msgstr "" +msgstr "OK" #: aleksis/core/static/js/main.js:195 msgid "This page may contain outdated information since there is no internet connection." msgstr "" +"Из-за отÑутÑÑ‚Ð²Ð¸Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚Ð° Ñта Ñтраница можеть отображать уÑтаревшую " +"информацию." diff --git a/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po b/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po index d5a2d5f0647e2460b313fb20d6cca3d9059a3d8b..09920d095f71a15fbf6707526c6f44ef76033eed 100644 --- a/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po +++ b/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: AlekSIS (School Information System) 0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-23 11:19+0100\n" +"POT-Creation-Date: 2022-05-24 19:37+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -37,8 +37,8 @@ msgstr "" msgid "Home and mobile phone" msgstr "" -#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:185 -#: aleksis/core/models.py:487 aleksis/core/templates/core/group/list.html:8 +#: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:171 +#: aleksis/core/models.py:489 aleksis/core/templates/core/group/list.html:8 #: aleksis/core/templates/core/group/list.html:9 #: aleksis/core/templates/core/person/full.html:246 msgid "Groups" @@ -65,6 +65,24 @@ msgstr "" msgid "The DashboardWidget was reported broken automatically." msgstr "" +#: aleksis/core/feeds.py:52 +msgid "Birthday Calendar" +msgstr "" + +#: aleksis/core/feeds.py:53 +msgid "A Calendar of Birthdays" +msgstr "" + +#: aleksis/core/feeds.py:66 +#, python-format +msgid "%(name)s's birthday" +msgstr "" + +#: aleksis/core/feeds.py:71 +#, python-format +msgid "%(name)s was born on %(birthday)s" +msgstr "" + #: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:139 #: aleksis/core/templates/core/base.html:140 #: aleksis/core/templates/core/group/list.html:20 @@ -90,11 +108,11 @@ msgstr "" msgid "Content type" msgstr "" -#: aleksis/core/filters.py:113 aleksis/core/models.py:713 +#: aleksis/core/filters.py:113 aleksis/core/models.py:715 msgid "User" msgstr "" -#: aleksis/core/filters.py:135 aleksis/core/models.py:486 +#: aleksis/core/filters.py:135 aleksis/core/models.py:488 msgid "Group" msgstr "" @@ -130,7 +148,7 @@ msgstr "" msgid "This username is already in use." msgstr "" -#: aleksis/core/forms.py:153 aleksis/core/models.py:134 +#: aleksis/core/forms.py:153 aleksis/core/models.py:136 msgid "School term" msgstr "" @@ -139,7 +157,7 @@ msgid "Common data" msgstr "" #: aleksis/core/forms.py:155 aleksis/core/forms.py:207 -#: aleksis/core/menus.py:174 aleksis/core/models.py:157 +#: aleksis/core/menus.py:160 aleksis/core/models.py:159 #: aleksis/core/templates/core/person/list.html:8 #: aleksis/core/templates/core/person/list.html:9 msgid "Persons" @@ -149,18 +167,18 @@ msgstr "" msgid "Additional data" msgstr "" -#: aleksis/core/forms.py:157 aleksis/core/models.py:210 -#: aleksis/core/models.py:539 +#: aleksis/core/forms.py:157 aleksis/core/models.py:212 +#: aleksis/core/models.py:541 msgid "Photo" msgstr "" #: aleksis/core/forms.py:199 aleksis/core/forms.py:202 -#: aleksis/core/models.py:77 +#: aleksis/core/models.py:79 msgid "Date" msgstr "" #: aleksis/core/forms.py:200 aleksis/core/forms.py:203 -#: aleksis/core/models.py:85 +#: aleksis/core/models.py:87 msgid "Time" msgstr "" @@ -196,11 +214,11 @@ msgstr "" msgid "Please enter your invitation code." msgstr "" -#: aleksis/core/forms.py:418 aleksis/core/models.py:185 +#: aleksis/core/forms.py:418 aleksis/core/models.py:187 msgid "First name" msgstr "" -#: aleksis/core/forms.py:419 aleksis/core/models.py:186 +#: aleksis/core/forms.py:419 aleksis/core/models.py:188 msgid "Last name" msgstr "" @@ -233,7 +251,7 @@ msgid "You must grant the permission to all objects and/or to some objects." msgstr "" #: aleksis/core/forms.py:586 -msgid "Adress data" +msgid "Address data" msgstr "" #: aleksis/core/forms.py:598 @@ -280,138 +298,131 @@ msgstr "" msgid "No backup result found!" msgstr "" -#: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6 +#: aleksis/core/menus.py:7 aleksis/core/templates/two_factor/core/login.html:6 #: aleksis/core/templates/two_factor/core/login.html:32 #: aleksis/core/templates/two_factor/core/login.html:95 msgid "Login" msgstr "" -#: aleksis/core/menus.py:15 aleksis/core/templates/account/signup.html:22 +#: aleksis/core/menus.py:13 aleksis/core/templates/account/signup.html:22 #: aleksis/core/templates/socialaccount/signup.html:23 msgid "Sign up" msgstr "" -#: aleksis/core/menus.py:24 aleksis/core/templates/invitations/enter.html:7 +#: aleksis/core/menus.py:22 aleksis/core/templates/invitations/enter.html:7 msgid "Accept invitation" msgstr "" -#: aleksis/core/menus.py:33 +#: aleksis/core/menus.py:31 msgid "Dashboard" msgstr "" -#: aleksis/core/menus.py:41 aleksis/core/models.py:765 -#: aleksis/core/preferences.py:29 aleksis/core/templates/core/base.html:81 -#: aleksis/core/templates/core/notifications.html:4 -#: aleksis/core/templates/core/notifications.html:5 -msgid "Notifications" -msgstr "" - -#: aleksis/core/menus.py:53 +#: aleksis/core/menus.py:39 msgid "Admin" msgstr "" -#: aleksis/core/menus.py:61 aleksis/core/models.py:865 +#: aleksis/core/menus.py:47 aleksis/core/models.py:867 #: aleksis/core/templates/core/announcement/list.html:7 #: aleksis/core/templates/core/announcement/list.html:8 msgid "Announcements" msgstr "" -#: aleksis/core/menus.py:72 aleksis/core/models.py:135 +#: aleksis/core/menus.py:58 aleksis/core/models.py:137 #: aleksis/core/templates/core/school_term/list.html:8 #: aleksis/core/templates/core/school_term/list.html:9 msgid "School terms" msgstr "" -#: aleksis/core/menus.py:83 +#: aleksis/core/menus.py:69 #: aleksis/core/templates/core/dashboard_widget/list.html:8 #: aleksis/core/templates/core/dashboard_widget/list.html:9 msgid "Dashboard widgets" msgstr "" -#: aleksis/core/menus.py:94 +#: aleksis/core/menus.py:80 #: aleksis/core/templates/core/management/data_management.html:6 #: aleksis/core/templates/core/management/data_management.html:7 msgid "Data management" msgstr "" -#: aleksis/core/menus.py:105 +#: aleksis/core/menus.py:91 #: aleksis/core/templates/core/pages/system_status.html:5 #: aleksis/core/templates/core/pages/system_status.html:7 msgid "System status" msgstr "" -#: aleksis/core/menus.py:116 +#: aleksis/core/menus.py:102 msgid "Configuration" msgstr "" -#: aleksis/core/menus.py:127 aleksis/core/templates/core/data_check/list.html:9 +#: aleksis/core/menus.py:113 aleksis/core/templates/core/data_check/list.html:9 #: aleksis/core/templates/core/data_check/list.html:10 msgid "Data checks" msgstr "" -#: aleksis/core/menus.py:133 aleksis/core/templates/core/perms/list.html:13 +#: aleksis/core/menus.py:119 aleksis/core/templates/core/perms/list.html:13 #: aleksis/core/templates/core/perms/list.html:14 msgid "Manage permissions" msgstr "" -#: aleksis/core/menus.py:144 +#: aleksis/core/menus.py:130 msgid "Backend Admin" msgstr "" -#: aleksis/core/menus.py:152 +#: aleksis/core/menus.py:138 #: aleksis/core/templates/oauth2_provider/application/list.html:5 #: aleksis/core/templates/oauth2_provider/application/list.html:6 msgid "OAuth2 Applications" msgstr "" -#: aleksis/core/menus.py:165 +#: aleksis/core/menus.py:151 msgid "People" msgstr "" -#: aleksis/core/menus.py:196 aleksis/core/models.py:1099 +#: aleksis/core/menus.py:182 aleksis/core/models.py:1101 #: aleksis/core/templates/core/group_type/list.html:8 #: aleksis/core/templates/core/group_type/list.html:9 msgid "Group types" msgstr "" -#: aleksis/core/menus.py:207 +#: aleksis/core/menus.py:193 msgid "Groups and child groups" msgstr "" -#: aleksis/core/menus.py:218 aleksis/core/models.py:535 +#: aleksis/core/menus.py:204 aleksis/core/models.py:537 #: aleksis/core/templates/core/additional_field/list.html:8 #: aleksis/core/templates/core/additional_field/list.html:9 msgid "Additional fields" msgstr "" -#: aleksis/core/menus.py:229 +#: aleksis/core/menus.py:215 msgid "Invite person" msgstr "" -#: aleksis/core/menus.py:242 +#: aleksis/core/menus.py:228 #: aleksis/core/templates/core/group/child_groups.html:7 #: aleksis/core/templates/core/group/child_groups.html:9 msgid "Assign child groups to groups" msgstr "" -#: aleksis/core/menus.py:254 +#: aleksis/core/menus.py:240 msgid "Stop impersonation" msgstr "" -#: aleksis/core/menus.py:263 +#: aleksis/core/menus.py:249 msgid "Account" msgstr "" -#: aleksis/core/menus.py:272 +#: aleksis/core/menus.py:258 #: aleksis/core/templates/dynamic_preferences/form.html:5 msgid "Preferences" msgstr "" -#: aleksis/core/menus.py:281 +#: aleksis/core/menus.py:267 msgid "2FA" msgstr "" -#: aleksis/core/menus.py:289 +#: aleksis/core/menus.py:275 #: aleksis/core/templates/account/password_change.html:5 #: aleksis/core/templates/account/password_change.html:6 #: aleksis/core/templates/account/password_change.html:19 @@ -423,17 +434,21 @@ msgstr "" msgid "Change password" msgstr "" -#: aleksis/core/menus.py:301 +#: aleksis/core/menus.py:287 msgid "Third-party accounts" msgstr "" -#: aleksis/core/menus.py:310 +#: aleksis/core/menus.py:296 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6 msgid "Authorized applications" msgstr "" -#: aleksis/core/menus.py:320 +#: aleksis/core/menus.py:305 +msgid "Calendar Feeds" +msgstr "" + +#: aleksis/core/menus.py:318 msgid "Logout" msgstr "" @@ -441,559 +456,584 @@ msgstr "" msgid "Linked school term" msgstr "" -#: aleksis/core/models.py:75 +#: aleksis/core/models.py:77 msgid "Boolean (Yes/No)" msgstr "" -#: aleksis/core/models.py:76 +#: aleksis/core/models.py:78 msgid "Text (one line)" msgstr "" -#: aleksis/core/models.py:78 +#: aleksis/core/models.py:80 msgid "Date and time" msgstr "" -#: aleksis/core/models.py:79 +#: aleksis/core/models.py:81 msgid "Decimal number" msgstr "" -#: aleksis/core/models.py:80 aleksis/core/models.py:203 +#: aleksis/core/models.py:82 aleksis/core/models.py:205 msgid "E-mail address" msgstr "" -#: aleksis/core/models.py:81 +#: aleksis/core/models.py:83 msgid "Integer" msgstr "" -#: aleksis/core/models.py:82 +#: aleksis/core/models.py:84 msgid "IP address" msgstr "" -#: aleksis/core/models.py:83 +#: aleksis/core/models.py:85 msgid "Boolean or empty (Yes/No/Neither)" msgstr "" -#: aleksis/core/models.py:84 +#: aleksis/core/models.py:86 msgid "Text (multi-line)" msgstr "" -#: aleksis/core/models.py:86 +#: aleksis/core/models.py:88 msgid "URL / Link" msgstr "" -#: aleksis/core/models.py:98 aleksis/core/models.py:1068 +#: aleksis/core/models.py:100 aleksis/core/models.py:1070 +#: aleksis/core/models.py:1374 msgid "Name" msgstr "" -#: aleksis/core/models.py:100 +#: aleksis/core/models.py:102 msgid "Start date" msgstr "" -#: aleksis/core/models.py:101 +#: aleksis/core/models.py:103 msgid "End date" msgstr "" -#: aleksis/core/models.py:120 +#: aleksis/core/models.py:122 msgid "The start date must be earlier than the end date." msgstr "" -#: aleksis/core/models.py:127 +#: aleksis/core/models.py:129 msgid "There is already a school term for this time or a part of this time." msgstr "" -#: aleksis/core/models.py:156 aleksis/core/models.py:1017 +#: aleksis/core/models.py:158 aleksis/core/models.py:1019 +#: aleksis/core/models.py:1371 msgid "Person" msgstr "" -#: aleksis/core/models.py:159 +#: aleksis/core/models.py:161 msgid "Can view address" msgstr "" -#: aleksis/core/models.py:160 +#: aleksis/core/models.py:162 msgid "Can view contact details" msgstr "" -#: aleksis/core/models.py:161 +#: aleksis/core/models.py:163 msgid "Can view photo" msgstr "" -#: aleksis/core/models.py:162 +#: aleksis/core/models.py:164 msgid "Can view avatar image" msgstr "" -#: aleksis/core/models.py:163 +#: aleksis/core/models.py:165 msgid "Can view persons groups" msgstr "" -#: aleksis/core/models.py:164 +#: aleksis/core/models.py:166 msgid "Can view personal details" msgstr "" -#: aleksis/core/models.py:174 +#: aleksis/core/models.py:176 msgid "female" msgstr "" -#: aleksis/core/models.py:174 +#: aleksis/core/models.py:176 msgid "male" msgstr "" -#: aleksis/core/models.py:182 aleksis/core/models.py:1271 +#: aleksis/core/models.py:184 aleksis/core/models.py:1273 msgid "Linked user" msgstr "" -#: aleksis/core/models.py:188 +#: aleksis/core/models.py:190 msgid "Additional name(s)" msgstr "" -#: aleksis/core/models.py:192 aleksis/core/models.py:504 +#: aleksis/core/models.py:194 aleksis/core/models.py:506 msgid "Short name" msgstr "" -#: aleksis/core/models.py:195 +#: aleksis/core/models.py:197 msgid "Street" msgstr "" -#: aleksis/core/models.py:196 +#: aleksis/core/models.py:198 msgid "Street number" msgstr "" -#: aleksis/core/models.py:197 +#: aleksis/core/models.py:199 msgid "Postal code" msgstr "" -#: aleksis/core/models.py:198 +#: aleksis/core/models.py:200 msgid "Place" msgstr "" -#: aleksis/core/models.py:200 aleksis/core/templates/core/person/full.html:160 +#: aleksis/core/models.py:202 aleksis/core/templates/core/person/full.html:160 msgid "Home phone" msgstr "" -#: aleksis/core/models.py:201 aleksis/core/templates/core/person/full.html:170 +#: aleksis/core/models.py:203 aleksis/core/templates/core/person/full.html:170 msgid "Mobile phone" msgstr "" -#: aleksis/core/models.py:205 +#: aleksis/core/models.py:207 msgid "Date of birth" msgstr "" -#: aleksis/core/models.py:206 +#: aleksis/core/models.py:208 msgid "Place of birth" msgstr "" -#: aleksis/core/models.py:207 +#: aleksis/core/models.py:209 msgid "Sex" msgstr "" -#: aleksis/core/models.py:214 aleksis/core/models.py:543 +#: aleksis/core/models.py:216 aleksis/core/models.py:545 msgid "This is an official photo, used for official documents and for internal use cases." msgstr "" -#: aleksis/core/models.py:219 aleksis/core/models.py:547 +#: aleksis/core/models.py:221 aleksis/core/models.py:549 msgid "Display picture / Avatar" msgstr "" -#: aleksis/core/models.py:222 aleksis/core/models.py:550 +#: aleksis/core/models.py:224 aleksis/core/models.py:552 msgid "This is a picture or an avatar for public display." msgstr "" -#: aleksis/core/models.py:227 aleksis/core/templates/core/person/full.html:235 +#: aleksis/core/models.py:229 aleksis/core/templates/core/person/full.html:235 msgid "Guardians / Parents" msgstr "" -#: aleksis/core/models.py:234 +#: aleksis/core/models.py:236 msgid "Primary group" msgstr "" -#: aleksis/core/models.py:237 aleksis/core/models.py:717 -#: aleksis/core/models.py:741 aleksis/core/models.py:832 -#: aleksis/core/models.py:1092 +#: aleksis/core/models.py:239 aleksis/core/models.py:719 +#: aleksis/core/models.py:743 aleksis/core/models.py:834 +#: aleksis/core/models.py:1094 msgid "Description" msgstr "" -#: aleksis/core/models.py:457 +#: aleksis/core/models.py:459 msgid "Title of field" msgstr "" -#: aleksis/core/models.py:459 +#: aleksis/core/models.py:461 msgid "Type of field" msgstr "" -#: aleksis/core/models.py:461 +#: aleksis/core/models.py:463 msgid "Required" msgstr "" -#: aleksis/core/models.py:462 +#: aleksis/core/models.py:464 msgid "Help text / description" msgstr "" -#: aleksis/core/models.py:468 +#: aleksis/core/models.py:470 msgid "Addtitional field for groups" msgstr "" -#: aleksis/core/models.py:469 +#: aleksis/core/models.py:471 msgid "Addtitional fields for groups" msgstr "" -#: aleksis/core/models.py:489 +#: aleksis/core/models.py:491 msgid "Can assign child groups to groups" msgstr "" -#: aleksis/core/models.py:490 +#: aleksis/core/models.py:492 msgid "Can view statistics about group." msgstr "" -#: aleksis/core/models.py:502 +#: aleksis/core/models.py:504 msgid "Long name" msgstr "" -#: aleksis/core/models.py:512 aleksis/core/templates/core/group/full.html:85 +#: aleksis/core/models.py:514 aleksis/core/templates/core/group/full.html:85 msgid "Members" msgstr "" -#: aleksis/core/models.py:515 aleksis/core/templates/core/group/full.html:82 +#: aleksis/core/models.py:517 aleksis/core/templates/core/group/full.html:82 msgid "Owners" msgstr "" -#: aleksis/core/models.py:522 aleksis/core/templates/core/group/full.html:55 +#: aleksis/core/models.py:524 aleksis/core/templates/core/group/full.html:55 msgid "Parent groups" msgstr "" -#: aleksis/core/models.py:530 +#: aleksis/core/models.py:532 msgid "Type of group" msgstr "" -#: aleksis/core/models.py:716 aleksis/core/models.py:740 -#: aleksis/core/models.py:831 +#: aleksis/core/models.py:718 aleksis/core/models.py:742 +#: aleksis/core/models.py:833 #: aleksis/core/templates/core/announcement/list.html:18 msgid "Title" msgstr "" -#: aleksis/core/models.py:719 +#: aleksis/core/models.py:721 msgid "Application" msgstr "" -#: aleksis/core/models.py:725 +#: aleksis/core/models.py:727 msgid "Activity" msgstr "" -#: aleksis/core/models.py:726 +#: aleksis/core/models.py:728 msgid "Activities" msgstr "" -#: aleksis/core/models.py:732 +#: aleksis/core/models.py:734 msgid "Sender" msgstr "" -#: aleksis/core/models.py:737 +#: aleksis/core/models.py:739 msgid "Recipient" msgstr "" -#: aleksis/core/models.py:742 aleksis/core/models.py:1069 +#: aleksis/core/models.py:744 aleksis/core/models.py:1071 msgid "Link" msgstr "" -#: aleksis/core/models.py:744 +#: aleksis/core/models.py:746 msgid "Send notification at" msgstr "" -#: aleksis/core/models.py:746 +#: aleksis/core/models.py:748 msgid "Read" msgstr "" -#: aleksis/core/models.py:747 +#: aleksis/core/models.py:749 msgid "Sent" msgstr "" -#: aleksis/core/models.py:764 +#: aleksis/core/models.py:766 msgid "Notification" msgstr "" -#: aleksis/core/models.py:833 +#: aleksis/core/models.py:767 aleksis/core/preferences.py:29 +#: aleksis/core/templates/core/base.html:81 +#: aleksis/core/templates/core/notifications.html:4 +#: aleksis/core/templates/core/notifications.html:5 +msgid "Notifications" +msgstr "" + +#: aleksis/core/models.py:835 msgid "Link to detailed view" msgstr "" -#: aleksis/core/models.py:836 +#: aleksis/core/models.py:838 msgid "Date and time from when to show" msgstr "" -#: aleksis/core/models.py:839 +#: aleksis/core/models.py:841 msgid "Date and time until when to show" msgstr "" -#: aleksis/core/models.py:864 +#: aleksis/core/models.py:866 msgid "Announcement" msgstr "" -#: aleksis/core/models.py:902 +#: aleksis/core/models.py:904 msgid "Announcement recipient" msgstr "" -#: aleksis/core/models.py:903 +#: aleksis/core/models.py:905 msgid "Announcement recipients" msgstr "" -#: aleksis/core/models.py:925 +#: aleksis/core/models.py:927 msgid "Widget Title" msgstr "" -#: aleksis/core/models.py:926 +#: aleksis/core/models.py:928 msgid "Activate Widget" msgstr "" -#: aleksis/core/models.py:927 +#: aleksis/core/models.py:929 msgid "Widget is broken" msgstr "" -#: aleksis/core/models.py:930 +#: aleksis/core/models.py:932 msgid "Size on mobile devices" msgstr "" -#: aleksis/core/models.py:931 +#: aleksis/core/models.py:933 msgid "<= 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:936 +#: aleksis/core/models.py:938 msgid "Size on tablet devices" msgstr "" -#: aleksis/core/models.py:937 +#: aleksis/core/models.py:939 msgid "> 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:942 +#: aleksis/core/models.py:944 msgid "Size on desktop devices" msgstr "" -#: aleksis/core/models.py:943 +#: aleksis/core/models.py:945 msgid "> 992 px, 12 columns" msgstr "" -#: aleksis/core/models.py:948 +#: aleksis/core/models.py:950 msgid "Size on large desktop devices" msgstr "" -#: aleksis/core/models.py:949 +#: aleksis/core/models.py:951 msgid "> 1200 px>, 12 columns" msgstr "" -#: aleksis/core/models.py:980 +#: aleksis/core/models.py:982 msgid "Can edit default dashboard" msgstr "" -#: aleksis/core/models.py:981 +#: aleksis/core/models.py:983 msgid "Dashboard Widget" msgstr "" -#: aleksis/core/models.py:982 +#: aleksis/core/models.py:984 msgid "Dashboard Widgets" msgstr "" -#: aleksis/core/models.py:988 +#: aleksis/core/models.py:990 msgid "URL" msgstr "" -#: aleksis/core/models.py:989 +#: aleksis/core/models.py:991 msgid "Icon URL" msgstr "" -#: aleksis/core/models.py:995 +#: aleksis/core/models.py:997 msgid "External link widget" msgstr "" -#: aleksis/core/models.py:996 +#: aleksis/core/models.py:998 msgid "External link widgets" msgstr "" -#: aleksis/core/models.py:1002 +#: aleksis/core/models.py:1004 msgid "Content" msgstr "" -#: aleksis/core/models.py:1008 +#: aleksis/core/models.py:1010 msgid "Static content widget" msgstr "" -#: aleksis/core/models.py:1009 +#: aleksis/core/models.py:1011 msgid "Static content widgets" msgstr "" -#: aleksis/core/models.py:1014 +#: aleksis/core/models.py:1016 msgid "Dashboard widget" msgstr "" -#: aleksis/core/models.py:1019 +#: aleksis/core/models.py:1021 msgid "Order" msgstr "" -#: aleksis/core/models.py:1020 +#: aleksis/core/models.py:1022 msgid "Part of the default dashboard" msgstr "" -#: aleksis/core/models.py:1035 +#: aleksis/core/models.py:1037 msgid "Dashboard widget order" msgstr "" -#: aleksis/core/models.py:1036 +#: aleksis/core/models.py:1038 msgid "Dashboard widget orders" msgstr "" -#: aleksis/core/models.py:1042 +#: aleksis/core/models.py:1044 msgid "Menu ID" msgstr "" -#: aleksis/core/models.py:1055 +#: aleksis/core/models.py:1057 msgid "Custom menu" msgstr "" -#: aleksis/core/models.py:1056 +#: aleksis/core/models.py:1058 msgid "Custom menus" msgstr "" -#: aleksis/core/models.py:1066 +#: aleksis/core/models.py:1068 msgid "Menu" msgstr "" -#: aleksis/core/models.py:1070 aleksis/core/models.py:1318 +#: aleksis/core/models.py:1072 aleksis/core/models.py:1320 #: aleksis/core/templates/oauth2_provider/application/detail.html:26 msgid "Icon" msgstr "" -#: aleksis/core/models.py:1076 +#: aleksis/core/models.py:1078 msgid "Custom menu item" msgstr "" -#: aleksis/core/models.py:1077 +#: aleksis/core/models.py:1079 msgid "Custom menu items" msgstr "" -#: aleksis/core/models.py:1091 +#: aleksis/core/models.py:1093 msgid "Title of type" msgstr "" -#: aleksis/core/models.py:1098 aleksis/core/templates/core/group/full.html:47 +#: aleksis/core/models.py:1100 aleksis/core/templates/core/group/full.html:47 msgid "Group type" msgstr "" -#: aleksis/core/models.py:1112 +#: aleksis/core/models.py:1114 msgid "Can view system status" msgstr "" -#: aleksis/core/models.py:1113 +#: aleksis/core/models.py:1115 msgid "Can manage data" msgstr "" -#: aleksis/core/models.py:1114 +#: aleksis/core/models.py:1116 msgid "Can impersonate" msgstr "" -#: aleksis/core/models.py:1115 +#: aleksis/core/models.py:1117 msgid "Can use search" msgstr "" -#: aleksis/core/models.py:1116 +#: aleksis/core/models.py:1118 msgid "Can change site preferences" msgstr "" -#: aleksis/core/models.py:1117 +#: aleksis/core/models.py:1119 msgid "Can change person preferences" msgstr "" -#: aleksis/core/models.py:1118 +#: aleksis/core/models.py:1120 msgid "Can change group preferences" msgstr "" -#: aleksis/core/models.py:1119 +#: aleksis/core/models.py:1121 msgid "Can test PDF generation" msgstr "" -#: aleksis/core/models.py:1120 +#: aleksis/core/models.py:1122 msgid "Can invite persons" msgstr "" -#: aleksis/core/models.py:1156 +#: aleksis/core/models.py:1158 msgid "Related data check task" msgstr "" -#: aleksis/core/models.py:1164 +#: aleksis/core/models.py:1166 msgid "Issue solved" msgstr "" -#: aleksis/core/models.py:1165 +#: aleksis/core/models.py:1167 msgid "Notification sent" msgstr "" -#: aleksis/core/models.py:1178 +#: aleksis/core/models.py:1180 msgid "Data check result" msgstr "" -#: aleksis/core/models.py:1179 +#: aleksis/core/models.py:1181 msgid "Data check results" msgstr "" -#: aleksis/core/models.py:1181 +#: aleksis/core/models.py:1183 msgid "Can run data checks" msgstr "" -#: aleksis/core/models.py:1182 +#: aleksis/core/models.py:1184 msgid "Can solve data check problems" msgstr "" -#: aleksis/core/models.py:1189 +#: aleksis/core/models.py:1191 msgid "E-Mail address" msgstr "" -#: aleksis/core/models.py:1221 +#: aleksis/core/models.py:1223 msgid "Owner" msgstr "" -#: aleksis/core/models.py:1225 +#: aleksis/core/models.py:1227 msgid "File expires at" msgstr "" -#: aleksis/core/models.py:1227 +#: aleksis/core/models.py:1229 msgid "Generated HTML file" msgstr "" -#: aleksis/core/models.py:1229 +#: aleksis/core/models.py:1231 msgid "Generated PDF file" msgstr "" -#: aleksis/core/models.py:1236 +#: aleksis/core/models.py:1238 msgid "PDF file" msgstr "" -#: aleksis/core/models.py:1237 +#: aleksis/core/models.py:1239 msgid "PDF files" msgstr "" -#: aleksis/core/models.py:1242 +#: aleksis/core/models.py:1244 msgid "Task result" msgstr "" -#: aleksis/core/models.py:1245 +#: aleksis/core/models.py:1247 msgid "Task user" msgstr "" -#: aleksis/core/models.py:1257 +#: aleksis/core/models.py:1259 msgid "Task user assignment" msgstr "" -#: aleksis/core/models.py:1258 +#: aleksis/core/models.py:1260 msgid "Task user assignments" msgstr "" -#: aleksis/core/models.py:1274 +#: aleksis/core/models.py:1276 msgid "Additional attributes" msgstr "" -#: aleksis/core/models.py:1312 +#: aleksis/core/models.py:1314 msgid "Allowed scopes that clients can request" msgstr "" -#: aleksis/core/models.py:1322 +#: aleksis/core/models.py:1324 msgid "This image will be shown as icon in the authorization flow. It should be squared." msgstr "" +#: aleksis/core/models.py:1373 +msgid "UUID" +msgstr "" + +#: aleksis/core/models.py:1377 +msgid "Selected ICal feed" +msgstr "" + +#: aleksis/core/models.py:1386 +msgid "Personal Calendar URL" +msgstr "" + +#: aleksis/core/models.py:1387 +msgid "Personal Calendar URLs" +msgstr "" + #: aleksis/core/preferences.py:25 msgid "General" msgstr "" @@ -1518,7 +1558,7 @@ msgid "Publish new announcement" msgstr "" #: aleksis/core/templates/core/announcement/form.html:34 -msgid "Save und publish announcement" +msgid "Save and publish announcement" msgstr "" #: aleksis/core/templates/core/announcement/list.html:19 @@ -1820,6 +1860,40 @@ msgstr "" msgid "Create group type" msgstr "" +#: aleksis/core/templates/core/ical/ical_create.html:4 +#: aleksis/core/templates/core/ical/ical_create.html:5 +#: aleksis/core/templates/core/ical/ical_list.html:12 +msgid "Create iCal URL" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_create.html:16 +#: aleksis/core/templates/core/ical/ical_edit.html:16 +#: aleksis/core/templates/oauth2_provider/application/create.html:14 +#: aleksis/core/templates/oauth2_provider/application/edit.html:14 +#: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:24 +#: aleksis/core/templates/two_factor/_wizard_actions.html:6 +msgid "Cancel" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_edit.html:4 +#: aleksis/core/templates/core/ical/ical_edit.html:5 +#, python-format +msgid "Edit iCal URL %(object)s" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_list.html:4 +#: aleksis/core/templates/core/ical/ical_list.html:5 +msgid "ICal Feeds" +msgstr "" + +#: aleksis/core/templates/core/ical/ical_list.html:8 +msgid "These are URLs for different Calendar Feeds in the iCal (.ics) format. You can create as many as you want and import them in your calendar software." +msgstr "" + +#: aleksis/core/templates/core/ical/ical_list.html:14 +msgid "Your iCal URLs" +msgstr "" + #: aleksis/core/templates/core/index.html:4 msgid "Home" msgstr "" @@ -2296,13 +2370,6 @@ msgstr "" msgid "Register OAuth2 Application" msgstr "" -#: aleksis/core/templates/oauth2_provider/application/create.html:14 -#: aleksis/core/templates/oauth2_provider/application/edit.html:14 -#: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:24 -#: aleksis/core/templates/two_factor/_wizard_actions.html:6 -msgid "Cancel" -msgstr "" - #: aleksis/core/templates/oauth2_provider/application/detail.html:5 msgid "OAuth2 Application" msgstr "" @@ -3022,156 +3089,168 @@ msgstr "" msgid "Download PDF" msgstr "" -#: aleksis/core/views.py:289 +#: aleksis/core/views.py:292 msgid "The school term has been created." msgstr "" -#: aleksis/core/views.py:301 +#: aleksis/core/views.py:304 msgid "The school term has been saved." msgstr "" -#: aleksis/core/views.py:421 +#: aleksis/core/views.py:424 msgid "The child groups were successfully saved." msgstr "" -#: aleksis/core/views.py:440 aleksis/core/views.py:450 +#: aleksis/core/views.py:443 aleksis/core/views.py:453 msgid "The person has been saved." msgstr "" -#: aleksis/core/views.py:500 +#: aleksis/core/views.py:503 msgid "The group has been saved." msgstr "" -#: aleksis/core/views.py:597 +#: aleksis/core/views.py:600 msgid "The announcement has been saved." msgstr "" -#: aleksis/core/views.py:613 +#: aleksis/core/views.py:616 msgid "The announcement has been deleted." msgstr "" -#: aleksis/core/views.py:681 +#: aleksis/core/views.py:684 msgid "The requested preference registry does not exist" msgstr "" -#: aleksis/core/views.py:700 +#: aleksis/core/views.py:703 msgid "The preferences have been saved successfully." msgstr "" -#: aleksis/core/views.py:724 +#: aleksis/core/views.py:727 msgid "The person has been deleted." msgstr "" -#: aleksis/core/views.py:738 +#: aleksis/core/views.py:741 msgid "The group has been deleted." msgstr "" -#: aleksis/core/views.py:770 +#: aleksis/core/views.py:773 msgid "The additional_field has been saved." msgstr "" -#: aleksis/core/views.py:804 +#: aleksis/core/views.py:807 msgid "The additional field has been deleted." msgstr "" -#: aleksis/core/views.py:829 +#: aleksis/core/views.py:832 msgid "The group type has been saved." msgstr "" -#: aleksis/core/views.py:859 +#: aleksis/core/views.py:862 msgid "The group type has been deleted." msgstr "" -#: aleksis/core/views.py:892 +#: aleksis/core/views.py:895 msgid "Progress: Run data checks" msgstr "" -#: aleksis/core/views.py:893 +#: aleksis/core/views.py:896 msgid "Run data checks …" msgstr "" -#: aleksis/core/views.py:894 +#: aleksis/core/views.py:897 msgid "The data checks were run successfully." msgstr "" -#: aleksis/core/views.py:895 +#: aleksis/core/views.py:898 msgid "There was a problem while running data checks." msgstr "" -#: aleksis/core/views.py:911 +#: aleksis/core/views.py:914 #, python-brace-format msgid "The solve option '{solve_option_obj.verbose_name}' " msgstr "" -#: aleksis/core/views.py:921 +#: aleksis/core/views.py:924 msgid "The requested solve option does not exist" msgstr "" -#: aleksis/core/views.py:953 +#: aleksis/core/views.py:956 msgid "The dashboard widget has been saved." msgstr "" -#: aleksis/core/views.py:983 +#: aleksis/core/views.py:986 msgid "The dashboard widget has been created." msgstr "" -#: aleksis/core/views.py:993 +#: aleksis/core/views.py:996 msgid "The dashboard widget has been deleted." msgstr "" -#: aleksis/core/views.py:1064 +#: aleksis/core/views.py:1067 msgid "Your dashboard configuration has been saved successfully." msgstr "" -#: aleksis/core/views.py:1066 +#: aleksis/core/views.py:1069 msgid "The configuration of the default dashboard has been saved successfully." msgstr "" -#: aleksis/core/views.py:1142 +#: aleksis/core/views.py:1145 #, python-brace-format msgid "The invitation was successfully created. The invitation code is {code}" msgstr "" -#: aleksis/core/views.py:1233 +#: aleksis/core/views.py:1236 msgid "We have successfully assigned the permissions." msgstr "" -#: aleksis/core/views.py:1243 +#: aleksis/core/views.py:1246 msgid "The global user permission has been deleted." msgstr "" -#: aleksis/core/views.py:1253 +#: aleksis/core/views.py:1256 msgid "The global group permission has been deleted." msgstr "" -#: aleksis/core/views.py:1263 +#: aleksis/core/views.py:1266 msgid "The object user permission has been deleted." msgstr "" -#: aleksis/core/views.py:1273 +#: aleksis/core/views.py:1276 msgid "The object group permission has been deleted." msgstr "" -#: aleksis/core/views.py:1341 +#: aleksis/core/views.py:1344 msgid "The requested PDF file does not exist" msgstr "" -#: aleksis/core/views.py:1350 aleksis/core/views.py:1354 +#: aleksis/core/views.py:1353 aleksis/core/views.py:1357 msgid "The requested task does not exist or is not accessible" msgstr "" -#: aleksis/core/views.py:1406 +#: aleksis/core/views.py:1409 msgid "The third-party account could not be disconnected because it is the only login method available." msgstr "" -#: aleksis/core/views.py:1413 +#: aleksis/core/views.py:1416 msgid "The third-party account has been successfully disconnected." msgstr "" -#: aleksis/core/views.py:1484 +#: aleksis/core/views.py:1487 msgid "Person was invited successfully and an email with further instructions has been send to them." msgstr "" -#: aleksis/core/views.py:1495 +#: aleksis/core/views.py:1498 msgid "Person was already invited." msgstr "" + +#: aleksis/core/views.py:1598 +msgid "ICal feed updated successfully" +msgstr "" + +#: aleksis/core/views.py:1608 +msgid "ICal feed deleted successfully" +msgstr "" + +#: aleksis/core/views.py:1616 +msgid "ICal feed created successfully" +msgstr "" diff --git a/aleksis/core/locale/tr_TR/LC_MESSAGES/djangojs.po b/aleksis/core/locale/tr_TR/LC_MESSAGES/djangojs.po index f3df4c3fc6d2848a739ddd1faac44cb9048c97b2..509b8a65f4bdbc6ac9c1ec0282c1ff99b6f1f8c1 100644 --- a/aleksis/core/locale/tr_TR/LC_MESSAGES/djangojs.po +++ b/aleksis/core/locale/tr_TR/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-23 11:20+0100\n" +"POT-Creation-Date: 2022-05-24 19:37+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" diff --git a/aleksis/core/locale/uk/LC_MESSAGES/django.po b/aleksis/core/locale/uk/LC_MESSAGES/django.po index 319c980c3d781e1c6bfb89b8dbd54945d8abc736..2334b98a3d6953ce835a80369615359e8ac25d5e 100644 --- a/aleksis/core/locale/uk/LC_MESSAGES/django.po +++ b/aleksis/core/locale/uk/LC_MESSAGES/django.po @@ -3,89 +3,90 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-23 12:58+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"Language: \n" +"POT-Creation-Date: 2022-05-24 19:37+0200\n" +"PO-Revision-Date: 2022-06-01 17:35+0000\n" +"Last-Translator: Serhii Horichenko <m@sgg.im>\n" +"Language-Team: Ukrainian <https://translate.edugit.org/projects/aleksis/" +"aleksis-core/uk/>\n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " -"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " -"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " -"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 " +"? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > " +"14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % " +"100 >=11 && n % 100 <=14 )) ? 2: 3);\n" +"X-Generator: Weblate 4.12.1\n" #: aleksis/core/apps.py:166 msgid "OpenID Connect scope" -msgstr "" +msgstr "Межа дії OpenID Connect" #: aleksis/core/apps.py:167 msgid "Given name, family name, link to profile and picture if existing." -msgstr "" +msgstr "Ім'Ñ, прізвище, поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° профіль та фото, Ñкщо Ñ” в наÑвноÑÑ‚Ñ–." #: aleksis/core/apps.py:168 msgid "Full home postal address" -msgstr "" +msgstr "Повна Ð´Ð¾Ð¼Ð°ÑˆÐ½Ñ Ð¿Ð¾ÑˆÑ‚Ð¾Ð²Ð° адреÑа" #: aleksis/core/apps.py:169 msgid "Email address" -msgstr "" +msgstr "Ел.адреÑа" #: aleksis/core/apps.py:170 msgid "Home and mobile phone" -msgstr "" +msgstr "Домашній та мобільний телефон" #: aleksis/core/apps.py:171 aleksis/core/forms.py:220 aleksis/core/menus.py:171 #: aleksis/core/models.py:489 aleksis/core/templates/core/group/list.html:8 #: aleksis/core/templates/core/group/list.html:9 #: aleksis/core/templates/core/person/full.html:246 msgid "Groups" -msgstr "" +msgstr "Групи" #: aleksis/core/data_checks.py:56 msgid "Ignore problem" -msgstr "" +msgstr "Ігнорувати проблему" #: aleksis/core/data_checks.py:185 #, python-brace-format msgid "Solve option '{solve_option_obj.verbose_name}' " -msgstr "" +msgstr "Варіант розв'ÑÐ·Ð°Ð½Ð½Ñ '{solve_option_obj.verbose_name}' " #: aleksis/core/data_checks.py:291 msgid "Deactivate DashboardWidget" -msgstr "" +msgstr "Вимкнути віджет інформпанелі" #: aleksis/core/data_checks.py:303 msgid "Ensure that there are no broken DashboardWidgets." -msgstr "" +msgstr "ПереконайтеÑÑ Ñƒ відÑутноÑÑ‚Ñ– збійних віджетів на інформпанелі." #: aleksis/core/data_checks.py:304 msgid "The DashboardWidget was reported broken automatically." -msgstr "" +msgstr "Віджет інформпанелі повідомив про збій в автоматичному режимі." #: aleksis/core/feeds.py:52 msgid "Birthday Calendar" -msgstr "" +msgstr "Календар Днів ÐародженнÑ" #: aleksis/core/feeds.py:53 msgid "A Calendar of Birthdays" -msgstr "" +msgstr "Календар Днів ÐародженнÑ" #: aleksis/core/feeds.py:66 #, python-format msgid "%(name)s's birthday" -msgstr "" +msgstr "%(name)s має День ÐародженнÑ" #: aleksis/core/feeds.py:71 #, python-format msgid "%(name)s was born on %(birthday)s" -msgstr "" +msgstr "%(name)s народивÑÑ(-лаÑÑ) %(birthday)s" #: aleksis/core/filters.py:42 aleksis/core/templates/core/base.html:139 #: aleksis/core/templates/core/base.html:140 @@ -94,337 +95,337 @@ msgstr "" #: aleksis/core/templates/search/search.html:7 #: aleksis/core/templates/search/search.html:22 msgid "Search" -msgstr "" +msgstr "Пошук" #: aleksis/core/filters.py:59 msgid "Search by name" -msgstr "" +msgstr "Пошук за ім'Ñм" #: aleksis/core/filters.py:71 msgid "Search by contact details" -msgstr "" +msgstr "Пошук за контактними даними" #: aleksis/core/filters.py:92 msgid "Permission" -msgstr "" +msgstr "Дозвіл" #: aleksis/core/filters.py:100 msgid "Content type" -msgstr "" +msgstr "Тип зміÑту" #: aleksis/core/filters.py:113 aleksis/core/models.py:715 msgid "User" -msgstr "" +msgstr "КориÑтувач" #: aleksis/core/filters.py:135 aleksis/core/models.py:488 msgid "Group" -msgstr "" +msgstr "Група" #: aleksis/core/forms.py:50 aleksis/core/forms.py:581 msgid "Base data" -msgstr "" +msgstr "ОÑновні дані" #: aleksis/core/forms.py:55 msgid "Address" -msgstr "" +msgstr "ÐдреÑа" #: aleksis/core/forms.py:56 aleksis/core/forms.py:590 msgid "Contact data" -msgstr "" +msgstr "Контактні дані" #: aleksis/core/forms.py:58 msgid "Advanced personal data" -msgstr "" +msgstr "Додаткові оÑобиÑÑ‚Ñ– дані" #: aleksis/core/forms.py:106 msgid "New user" -msgstr "" +msgstr "Ðовий кориÑтувач" #: aleksis/core/forms.py:106 msgid "Create a new account" -msgstr "" +msgstr "Створити новий обліковий запиÑ" #: aleksis/core/forms.py:132 msgid "You cannot set a new username when also selecting an existing user." -msgstr "" +msgstr "Обравши вже Ñ–Ñнуючого кориÑтувача неможливо Ñтворити новий логін." #: aleksis/core/forms.py:136 msgid "This username is already in use." -msgstr "" +msgstr "Такий логін вже зайнÑтий." #: aleksis/core/forms.py:153 aleksis/core/models.py:136 msgid "School term" -msgstr "" +msgstr "Ðавчальний рік" #: aleksis/core/forms.py:154 msgid "Common data" -msgstr "" +msgstr "Загальні дані" #: aleksis/core/forms.py:155 aleksis/core/forms.py:207 #: aleksis/core/menus.py:160 aleksis/core/models.py:159 #: aleksis/core/templates/core/person/list.html:8 #: aleksis/core/templates/core/person/list.html:9 msgid "Persons" -msgstr "" +msgstr "ОÑоби" #: aleksis/core/forms.py:156 aleksis/core/forms.py:592 msgid "Additional data" -msgstr "" +msgstr "Додаткові дані" #: aleksis/core/forms.py:157 aleksis/core/models.py:212 #: aleksis/core/models.py:541 msgid "Photo" -msgstr "" +msgstr "Фото" #: aleksis/core/forms.py:199 aleksis/core/forms.py:202 #: aleksis/core/models.py:79 msgid "Date" -msgstr "" +msgstr "Дата" #: aleksis/core/forms.py:200 aleksis/core/forms.py:203 #: aleksis/core/models.py:87 msgid "Time" -msgstr "" +msgstr "ЧаÑ" #: aleksis/core/forms.py:233 msgid "From when until when should the announcement be displayed?" -msgstr "" +msgstr "З Ñкого по Ñкий Ñ‡Ð°Ñ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ð¾ відображатиÑÑ Ñ†Ðµ оголошеннÑ?" #: aleksis/core/forms.py:236 msgid "Who should see the announcement?" -msgstr "" +msgstr "Хто повинен бачити це оголошеннÑ?" #: aleksis/core/forms.py:237 msgid "Write your announcement:" -msgstr "" +msgstr "Складіть Ñвоє оголошенÑ:" #: aleksis/core/forms.py:276 msgid "You are not allowed to create announcements which are only valid in the past." -msgstr "" +msgstr "ÐžÐ³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¼Ð¸Ð½ÑƒÐ»Ð¾Ð³Ð¾ Вам Ñтворювати не дозволено." #: aleksis/core/forms.py:280 msgid "The from date and time must be earlier then the until date and time." -msgstr "" +msgstr "Дата Ñ– Ñ‡Ð°Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ повинні бути раніше за дату Ñ– Ñ‡Ð°Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ." #: aleksis/core/forms.py:289 msgid "You need at least one recipient." -msgstr "" +msgstr "Вам потрібен принаймні один отримувач." #: aleksis/core/forms.py:398 msgid "Invitation code" -msgstr "" +msgstr "Код запрошеннÑ" #: aleksis/core/forms.py:399 msgid "Please enter your invitation code." -msgstr "" +msgstr "Ðапишіть, будь лаÑка, Ñвій код запрошеннÑ." #: aleksis/core/forms.py:418 aleksis/core/models.py:187 msgid "First name" -msgstr "" +msgstr "Ім'Ñ" #: aleksis/core/forms.py:419 aleksis/core/models.py:188 msgid "Last name" -msgstr "" +msgstr "Прізвище" #: aleksis/core/forms.py:428 msgid "A person is using this e-mail address" -msgstr "" +msgstr "ОÑоба кориÑтуєтьÑÑ Ñ†Ñ–Ñ”ÑŽ ел.адреÑою" #: aleksis/core/forms.py:456 msgid "Who should get the permission?" -msgstr "" +msgstr "Хто повинен отримати такий дозвіл?" #: aleksis/core/forms.py:457 msgid "On what?" -msgstr "" +msgstr "Ð’ разі чого?" #: aleksis/core/forms.py:483 msgid "Select objects which the permission should be granted for:" -msgstr "" +msgstr "Оберіть об'єкти, до Ñких буде наданий дозвіл:" #: aleksis/core/forms.py:486 msgid "Grant the permission for all objects" -msgstr "" +msgstr "Ðадати дозвіл до вÑÑ–Ñ… об'єктів" #: aleksis/core/forms.py:494 msgid "You must select at least one group or person which should get the permission." -msgstr "" +msgstr "Ви повинні обрати принаймні одну групу або оÑобу, хто буде мати дозвіл." #: aleksis/core/forms.py:499 msgid "You must grant the permission to all objects and/or to some objects." -msgstr "" +msgstr "Ви повинні надати дозвіл до вÑÑ–Ñ… об'єктів або до деÑких." #: aleksis/core/forms.py:586 -msgid "Adress data" -msgstr "" +msgid "Address data" +msgstr "Дані адреÑи" #: aleksis/core/forms.py:598 msgid "Account data" -msgstr "" +msgstr "Дані облікового запиÑу" #: aleksis/core/forms.py:605 msgid "Password" -msgstr "" +msgstr "Пароль" #: aleksis/core/forms.py:608 msgid "Password (again)" -msgstr "" +msgstr "Пароль (ще раз)" #: aleksis/core/forms.py:728 msgid "The selected action does not exist." -msgstr "" +msgstr "Обрана Ð´Ñ–Ñ Ð½Ðµ Ñ–Ñнує." #: aleksis/core/forms.py:739 msgid "You do not have permission to run {} on all selected objects." -msgstr "" +msgstr "У Ð’Ð°Ñ Ð²Ñ–Ð´Ñутній дозвіл на запуÑк {} на уÑÑ–Ñ… обраних об'єктах." #: aleksis/core/forms.py:795 msgid "No valid selection." -msgstr "" +msgstr "Ðеправильний вибір." #: aleksis/core/health_checks.py:21 msgid "There are unresolved data problems." -msgstr "" +msgstr "ІÑнують нерозв'Ñзані проблеми з даними." #: aleksis/core/health_checks.py:40 msgid "Error accessing backup storage: {}" -msgstr "" +msgstr "Помилка доÑтупу до резервного Ñховища: {}" #: aleksis/core/health_checks.py:50 msgid "Last backup {}!" -msgstr "" +msgstr "ОÑÑ‚Ð°Ð½Ð½Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð° ÐºÐ¾Ð¿Ñ–Ñ {}!" #: aleksis/core/health_checks.py:52 msgid "No backup found!" -msgstr "" +msgstr "Резервна ÐºÐ¾Ð¿Ñ–Ñ Ð½Ðµ знайдена!" #: aleksis/core/health_checks.py:79 msgid "No backup result found!" -msgstr "" +msgstr "Результат резервного ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ðµ знайдений!" #: aleksis/core/menus.py:7 aleksis/core/templates/two_factor/core/login.html:6 #: aleksis/core/templates/two_factor/core/login.html:32 #: aleksis/core/templates/two_factor/core/login.html:95 msgid "Login" -msgstr "" +msgstr "Увійти" #: aleksis/core/menus.py:13 aleksis/core/templates/account/signup.html:22 #: aleksis/core/templates/socialaccount/signup.html:23 msgid "Sign up" -msgstr "" +msgstr "ЗареєÑтруватиÑÑ" #: aleksis/core/menus.py:22 aleksis/core/templates/invitations/enter.html:7 msgid "Accept invitation" -msgstr "" +msgstr "ПрийнÑти запрошеннÑ" #: aleksis/core/menus.py:31 msgid "Dashboard" -msgstr "" +msgstr "Інформпанель" #: aleksis/core/menus.py:39 msgid "Admin" -msgstr "" +msgstr "Ðдмін" #: aleksis/core/menus.py:47 aleksis/core/models.py:867 #: aleksis/core/templates/core/announcement/list.html:7 #: aleksis/core/templates/core/announcement/list.html:8 msgid "Announcements" -msgstr "" +msgstr "ОголошеннÑ" #: aleksis/core/menus.py:58 aleksis/core/models.py:137 #: aleksis/core/templates/core/school_term/list.html:8 #: aleksis/core/templates/core/school_term/list.html:9 msgid "School terms" -msgstr "" +msgstr "Ðавчальний рік" #: aleksis/core/menus.py:69 #: aleksis/core/templates/core/dashboard_widget/list.html:8 #: aleksis/core/templates/core/dashboard_widget/list.html:9 msgid "Dashboard widgets" -msgstr "" +msgstr "Віджети інформпанелі" #: aleksis/core/menus.py:80 #: aleksis/core/templates/core/management/data_management.html:6 #: aleksis/core/templates/core/management/data_management.html:7 msgid "Data management" -msgstr "" +msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ð¼Ð¸" #: aleksis/core/menus.py:91 #: aleksis/core/templates/core/pages/system_status.html:5 #: aleksis/core/templates/core/pages/system_status.html:7 msgid "System status" -msgstr "" +msgstr "Стан ÑиÑтеми" #: aleksis/core/menus.py:102 msgid "Configuration" -msgstr "" +msgstr "КонфігураціÑ" #: aleksis/core/menus.py:113 aleksis/core/templates/core/data_check/list.html:9 #: aleksis/core/templates/core/data_check/list.html:10 msgid "Data checks" -msgstr "" +msgstr "Первірки даних" #: aleksis/core/menus.py:119 aleksis/core/templates/core/perms/list.html:13 #: aleksis/core/templates/core/perms/list.html:14 msgid "Manage permissions" -msgstr "" +msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»Ð°Ð¼Ð¸" #: aleksis/core/menus.py:130 msgid "Backend Admin" -msgstr "" +msgstr "ÐдмініÑÑ‚Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐºÐµÐ½Ð´Ñƒ" #: aleksis/core/menus.py:138 #: aleksis/core/templates/oauth2_provider/application/list.html:5 #: aleksis/core/templates/oauth2_provider/application/list.html:6 msgid "OAuth2 Applications" -msgstr "" +msgstr "Додатки OAuth2" #: aleksis/core/menus.py:151 msgid "People" -msgstr "" +msgstr "Люди" #: aleksis/core/menus.py:182 aleksis/core/models.py:1101 #: aleksis/core/templates/core/group_type/list.html:8 #: aleksis/core/templates/core/group_type/list.html:9 msgid "Group types" -msgstr "" +msgstr "Типи груп" #: aleksis/core/menus.py:193 msgid "Groups and child groups" -msgstr "" +msgstr "Групи та підлеглі групи" #: aleksis/core/menus.py:204 aleksis/core/models.py:537 #: aleksis/core/templates/core/additional_field/list.html:8 #: aleksis/core/templates/core/additional_field/list.html:9 msgid "Additional fields" -msgstr "" +msgstr "Додаткові полÑ" #: aleksis/core/menus.py:215 msgid "Invite person" -msgstr "" +msgstr "ЗапроÑити оÑобу" #: aleksis/core/menus.py:228 #: aleksis/core/templates/core/group/child_groups.html:7 #: aleksis/core/templates/core/group/child_groups.html:9 msgid "Assign child groups to groups" -msgstr "" +msgstr "Призначити підлеглі групи до груп" #: aleksis/core/menus.py:240 msgid "Stop impersonation" -msgstr "" +msgstr "Зупинити маÑкуваннÑ" #: aleksis/core/menus.py:249 msgid "Account" -msgstr "" +msgstr "Обліковий запиÑ" #: aleksis/core/menus.py:258 #: aleksis/core/templates/dynamic_preferences/form.html:5 msgid "Preferences" -msgstr "" +msgstr "ВлаÑтивоÑÑ‚Ñ–" #: aleksis/core/menus.py:267 msgid "2FA" -msgstr "" +msgstr "2FA" #: aleksis/core/menus.py:275 #: aleksis/core/templates/account/password_change.html:5 @@ -436,819 +437,819 @@ msgstr "" #: aleksis/core/templates/account/password_reset_from_key_done.html:5 #: aleksis/core/templates/account/password_reset_from_key_done.html:6 msgid "Change password" -msgstr "" +msgstr "Змінити пароль" #: aleksis/core/menus.py:287 msgid "Third-party accounts" -msgstr "" +msgstr "Обліковки третіх Ñторін" #: aleksis/core/menus.py:296 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:5 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:6 msgid "Authorized applications" -msgstr "" +msgstr "Ðвторизовані додатки" #: aleksis/core/menus.py:305 msgid "Calendar Feeds" -msgstr "" +msgstr "Канали календарів" #: aleksis/core/menus.py:318 msgid "Logout" -msgstr "" +msgstr "Вийти" #: aleksis/core/mixins.py:511 msgid "Linked school term" -msgstr "" +msgstr "Пов'Ñзаний навчальний рік" #: aleksis/core/models.py:77 msgid "Boolean (Yes/No)" -msgstr "" +msgstr "Логічне (Так/ÐÑ–)" #: aleksis/core/models.py:78 msgid "Text (one line)" -msgstr "" +msgstr "ТекÑÑ‚ (один Ñ€Ñдок)" #: aleksis/core/models.py:80 msgid "Date and time" -msgstr "" +msgstr "Дата Ñ– чаÑ" #: aleksis/core/models.py:81 msgid "Decimal number" -msgstr "" +msgstr "ДеÑÑтичне чиÑло" #: aleksis/core/models.py:82 aleksis/core/models.py:205 msgid "E-mail address" -msgstr "" +msgstr "ÐдреÑа ел.пошти" #: aleksis/core/models.py:83 msgid "Integer" -msgstr "" +msgstr "Ціле" #: aleksis/core/models.py:84 msgid "IP address" -msgstr "" +msgstr "IP адреÑа" #: aleksis/core/models.py:85 msgid "Boolean or empty (Yes/No/Neither)" -msgstr "" +msgstr "Логічне або порожнє (Так/ÐÑ–/Ðічого)" #: aleksis/core/models.py:86 msgid "Text (multi-line)" -msgstr "" +msgstr "ТекÑÑ‚ (багаторÑдковий)" #: aleksis/core/models.py:88 msgid "URL / Link" -msgstr "" +msgstr "URL / ПоÑиланнÑ" #: aleksis/core/models.py:100 aleksis/core/models.py:1070 #: aleksis/core/models.py:1374 msgid "Name" -msgstr "" +msgstr "Повне ім'Ñ" #: aleksis/core/models.py:102 msgid "Start date" -msgstr "" +msgstr "Дата початку" #: aleksis/core/models.py:103 msgid "End date" -msgstr "" +msgstr "Дата закінченнÑ" #: aleksis/core/models.py:122 msgid "The start date must be earlier than the end date." -msgstr "" +msgstr "Початкова дата повинна бути раніше кінцевої." #: aleksis/core/models.py:129 msgid "There is already a school term for this time or a part of this time." -msgstr "" +msgstr "Ðа цей Ñ‡Ð°Ñ Ð°Ð±Ð¾ на чаÑтину цього чаÑу вже припадає навчальний рік." #: aleksis/core/models.py:158 aleksis/core/models.py:1019 #: aleksis/core/models.py:1371 msgid "Person" -msgstr "" +msgstr "ОÑоба" #: aleksis/core/models.py:161 msgid "Can view address" -msgstr "" +msgstr "Може бачити адреÑу" #: aleksis/core/models.py:162 msgid "Can view contact details" -msgstr "" +msgstr "Може бачити контактні дані" #: aleksis/core/models.py:163 msgid "Can view photo" -msgstr "" +msgstr "Може бачити фото" #: aleksis/core/models.py:164 msgid "Can view avatar image" -msgstr "" +msgstr "Може бачити аватар" #: aleksis/core/models.py:165 msgid "Can view persons groups" -msgstr "" +msgstr "Може бачити групи оÑоби" #: aleksis/core/models.py:166 msgid "Can view personal details" -msgstr "" +msgstr "Може бачити оÑобиÑÑ‚Ñ– дані" #: aleksis/core/models.py:176 msgid "female" -msgstr "" +msgstr "жін" #: aleksis/core/models.py:176 msgid "male" -msgstr "" +msgstr "чол" #: aleksis/core/models.py:184 aleksis/core/models.py:1273 msgid "Linked user" -msgstr "" +msgstr "Пов'Ñзаний кориÑтувач" #: aleksis/core/models.py:190 msgid "Additional name(s)" -msgstr "" +msgstr "Додаткові імена" #: aleksis/core/models.py:194 aleksis/core/models.py:506 msgid "Short name" -msgstr "" +msgstr "Коротке ім'Ñ" #: aleksis/core/models.py:197 msgid "Street" -msgstr "" +msgstr "ВулицÑ" #: aleksis/core/models.py:198 msgid "Street number" -msgstr "" +msgstr "Ðомер будинку" #: aleksis/core/models.py:199 msgid "Postal code" -msgstr "" +msgstr "Поштовий індекÑ" #: aleksis/core/models.py:200 msgid "Place" -msgstr "" +msgstr "МіÑто" #: aleksis/core/models.py:202 aleksis/core/templates/core/person/full.html:160 msgid "Home phone" -msgstr "" +msgstr "Домашній телефон" #: aleksis/core/models.py:203 aleksis/core/templates/core/person/full.html:170 msgid "Mobile phone" -msgstr "" +msgstr "Мобільний телефон" #: aleksis/core/models.py:207 msgid "Date of birth" -msgstr "" +msgstr "Дата народженнÑ" #: aleksis/core/models.py:208 msgid "Place of birth" -msgstr "" +msgstr "МіÑце народженнÑ" #: aleksis/core/models.py:209 msgid "Sex" -msgstr "" +msgstr "Стать" #: aleksis/core/models.py:216 aleksis/core/models.py:545 msgid "This is an official photo, used for official documents and for internal use cases." -msgstr "" +msgstr "Це офіційне фото, Ñке викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² та внутрішніх потреб." #: aleksis/core/models.py:221 aleksis/core/models.py:549 msgid "Display picture / Avatar" -msgstr "" +msgstr "Відобразити фото/аватар" #: aleksis/core/models.py:224 aleksis/core/models.py:552 msgid "This is a picture or an avatar for public display." -msgstr "" +msgstr "Це фото або аватар Ð´Ð»Ñ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ відображеннÑ." #: aleksis/core/models.py:229 aleksis/core/templates/core/person/full.html:235 msgid "Guardians / Parents" -msgstr "" +msgstr "Опікуни / батьки" #: aleksis/core/models.py:236 msgid "Primary group" -msgstr "" +msgstr "ОÑновна група" #: aleksis/core/models.py:239 aleksis/core/models.py:719 #: aleksis/core/models.py:743 aleksis/core/models.py:834 #: aleksis/core/models.py:1094 msgid "Description" -msgstr "" +msgstr "ОпиÑ" #: aleksis/core/models.py:459 msgid "Title of field" -msgstr "" +msgstr "Ðазва полÑ" #: aleksis/core/models.py:461 msgid "Type of field" -msgstr "" +msgstr "Тип полÑ" #: aleksis/core/models.py:463 msgid "Required" -msgstr "" +msgstr "Ðеобхідне" #: aleksis/core/models.py:464 msgid "Help text / description" -msgstr "" +msgstr "Допоміжний текÑÑ‚/опиÑ" #: aleksis/core/models.py:470 msgid "Addtitional field for groups" -msgstr "" +msgstr "Додаткове поле Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿" #: aleksis/core/models.py:471 msgid "Addtitional fields for groups" -msgstr "" +msgstr "Додаткові Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿" #: aleksis/core/models.py:491 msgid "Can assign child groups to groups" -msgstr "" +msgstr "Може призначати підлеглі групи до груп" #: aleksis/core/models.py:492 msgid "Can view statistics about group." -msgstr "" +msgstr "Може бачити ÑтатиÑтику групи." #: aleksis/core/models.py:504 msgid "Long name" -msgstr "" +msgstr "Довге ім'Ñ" #: aleksis/core/models.py:514 aleksis/core/templates/core/group/full.html:85 msgid "Members" -msgstr "" +msgstr "УчаÑники" #: aleksis/core/models.py:517 aleksis/core/templates/core/group/full.html:82 msgid "Owners" -msgstr "" +msgstr "ВлаÑники" #: aleksis/core/models.py:524 aleksis/core/templates/core/group/full.html:55 msgid "Parent groups" -msgstr "" +msgstr "БатьківÑькі групи" #: aleksis/core/models.py:532 msgid "Type of group" -msgstr "" +msgstr "Тип групи" #: aleksis/core/models.py:718 aleksis/core/models.py:742 #: aleksis/core/models.py:833 #: aleksis/core/templates/core/announcement/list.html:18 msgid "Title" -msgstr "" +msgstr "Ðазва" #: aleksis/core/models.py:721 msgid "Application" -msgstr "" +msgstr "Додаток" #: aleksis/core/models.py:727 msgid "Activity" -msgstr "" +msgstr "ÐктивніÑÑ‚ÑŒ" #: aleksis/core/models.py:728 msgid "Activities" -msgstr "" +msgstr "ÐктивноÑÑ‚Ñ–" #: aleksis/core/models.py:734 msgid "Sender" -msgstr "" +msgstr "Відправник" #: aleksis/core/models.py:739 msgid "Recipient" -msgstr "" +msgstr "Отримувач" #: aleksis/core/models.py:744 aleksis/core/models.py:1071 msgid "Link" -msgstr "" +msgstr "ПоÑиланнÑ" #: aleksis/core/models.py:746 msgid "Send notification at" -msgstr "" +msgstr "ÐадіÑлати ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¾" #: aleksis/core/models.py:748 msgid "Read" -msgstr "" +msgstr "Читати" #: aleksis/core/models.py:749 msgid "Sent" -msgstr "" +msgstr "ÐадіÑлано" #: aleksis/core/models.py:766 msgid "Notification" -msgstr "" +msgstr "СповіщеннÑ" #: aleksis/core/models.py:767 aleksis/core/preferences.py:29 #: aleksis/core/templates/core/base.html:81 #: aleksis/core/templates/core/notifications.html:4 #: aleksis/core/templates/core/notifications.html:5 msgid "Notifications" -msgstr "" +msgstr "СповіщеннÑ" #: aleksis/core/models.py:835 msgid "Link to detailed view" -msgstr "" +msgstr "ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° детальний переглÑд" #: aleksis/core/models.py:838 msgid "Date and time from when to show" -msgstr "" +msgstr "Дата Ñ– чаÑ, з Ñкого показувати" #: aleksis/core/models.py:841 msgid "Date and time until when to show" -msgstr "" +msgstr "Дата Ñ– чаÑ, до Ñкого показувати" #: aleksis/core/models.py:866 msgid "Announcement" -msgstr "" +msgstr "ОголошеннÑ" #: aleksis/core/models.py:904 msgid "Announcement recipient" -msgstr "" +msgstr "Отримувач оголошеннÑ" #: aleksis/core/models.py:905 msgid "Announcement recipients" -msgstr "" +msgstr "Отримувачі оголошеннÑ" #: aleksis/core/models.py:927 msgid "Widget Title" -msgstr "" +msgstr "Ðазва віджета" #: aleksis/core/models.py:928 msgid "Activate Widget" -msgstr "" +msgstr "Ðктивувати віджет" #: aleksis/core/models.py:929 msgid "Widget is broken" -msgstr "" +msgstr "Віджет зламавÑÑ" #: aleksis/core/models.py:932 msgid "Size on mobile devices" -msgstr "" +msgstr "Розмір на мобільних" #: aleksis/core/models.py:933 msgid "<= 600 px, 12 columns" -msgstr "" +msgstr "<= 600 пікÑ, 12 Ñтовпчиків" #: aleksis/core/models.py:938 msgid "Size on tablet devices" -msgstr "" +msgstr "Розмір на планшетах" #: aleksis/core/models.py:939 msgid "> 600 px, 12 columns" -msgstr "" +msgstr "> 600 пікÑ, 12 Ñтовпчиків" #: aleksis/core/models.py:944 msgid "Size on desktop devices" -msgstr "" +msgstr "Розмір на ПК" #: aleksis/core/models.py:945 msgid "> 992 px, 12 columns" -msgstr "" +msgstr "> 992 пікÑ, 12 Ñтовпчиків" #: aleksis/core/models.py:950 msgid "Size on large desktop devices" -msgstr "" +msgstr "Розмір на великих екранах" #: aleksis/core/models.py:951 msgid "> 1200 px>, 12 columns" -msgstr "" +msgstr "> 1200 пікÑ, 12 Ñтовпчиків" #: aleksis/core/models.py:982 msgid "Can edit default dashboard" -msgstr "" +msgstr "Може редагувати типову/Ñтандартну інформпанель" #: aleksis/core/models.py:983 msgid "Dashboard Widget" -msgstr "" +msgstr "Віджет інформпанелі" #: aleksis/core/models.py:984 msgid "Dashboard Widgets" -msgstr "" +msgstr "Віджети інформпанелі" #: aleksis/core/models.py:990 msgid "URL" -msgstr "" +msgstr "URL" #: aleksis/core/models.py:991 msgid "Icon URL" -msgstr "" +msgstr "Іконка URL" #: aleksis/core/models.py:997 msgid "External link widget" -msgstr "" +msgstr "Зовнішнє поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° віджет" #: aleksis/core/models.py:998 msgid "External link widgets" -msgstr "" +msgstr "Зовнішні поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° віджети" #: aleksis/core/models.py:1004 msgid "Content" -msgstr "" +msgstr "ЗміÑÑ‚" #: aleksis/core/models.py:1010 msgid "Static content widget" -msgstr "" +msgstr "Віджет з поÑтійним зміÑтом" #: aleksis/core/models.py:1011 msgid "Static content widgets" -msgstr "" +msgstr "Віджети з поÑтійним зміÑтом" #: aleksis/core/models.py:1016 msgid "Dashboard widget" -msgstr "" +msgstr "Віджет інформпанелі" #: aleksis/core/models.py:1021 msgid "Order" -msgstr "" +msgstr "ПорÑдок" #: aleksis/core/models.py:1022 msgid "Part of the default dashboard" -msgstr "" +msgstr "ЧаÑтина типової інформпанелі" #: aleksis/core/models.py:1037 msgid "Dashboard widget order" -msgstr "" +msgstr "ПорÑдок віджету на інформпанелі" #: aleksis/core/models.py:1038 msgid "Dashboard widget orders" -msgstr "" +msgstr "ПорÑдок віджетів на інформпанелі" #: aleksis/core/models.py:1044 msgid "Menu ID" -msgstr "" +msgstr "Меню ID" #: aleksis/core/models.py:1057 msgid "Custom menu" -msgstr "" +msgstr "КориÑтувацьке меню" #: aleksis/core/models.py:1058 msgid "Custom menus" -msgstr "" +msgstr "КориÑтувацькі меню" #: aleksis/core/models.py:1068 msgid "Menu" -msgstr "" +msgstr "Меню" #: aleksis/core/models.py:1072 aleksis/core/models.py:1320 #: aleksis/core/templates/oauth2_provider/application/detail.html:26 msgid "Icon" -msgstr "" +msgstr "Іконка" #: aleksis/core/models.py:1078 msgid "Custom menu item" -msgstr "" +msgstr "Пункт кориÑтувацького меню" #: aleksis/core/models.py:1079 msgid "Custom menu items" -msgstr "" +msgstr "Пункти кориÑтувацького меню" #: aleksis/core/models.py:1093 msgid "Title of type" -msgstr "" +msgstr "Ðазва типу" #: aleksis/core/models.py:1100 aleksis/core/templates/core/group/full.html:47 msgid "Group type" -msgstr "" +msgstr "Тип групи" #: aleksis/core/models.py:1114 msgid "Can view system status" -msgstr "" +msgstr "Може переглÑдати Ñтан ÑиÑтеми" #: aleksis/core/models.py:1115 msgid "Can manage data" -msgstr "" +msgstr "Може керувати даними" #: aleksis/core/models.py:1116 msgid "Can impersonate" -msgstr "" +msgstr "Може маÑкуватиÑÑ" #: aleksis/core/models.py:1117 msgid "Can use search" -msgstr "" +msgstr "Може шукати" #: aleksis/core/models.py:1118 msgid "Can change site preferences" -msgstr "" +msgstr "Може змінювати влаÑтивоÑÑ‚Ñ– Ñайту" #: aleksis/core/models.py:1119 msgid "Can change person preferences" -msgstr "" +msgstr "Може змінювати влаÑтивоÑÑ‚Ñ– оÑоби" #: aleksis/core/models.py:1120 msgid "Can change group preferences" -msgstr "" +msgstr "Може змінювати влаÑтивоÑÑ‚Ñ– групи" #: aleksis/core/models.py:1121 msgid "Can test PDF generation" -msgstr "" +msgstr "Може генерувати теÑтові PDF" #: aleksis/core/models.py:1122 msgid "Can invite persons" -msgstr "" +msgstr "Може запрошувати оÑіб" #: aleksis/core/models.py:1158 msgid "Related data check task" -msgstr "" +msgstr "Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸ пов'Ñзаних даних" #: aleksis/core/models.py:1166 msgid "Issue solved" -msgstr "" +msgstr "Проблема вирішена" #: aleksis/core/models.py:1167 msgid "Notification sent" -msgstr "" +msgstr "Ð¡Ð¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð½Ð°Ð´Ñ–Ñлане" #: aleksis/core/models.py:1180 msgid "Data check result" -msgstr "" +msgstr "Результат перевірки даних" #: aleksis/core/models.py:1181 msgid "Data check results" -msgstr "" +msgstr "Результати перевірки даних" #: aleksis/core/models.py:1183 msgid "Can run data checks" -msgstr "" +msgstr "Може запуÑкати перевірки даних" #: aleksis/core/models.py:1184 msgid "Can solve data check problems" -msgstr "" +msgstr "Може розв'Ñзувати проблеми перевірки даних" #: aleksis/core/models.py:1191 msgid "E-Mail address" -msgstr "" +msgstr "ÐдреÑа ел.пошти" #: aleksis/core/models.py:1223 msgid "Owner" -msgstr "" +msgstr "ВлаÑник" #: aleksis/core/models.py:1227 msgid "File expires at" -msgstr "" +msgstr "Файл дійÑний до" #: aleksis/core/models.py:1229 msgid "Generated HTML file" -msgstr "" +msgstr "Згенерований файл HTML" #: aleksis/core/models.py:1231 msgid "Generated PDF file" -msgstr "" +msgstr "Згенерований файл PDF" #: aleksis/core/models.py:1238 msgid "PDF file" -msgstr "" +msgstr "Файл PDF" #: aleksis/core/models.py:1239 msgid "PDF files" -msgstr "" +msgstr "Файли PDF" #: aleksis/core/models.py:1244 msgid "Task result" -msgstr "" +msgstr "Результат завданнÑ" #: aleksis/core/models.py:1247 msgid "Task user" -msgstr "" +msgstr "КориÑтувач завданнÑ" #: aleksis/core/models.py:1259 msgid "Task user assignment" -msgstr "" +msgstr "ÐŸÑ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувача завданнÑ" #: aleksis/core/models.py:1260 msgid "Task user assignments" -msgstr "" +msgstr "ÐŸÑ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів завданнÑ" #: aleksis/core/models.py:1276 msgid "Additional attributes" -msgstr "" +msgstr "Додаткові атрибути" #: aleksis/core/models.py:1314 msgid "Allowed scopes that clients can request" -msgstr "" +msgstr "Дозволені межі дії, Ñкі можуть запитувати клієнти" #: aleksis/core/models.py:1324 msgid "This image will be shown as icon in the authorization flow. It should be squared." -msgstr "" +msgstr "Це Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ виглÑдати іконкою під Ñ‡Ð°Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ñ–Ñ—. Повинне бути квадратним." #: aleksis/core/models.py:1373 msgid "UUID" -msgstr "" +msgstr "UUID" #: aleksis/core/models.py:1377 msgid "Selected ICal feed" -msgstr "" +msgstr "Стрічка обраного ICal" #: aleksis/core/models.py:1386 msgid "Personal Calendar URL" -msgstr "" +msgstr "URL-поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¾ÑобиÑтого календарÑ" #: aleksis/core/models.py:1387 msgid "Personal Calendar URLs" -msgstr "" +msgstr "URL-поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¾ÑобиÑтих календарів" #: aleksis/core/preferences.py:25 msgid "General" -msgstr "" +msgstr "Загальне" #: aleksis/core/preferences.py:26 msgid "School" -msgstr "" +msgstr "Школа / навч.заклад" #: aleksis/core/preferences.py:27 msgid "Theme" -msgstr "" +msgstr "Тема" #: aleksis/core/preferences.py:28 msgid "Mail" -msgstr "" +msgstr "Пошта" #: aleksis/core/preferences.py:30 msgid "Footer" -msgstr "" +msgstr "Ðижній колонтитул (footer)" #: aleksis/core/preferences.py:31 msgid "Accounts" -msgstr "" +msgstr "Облікові запиÑи" #: aleksis/core/preferences.py:32 msgid "Authentication" -msgstr "" +msgstr "ÐвторизаціÑ" #: aleksis/core/preferences.py:33 msgid "Internationalisation" -msgstr "" +msgstr "ІнтернаціоналізаціÑ" #: aleksis/core/preferences.py:43 msgid "Site title" -msgstr "" +msgstr "Ðазва Ñайту" #: aleksis/core/preferences.py:55 msgid "Site description" -msgstr "" +msgstr "ÐžÐ¿Ð¸Ñ Ñайту" #: aleksis/core/preferences.py:65 msgid "Primary colour" -msgstr "" +msgstr "ОÑновний колір" #: aleksis/core/preferences.py:77 msgid "Secondary colour" -msgstr "" +msgstr "Додатковий колір" #: aleksis/core/preferences.py:89 msgid "Logo" -msgstr "" +msgstr "Логотип" #: aleksis/core/preferences.py:100 msgid "Favicon" -msgstr "" +msgstr "Favicon" #: aleksis/core/preferences.py:111 msgid "PWA-Icon" -msgstr "" +msgstr "Іконка PWA" #: aleksis/core/preferences.py:121 msgid "PWA-Icon is maskable" -msgstr "" +msgstr "Іконка PWA може бути з маÑкою" #: aleksis/core/preferences.py:133 msgid "Mail out name" -msgstr "" +msgstr "Ім'Ñ Ð²Ñ–Ð´Ð¿Ñ€Ð°Ð²Ð½Ð¸ÐºÐ°" #: aleksis/core/preferences.py:144 msgid "Mail out address" -msgstr "" +msgstr "ÐдреÑа відправника" #: aleksis/core/preferences.py:157 msgid "Link to privacy policy" -msgstr "" +msgstr "ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° політику приватноÑÑ‚Ñ–" #: aleksis/core/preferences.py:169 msgid "Link to imprint" -msgstr "" +msgstr "ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° відбиток" #: aleksis/core/preferences.py:180 msgid "Name format for addressing" -msgstr "" +msgstr "Формат імені у лиÑтуванні" #: aleksis/core/preferences.py:197 msgid "Channels to use for notifications" -msgstr "" +msgstr "Канали Ð´Ð»Ñ Ñповіщень" #: aleksis/core/preferences.py:209 msgid "Regular expression to match primary group, e.g. '^Class .*'" -msgstr "" +msgstr "РегулÑрний вираз Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ оÑновної групи, напр. '^Class .*'" #: aleksis/core/preferences.py:220 msgid "Field on person to match primary group against" -msgstr "" +msgstr "Поле щодо оÑоби Ð´Ð»Ñ ÑпівÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð· оÑновною групою" #: aleksis/core/preferences.py:232 msgid "Automatically create new persons for new users" -msgstr "" +msgstr "Ðові оÑоби Ð´Ð»Ñ Ð½Ð¾Ð²Ð¸Ñ… кориÑтувачів Ñтворювати автоматично" #: aleksis/core/preferences.py:241 msgid "Automatically link existing persons to new users by their e-mail address" -msgstr "" +msgstr "Пов'Ñзувати Ñ–Ñнуючих оÑіб з новими кориÑтувачами автоматично за ел.адреÑами" #: aleksis/core/preferences.py:252 msgid "Display name of the school" -msgstr "" +msgstr "Ðазва школи / навч.закладу Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ" #: aleksis/core/preferences.py:263 msgid "Official name of the school, e.g. as given by supervisory authority" -msgstr "" +msgstr "Офіційна назва школи / навч.закладу, напр. Ñк у державному Ñвідоцтві" #: aleksis/core/preferences.py:271 msgid "Allow users to change their passwords" -msgstr "" +msgstr "Дозволити кориÑтувачам змінювати Ñвої паролі" #: aleksis/core/preferences.py:279 msgid "Allow users to reset their passwords" -msgstr "" +msgstr "Дозволити кориÑтувачам Ñкидати Ñвої паролі" #: aleksis/core/preferences.py:287 msgid "Enable signup" -msgstr "" +msgstr "Увімкнути реєÑтрацію" #: aleksis/core/preferences.py:295 msgid "Regular expression for allowed usernames" -msgstr "" +msgstr "РегулÑрний вираз Ð´Ð»Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¸Ñ… логінів" #: aleksis/core/preferences.py:303 msgid "Enable invitations" -msgstr "" +msgstr "Увімкнути запрошеннÑ" #: aleksis/core/preferences.py:311 msgid "Length of invite code. (Default 3: abcde-acbde-abcde)" -msgstr "" +msgstr "Довжина запрошувального коду. (Типово 3: abcde-acbde-abcde)" #: aleksis/core/preferences.py:319 msgid "Size of packets. (Default 5: abcde)" -msgstr "" +msgstr "Розмір пакетів. (Типово 5: abcde)" #: aleksis/core/preferences.py:330 msgid "Allowed Grant Flows for OAuth applications" -msgstr "" +msgstr "Дозволені потоки грантів Ð´Ð»Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÑ–Ð² з OAuth" #: aleksis/core/preferences.py:344 msgid "Available languages" -msgstr "" +msgstr "ДоÑтупні мови" #: aleksis/core/preferences.py:357 msgid "Send emails if data checks detect problems" -msgstr "" +msgstr "Ð’ разі виÑÐ²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼ під Ñ‡Ð°Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸ даних надіÑлати ел.лиÑÑ‚" #: aleksis/core/preferences.py:368 msgid "Email recipients for data checks problem emails" -msgstr "" +msgstr "Ел.адреÑи отримувачів Ð´Ð»Ñ Ð»Ð¸Ñтів з проблемами перевірки даних" #: aleksis/core/preferences.py:379 msgid "Email recipient groups for data checks problem emails" -msgstr "" +msgstr "Ел.адреÑи груп Ð´Ð»Ñ Ð»Ð¸Ñтів з проблемами перевірки даних" #: aleksis/core/preferences.py:388 msgid "Show dashboard to users without login" -msgstr "" +msgstr "Відображати інформпанель анонімним кориÑтувачам" #: aleksis/core/preferences.py:397 msgid "Allow users to edit their dashboard" -msgstr "" +msgstr "Дозволити кориÑтувачам редагувати Ñвою інформпанель" #: aleksis/core/preferences.py:408 msgid "Fields on person model which are editable by themselves." -msgstr "" +msgstr "ÐŸÐ¾Ð»Ñ Ð· опиÑом оÑоби, Ñкі можна редагувати ÑамоÑтійно." #: aleksis/core/preferences.py:423 msgid "Editable fields on person model which should trigger a notification on change" -msgstr "" +msgstr "Змінювані Ð¿Ð¾Ð»Ñ Ð· опиÑом оÑоби, Ñкі повинні Ñповіщати щодо редагуваннÑ" #: aleksis/core/preferences.py:437 msgid "Contact for notification if a person changes their data" -msgstr "" +msgstr "Контакт Ð´Ð»Ñ Ñповіщень, Ñкщо хтоÑÑŒ змінює Ñвої дані" #: aleksis/core/preferences.py:448 msgid "Prefer personal photos over avatars" -msgstr "" +msgstr "Віддавати перевагу оÑобиÑтим фото заміÑÑ‚ÑŒ аватарів" #: aleksis/core/preferences.py:458 msgid "PDF file expiration duration" -msgstr "" +msgstr "Термін придатноÑÑ‚Ñ– файла PDF" #: aleksis/core/preferences.py:459 msgid "in minutes" -msgstr "" +msgstr "у хвилинах" #: aleksis/core/preferences.py:469 msgid "Automatically update the dashboard and its widgets" -msgstr "" +msgstr "Ðвтоматично оновлювати інформпанель та Ñ—Ñ— віджети" #: aleksis/core/preferences.py:479 msgid "Automatically update the dashboard and its widgets sitewide" -msgstr "" +msgstr "Ðвтоматично оновлювати інформпанель та Ñ—Ñ— віджети (Ð´Ð»Ñ Ð²Ñього Ñайту)" #: aleksis/core/preferences.py:489 msgid "Country for phone number parsing" -msgstr "" +msgstr "Країна Ð´Ð»Ñ Ð°Ð½Ð°Ð»Ñ–Ð·Ñƒ номера телефона" #: aleksis/core/settings.py:540 msgid "English" -msgstr "" +msgstr "ÐнглійÑька" #: aleksis/core/settings.py:541 msgid "German" -msgstr "" +msgstr "Ðімецька" #: aleksis/core/tables.py:24 #: aleksis/core/templates/core/announcement/list.html:36 @@ -1257,13 +1258,13 @@ msgstr "" #: aleksis/core/templates/core/person/full.html:86 #: aleksis/core/templates/oauth2_provider/application/detail.html:17 msgid "Edit" -msgstr "" +msgstr "Редагувати" #: aleksis/core/tables.py:26 aleksis/core/tables.py:94 #: aleksis/core/tables.py:138 #: aleksis/core/templates/core/announcement/list.html:22 msgid "Actions" -msgstr "" +msgstr "Дії" #: aleksis/core/tables.py:61 aleksis/core/tables.py:62 #: aleksis/core/tables.py:76 aleksis/core/tables.py:92 @@ -1275,19 +1276,21 @@ msgstr "" #: aleksis/core/templates/core/person/full.html:93 #: aleksis/core/templates/oauth2_provider/application/detail.html:21 msgid "Delete" -msgstr "" +msgstr "Видалити" #: aleksis/core/templates/403.html:14 aleksis/core/templates/500.html:10 #: aleksis/core/templates/oauth2_provider/authorize.html:54 #: aleksis/core/templates/oauth2_provider/authorized-oob.html:24 msgid "Error" -msgstr "" +msgstr "Помилка" #: aleksis/core/templates/403.html:14 msgid "" "You are not allowed to access the requested page or\n" " object." msgstr "" +"У Ð’Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” доÑтупу до запитуваної Ñторінки або\n" +" об'єкту." #: aleksis/core/templates/403.html:19 aleksis/core/templates/404.html:16 msgid "" @@ -1296,6 +1299,10 @@ msgid "" " administrators:\n" " " msgstr "" +"\n" +" Якщо Ви думаєте, що це помилка AlekSIS, звернітьÑÑ, будь лаÑка,\n" +" до адмініÑтраторів Ñайту:\n" +" " #: aleksis/core/templates/404.html:12 msgid "" @@ -1304,12 +1311,18 @@ msgid "" " it is possible that that link was outdated.\n" " " msgstr "" +"\n" +" Якщо Ви були перенаправлені поÑиланнÑм із зовнішньої Ñторінки,\n" +" ймовірно, це поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð²Ð¶Ðµ заÑтаріло.\n" +" " #: aleksis/core/templates/500.html:10 msgid "" "An unexpected error has\n" " occured." msgstr "" +"СталаÑÑ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð°\n" +" помилка." #: aleksis/core/templates/500.html:13 msgid "" @@ -1318,16 +1331,22 @@ msgid "" " error. You can also contact them directly:\n" " " msgstr "" +"\n" +" ÐдмініÑтратори Ñайту будуть Ñповіщені щодо цієї помилки автоматично\n" +" Ви також можете звернутиÑÑ Ð´Ð¾ них безпоÑередньо:\n" +" " #: aleksis/core/templates/500.html:21 msgid "Retry" -msgstr "" +msgstr "Спробувати ще" #: aleksis/core/templates/503.html:10 msgid "" "The maintenance mode is currently enabled. Please try again\n" " later." msgstr "" +"Сайт перебуває зараз на обÑлуговуванні. Спробуйте зайти\n" +" пізніше." #: aleksis/core/templates/503.html:13 msgid "" @@ -1335,15 +1354,18 @@ msgid "" " This page is currently unavailable. If this error persists, contact your site administrators:\n" " " msgstr "" +"\n" +" Ð¦Ñ Ñторінка наразі недоÑтупна. Якщо Ñ†Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° виникне знову, звернітьÑÑ Ð´Ð¾ адмініÑтраторів Ñайту:\n" +" " #: aleksis/core/templates/account/account_inactive.html:5 #: aleksis/core/templates/account/account_inactive.html:6 msgid "Account inactive" -msgstr "" +msgstr "Обліковий Ð·Ð°Ð¿Ð¸Ñ Ð½ÐµÐ°ÐºÑ‚Ð¸Ð²Ð½Ð¸Ð¹" #: aleksis/core/templates/account/account_inactive.html:14 msgid "Account inactive." -msgstr "" +msgstr "Обліковий Ð·Ð°Ð¿Ð¸Ñ Ð½ÐµÐ°ÐºÑ‚Ð¸Ð²Ð½Ð¸Ð¹." #: aleksis/core/templates/account/account_inactive.html:17 msgid "" @@ -1352,48 +1374,52 @@ msgid "" " error, please contact one of your site administrators.\n" " " msgstr "" +"\n" +" Цей обліковий Ð·Ð°Ð¿Ð¸Ñ Ð½Ð°Ñ€Ð°Ð·Ñ– неактивний. Якщо Ви думаєте,\n" +" що це помилка, звернітьÑÑ Ð´Ð¾ адмініÑтраторів Ñайту.\n" +" " #: aleksis/core/templates/account/email/base_message.txt:5 msgid "Hello!" -msgstr "" +msgstr "Привіт!" #: aleksis/core/templates/account/email/base_message.txt:9 msgid "Your AlekSIS team" -msgstr "" +msgstr "Команда AlekSIS" #: aleksis/core/templates/account/email_confirm.html:5 #: aleksis/core/templates/account/email_confirm.html:6 #: aleksis/core/templates/account/email_confirm.html:17 #: aleksis/core/templates/socialaccount/login.html:17 msgid "Confirm" -msgstr "" +msgstr "Підтвердити" #: aleksis/core/templates/account/email_confirm.html:12 #, python-format msgid "Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an e-mail address for user %(user_display)s." -msgstr "" +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 "" +msgstr "Це поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ ÐµÐ».пошти протерміноване або недійÑне. Зробіть, будь лаÑка, Ð´Ð»Ñ Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ <a href=\"%(email_url)s\">новий запит</a>." #: aleksis/core/templates/account/password_change.html:12 msgid "Forgot your current password? Click here to reset it:" -msgstr "" +msgstr "Забули Ñвій пароль? ÐатиÑніть тут Ð´Ð»Ñ ÑкиданнÑ:" #: aleksis/core/templates/account/password_change.html:12 msgid "Forgot Password?" -msgstr "" +msgstr "Забули пароль?" #: aleksis/core/templates/account/password_change_disabled.html:5 #: aleksis/core/templates/account/password_change_disabled.html:6 msgid "Changing of password disabled" -msgstr "" +msgstr "Зміна паролю вимкнена" #: aleksis/core/templates/account/password_change_disabled.html:13 msgid "Changing of password disabled." -msgstr "" +msgstr "Зміна паролю вимкнена." #: aleksis/core/templates/account/password_change_disabled.html:15 msgid "" @@ -1402,6 +1428,10 @@ msgid "" " this is an error please contact one of your site administrators.\n" " " msgstr "" +"\n" +" КориÑтувачам не дозволÑєтьÑÑ Ð·Ð¼Ñ–Ð½ÑŽÐ²Ð°Ñ‚Ð¸ Ñвої паролі.\n" +" Якщо Ви думаєте, що це помилка, звернітьÑÑ Ð´Ð¾ адмініÑтраторів Ñайту.\n" +" " #: aleksis/core/templates/account/password_reset.html:5 #: aleksis/core/templates/account/password_reset.html:15 @@ -1411,21 +1441,23 @@ msgstr "" #: aleksis/core/templates/account/verification_email_required.html:6 #: aleksis/core/templates/two_factor/core/login.html:100 msgid "Reset password" -msgstr "" +msgstr "Скинути пароль" #: aleksis/core/templates/account/password_reset.html:17 msgid "Forgotten your password? Enter your e-mail address below, and we'll send you an e-mail allowing you to reset it." -msgstr "" +msgstr "Забули пароль? Вкажіть нижче Ñвою ел.пошту Ñ– ми надішлемо Вам лиÑта Ð´Ð»Ñ ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ." #: aleksis/core/templates/account/password_reset.html:30 msgid "" "Please contact one of your site administrators, if you\n" " have any trouble resetting your password:" msgstr "" +"Якщо у Ð’Ð°Ñ Ð²Ð¸Ð½Ð¸ÐºÐ»Ð° проблема зі ÑкиданнÑм паролÑ,\n" +" звернітьÑÑ, будь лаÑка, до адмініÑтраторів Ñайту:" #: aleksis/core/templates/account/password_reset_done.html:15 msgid "Password reset mail sent" -msgstr "" +msgstr "ЛиÑÑ‚ Ð´Ð»Ñ ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ð°Ð´Ñ–Ñланий" #: aleksis/core/templates/account/password_reset_done.html:18 #: aleksis/core/templates/account/verification_email_required.html:16 @@ -1435,10 +1467,14 @@ msgid "" " administrators if you do not receive it within a few minutes.\n" " " msgstr "" +"\n" +" Ми надіÑлали Вам ел.лиÑта. Якщо Ви його не отримаєте протÑгом\n" +" декількох хвилин, звернітьÑÑ, будь лаÑка, до адмініÑтраторів Ñайту.\n" +" " #: aleksis/core/templates/account/password_reset_from_key.html:15 msgid "Bad token" -msgstr "" +msgstr "ÐеÑправний токен" #: aleksis/core/templates/account/password_reset_from_key.html:19 #, python-format @@ -1448,6 +1484,10 @@ msgid "" " class=\"blue-text text-lighten-2\">new password reset</a>.\n" " " msgstr "" +"\n" +" ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½ÐµÐ´Ñ–Ð¹Ñне або, ймовірно, вже викориÑтане. Зробіть, будь лаÑка, <a href=\"%(passwd_reset_url)s\"\n" +" class=\"blue-text text-lighten-2\">новий запит на ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ</a>.\n" +" " #: aleksis/core/templates/account/password_reset_from_key.html:25 msgid "" @@ -1456,6 +1496,10 @@ msgid "" " administrators\n" " " msgstr "" +"\n" +" Якщо проблема доÑÑ– приÑутнÑ, звернітьÑÑ, будь лаÑка, до\n" +" адмініÑтраторів Ñайту\n" +" " #: aleksis/core/templates/account/password_reset_from_key.html:56 #: aleksis/core/templates/account/password_reset_from_key_done.html:15 @@ -1464,41 +1508,44 @@ msgid "" " Your password is now changed!\n" " " msgstr "" +"\n" +" Ваш пароль змінений!\n" +" " #: aleksis/core/templates/account/password_reset_from_key.html:61 msgid "Back to login" -msgstr "" +msgstr "Ðазад до входу" #: aleksis/core/templates/account/password_reset_from_key_done.html:13 msgid "Password changed!" -msgstr "" +msgstr "Пароль змінений!" #: aleksis/core/templates/account/password_set.html:5 #: aleksis/core/templates/account/password_set.html:6 #: aleksis/core/templates/account/password_set.html:12 msgid "Set password" -msgstr "" +msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ" #: aleksis/core/templates/account/signup.html:5 #: aleksis/core/templates/account/signup.html:6 #: aleksis/core/templates/socialaccount/signup.html:5 #: aleksis/core/templates/socialaccount/signup.html:6 msgid "Signup" -msgstr "" +msgstr "РеєÑтраціÑ" #: aleksis/core/templates/account/signup.html:12 #, python-format msgid "Already have an account? Then please <a href=\"%(login_url)s\">sign in</a>." -msgstr "" +msgstr "Вже маєте обліковий запиÑ? Тоді можете <a href=\"%(login_url)s\">увіти</a>." #: aleksis/core/templates/account/signup_closed.html:5 #: aleksis/core/templates/account/signup_closed.html:6 msgid "Signup closed" -msgstr "" +msgstr "РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð°" #: aleksis/core/templates/account/signup_closed.html:14 msgid "Signup closed." -msgstr "" +msgstr "РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð°." #: aleksis/core/templates/account/signup_closed.html:17 msgid "" @@ -1507,19 +1554,23 @@ msgid "" " error, please contact one of your site administrators.\n" " " msgstr "" +"\n" +" РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð½Ð°Ñ€Ð°Ð·Ñ– закрита. Якщо Ви думаєте, що це помилка,\n" +" можете звернутиÑÑ Ð´Ð¾ адмініÑтраторів Ñайту.\n" +" " #: aleksis/core/templates/account/verification_email_required.html:14 msgid "Password reset mail sent!" -msgstr "" +msgstr "ЛиÑÑ‚ Ð´Ð»Ñ ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ð°Ð´Ñ–Ñланий!" #: aleksis/core/templates/account/verification_sent.html:5 #: aleksis/core/templates/account/verification_sent.html:6 msgid "Verify your email address" -msgstr "" +msgstr "Перевірте Ñвою адреÑу ел.пошти" #: aleksis/core/templates/account/verification_sent.html:14 msgid "Verify your email!" -msgstr "" +msgstr "Перевірте Ñвою ел.пошту!" #: aleksis/core/templates/account/verification_sent.html:16 msgid "" @@ -1528,6 +1579,10 @@ msgid "" " For this purpose, we require that you verify ownership of your e-mail address.\n" " " msgstr "" +"\n" +" Ð¦Ñ Ñ‡Ð°Ñтина Ñайту вимагає перевірки, що Ви - Ñаме той/та, хто має бути.\n" +" Саме Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ нам необхідно перевірити, що адреÑа ел.пошти належить Ñаме Вам.\n" +" " #: aleksis/core/templates/account/verification_sent.html:22 msgid "" @@ -1537,75 +1592,80 @@ msgid "" " contact us if you do not receive it within a few minutes.\n" " " msgstr "" +"\n" +" Ми надіÑлали Вам Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸ ел.лиÑта.\n" +" Будь лаÑка, перейдіть за вказаним там поÑиланнÑм. Якщо Ви не отримаєте\n" +" лиÑта протÑгом декількох хвилин, звернітьÑÑ, будь лаÑка, до наÑ.\n" +" " #: aleksis/core/templates/core/additional_field/edit.html:6 #: aleksis/core/templates/core/additional_field/edit.html:7 msgid "Edit additional field" -msgstr "" +msgstr "Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ð³Ð¾ полÑ" #: aleksis/core/templates/core/additional_field/list.html:14 msgid "Create additional field" -msgstr "" +msgstr "Створити додаткове поле" #: aleksis/core/templates/core/announcement/form.html:14 #: aleksis/core/templates/core/announcement/form.html:21 msgid "Edit announcement" -msgstr "" +msgstr "Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð½Ñ" #: aleksis/core/templates/core/announcement/form.html:16 msgid "Publish announcement" -msgstr "" +msgstr "Ð Ð¾Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¾Ð³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð½Ñ" #: aleksis/core/templates/core/announcement/form.html:23 #: aleksis/core/templates/core/announcement/list.html:13 msgid "Publish new announcement" -msgstr "" +msgstr "РозміÑтити нове оголошеннÑ" #: aleksis/core/templates/core/announcement/form.html:34 -msgid "Save und publish announcement" -msgstr "" +msgid "Save and publish announcement" +msgstr "Зберегти та розміÑтити оголошеннÑ" #: aleksis/core/templates/core/announcement/list.html:19 msgid "Valid from" -msgstr "" +msgstr "ДійÑне з" #: aleksis/core/templates/core/announcement/list.html:20 msgid "Valid until" -msgstr "" +msgstr "ДійÑне до" #: aleksis/core/templates/core/announcement/list.html:21 msgid "Recipients" -msgstr "" +msgstr "Отримувачі" #: aleksis/core/templates/core/announcement/list.html:50 msgid "There are no announcements." -msgstr "" +msgstr "Оголошень немає." #: aleksis/core/templates/core/base.html:213 msgid "About AlekSIS® — The Free School Information System" -msgstr "" +msgstr "Щодо AlekSIS® — The Free School Information System" #: aleksis/core/templates/core/base.html:221 msgid "Imprint" -msgstr "" +msgstr "Відбиток" #: aleksis/core/templates/core/base.html:229 msgid "Privacy Policy" -msgstr "" +msgstr "Політика приватноÑÑ‚Ñ–" #: aleksis/core/templates/core/base_print.html:74 msgid "Powered by AlekSIS®" -msgstr "" +msgstr "БазуєтьÑÑ Ð½Ð° AlekSIS®" #: aleksis/core/templates/core/dashboard_widget/create.html:8 #: aleksis/core/templates/core/dashboard_widget/create.html:12 #, python-format msgid "Create %(widget)s" -msgstr "" +msgstr "Створити %(widget)s" #: aleksis/core/templates/core/dashboard_widget/dashboardwidget_broken.html:10 msgid "This widget is currently not available." -msgstr "" +msgstr "Цей віджет зараз недоÑтупний." #: aleksis/core/templates/core/dashboard_widget/dashboardwidget_broken.html:14 #, python-format @@ -1615,77 +1675,83 @@ msgid "" " There is no need for you to take any action.\n" " " msgstr "" +"\n" +" Під Ñ‡Ð°Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð¶ÐµÑ‚Ð° \"%(title)s\" виникла проблема.\n" +" Вам нічого робити не потрібно.\n" +" " #: aleksis/core/templates/core/dashboard_widget/edit.html:8 #: aleksis/core/templates/core/dashboard_widget/edit.html:12 #, python-format msgid "Edit %(widget)s" -msgstr "" +msgstr "Редагувати %(widget)s" #: aleksis/core/templates/core/dashboard_widget/list.html:15 msgid "Create dashboard widget" -msgstr "" +msgstr "Створити віджет Ð´Ð»Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð¿Ð°Ð½ÐµÐ»Ñ–" #: aleksis/core/templates/core/dashboard_widget/list.html:22 #, python-format msgid "Create %(name)s" -msgstr "" +msgstr "Створити %(name)s" #: aleksis/core/templates/core/dashboard_widget/list.html:32 #: aleksis/core/templates/core/edit_dashboard.html:8 #: aleksis/core/templates/core/edit_dashboard.html:15 msgid "Edit default dashboard" -msgstr "" +msgstr "Редагувати типову/Ñтандартну інформпанель" #: aleksis/core/templates/core/data_check/list.html:15 msgid "Check data again" -msgstr "" +msgstr "Перевірити дані ще раз" #: aleksis/core/templates/core/data_check/list.html:22 msgid "The system detected some problems with your data." -msgstr "" +msgstr "СиÑтема виÑвила деÑкі проблеми з Вашими даними." #: aleksis/core/templates/core/data_check/list.html:23 msgid "" "Please go through all data and check whether some extra action is\n" " needed." msgstr "" +"Будь лаÑка, уважно переглÑньте уÑÑ– дані Ñ– перевірте чи не потрібно\n" +" щоÑÑŒ зробити." #: aleksis/core/templates/core/data_check/list.html:31 msgid "Everything is fine." -msgstr "" +msgstr "Ð’Ñе чудово." #: aleksis/core/templates/core/data_check/list.html:32 msgid "The system hasn't detected any problems with your data." -msgstr "" +msgstr "СиÑтема не виÑвила жодних проблем з Вашими даними." #: aleksis/core/templates/core/data_check/list.html:40 msgid "Detected problems" -msgstr "" +msgstr "ВиÑвлені проблеми" #: aleksis/core/templates/core/data_check/list.html:45 msgid "Affected object" -msgstr "" +msgstr "Залежні об'єкти" #: aleksis/core/templates/core/data_check/list.html:46 msgid "Detected problem" -msgstr "" +msgstr "ВиÑвлена проблема" #: aleksis/core/templates/core/data_check/list.html:47 msgid "Show details" -msgstr "" +msgstr "Детальніше" #: aleksis/core/templates/core/data_check/list.html:48 msgid "Options to solve the problem" -msgstr "" +msgstr "Варіанти Ð²Ð¸Ñ€Ñ–ÑˆÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¸" #: aleksis/core/templates/core/data_check/list.html:63 msgid "Show object" -msgstr "" +msgstr "ПереглÑнути об'єкт" #: aleksis/core/templates/core/data_check/list.html:86 msgid "Registered checks" -msgstr "" +msgstr "ЗареєÑтровані перевірки" #: aleksis/core/templates/core/data_check/list.html:90 msgid "" @@ -1693,12 +1759,15 @@ msgid "" " The system will check for the following problems:\n" " " msgstr "" +"\n" +" СиÑтема перевірить наÑвніÑÑ‚ÑŒ таких проблеми:\n" +" " #: aleksis/core/templates/core/edit_dashboard.html:6 #: aleksis/core/templates/core/edit_dashboard.html:13 #: aleksis/core/templates/core/index.html:17 msgid "Edit dashboard" -msgstr "" +msgstr "Редагувати інформпанель" #: aleksis/core/templates/core/edit_dashboard.html:24 msgid "" @@ -1708,6 +1777,11 @@ msgid "" " \"Save\".\n" " " msgstr "" +"\n" +" Ðа цій Ñторінці Ви можете впорÑдкувати Ñвою інформпанель. ПеретÑгуйте будь-Ñкі елементи з \"ДоÑтупних віджетів\"\n" +" до \"Своєї інформпанелі\" або змінюйте порÑдок, перетÑгуючи віджети. ПіÑÐ»Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ забудьте натиÑнути\n" +" \"Зберегти\".\n" +" " #: aleksis/core/templates/core/edit_dashboard.html:30 msgid "" @@ -1717,18 +1791,23 @@ msgid "" " by moving the widgets. After you have finished, please don't forget to click on \"Save\".\n" " " msgstr "" +"\n" +" Ðа цій Ñторінці Ви можете впорÑдкувати типову/Ñтандартну інформпанель, Ñка відображаєтьÑÑ, Ñкщо кориÑтувач\n" +" не впорÑдкував влаÑну. ПеретÑгуйте будь-Ñкі елементи з \"ДоÑтупних віджетів\" до \"Типової інформпанелі\" або змінюйте \n" +" порÑдок, перетÑгуючи віджети. ПіÑÐ»Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ забудьте натиÑнути \"Зберегти\".\n" +" " #: aleksis/core/templates/core/edit_dashboard.html:48 msgid "Available widgets" -msgstr "" +msgstr "ДоÑтупні віджети" #: aleksis/core/templates/core/edit_dashboard.html:57 msgid "Your dashboard" -msgstr "" +msgstr "Ваша інформпанель" #: aleksis/core/templates/core/edit_dashboard.html:59 msgid "Default dashboard" -msgstr "" +msgstr "Типова інформпанель" #: aleksis/core/templates/core/group/child_groups.html:18 msgid "" @@ -1737,22 +1816,26 @@ msgid "" " change and click \"Next\".\n" " " msgstr "" +"\n" +" Ви можете ÑкориÑтатиÑÑ Ñ†Ð¸Ð¼ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´Ð»ÐµÐ³Ð»Ð¸Ñ… груп до оÑновних. Ð”Ð»Ñ Ð¾Ð±Ñ€Ð°Ð½Ð½Ñ Ð³Ñ€ÑƒÐ¿,\n" +" Ñкі хочете змінити, ÑкориÑтайтеÑÑ, будь лаÑка, фільтрами, що нижче та натиÑніÑÑ‚ÑŒ \"Далі\".\n" +" " #: aleksis/core/templates/core/group/child_groups.html:31 msgid "Update selection" -msgstr "" +msgstr "Оновити вибір" #: aleksis/core/templates/core/group/child_groups.html:35 msgid "Clear all filters" -msgstr "" +msgstr "ОчиÑтити фільтри" #: aleksis/core/templates/core/group/child_groups.html:39 msgid "Currently selected groups" -msgstr "" +msgstr "Позначені зараз групи" #: aleksis/core/templates/core/group/child_groups.html:52 msgid "Start assigning child groups for this groups" -msgstr "" +msgstr "Розпочати Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ–Ð´Ð»ÐµÐ³Ð»Ð¸Ñ… груп до цих груп" #: aleksis/core/templates/core/group/child_groups.html:61 msgid "" @@ -1760,14 +1843,17 @@ msgid "" " Please select some groups in order to go on with assigning.\n" " " msgstr "" +"\n" +" Оберіть, будь лаÑка, декілька груп у порÑдку, за Ñким призначати.\n" +" " #: aleksis/core/templates/core/group/child_groups.html:72 msgid "Current group:" -msgstr "" +msgstr "Поточна група:" #: aleksis/core/templates/core/group/child_groups.html:78 msgid "Please be careful!" -msgstr "" +msgstr "Обережно, будь лаÑка!" #: aleksis/core/templates/core/group/child_groups.html:79 msgid "" @@ -1777,6 +1863,11 @@ msgid "" " selected on this page.\n" " " msgstr "" +"\n" +" Якщо натиÑнете \"Ðазад\" або \"Далі\" Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— групи не збережутьÑÑ.\n" +" Якщо натиÑнете \"Зберегти\", уÑÑ– Ñ–Ñнуючі зв'Ñзки підлеглої групи з цією групою будуть замінені на\n" +" обрані на цій Ñторінці.\n" +" " #: aleksis/core/templates/core/group/child_groups.html:93 #: aleksis/core/templates/core/group/child_groups.html:128 @@ -1784,91 +1875,91 @@ msgstr "" #: aleksis/core/templates/two_factor/_wizard_actions.html:15 #: aleksis/core/templates/two_factor/_wizard_actions.html:20 msgid "Back" -msgstr "" +msgstr "Ðазад" #: aleksis/core/templates/core/group/child_groups.html:99 #: aleksis/core/templates/core/group/child_groups.html:134 #: aleksis/core/templates/two_factor/_wizard_actions.html:26 msgid "Next" -msgstr "" +msgstr "ÐаÑтупний" #: aleksis/core/templates/core/group/child_groups.html:106 #: aleksis/core/templates/core/group/child_groups.html:141 #: aleksis/core/templates/core/partials/save_button.html:3 msgid "Save" -msgstr "" +msgstr "Зберегти" #: aleksis/core/templates/core/group/child_groups.html:112 #: aleksis/core/templates/core/group/child_groups.html:147 msgid "Save and next" -msgstr "" +msgstr "Зберегти Ñ– йти далі" #: aleksis/core/templates/core/group/edit.html:11 #: aleksis/core/templates/core/group/edit.html:12 msgid "Edit group" -msgstr "" +msgstr "Редагувати групу" #: aleksis/core/templates/core/group/full.html:38 #: aleksis/core/templates/core/person/full.html:40 #: aleksis/core/templates/core/person/full.html:100 msgid "Change preferences" -msgstr "" +msgstr "Змінити влаÑтивоÑÑ‚Ñ–" #: aleksis/core/templates/core/group/full.html:64 msgid "Statistics" -msgstr "" +msgstr "СтатиÑтика" #: aleksis/core/templates/core/group/full.html:67 msgid "Count of members" -msgstr "" +msgstr "КількіÑÑ‚ÑŒ учаÑників" #: aleksis/core/templates/core/group/full.html:71 msgid "Average age" -msgstr "" +msgstr "Середній вік" #: aleksis/core/templates/core/group/full.html:76 msgid "Age range" -msgstr "" +msgstr "Віковий діапазон" #: aleksis/core/templates/core/group/full.html:76 msgid "years to" -msgstr "" +msgstr "–" #: aleksis/core/templates/core/group/full.html:76 msgid "years " -msgstr "" +msgstr "рр. " #: aleksis/core/templates/core/group/list.html:14 msgid "Create group" -msgstr "" +msgstr "Створити групу" #: aleksis/core/templates/core/group/list.html:17 msgid "Filter groups" -msgstr "" +msgstr "Фільтрувати групи" #: aleksis/core/templates/core/group/list.html:24 #: aleksis/core/templates/core/person/list.html:28 msgid "Clear" -msgstr "" +msgstr "ОчиÑтити" #: aleksis/core/templates/core/group/list.html:28 msgid "Selected groups" -msgstr "" +msgstr "Обрані групи" #: aleksis/core/templates/core/group_type/edit.html:6 #: aleksis/core/templates/core/group_type/edit.html:7 msgid "Edit group type" -msgstr "" +msgstr "Редагувати тип групи" #: aleksis/core/templates/core/group_type/list.html:14 msgid "Create group type" -msgstr "" +msgstr "Створити тип групи" #: aleksis/core/templates/core/ical/ical_create.html:4 #: aleksis/core/templates/core/ical/ical_create.html:5 #: aleksis/core/templates/core/ical/ical_list.html:12 msgid "Create iCal URL" -msgstr "" +msgstr "Створити поÑÐ¸Ð»Ð°Ð½Ð½Ñ iCal" #: aleksis/core/templates/core/ical/ical_create.html:16 #: aleksis/core/templates/core/ical/ical_edit.html:16 @@ -1877,30 +1968,33 @@ msgstr "" #: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:24 #: aleksis/core/templates/two_factor/_wizard_actions.html:6 msgid "Cancel" -msgstr "" +msgstr "СкаÑувати" #: aleksis/core/templates/core/ical/ical_edit.html:4 #: aleksis/core/templates/core/ical/ical_edit.html:5 #, python-format msgid "Edit iCal URL %(object)s" -msgstr "" +msgstr "Редагувати поÑÐ¸Ð»Ð°Ð½Ð½Ñ iCal %(object)s" #: aleksis/core/templates/core/ical/ical_list.html:4 #: aleksis/core/templates/core/ical/ical_list.html:5 msgid "ICal Feeds" -msgstr "" +msgstr "iCal-Ñтрічки" #: aleksis/core/templates/core/ical/ical_list.html:8 msgid "These are URLs for different Calendar Feeds in the iCal (.ics) format. You can create as many as you want and import them in your calendar software." msgstr "" +"Тут міÑÑ‚ÑÑ‚ÑŒÑÑ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° різні Ñтрічки календарів у форматі iCal (.ics). " +"Ви можете Ñтворити Ñ—Ñ… Ñтільки, Ñкільки Вам необхідно та імпортувати Ñ—Ñ… у ПЗ " +"Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ з календарÑми." #: aleksis/core/templates/core/ical/ical_list.html:14 msgid "Your iCal URLs" -msgstr "" +msgstr "Ваші поÑÐ¸Ð»Ð°Ð½Ð½Ñ iCal" #: aleksis/core/templates/core/index.html:4 msgid "Home" -msgstr "" +msgstr "Додому" #: aleksis/core/templates/core/index.html:49 msgid "" @@ -1909,40 +2003,44 @@ msgid "" " customise your personal dashboard.\n" " " msgstr "" +"\n" +" Ви ще не налаштували Ñвою інформпанель, тож поки що бачите типову/Ñтандартну. Ð”Ð»Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ \n" +" влаÑної інформпанелі клацніть \"Редагувати інформпанель\".\n" +" " #: aleksis/core/templates/core/index.html:59 msgid "Last activities" -msgstr "" +msgstr "ОÑтанні дії" #: aleksis/core/templates/core/index.html:77 msgid "No activities available yet." -msgstr "" +msgstr "Дії поки що не доÑтупні." #: aleksis/core/templates/core/index.html:82 msgid "Recent notifications" -msgstr "" +msgstr "Свіжі ÑповіщеннÑ" #: aleksis/core/templates/core/index.html:98 #: aleksis/core/templates/core/notifications.html:23 msgid "More information →" -msgstr "" +msgstr "Більше інформації →" #: aleksis/core/templates/core/index.html:105 #: aleksis/core/templates/core/notifications.html:30 msgid "No notifications available yet." -msgstr "" +msgstr "Ð¡Ð¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾ÐºÐ¸ що не доÑтупні." #: aleksis/core/templates/core/pages/about.html:6 msgid "About AlekSIS®" -msgstr "" +msgstr "Щодо AlekSIS®" #: aleksis/core/templates/core/pages/about.html:7 msgid "AlekSIS® – The Free School Information System" -msgstr "" +msgstr "AlekSIS® – The Free School Information System" #: aleksis/core/templates/core/pages/about.html:15 msgid "About AlekSIS" -msgstr "" +msgstr "Щодо AlekSIS" #: aleksis/core/templates/core/pages/about.html:17 msgid "" @@ -1952,6 +2050,11 @@ msgid "" " can be used by anyone.\n" " " msgstr "" +"\n" +" Ð¦Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð° базуєтьÑÑ Ð½Ð° AlekSIS®, веб-інÑтрументі інформаційної ÑиÑтеми Ð´Ð»Ñ Ð½Ð°Ð²Ñ‡Ð°Ð½Ð½Ñ (SIS) за допомогою Ñкої\n" +" можна керувати та/або виÑвітлювати організаційні елементи навчальних закладів. AlekSIS - безплатне ПЗ\n" +" Ñ– ним може кориÑтуватиÑÑ Ð±ÑƒÐ´ÑŒ-хто.\n" +" " #: aleksis/core/templates/core/pages/about.html:24 msgid "" @@ -1959,18 +2062,22 @@ msgid "" " AlekSIS® is a registered trademark of the AlekSIS open source project, represented by Teckids e.V.\n" " " msgstr "" +"\n" +" AlekSIS® – зареєÑтрована торгова марка проекту з відкритим " +"програмним кодом AlekSIS, що предÑтавлена Teckids e.V.\n" +" " #: aleksis/core/templates/core/pages/about.html:30 msgid "Website of AlekSIS" -msgstr "" +msgstr "Веб-Ñайт AlekSIS" #: aleksis/core/templates/core/pages/about.html:31 msgid "Source code" -msgstr "" +msgstr "Програмний код" #: aleksis/core/templates/core/pages/about.html:40 msgid "Licence information" -msgstr "" +msgstr "Ліцензійна інформаціÑ" #: aleksis/core/templates/core/pages/about.html:42 msgid "" @@ -1980,22 +2087,29 @@ msgid "" " licences are marked like this:\n" " " msgstr "" +"\n" +" Ядро та офіційні додатки AlekSIS ліцензовані EUPL, верÑÑ–Ñ— 1.2 " +"та новіше. Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ—\n" +" щодо додатків третіх Ñторін, Ñкщо такі вÑтановлені, звернітьÑÑ " +"до відповідних компонентів нижче.\n" +" Ці ліцензії мають таку позначку:\n" +" " #: aleksis/core/templates/core/pages/about.html:50 msgid "Free/Open Source Licence" -msgstr "" +msgstr "Безкоштовна або Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ Ð’Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¾Ð³Ð¾ Коду (Open Source)" #: aleksis/core/templates/core/pages/about.html:51 msgid "Other Licence" -msgstr "" +msgstr "Інша ліцензіÑ" #: aleksis/core/templates/core/pages/about.html:55 msgid "Full licence text" -msgstr "" +msgstr "Повний текÑÑ‚ ліцензії" #: aleksis/core/templates/core/pages/about.html:56 msgid "More information about the EUPL" -msgstr "" +msgstr "Більше інформації щодо EUPL" #: aleksis/core/templates/core/pages/about.html:95 #, python-format @@ -2004,11 +2118,14 @@ msgid "" " This app is licenced under %(licence)s.\n" " " msgstr "" +"\n" +" Цей додаток ліцензований під %(licence)s.\n" +" " #: aleksis/core/templates/core/pages/delete.html:6 #, python-format msgid "Delete %(object_name)s" -msgstr "" +msgstr "Видалити %(object_name)s" #: aleksis/core/templates/core/pages/delete.html:13 #, python-format @@ -2017,6 +2134,9 @@ msgid "" " Do you really want to delete the %(object_name)s \"%(object)s\"?\n" " " msgstr "" +"\n" +" Ви дійно хочете видалити %(object_name)s \"%(object)s\"?\n" +" " #: aleksis/core/templates/core/pages/progress.html:27 msgid "" @@ -2024,19 +2144,23 @@ msgid "" " Without activated JavaScript the progress status can't be updated.\n" " " msgstr "" +"\n" +" Без активованого JavaScript ÑÑ‚Ð°Ñ‚ÑƒÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð½Ðµ зможе " +"оновлюватиÑÑ.\n" +" " #: aleksis/core/templates/core/pages/progress.html:47 #: aleksis/core/templates/two_factor/core/otp_required.html:19 msgid "Go back" -msgstr "" +msgstr "Ðазад" #: aleksis/core/templates/core/pages/system_status.html:12 msgid "System checks" -msgstr "" +msgstr "СиÑтемні перевірки" #: aleksis/core/templates/core/pages/system_status.html:22 msgid "Maintenance mode enabled" -msgstr "" +msgstr "Ðктивований режим обÑлуговуваннÑ" #: aleksis/core/templates/core/pages/system_status.html:24 msgid "" @@ -2044,18 +2168,22 @@ msgid "" " Only admin and visitors from internal IPs can access thesite.\n" " " msgstr "" +"\n" +" ДоÑтуп до Ñайту мають лише адмініÑтратор та відвідувачі з " +"внутрішніми IP-адреÑами.\n" +" " #: aleksis/core/templates/core/pages/system_status.html:36 msgid "Maintenance mode disabled" -msgstr "" +msgstr "Режим обÑÐ»ÑƒÐ³Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð´ÐµÐ°ÐºÑ‚Ð¸Ð²Ð¾Ð²Ð°Ð½Ð¸Ð¹" #: aleksis/core/templates/core/pages/system_status.html:37 msgid "Everyone can access the site." -msgstr "" +msgstr "ДоÑтуп до Ñайту мають уÑÑ–." #: aleksis/core/templates/core/pages/system_status.html:47 msgid "Debug mode enabled" -msgstr "" +msgstr "Ðктивований режим налагодженнÑ" #: aleksis/core/templates/core/pages/system_status.html:49 msgid "" @@ -2063,10 +2191,14 @@ msgid "" " The web server throws back debug information on errors. Do not use in production!\n" " " msgstr "" +"\n" +" Веб-Ñервер кидає під Ñ‡Ð°Ñ Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº інформацію щодо " +"налагодженнÑ. Ðе викориÑтовуйте в продакшені!\n" +" " #: aleksis/core/templates/core/pages/system_status.html:56 msgid "Debug mode disabled" -msgstr "" +msgstr "Режим Ð½Ð°Ð»Ð°Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð´ÐµÐ°ÐºÑ‚Ð¸Ð²Ð¾Ð²Ð°Ð½Ð¸Ð¹" #: aleksis/core/templates/core/pages/system_status.html:58 msgid "" @@ -2074,50 +2206,54 @@ msgid "" " Debug mode is disabled. Default error pages are displayed on errors.\n" " " msgstr "" +"\n" +" Режим Ð½Ð°Ð»Ð°Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð´ÐµÐ°ÐºÑ‚Ð¸Ð²Ð¾Ð²Ð°Ð½Ð¸Ð¹. Ð’ разі збоїв " +"відображатимутьÑÑ Ñ‚Ð¸Ð¿Ð¾Ð²Ñ– Ñторінки помилок.\n" +" " #: aleksis/core/templates/core/pages/system_status.html:71 msgid "System health checks" -msgstr "" +msgstr "Перевірки роботи ÑиÑтеми" #: aleksis/core/templates/core/pages/system_status.html:77 msgid "Service" -msgstr "" +msgstr "Служба" #: aleksis/core/templates/core/pages/system_status.html:78 #: aleksis/core/templates/core/pages/system_status.html:119 msgid "Status" -msgstr "" +msgstr "Стан" #: aleksis/core/templates/core/pages/system_status.html:79 msgid "Time taken" -msgstr "" +msgstr "ТриваліÑÑ‚ÑŒ" #: aleksis/core/templates/core/pages/system_status.html:100 msgid "seconds" -msgstr "" +msgstr "Ñек" #: aleksis/core/templates/core/pages/system_status.html:111 msgid "Celery task results" -msgstr "" +msgstr "Результати Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Celery" #: aleksis/core/templates/core/pages/system_status.html:116 #: aleksis/core/templates/templated_email/celery_failure.email:9 #: aleksis/core/templates/templated_email/celery_failure.email:28 msgid "Task" -msgstr "" +msgstr "ЗавданнÑ" #: aleksis/core/templates/core/pages/system_status.html:117 msgid "ID" -msgstr "" +msgstr "ID" #: aleksis/core/templates/core/pages/system_status.html:118 msgid "Date done" -msgstr "" +msgstr "Ð§Ð°Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ" #: aleksis/core/templates/core/pages/test_pdf.html:7 #: aleksis/core/templates/core/pages/test_pdf.html:8 msgid "Test PDF generation" -msgstr "" +msgstr "Спроба генерації PDF" #: aleksis/core/templates/core/pages/test_pdf.html:14 msgid "" @@ -2125,6 +2261,10 @@ msgid "" " This simple view can be used to ensure the correct function of the built-in PDF generation system.\n" " " msgstr "" +"\n" +" Цей проÑтий виглÑд допоможе перевірити коректніÑÑ‚ÑŒ налаштувань " +"вбудованої ÑиÑтеми генерації PDF.\n" +" " #: aleksis/core/templates/core/partials/announcements.html:8 #: aleksis/core/templates/core/partials/announcements.html:35 @@ -2134,6 +2274,9 @@ msgid "" " Valid for %(from)s\n" " " msgstr "" +"\n" +" ДійÑний на %(from)s\n" +" " #: aleksis/core/templates/core/partials/announcements.html:12 #, python-format @@ -2142,6 +2285,9 @@ msgid "" " Valid from %(from)s until %(until)s\n" " " msgstr "" +"\n" +" ДійÑний з %(from)s до %(until)s\n" +" " #: aleksis/core/templates/core/partials/announcements.html:39 #, python-format @@ -2150,34 +2296,37 @@ msgid "" " Valid for %(from)s – %(until)s\n" " " msgstr "" +"\n" +" ДійÑний на %(from)s – %(until)s\n" +" " #: aleksis/core/templates/core/partials/avatar_content.html:14 #: aleksis/core/templates/core/partials/avatar_content.html:15 #: aleksis/core/templates/core/person/full.html:213 #: aleksis/core/templates/core/person/full.html:214 msgid "Avatar" -msgstr "" +msgstr "Ðватар" #: aleksis/core/templates/core/partials/avatar_content.html:19 #: aleksis/core/templates/core/partials/avatar_content.html:20 msgid "Identicon" -msgstr "" +msgstr "Ідентифікатор (іконка)" #: aleksis/core/templates/core/partials/crud_events.html:15 msgid "Changed by" -msgstr "" +msgstr "Змінене" #: aleksis/core/templates/core/partials/crud_events.html:15 msgid "Unknown" -msgstr "" +msgstr "Ðевідомо" #: aleksis/core/templates/core/partials/language_form.html:15 msgid "Language" -msgstr "" +msgstr "Мова" #: aleksis/core/templates/core/partials/language_form.html:27 msgid "Select language" -msgstr "" +msgstr "Оберіть мову" #: aleksis/core/templates/core/partials/no_person.html:12 msgid "" @@ -2186,6 +2335,11 @@ msgid "" " a dummy person has been linked to your account.\n" " " msgstr "" +"\n" +" Ваш адмініÑтративний обліковий Ð·Ð°Ð¿Ð¸Ñ Ð½Ðµ поєднаний з жодною " +"оÑобою. Через це\n" +" до Вашого облікового запиÑу приєднана фейкова оÑоба.\n" +" " #: aleksis/core/templates/core/partials/no_person.html:19 msgid "" @@ -2195,140 +2349,145 @@ msgid "" " the managers of AlekSIS at your school.\n" " " msgstr "" +"\n" +" Ваш обліковий Ð·Ð°Ð¿Ð¸Ñ Ð½Ðµ пов'Ñзаний з фізоÑобою. Це означає,\n" +" що Ви не маєте жодного доÑтупу до навчальної інформації. ЗвернітьÑÑ,\n" +" будь лаÑка, до адмініÑтраторів AlekSIS у Вашому навчальному закладі.\n" +" " #: aleksis/core/templates/core/perms/assign.html:12 #: aleksis/core/templates/core/perms/assign.html:13 msgid "Assign permission" -msgstr "" +msgstr "Призначити дозвіл" #: aleksis/core/templates/core/perms/assign.html:17 msgid "Selected permission" -msgstr "" +msgstr "Обраний дозвіл" #: aleksis/core/templates/core/perms/assign.html:26 msgid "Assign" -msgstr "" +msgstr "Призначити" #: aleksis/core/templates/core/perms/list.html:21 msgid "Assign a new permission" -msgstr "" +msgstr "Призначити новий дозвіл" #: aleksis/core/templates/core/perms/list.html:25 msgid "Select" -msgstr "" +msgstr "Обрати" #: aleksis/core/templates/core/perms/list.html:34 msgid "Global (user)" -msgstr "" +msgstr "Глобально (кориÑтувач)" #: aleksis/core/templates/core/perms/list.html:38 msgid "Global (group)" -msgstr "" +msgstr "Глобально (група)" #: aleksis/core/templates/core/perms/list.html:42 msgid "Object (user)" -msgstr "" +msgstr "Об'єкт (кориÑтувач)" #: aleksis/core/templates/core/perms/list.html:46 msgid "Object (group)" -msgstr "" +msgstr "Об'єкт (група)" #: aleksis/core/templates/core/perms/list.html:52 msgid "Filter permissions" -msgstr "" +msgstr "Фільтр дозволів" #: aleksis/core/templates/core/perms/list.html:58 msgid "Update" -msgstr "" +msgstr "Оновити" #: aleksis/core/templates/core/person/create.html:12 #: aleksis/core/templates/core/person/create.html:13 #: aleksis/core/templates/core/person/list.html:17 msgid "Create person" -msgstr "" +msgstr "Створити оÑобу" #: aleksis/core/templates/core/person/edit.html:12 #: aleksis/core/templates/core/person/edit.html:13 msgid "Edit person" -msgstr "" +msgstr "Редагувати оÑобу" #: aleksis/core/templates/core/person/full.html:47 #: aleksis/core/templates/core/person/full.html:107 msgid "Impersonate" -msgstr "" +msgstr "МаÑкуваннÑ" #: aleksis/core/templates/core/person/full.html:54 #: aleksis/core/templates/core/person/full.html:114 msgid "Invite user" -msgstr "" +msgstr "Ð—Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувача" #: aleksis/core/templates/core/person/full.html:121 msgid "Contact details" -msgstr "" +msgstr "Контактні дані" #: aleksis/core/templates/core/person/full.html:220 msgid "This person didn't upload a personal photo." -msgstr "" +msgstr "Ð¦Ñ Ð¾Ñоба не завантажила оÑобиÑте фото." #: aleksis/core/templates/core/person/full.html:228 msgid "Children" -msgstr "" +msgstr "Діти" #: aleksis/core/templates/core/person/list.html:21 msgid "Filter persons" -msgstr "" +msgstr "Фільтр оÑіб" #: aleksis/core/templates/core/person/list.html:32 msgid "Selected persons" -msgstr "" +msgstr "Позначені оÑоби" #: aleksis/core/templates/core/school_term/create.html:6 #: aleksis/core/templates/core/school_term/create.html:7 #: aleksis/core/templates/core/school_term/list.html:14 msgid "Create school term" -msgstr "" +msgstr "Створити Ðавчальний рік" #: aleksis/core/templates/core/school_term/edit.html:6 #: aleksis/core/templates/core/school_term/edit.html:7 msgid "Edit school term" -msgstr "" +msgstr "Редагувати Ðавчальний рік" #: aleksis/core/templates/dynamic_preferences/form.html:9 msgid "Site preferences" -msgstr "" +msgstr "ВлаÑтивоÑÑ‚Ñ– Ñайту" #: aleksis/core/templates/dynamic_preferences/form.html:11 msgid "My preferences" -msgstr "" +msgstr "Мої влаÑтивоÑÑ‚Ñ–" #: aleksis/core/templates/dynamic_preferences/form.html:13 #, python-format msgid "Preferences for %(instance)s" -msgstr "" +msgstr "ВлаÑтивоÑÑ‚Ñ– %(instance)s" #: aleksis/core/templates/dynamic_preferences/form.html:25 msgid "Save preferences" -msgstr "" +msgstr "Зберегти влаÑтивоÑÑ‚Ñ–" #: aleksis/core/templates/invitations/disabled.html:5 msgid "The invite feature is disabled" -msgstr "" +msgstr "Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð°" #: aleksis/core/templates/invitations/disabled.html:13 msgid "The invite feature is disabled." -msgstr "" +msgstr "Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ Ð´ÐµÐ°ÐºÑ‚Ð¸Ð²Ð¾Ð²Ð°Ð½Ð°." #: aleksis/core/templates/invitations/disabled.html:15 msgid "To enable it, switch on the corresponding checkbox in the authentication section of the " -msgstr "" +msgstr "Ð”Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— увімкніть відповідний Ñ‡ÐµÐºÐ±Ð¾ÐºÑ Ð² розділі авторизації " #: aleksis/core/templates/invitations/disabled.html:16 msgid "site preferences page" -msgstr "" +msgstr "Ñторінка влаÑтивоÑтей Ñайту" #: aleksis/core/templates/invitations/enter.html:21 msgid "Accept your invitation" -msgstr "" +msgstr "ПрийнÑÑ‚Ñ‚Ñ Ð’Ð°ÑˆÐ¾Ð³Ð¾ запрошеннÑ" #: aleksis/core/templates/invitations/enter.html:25 msgid "" @@ -2337,140 +2496,144 @@ msgid "" " your new user account:\n" " " msgstr "" +"\n" +" Ð”Ð»Ñ Ñ€ÐµÑ”Ñтрації Вашого нового облікового запиÑу\n" +" напишіть Ñвій код запрошеннÑ:\n" +" " #: aleksis/core/templates/invitations/enter.html:37 msgid "Accept invite" -msgstr "" +msgstr "ПрийнÑÑ‚Ñ‚Ñ Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ" #: aleksis/core/templates/invitations/forms/_invite.html:9 #: aleksis/core/templates/invitations/forms/_invite.html:10 #: aleksis/core/templates/invitations/forms/_invite.html:21 msgid "Invite" -msgstr "" +msgstr "ЗапрошеннÑ" #: aleksis/core/templates/invitations/forms/_invite.html:17 msgid "Invite by email address" -msgstr "" +msgstr "Ð—Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ ÐµÐ».поштою" #: aleksis/core/templates/invitations/forms/_invite.html:26 msgid "Generate invitation code" -msgstr "" +msgstr "Створити код запрошеннÑ" #: aleksis/core/templates/invitations/forms/_invite.html:29 msgid "Generate code" -msgstr "" +msgstr "Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ñ–Ñ ÐºÐ¾Ð´Ñƒ" #: aleksis/core/templates/invitations/forms/_invite.html:33 msgid "Invitations" -msgstr "" +msgstr "ЗапрошеннÑ" #: aleksis/core/templates/invitations/messages/invite_accepted.txt:3 #, python-format msgid "The invitation for %(email)s has been accepted." -msgstr "" +msgstr "Ð—Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ Ð´Ð»Ñ %(email)s було прийнÑте." #: aleksis/core/templates/oauth2_provider/application/create.html:5 #: aleksis/core/templates/oauth2_provider/application/create.html:6 msgid "Register OAuth2 Application" -msgstr "" +msgstr "РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÑƒ OAuth2" #: aleksis/core/templates/oauth2_provider/application/detail.html:5 msgid "OAuth2 Application" -msgstr "" +msgstr "Додаток OAuth2" #: aleksis/core/templates/oauth2_provider/application/detail.html:39 msgid "Client id" -msgstr "" +msgstr "КлієнтÑьке ID" #: aleksis/core/templates/oauth2_provider/application/detail.html:47 msgid "Client secret" -msgstr "" +msgstr "КлієнтÑький Ñекрет" #: aleksis/core/templates/oauth2_provider/application/detail.html:55 msgid "Client type" -msgstr "" +msgstr "КлієнтÑький тип" #: aleksis/core/templates/oauth2_provider/application/detail.html:63 msgid "Allowed scopes" -msgstr "" +msgstr "Дозволені межі дії" #: aleksis/core/templates/oauth2_provider/application/detail.html:71 msgid "Redirect URIs" -msgstr "" +msgstr "URI-адреÑи перенаправленнÑ" #: aleksis/core/templates/oauth2_provider/application/detail.html:79 msgid "Skip Authorisation" -msgstr "" +msgstr "ПропуÑтити авторизацію" #: aleksis/core/templates/oauth2_provider/application/edit.html:5 #: aleksis/core/templates/oauth2_provider/application/edit.html:6 msgid "Edit OAuth2 Application" -msgstr "" +msgstr "Редагувати додаток OAuth2" #: aleksis/core/templates/oauth2_provider/application/list.html:11 msgid "Register new application" -msgstr "" +msgstr "ЗареєÑтрувати новий додаток" #: aleksis/core/templates/oauth2_provider/application/list.html:25 msgid "No applications defined." -msgstr "" +msgstr "Додатки не визначені." #: aleksis/core/templates/oauth2_provider/authorize.html:5 #: aleksis/core/templates/socialaccount/login.html:5 #: aleksis/core/templates/socialaccount/login.html:6 msgid "Authorize" -msgstr "" +msgstr "Ðвторизувати" #: aleksis/core/templates/oauth2_provider/authorize.html:23 #, python-format msgid "Authorize %(name)s" -msgstr "" +msgstr "Ðвторизувати %(name)s" #: aleksis/core/templates/oauth2_provider/authorize.html:25 msgid "The application requests access to the following scopes:" -msgstr "" +msgstr "Додаток запитує дозвіл до таких меж дії:" #: aleksis/core/templates/oauth2_provider/authorize.html:40 msgid "Allow" -msgstr "" +msgstr "Дозволити" #: aleksis/core/templates/oauth2_provider/authorize.html:43 msgid "Disallow" -msgstr "" +msgstr "Заборонити" #: aleksis/core/templates/oauth2_provider/authorized-oob.html:12 msgid "Success!" -msgstr "" +msgstr "УÑпіх!" #: aleksis/core/templates/oauth2_provider/authorized-oob.html:14 msgid "Please return to your application and enter this code:" -msgstr "" +msgstr "ПовернітьÑÑ, будь лаÑка, до Ñвого додатку та впишіть цей код:" #: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:5 #: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:6 #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:23 msgid "Revoke access" -msgstr "" +msgstr "Відкликати доÑтуп" #: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:12 msgid "Are you sure to revoke the access for this application?" -msgstr "" +msgstr "Ви дійÑно хочете відкликати доÑтуп Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ додатку?" #: aleksis/core/templates/oauth2_provider/authorized-token-delete.html:20 msgid "Revoke" -msgstr "" +msgstr "Відкликати" #: aleksis/core/templates/oauth2_provider/authorized-tokens.html:33 msgid "No authorized applications." -msgstr "" +msgstr "Ðвторизованих додатків немає." #: aleksis/core/templates/offline.html:5 msgid "Network error" -msgstr "" +msgstr "Помилка мережі" #: aleksis/core/templates/offline.html:10 msgid "No internet connection." -msgstr "" +msgstr "Ðемає інтернет-з'єднаннÑ." #: aleksis/core/templates/offline.html:14 msgid "" @@ -2480,35 +2643,40 @@ msgid "" " administrators:\n" " " msgstr "" +"\n" +" Під Ñ‡Ð°Ñ Ð´Ð¾Ñтупу до цієї Ñторінки виникла помилка. Можливо, у Ð’Ð°Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð° з інтернетом. ПереконайтеÑÑ, що Ваш WiFi\n" +" або мобільний увімкнені та Ñпробуйте ще раз. Якщо Ви думаєте, що із з'єднаннÑм вÑе добре, звернітьÑÑ\n" +" до ÑиÑтемних адмініÑтраторів:\n" +" " #: aleksis/core/templates/search/search.html:8 msgid "Global Search" -msgstr "" +msgstr "Глобальний пошук" #: aleksis/core/templates/search/search.html:15 msgid "Search Term" -msgstr "" +msgstr "Пошуковий термін" #: aleksis/core/templates/search/search.html:26 msgid "Results" -msgstr "" +msgstr "Результати" #: aleksis/core/templates/search/search.html:38 msgid "No search results could be found to your search." -msgstr "" +msgstr "За Вашим пошуковим запитом результатів немає." #: aleksis/core/templates/search/search.html:87 msgid "Please enter a search term above." -msgstr "" +msgstr "Ðапишіть, будь лаÑка, вище пошуковий термін." #: aleksis/core/templates/socialaccount/authentication_error.html:5 #: aleksis/core/templates/socialaccount/authentication_error.html:6 msgid "Third-party Account Login Failure" -msgstr "" +msgstr "Помилка входу Ñтороннього облікового запиÑу" #: aleksis/core/templates/socialaccount/authentication_error.html:13 msgid "Third-party Account Login Failure." -msgstr "" +msgstr "Помилка входу облікового запиÑу третьої Ñторони." #: aleksis/core/templates/socialaccount/authentication_error.html:15 msgid "" @@ -2517,43 +2685,50 @@ msgid "" " Please contact one of your site administrators.\n" " " msgstr "" +"\n" +" Під Ñ‡Ð°Ñ Ñпроби входу з Вашим Ñтороннім обліковим запиÑом виникла помилка входу.\n" +" ЗвернітьÑÑ, будь лаÑка, до адмініÑтратора Ñайту.\n" +" " #: aleksis/core/templates/socialaccount/connections.html:5 #: aleksis/core/templates/socialaccount/connections.html:6 msgid "Connections" -msgstr "" +msgstr "З'єднаннÑ" #: aleksis/core/templates/socialaccount/connections.html:24 msgid "Remove" -msgstr "" +msgstr "Видалити" #: aleksis/core/templates/socialaccount/connections.html:34 msgid "You currently have no third-party accounts connected to this account." msgstr "" +"Зараз у Ð’Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” облікових запиÑів третіх Ñторін, з'єднаних з цим обліковим " +"запиÑом." #: aleksis/core/templates/socialaccount/connections.html:37 msgid "Add a Third-party Account" -msgstr "" +msgstr "Додати Ñторонній обліковий запиÑ" #: aleksis/core/templates/socialaccount/login.html:12 #, python-format msgid "You are about to connect a new third party account from %(provider)s." -msgstr "" +msgstr "Ви приєднуєте новий обліковий Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ñ€ÐµÑ‚ÑŒÐ¾Ñ— Ñторони від %(provider)s." #: aleksis/core/templates/socialaccount/login.html:23 #, python-format msgid "You are about to sign in using a third party account from %(provider)s." msgstr "" +"Ви авторизуєтеÑÑ Ð·Ð° допомогою Ñтороннього облікового запиÑу від %(provider)s." #: aleksis/core/templates/socialaccount/login.html:28 msgid "Continue" -msgstr "" +msgstr "Продовжити" #: aleksis/core/templates/socialaccount/login_cancelled.html:5 #: aleksis/core/templates/socialaccount/login_cancelled.html:6 #: aleksis/core/templates/socialaccount/login_cancelled.html:13 msgid "Login cancelled" -msgstr "" +msgstr "Вхід ÑкаÑований" #: aleksis/core/templates/socialaccount/login_cancelled.html:15 #, python-format @@ -2562,6 +2737,11 @@ msgid "" " You decided to cancel logging in to our site using one of your existing accounts. If this was a mistake, please proceed to <a href=\"%(login_url)s\">sign in</a>.\n" " " msgstr "" +"\n" +" Схоже, що Ви ÑкаÑували вхід до нашого Ñайту з одним із Ваших " +"облікових запиÑів. Якщо це ÑталоÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¾, Ви можете <a href=\"" +"%(login_url)s\">продовжити вхід тут</a>.\n" +" " #: aleksis/core/templates/socialaccount/signup.html:12 #, python-format @@ -2569,6 +2749,9 @@ msgid "" "You are about to use your %(provider_name)s account to login to\n" " %(site_name)s. As a final step, please complete the following form:" msgstr "" +"Ви на шлÑху до викориÑÑ‚Ð°Ð½Ð½Ñ Ñвого облікового запиÑу у %(provider_name)s\n" +" Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ на %(site_name)s. Заповніть, будь лаÑка, Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ†ÑŽ " +"форму:" #: aleksis/core/templates/socialaccount/snippets/provider_list.html:12 #, python-format @@ -2577,6 +2760,9 @@ msgid "" " Login with %(name)s\n" " " msgstr "" +"\n" +" Вхід з %(name)s\n" +" " #: aleksis/core/templates/socialaccount/snippets/provider_list.html:21 #, python-format @@ -2585,6 +2771,9 @@ msgid "" " Login with %(name)s\n" " " msgstr "" +"\n" +" Вхід з %(name)s\n" +" " #: aleksis/core/templates/socialaccount/snippets/provider_list.html:30 msgid "" @@ -2592,41 +2781,44 @@ msgid "" " No third-party account providers available.\n" " " msgstr "" +"\n" +" Провайдери Ñторонніх облікових запиÑів недоÑтупні.\n" +" " #: aleksis/core/templates/templated_email/base.email:5 #: aleksis/core/templates/templated_email/base.email:16 msgid "Hello" -msgstr "" +msgstr "Привіт" #: aleksis/core/templates/templated_email/celery_failure.email:4 #, python-format msgid "Celery task %(task_name)s failed!" -msgstr "" +msgstr "Збій у Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Celery з назвою %(task_name)s!" #: aleksis/core/templates/templated_email/celery_failure.email:7 #, python-format msgid "the celery task %(task_name)s failed with following information:" -msgstr "" +msgstr "у Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Celery %(task_name)s виникла проблема:" #: aleksis/core/templates/templated_email/celery_failure.email:10 #: aleksis/core/templates/templated_email/celery_failure.email:29 msgid "Task ID" -msgstr "" +msgstr "ID завданнÑ" #: aleksis/core/templates/templated_email/celery_failure.email:11 #: aleksis/core/templates/templated_email/celery_failure.email:30 msgid "Raised exception" -msgstr "" +msgstr "Викинутий винÑток" #: aleksis/core/templates/templated_email/celery_failure.email:12 #: aleksis/core/templates/templated_email/celery_failure.email:31 msgid "Positional arguments" -msgstr "" +msgstr "Ðргументи" #: aleksis/core/templates/templated_email/celery_failure.email:15 #: aleksis/core/templates/templated_email/celery_failure.email:38 msgid "Keyword arguments" -msgstr "" +msgstr "Ðргументи з ключовими Ñловами" #: aleksis/core/templates/templated_email/celery_failure.email:22 #, python-format @@ -2635,16 +2827,22 @@ msgid "" " the celery task %(task_name)s failed with following information:\n" " " msgstr "" +"\n" +" у Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Celery %(task_name)s виникла проблема:\n" +" " #: aleksis/core/templates/templated_email/data_checks.email:3 msgid "The system detected some new problems with your data." -msgstr "" +msgstr "СиÑтема виÑвила деÑкі нові проблеми з Вашими даними." #: aleksis/core/templates/templated_email/data_checks.email:6 msgid "" "the system detected some new problems with your data.\n" "Please take some time to inspect them and solve the issues or mark them as ignored." msgstr "" +"ÑиÑтема виÑвила деÑкі нові проблеми з Вашими даними.\n" +"Приділіть, будь лаÑка, трохи чаÑу Ð´Ð»Ñ Ñ—Ñ… перевірки та Ð²Ð¸Ñ€Ñ–ÑˆÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼ або " +"позначте Ñ—Ñ… Ð´Ð»Ñ Ñ–Ð³Ð½Ð¾Ñ€Ñƒ." #: aleksis/core/templates/templated_email/data_checks.email:15 msgid "" @@ -2653,39 +2851,44 @@ msgid "" " Please take some time to inspect them and solve the issues or mark them as ignored.\n" " " msgstr "" +"\n" +" ÑиÑтема виÑвила деÑкі нові проблеми з Вашими даними.\n" +" Приділіть, будь лаÑка, трохи чаÑу Ð´Ð»Ñ Ñ—Ñ… перевірки та Ð²Ð¸Ñ€Ñ–ÑˆÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼ " +"або позначте Ñ—Ñ… Ð´Ð»Ñ Ñ–Ð³Ð½Ð¾Ñ€Ñƒ.\n" +" " #: aleksis/core/templates/templated_email/data_checks.email:23 msgid "Problem description" -msgstr "" +msgstr "ÐžÐ¿Ð¸Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¸" #: aleksis/core/templates/templated_email/data_checks.email:24 msgid "Count of objects with new problems" -msgstr "" +msgstr "КількіÑÑ‚ÑŒ об'єктів з новими проблемами" #: aleksis/core/templates/templated_email/notification.email:4 msgid "New notification for" -msgstr "" +msgstr "Ðове ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð´Ð»Ñ" #: aleksis/core/templates/templated_email/notification.email:6 #: aleksis/core/templates/templated_email/notification.email:20 #, python-format msgid "Hello %(notification_user)s," -msgstr "" +msgstr "Привіт, %(notification_user)s," #: aleksis/core/templates/templated_email/notification.email:9 #: aleksis/core/templates/templated_email/notification.email:23 msgid "we got a new notification for you:" -msgstr "" +msgstr "у Ð½Ð°Ñ Ð´Ð»Ñ Ñ‚ÐµÐ±Ðµ нове ÑповіщеннÑ:" #: aleksis/core/templates/templated_email/notification.email:15 #: aleksis/core/templates/templated_email/notification.email:29 msgid "More information" -msgstr "" +msgstr "Більше інформаціЇ" #: aleksis/core/templates/templated_email/notification.email:17 #, python-format msgid "Sent by %(trans_sender)s at %(trans_created_at)s" -msgstr "" +msgstr "ÐадіÑлано %(trans_sender)s о %(trans_created_at)s" #: aleksis/core/templates/templated_email/notification.email:34 #, python-format @@ -2694,16 +2897,19 @@ msgid "" " Sent by %(trans_sender)s at %(trans_created_at)s\n" " " msgstr "" +"\n" +" ÐадіÑлано %(trans_sender)s о %(trans_created_at)s\n" +" " #: aleksis/core/templates/templated_email/person_changed.email:4 #, python-format msgid "%(person)s changed their data!" -msgstr "" +msgstr "%(person)s змінили Ñвої дані!" #: aleksis/core/templates/templated_email/person_changed.email:7 #, python-format msgid "the person %(person)s recently changed the following fields:" -msgstr "" +msgstr "оÑоба %(person)s щойно змінила такі полÑ:" #: aleksis/core/templates/templated_email/person_changed.email:15 #, python-format @@ -2712,19 +2918,22 @@ msgid "" " the person %(person)s recently changed the following fields:\n" " " msgstr "" +"\n" +" оÑоба %(person)s щойно змінила такі полÑ:\n" +" " #: aleksis/core/templates/two_factor/_base_focus.html:6 #: aleksis/core/templates/two_factor/core/otp_required.html:22 #: aleksis/core/templates/two_factor/core/setup.html:5 #: aleksis/core/templates/two_factor/profile/profile.html:88 msgid "Enable Two-Factor Authentication" -msgstr "" +msgstr "Увімкнути двох-факторну автентифікацію" #: aleksis/core/templates/two_factor/core/backup_tokens.html:5 #: aleksis/core/templates/two_factor/core/backup_tokens.html:9 #: aleksis/core/templates/two_factor/profile/profile.html:46 msgid "Backup Tokens" -msgstr "" +msgstr "Бекап Токенів" #: aleksis/core/templates/two_factor/core/backup_tokens.html:14 msgid "" @@ -2736,6 +2945,17 @@ msgid "" " below will be valid.\n" " " msgstr "" +"\n" +" Резервні токени можуть бути викориÑтані коли Ваші оÑновний та " +"резервний\n" +" телефонні номери не доÑтупні. Резервні токени, що нижче, можуть бути " +"викориÑтані\n" +" Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸ на вході. Коли Ви викориÑтаєте уÑÑ– резервні токени, " +"Ви\n" +" зможете згенерувати новий набір резервних токенів. ДійÑними будуть " +"лише токени,\n" +" що нижче.\n" +" " #: aleksis/core/templates/two_factor/core/backup_tokens.html:33 msgid "" @@ -2743,41 +2963,48 @@ msgid "" " Print these tokens and keep them somewhere safe.\n" " " msgstr "" +"\n" +" Роздрукуйте ці токени та збережіть в надійному міÑці.\n" +" " #: aleksis/core/templates/two_factor/core/backup_tokens.html:39 msgid "You don't have any backup codes yet." -msgstr "" +msgstr "У Ð’Ð°Ñ Ð¿Ð¾ÐºÐ¸ що немає бекапів кодів." #: aleksis/core/templates/two_factor/core/backup_tokens.html:45 msgid "Back to Account Security" -msgstr "" +msgstr "Ðазад до безпеки облікового запиÑу" #: aleksis/core/templates/two_factor/core/backup_tokens.html:49 msgid "Generate Tokens" -msgstr "" +msgstr "Створити Токени" #: aleksis/core/templates/two_factor/core/login.html:27 #, python-format msgid "Login for %(name)s" -msgstr "" +msgstr "Увійти Ð´Ð»Ñ %(name)s" #: aleksis/core/templates/two_factor/core/login.html:30 msgid "Login with username and password" -msgstr "" +msgstr "Увійдіть за допомогою логіна та паролÑ" #: aleksis/core/templates/two_factor/core/login.html:38 msgid "" "You have no permission to view this page. Please login with an other\n" " account." msgstr "" +"Ви не маєте дозволу на переглÑд цієї Ñторінки. Увійдіть, будь лаÑка,\n" +" з іншим обліковим запиÑом." #: aleksis/core/templates/two_factor/core/login.html:47 msgid "Please login with your account to use the external application." msgstr "" +"Ð”Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð¾Ð²Ð½Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ додатку увійдіть, будь лаÑка, у Ñвій обліковий " +"запиÑ." #: aleksis/core/templates/two_factor/core/login.html:54 msgid "Please login to see this page." -msgstr "" +msgstr "Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду цієї Ñторінки, будь лаÑка, увійдіть." #: aleksis/core/templates/two_factor/core/login.html:65 msgid "" @@ -2786,6 +3013,11 @@ msgid "" " digits you hear.\n" " " msgstr "" +"\n" +" Ми зателефонуємо зараз на Ваш номер. Ðапишіть, будь " +"лаÑка, цифри,\n" +" Ñкі Ви почуєте.\n" +" " #: aleksis/core/templates/two_factor/core/login.html:70 msgid "" @@ -2794,6 +3026,11 @@ msgid "" " sent.\n" " " msgstr "" +"\n" +" Ми надіÑлали Вам текÑтове повідомленнÑ. Ðапишіть, " +"будь лаÑка, отриманий\n" +" токен.\n" +" " #: aleksis/core/templates/two_factor/core/login.html:75 msgid "" @@ -2802,6 +3039,10 @@ msgid "" " generator.\n" " " msgstr "" +"\n" +" Ðапишіть, будь лаÑка, токен, Ñкий Ви отримали Ñвоїм\n" +" генератором токенів.\n" +" " #: aleksis/core/templates/two_factor/core/login.html:81 msgid "" @@ -2811,30 +3052,38 @@ msgid "" " enter one of these backup tokens to login to your account.\n" " " msgstr "" +"\n" +" Ð”Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ ÑкориÑтайтеÑÑ Ñ„Ð¾Ñ€Ð¼Ð¾ÑŽ Ð´Ð»Ñ Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð¸Ñ… " +"токенів.\n" +" Ці токени були згенеровані Вам Ð´Ð»Ñ Ð´Ñ€ÑƒÐºÑƒ та Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ " +"у надійному міÑці.\n" +" Щоб увійти напишіть, будь лаÑка, один з резервних " +"токенів.\n" +" " #: aleksis/core/templates/two_factor/core/login.html:109 msgid "Device currently not available?" -msgstr "" +msgstr "Зараз приÑтрій недоÑтупний?" #: aleksis/core/templates/two_factor/core/login.html:111 msgid "Or, alternatively, use one of your backup phones:" -msgstr "" +msgstr "Ðбо можете ÑкориÑтатиÑÑ Ð¾Ð´Ð½Ð¸Ð¼ зі Ñвоїх резервних телефонів:" #: aleksis/core/templates/two_factor/core/login.html:122 msgid "As a last resort, you can use a backup token:" -msgstr "" +msgstr "Ð’ ÑкоÑÑ‚Ñ– оÑтанньої можливоÑÑ‚Ñ– можете ÑкориÑтатиÑÑ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð¸Ð¼ токеном:" #: aleksis/core/templates/two_factor/core/login.html:125 msgid "Use Backup Token" -msgstr "" +msgstr "СкориÑтатиÑÑ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð¸Ð¼ токеном" #: aleksis/core/templates/two_factor/core/login.html:136 msgid "Use alternative login options" -msgstr "" +msgstr "СкориÑтайтеÑÑ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ð¸Ð¼Ð¸ можливоÑÑ‚Ñми Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ" #: aleksis/core/templates/two_factor/core/otp_required.html:9 msgid "Permission Denied" -msgstr "" +msgstr "Дозвіл відÑутній" #: aleksis/core/templates/two_factor/core/otp_required.html:10 msgid "" @@ -2842,6 +3091,12 @@ msgid "" " two-factor authentication for security reasons. You need to enable these\n" " security features in order to access this page." msgstr "" +"Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду запитуванної Ñторінки, з оглÑду на безпеку, необхідна " +"додаткова\n" +" перевірка кориÑтувача з викориÑтаннÑм двохфакторної автентифікації." +"\n" +" Ð”Ð»Ñ Ð´Ð¾Ñтупу до цієї Ñторінки Вам потрібно увімкнути ці функції " +"безпеки." #: aleksis/core/templates/two_factor/core/otp_required.html:14 msgid "" @@ -2849,11 +3104,14 @@ msgid "" " account. Enable two-factor authentication for enhanced account\n" " security." msgstr "" +"Двохфакторна Ð°Ð²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ñƒ Вашому обліковому запиÑÑ–\n" +" вимкнена. Ð”Ð»Ñ Ð·Ð±Ñ–Ð»ÑŒÑˆÐµÐ½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸ обліковки увімкніть двохфакторну\n" +" автентифікацію." #: aleksis/core/templates/two_factor/core/phone_register.html:5 #: aleksis/core/templates/two_factor/core/phone_register.html:9 msgid "Add Backup Phone" -msgstr "" +msgstr "Додати резервний телефон" #: aleksis/core/templates/two_factor/core/phone_register.html:12 msgid "" @@ -2861,12 +3119,17 @@ msgid "" " account. This number will be used if your primary method of\n" " registration is not available." msgstr "" +"Ви додаєте у Ñвій обліковий Ð·Ð°Ð¿Ð¸Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð¸Ð¹ номер телефону.\n" +" Він буде викориÑтаний в разі неможливоÑÑ‚Ñ– реєÑтрації з Вашим\n" +" оÑновним номером." #: aleksis/core/templates/two_factor/core/phone_register.html:16 msgid "" "We've sent a token to your phone number. Please\n" " enter the token you've received." msgstr "" +"Ми надіÑлали токен на Ваш номер. Ðапишіть,\n" +" будь лаÑка, отриманий токен." #: aleksis/core/templates/two_factor/core/setup.html:9 msgid "" @@ -2876,6 +3139,12 @@ msgid "" " authentication.\n" " " msgstr "" +"\n" +" Ви вÑтановлюєте Ð´Ð»Ñ Ñвого облікового запиÑу новий рівень безпеки.\n" +" Ð”Ð»Ñ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð´Ð²Ð¾Ñ…Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð½Ð¾Ñ— автентифікації пройдіть декілька " +"кроків\n" +" майÑтра налаштуваннÑ.\n" +" " #: aleksis/core/templates/two_factor/core/setup.html:17 msgid "" @@ -2883,6 +3152,10 @@ msgid "" " Please select which authentication method you would like to use:\n" " " msgstr "" +"\n" +" Оберіть, будь лаÑка, метод автентифікації, Ñкий Ви хочете " +"викориÑтовувати:\n" +" " #: aleksis/core/templates/two_factor/core/setup.html:23 msgid "" @@ -2892,6 +3165,13 @@ msgid "" " Then, enter the token generated by the app.\n" " " msgstr "" +"\n" +" Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоби почати викориÑÑ‚Ð°Ð½Ð½Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð° токенів, ÑкориÑтйтеÑÑ, " +"будь лаÑка, Ñвоїм\n" +" улюбленим додатком Ð´Ð»Ñ Ð´Ð²Ð¾Ñ…Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð½Ð¾Ñ— автентифікації (TOTP) та " +"відÑкануйте QR-код, що нижче.\n" +" ПіÑÐ»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ напишіть отриманий генератором токен.\n" +" " #: aleksis/core/templates/two_factor/core/setup.html:34 msgid "" @@ -2900,6 +3180,11 @@ msgid "" " text messages on. This number will be validated in the next step.\n" " " msgstr "" +"\n" +" Ðапишіть, будь лаÑка, номер телефону, на Ñкий Ви хочете\n" +" отримувати текÑтові повідомленнÑ. Ðа наÑтупному кроці він буде " +"перевірений.\n" +" " #: aleksis/core/templates/two_factor/core/setup.html:41 msgid "" @@ -2908,6 +3193,10 @@ msgid "" " This number will be validated in the next step.\n" " " msgstr "" +"\n" +" Ðапишіть, будь лаÑка, номер телефону, на Ñкий Ви хочете\n" +" отримувати дзвінки. Ðа наÑтупному кроці він буде перевірений.\n" +" " #: aleksis/core/templates/two_factor/core/setup.html:50 msgid "" @@ -2915,6 +3204,10 @@ msgid "" " We are calling your phone right now, please enter the digits you hear.\n" " " msgstr "" +"\n" +" Ми зараз телефонуємо на Ваш номер, – напишіть, будь лаÑка, " +"цифри, Ñкі Ви почуєте.\n" +" " #: aleksis/core/templates/two_factor/core/setup.html:56 msgid "" @@ -2922,6 +3215,10 @@ msgid "" " We sent you a text message, please enter the tokens we sent.\n" " " msgstr "" +"\n" +" Ми надіÑлали Вам текÑтове повідомленнÑ. Ðапишіть, будь лаÑка, " +"отримані токени.\n" +" " #: aleksis/core/templates/two_factor/core/setup.html:63 msgid "" @@ -2932,6 +3229,12 @@ msgid "" " persists, contact the site administrator.\n" " " msgstr "" +"\n" +" Ми помітили, що Ñ–Ñнує проблема з викориÑтаннÑм обраного методу авторизації. ПовернітьÑÑ,\n" +" будь лаÑка, назад, та переконайтеÑÑ, що необхідні дані вказані правильно\n" +" Ñ– Ñпробуйте увійте ще раз, або ж ÑкориÑтайтеÑÑ Ñ–Ð½ÑˆÐ¸Ð¼ варіантом входу. Якщо ж\n" +" проблема залишаєтьÑÑ, звернітьÑÑ Ð´Ð¾ адмініÑтратора Ñайту.\n" +" " #: aleksis/core/templates/two_factor/core/setup.html:73 msgid "" @@ -2941,11 +3244,16 @@ msgid "" " account.\n" " " msgstr "" +"\n" +" Ð”Ð»Ñ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— та перевірки Вашого YubiKey напишіть,\n" +" будь лаÑка, нижче токен. Ваш YubiKey буде прив'Ñзаний до Вашого\n" +" облікового запиÑу.\n" +" " #: aleksis/core/templates/two_factor/core/setup_complete.html:5 #: aleksis/core/templates/two_factor/core/setup_complete.html:9 msgid "Two-Factor Authentication successfully enabled" -msgstr "" +msgstr "Двохфакторна Ð°Ð²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ ÑƒÑпішно увімкнена" #: aleksis/core/templates/two_factor/core/setup_complete.html:14 msgid "" @@ -2953,16 +3261,19 @@ msgid "" " Congratulations, you've successfully enabled two-factor authentication.\n" " " msgstr "" +"\n" +" Вітаємо з уÑпішним налаштуваннÑм двохфакторної автентифікації.\n" +" " #: aleksis/core/templates/two_factor/core/setup_complete.html:24 #: aleksis/core/templates/two_factor/core/setup_complete.html:44 msgid "Back to Profile" -msgstr "" +msgstr "Ðазад до Профілю" #: aleksis/core/templates/two_factor/core/setup_complete.html:28 #: aleksis/core/templates/two_factor/core/setup_complete.html:48 msgid "Generate backup codes" -msgstr "" +msgstr "Створити резервні коди" #: aleksis/core/templates/two_factor/core/setup_complete.html:34 msgid "" @@ -2972,64 +3283,77 @@ msgid "" " or add a phone number.\n" " " msgstr "" +"\n" +" Між іншим, може так ÑтатиÑÑ, що Ви не матимете доÑтупу до Ñвого " +"оÑновного\n" +" приÑтрою з токенами. Ð”Ð»Ñ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²ÐºÐ¸ Ñтворіть " +"резервні коди\n" +" або додайте номер телефону.\n" +" " #: aleksis/core/templates/two_factor/core/setup_complete.html:52 #: aleksis/core/templates/two_factor/profile/profile.html:41 msgid "Add Phone Number" -msgstr "" +msgstr "Додати номер телефону" #: aleksis/core/templates/two_factor/profile/disable.html:5 #: aleksis/core/templates/two_factor/profile/disable.html:9 #: aleksis/core/templates/two_factor/profile/profile.html:63 #: aleksis/core/templates/two_factor/profile/profile.html:73 msgid "Disable Two-Factor Authentication" -msgstr "" +msgstr "Вимкнути двохфакторну автентифікацію" #: aleksis/core/templates/two_factor/profile/disable.html:12 msgid "You are about to disable two-factor authentication. This weakens your account security, are you sure?" msgstr "" +"Ви вимикаєте двохфакторну автентифікацію. Це знизить захиÑÑ‚ Вашого " +"облікового запиÑу. Ви впевнені?" #: aleksis/core/templates/two_factor/profile/disable.html:26 msgid "Disable" -msgstr "" +msgstr "Вимкнути" #: aleksis/core/templates/two_factor/profile/profile.html:5 #: aleksis/core/templates/two_factor/profile/profile.html:10 msgid "Account Security" -msgstr "" +msgstr "Безпека облікового запиÑу" #: aleksis/core/templates/two_factor/profile/profile.html:15 msgid "Tokens will be generated by your token generator." -msgstr "" +msgstr "Токени будуть Ñтворені Вашим генератором токенів." #: aleksis/core/templates/two_factor/profile/profile.html:17 #, python-format msgid "Primary method: %(primary)s" -msgstr "" +msgstr "ОÑновний метод: %(primary)s" #: aleksis/core/templates/two_factor/profile/profile.html:19 msgid "Tokens will be generated by your YubiKey." -msgstr "" +msgstr "Токени будуть Ñтворені Вашим YubiKey." #: aleksis/core/templates/two_factor/profile/profile.html:23 msgid "Backup Phone Numbers" -msgstr "" +msgstr "Резервні номери телефонів" #: aleksis/core/templates/two_factor/profile/profile.html:24 msgid "" "If your primary method is not available, we are able to\n" " send backup tokens to the phone numbers listed below." msgstr "" +"Якщо Ваш оÑновний метод не буде доÑтупний, ми зможемо\n" +" надіÑлати резервні токени на вказані нижче телефонні номери." #: aleksis/core/templates/two_factor/profile/profile.html:33 msgid "Unregister" -msgstr "" +msgstr "СкаÑувати реєÑтрацію" #: aleksis/core/templates/two_factor/profile/profile.html:48 msgid "" "If you don't have any device with you, you can access\n" " your account using backup tokens." msgstr "" +"Якщо у Ð’Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” з Ñобою жодного приÑтрою, Ви можете\n" +" отримати доÑтуп з викориÑтаннÑм резервних токенів." #: aleksis/core/templates/two_factor/profile/profile.html:50 #, python-format @@ -3042,11 +3366,25 @@ msgid_plural "" " You have %(counter)s backup tokens remaining.\n" " " msgstr[0] "" +"\n" +" У Ð’Ð°Ñ Ð·Ð°Ð»Ð¸ÑˆÐ¸Ð²ÑÑ Ð»Ð¸ÑˆÐµ один резервний токен.\n" +" " msgstr[1] "" +"\n" +" У Ð’Ð°Ñ Ð·Ð°Ð»Ð¸ÑˆÐ¸Ð»Ð¸ÑÑ %(counter)s резервних токени.\n" +" " +msgstr[2] "" +"\n" +" У Ð’Ð°Ñ Ð·Ð°Ð»Ð¸ÑˆÐ¸Ð»Ð¾ÑÑ %(counter)s резервних токенів.\n" +" " +msgstr[3] "" +"\n" +" У Ð’Ð°Ñ Ð·Ð°Ð»Ð¸ÑˆÐ¸Ð²ÑÑ %(counter)s резервний токен.\n" +" " #: aleksis/core/templates/two_factor/profile/profile.html:59 msgid "Show Codes" -msgstr "" +msgstr "Показати коди" #: aleksis/core/templates/two_factor/profile/profile.html:65 msgid "" @@ -3055,6 +3393,11 @@ msgid "" " also disable two-factor authentication for your account.\n" " " msgstr "" +"\n" +" Хоча ми рішуче заÑтерігаємо Ð’Ð°Ñ Ñ†Ðµ не робити, Ви можете \n" +" також вимкнути двохфакторну автентифікацію Ð´Ð»Ñ Ñвого облікового " +"запиÑу.\n" +" " #: aleksis/core/templates/two_factor/profile/profile.html:78 msgid "" @@ -3064,197 +3407,206 @@ msgid "" " security.\n" " " msgstr "" +"\n" +" Двохфакторна Ð°Ð²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð´Ð»Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ облікового запиÑу\n" +" не активована. Ð”Ð»Ñ Ð¿Ñ–Ð´Ð²Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸ облікового запиÑу увімкніть\n" +" двохфакторну автентифікацію.\n" +" " #: aleksis/core/util/notifications.py:64 msgid "E-Mail" -msgstr "" +msgstr "Ел.пошта" #: aleksis/core/util/notifications.py:65 msgid "SMS" -msgstr "" +msgstr "SMS" #: aleksis/core/util/pdf.py:118 msgid "Progress: Generate PDF file" -msgstr "" +msgstr "Перебіг: Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ñ–Ñ Ñ„Ð°Ð¹Ð»Ñƒ PDF" #: aleksis/core/util/pdf.py:119 msgid "Generating PDF file …" -msgstr "" +msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ PDF …" #: aleksis/core/util/pdf.py:120 msgid "The PDF file has been generated successfully." -msgstr "" +msgstr "Файл PDF уÑпішно Ñтворений." #: aleksis/core/util/pdf.py:121 msgid "There was a problem while generating the PDF file." -msgstr "" +msgstr "Під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ PDF виникла проблема." #: aleksis/core/util/pdf.py:124 msgid "Download PDF" -msgstr "" +msgstr "Звантажити PDF" #: aleksis/core/views.py:292 msgid "The school term has been created." -msgstr "" +msgstr "Ðавчальний рік Ñтворений." #: aleksis/core/views.py:304 msgid "The school term has been saved." -msgstr "" +msgstr "Ðавчальний рік збережений." #: aleksis/core/views.py:424 msgid "The child groups were successfully saved." -msgstr "" +msgstr "Підлеглі групи збережені." #: aleksis/core/views.py:443 aleksis/core/views.py:453 msgid "The person has been saved." -msgstr "" +msgstr "ОÑоба збережена." #: aleksis/core/views.py:503 msgid "The group has been saved." -msgstr "" +msgstr "Група збережена." #: aleksis/core/views.py:600 msgid "The announcement has been saved." -msgstr "" +msgstr "ÐžÐ³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð½Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ðµ." #: aleksis/core/views.py:616 msgid "The announcement has been deleted." -msgstr "" +msgstr "ÐžÐ³Ð¾Ð»Ð¾ÑˆÐµÐ½Ð½Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ðµ." #: aleksis/core/views.py:684 msgid "The requested preference registry does not exist" -msgstr "" +msgstr "Журналу із запитаними влаÑтивоÑÑ‚Ñми не Ñ–Ñнує" #: aleksis/core/views.py:703 msgid "The preferences have been saved successfully." -msgstr "" +msgstr "ВлаÑтивоÑÑ‚Ñ– збережені." #: aleksis/core/views.py:727 msgid "The person has been deleted." -msgstr "" +msgstr "ОÑоба видалена." #: aleksis/core/views.py:741 msgid "The group has been deleted." -msgstr "" +msgstr "Група видалена." #: aleksis/core/views.py:773 msgid "The additional_field has been saved." -msgstr "" +msgstr "Додаткове поле збережене." #: aleksis/core/views.py:807 msgid "The additional field has been deleted." -msgstr "" +msgstr "Додаткове поле видалене." #: aleksis/core/views.py:832 msgid "The group type has been saved." -msgstr "" +msgstr "Тип групи збережений." #: aleksis/core/views.py:862 msgid "The group type has been deleted." -msgstr "" +msgstr "Тип групи видалений." #: aleksis/core/views.py:895 msgid "Progress: Run data checks" -msgstr "" +msgstr "Перебіг: ЗапуÑк перевірки даних" #: aleksis/core/views.py:896 msgid "Run data checks …" -msgstr "" +msgstr "ЗапуÑкаєтьÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ° даних …" #: aleksis/core/views.py:897 msgid "The data checks were run successfully." -msgstr "" +msgstr "Перевірка даних уÑпішно запущена." #: aleksis/core/views.py:898 msgid "There was a problem while running data checks." -msgstr "" +msgstr "Під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку перевірки даних виникла проблема." #: aleksis/core/views.py:914 #, python-brace-format msgid "The solve option '{solve_option_obj.verbose_name}' " -msgstr "" +msgstr "Варіант розв'ÑÐ·Ð°Ð½Ð½Ñ {solve_option_obj.verbose_name} " #: aleksis/core/views.py:924 msgid "The requested solve option does not exist" -msgstr "" +msgstr "Запитаний варіант розв'ÑÐ·Ð°Ð½Ð½Ñ Ð½Ðµ Ñ–Ñнує" #: aleksis/core/views.py:956 msgid "The dashboard widget has been saved." -msgstr "" +msgstr "Віджет інформпанелі збережений." #: aleksis/core/views.py:986 msgid "The dashboard widget has been created." -msgstr "" +msgstr "Віджет інформпанелі Ñтворений." #: aleksis/core/views.py:996 msgid "The dashboard widget has been deleted." -msgstr "" +msgstr "Віджет інформпанелі видалений." #: aleksis/core/views.py:1067 msgid "Your dashboard configuration has been saved successfully." -msgstr "" +msgstr "Ваша ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð¿Ð°Ð½ÐµÐ»Ñ– збережена." #: aleksis/core/views.py:1069 msgid "The configuration of the default dashboard has been saved successfully." -msgstr "" +msgstr "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾Ñ—/Ñтандартної інформпанелі збережена." #: aleksis/core/views.py:1145 #, python-brace-format msgid "The invitation was successfully created. The invitation code is {code}" -msgstr "" +msgstr "Ð—Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ ÑƒÑпішно Ñтворене. Код запрошеннÑ: {code}" #: aleksis/core/views.py:1236 msgid "We have successfully assigned the permissions." -msgstr "" +msgstr "Ми уÑпішно призначили дозволи." #: aleksis/core/views.py:1246 msgid "The global user permission has been deleted." -msgstr "" +msgstr "Глобальний кориÑтувацький дозвіл видалений." #: aleksis/core/views.py:1256 msgid "The global group permission has been deleted." -msgstr "" +msgstr "Глобальний груповий дозвіл видалений." #: aleksis/core/views.py:1266 msgid "The object user permission has been deleted." -msgstr "" +msgstr "Об'єктний кориÑтувацький дозвіл видалений." #: aleksis/core/views.py:1276 msgid "The object group permission has been deleted." -msgstr "" +msgstr "Об'єктний груповий дозвіл видалений." #: aleksis/core/views.py:1344 msgid "The requested PDF file does not exist" -msgstr "" +msgstr "Запитаний файл PDF не Ñ–Ñнує" #: aleksis/core/views.py:1353 aleksis/core/views.py:1357 msgid "The requested task does not exist or is not accessible" -msgstr "" +msgstr "Запитане Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð½Ðµ Ñ–Ñнує або не доÑтупне" #: aleksis/core/views.py:1409 msgid "The third-party account could not be disconnected because it is the only login method available." msgstr "" +"Обліковий Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ñ€ÐµÑ‚ÑŒÐ¾Ñ— Ñторони не можна від'єднати оÑкільки він єдиний " +"ÑпоÑіб Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ." #: aleksis/core/views.py:1416 msgid "The third-party account has been successfully disconnected." -msgstr "" +msgstr "Обліковий Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ñ€ÐµÑ‚ÑŒÐ¾Ñ— Ñторони уÑпішно від'єднаний." #: aleksis/core/views.py:1487 msgid "Person was invited successfully and an email with further instructions has been send to them." msgstr "" +"ОÑоба уÑпішно запрошена. ЛиÑÑ‚ з інÑтрукціÑми щодо наÑтупних дій надіÑланий " +"на Ñ—Ñ— ел.пошту." #: aleksis/core/views.py:1498 msgid "Person was already invited." -msgstr "" +msgstr "ОÑоба вже була запрошена." #: aleksis/core/views.py:1598 msgid "ICal feed updated successfully" -msgstr "" +msgstr "Стрічка iCal уÑпішно оновлена" #: aleksis/core/views.py:1608 msgid "ICal feed deleted successfully" -msgstr "" +msgstr "Стрічка iCal уÑпішно видалена" #: aleksis/core/views.py:1616 msgid "ICal feed created successfully" -msgstr "" +msgstr "Стрічка iCal уÑпішно Ñтворена" diff --git a/aleksis/core/locale/uk/LC_MESSAGES/djangojs.po b/aleksis/core/locale/uk/LC_MESSAGES/djangojs.po index fb86a6c606be93efcaa83dd2cd9e65f9489fa157..c224b04ae5ef93df09b6ad7c76288e590557bf0c 100644 --- a/aleksis/core/locale/uk/LC_MESSAGES/djangojs.po +++ b/aleksis/core/locale/uk/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-23 12:58+0000\n" +"POT-Creation-Date: 2022-05-24 19:37+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" @@ -20,18 +20,23 @@ msgstr "" "11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " "100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " "(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + #: aleksis/core/static/js/main.js:66 msgid "Today" -msgstr "" +msgstr "Сьогодні" #: aleksis/core/static/js/main.js:67 msgid "Cancel" -msgstr "" +msgstr "СкаÑувати" #: aleksis/core/static/js/main.js:68 msgid "OK" -msgstr "" +msgstr "OK" #: aleksis/core/static/js/main.js:195 -msgid "This page may contain outdated information since there is no internet connection." +msgid "" +"This page may contain outdated information since there is no internet " +"connection." msgstr "" +"Через відÑутніÑÑ‚ÑŒ інтернет-з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ†Ñ Ñторінка може міÑтити заÑтарілу " +"інформацію." diff --git a/aleksis/core/migrations/0040_oauth_allowed_scopes_max_length_255.py b/aleksis/core/migrations/0040_oauth_allowed_scopes_max_length_255.py new file mode 100644 index 0000000000000000000000000000000000000000..c978c3afc0c2faa7004e78466ec6022db44740bd --- /dev/null +++ b/aleksis/core/migrations/0040_oauth_allowed_scopes_max_length_255.py @@ -0,0 +1,20 @@ +# Generated by Django 3.2.13 on 2022-04-19 16:50 + +import django.contrib.postgres.fields +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0039_personal_ical_url'), + ] + + operations = [ + migrations.AlterField( + model_name='oauthapplication', + name='allowed_scopes', + field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=255), blank=True, null=True, size=None, verbose_name='Allowed scopes that clients can request'), + ), + ] diff --git a/aleksis/core/migrations/0041_update_gender_choices.py b/aleksis/core/migrations/0041_update_gender_choices.py new file mode 100644 index 0000000000000000000000000000000000000000..f9f3448ae5332da071e44318db97a0649ba487eb --- /dev/null +++ b/aleksis/core/migrations/0041_update_gender_choices.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.13 on 2022-06-05 10:55 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0040_oauth_allowed_scopes_max_length_255'), + ] + + operations = [ + migrations.AlterField( + model_name='person', + name='sex', + field=models.CharField(blank=True, choices=[('f', 'female'), ('m', 'male'), ('x', 'other')], max_length=1, verbose_name='Sex'), + ), + ] diff --git a/aleksis/core/models.py b/aleksis/core/models.py index 963c60c99ef8e8b1a9b0ca7ebc31c7c8f298a2f5..2f603ae0d2e2813b50f2024056cb460d71b4e484 100644 --- a/aleksis/core/models.py +++ b/aleksis/core/models.py @@ -51,7 +51,12 @@ from oauth2_provider.models import ( from phonenumber_field.modelfields import PhoneNumberField from polymorphic.models import PolymorphicModel -from aleksis.core.data_checks import BrokenDashboardWidgetDataCheck, DataCheck, DataCheckRegistry +from aleksis.core.data_checks import ( + BrokenDashboardWidgetDataCheck, + DataCheck, + DataCheckRegistry, + field_validation_data_check_factory, +) from .feeds import PersonalICalFeedBase from .managers import ( @@ -173,7 +178,7 @@ class Person(ExtensibleModel): icon_ = "person" - SEX_CHOICES = [("f", _("female")), ("m", _("male"))] + SEX_CHOICES = [("f", _("female")), ("m", _("male")), ("x", _("other"))] user = models.OneToOneField( get_user_model(), @@ -1064,6 +1069,8 @@ class CustomMenu(ExtensibleModel): class CustomMenuItem(ExtensibleModel): """Single item in a custom menu.""" + data_checks = [field_validation_data_check_factory("core", "CustomMenuItem", "icon")] + menu = models.ForeignKey( CustomMenu, models.CASCADE, verbose_name=_("Menu"), related_name="items" ) @@ -1082,6 +1089,9 @@ class CustomMenuItem(ExtensibleModel): models.UniqueConstraint(fields=["menu", "name"], name="unique_name_per_menu"), ] + def get_absolute_url(self): + return reverse("admin:core_custommenuitem_change", args=[self.id]) + class GroupType(ExtensibleModel): """Group type model. @@ -1310,7 +1320,7 @@ class OAuthApplication(AbstractApplication): # Optional list of alloewd scopes allowed_scopes = ArrayField( - models.CharField(max_length=32), + models.CharField(max_length=255), verbose_name=_("Allowed scopes that clients can request"), null=True, blank=True, diff --git a/aleksis/core/preferences.py b/aleksis/core/preferences.py index 78b1874356a3a11eab121a56963c9aaf3595d872..230e40686d0782151043723cef9edfffcf5a68b7 100644 --- a/aleksis/core/preferences.py +++ b/aleksis/core/preferences.py @@ -333,20 +333,6 @@ class OAuthAllowedGrants(MultipleChoicePreference): required = False -@site_preferences_registry.register -class AvailableLanguages(MultipleChoicePreference): - """Available languages of your AlekSIS instance.""" - - section = internationalisation - name = "languages" - default = [code[0] for code in settings.LANGUAGES] - widget = SelectMultiple - verbose_name = _("Available languages") - field_attribute = {"initial": []} - choices = settings.LANGUAGES - required = True - - @site_preferences_registry.register class DataChecksSendEmails(BooleanPreference): """Enable email sending if data checks detect problems.""" diff --git a/aleksis/core/rules.py b/aleksis/core/rules.py index a6b478f26144b9fdea74804dccdb7a1913b01c30..e12744ff6df91c72f8ec541b8f0c0672d2ddf273 100644 --- a/aleksis/core/rules.py +++ b/aleksis/core/rules.py @@ -326,6 +326,9 @@ rules.add_perm("core.can_register", can_register_predicate) can_change_password_predicate = is_site_preference_set(section="auth", pref="allow_password_change") rules.add_perm("core.can_change_password", can_change_password_predicate) +can_reset_password_predicate = is_site_preference_set(section="auth", pref="allow_password_reset") +rules.add_perm("core.can_reset_password", can_reset_password_predicate) + # django-invitations invite_enabled_predicate = is_site_preference_set(section="auth", pref="invite_enabled") rules.add_perm("core.invite_enabled", invite_enabled_predicate) diff --git a/aleksis/core/settings.py b/aleksis/core/settings.py index 3fdcbd99316f7f70f6bf232e45509715735e428c..2f742cf2c531346b9ab8ae5e942a830720517cc8 100644 --- a/aleksis/core/settings.py +++ b/aleksis/core/settings.py @@ -144,6 +144,7 @@ INSTALLED_APPS = [ "dynamic_preferences.users.apps.UserPreferencesConfig", "impersonate", "two_factor", + "two_factor.plugins.phonenumber", "material", "ckeditor", "ckeditor_uploader", @@ -539,6 +540,7 @@ AUTHENTICATION_BACKENDS.append("allauth.account.auth_backends.AuthenticationBack LANGUAGES = [ ("en", _("English")), ("de", _("German")), + ("uk", _("Ukrainian")), ] LANGUAGE_CODE = _settings.get("l10n.lang", "en") TIME_ZONE = _settings.get("l10n.tz", "UTC") @@ -561,20 +563,20 @@ MEDIA_ROOT = _settings.get("media.root", os.path.join(BASE_DIR, "media")) NODE_MODULES_ROOT = _settings.get("node_modules.root", os.path.join(BASE_DIR, "node_modules")) YARN_INSTALLED_APPS = [ - "cleave.js", - "@fontsource/roboto", - "jquery", - "@materializecss/materialize", - "material-design-icons-iconfont", - "select2", - "select2-materialize", - "paper-css", - "jquery-sortablejs", - "sortablejs", - "@sentry/tracing", - "luxon", - "@iconify/iconify", - "@iconify/json", + "cleave.js@^1.6.0", + "@fontsource/roboto@^4.5.5", + "jquery@^3.6.0", + "@materializecss/materialize@~1.0.0", + "material-design-icons-iconfont@^6.6.0", + "select2@^4.1.0-rc.0", + "select2-materialize@^0.1.8", + "paper-css@^0.4.1", + "jquery-sortablejs@^1.0.1", + "sortablejs@^1.15.0", + "@sentry/tracing@^6.19.6", + "luxon@^2.3.2", + "@iconify/iconify@^2.2.1", + "@iconify/json@^2.1.30", ] merge_app_settings("YARN_INSTALLED_APPS", YARN_INSTALLED_APPS, True) @@ -629,6 +631,7 @@ SASS_PROCESSOR_INCLUDE_DIRS = [ ] ICONIFY_JSON_ROOT = os.path.join(JS_ROOT, "@iconify", "json") +ICONIFY_COLLECTIONS_ALLOWED = ["mdi"] ADMINS = _settings.get( "contact.admins", [(AUTH_INITIAL_SUPERUSER["username"], AUTH_INITIAL_SUPERUSER["email"])] diff --git a/aleksis/core/static/public/style.scss b/aleksis/core/static/public/style.scss index 5a35561c389f5656fd573e8f9b698ae456d42ad5..7aaff6575cbd675a891944a6767291854cc76f78 100644 --- a/aleksis/core/static/public/style.scss +++ b/aleksis/core/static/public/style.scss @@ -115,17 +115,15 @@ main { /* SIDENAV */ /***********/ -ul.sidenav.sidenav-fixed li.logo { - margin-top: 32px; - margin-bottom: 50px; -} - ul.sidenav.sidenav-fixed .brand-logo { margin: 0; + height: 100%; } .logo img { - width: 250px; + width: 268px; + margin-block: 1em; + vertical-align: middle; } .sidenav a:not(.collapsible-header) { @@ -435,15 +433,16 @@ th.orderable > a { th.orderable { background: no-repeat right center; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M12,18.17L8.83,15L7.42,16.41L12,21L16.59,16.41L15.17,15M12,5.83L15.17,9L16.58,7.59L12,3L7.41,7.59L8.83,9L12,5.83Z' /%3E%3C/svg%3E"); + background-image: url("../../__icons__/mdi/unfold-more-horizontal.svg"); + background-size: 24px; } th.orderable.asc { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z' /%3E%3C/svg%3E"); + background-image: url("../../__icons__/mdi/chevron-up.svg"); } th.orderable.desc { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z' /%3E%3C/svg%3E"); + background-image: url("../../__icons__/mdi/chevron-down.svg"); } /*+++++++*/ @@ -991,3 +990,8 @@ p.ical-description { margin: 0; font-weight: 300; } + +.table-circle, .table-circle .materialize-circle { + height: 4em; + width: 4em; +} diff --git a/aleksis/core/tables.py b/aleksis/core/tables.py index f08460bd8654907cb56f655e01014342f8e59ab5..a58c3fc443b3ad66c8df31109cbb6276192518ef 100644 --- a/aleksis/core/tables.py +++ b/aleksis/core/tables.py @@ -1,5 +1,6 @@ from textwrap import wrap +from django.template.loader import render_to_string from django.utils.translation import gettext_lazy as _ import django_tables2 as tables @@ -31,12 +32,65 @@ class PersonsTable(tables.Table): """Table to list persons.""" class Meta: + model = Person attrs = {"class": "highlight"} + fields = [] first_name = tables.LinkColumn("person_by_id", args=[A("id")]) last_name = tables.LinkColumn("person_by_id", args=[A("id")]) +class FullPersonsTable(PersonsTable): + """Table to list persons.""" + + photo = tables.Column(verbose_name=_("Photo"), accessor="pk", orderable=False) + address = tables.Column(verbose_name=_("Address"), accessor="pk", orderable=False) + + class Meta(PersonsTable.Meta): + fields = ( + "photo", + "short_name", + "date_of_birth", + "sex", + "email", + "user__username", + ) + sequence = ("photo", "first_name", "last_name", "short_name", "...") + + def render_photo(self, value, record): + return render_to_string( + "core/partials/avatar_content.html", + { + "person_or_user": record, + "class": "materialize-circle table-circle", + "img_class": "materialize-circle", + }, + self.request, + ) + + def render_address(self, value, record): + return render_to_string( + "core/partials/address.html", + { + "person": record, + }, + self.request, + ) + + def before_render(self, request): + """Hide columns if user has no permission to view them.""" + if not self.request.user.has_perm("core.view_person_rule"): + self.columns.hide("date_of_birth") + self.columns.hide("sex") + if not self.request.user.has_perm("core.view_contact_details_rule"): + self.columns.hide("email") + if not self.request.user.has_perm("core.view_address"): + self.columns.hide("street") + self.columns.hide("housenumber") + self.columns.hide("postal_code") + self.columns.hide("place") + + class GroupsTable(tables.Table): """Table to list groups.""" diff --git a/aleksis/core/templates/500.html b/aleksis/core/templates/500.html index fee566258f556cf5ea2922abd170873d3c212733..d008cd5405f4e5eee73ddf175cab87057e563785 100644 --- a/aleksis/core/templates/500.html +++ b/aleksis/core/templates/500.html @@ -8,7 +8,7 @@ <div class="card-content white-text"> <i class="material-icons iconify small left" data-icon="mdi:alert-octagon-outline"></i> <span class="card-title">{% trans "Error" %} (500): {% blocktrans %}An unexpected error has - occured.{% endblocktrans %}</span> + occurred.{% endblocktrans %}</span> <p> {% blocktrans %} Your site administrators will automatically be notified about this diff --git a/aleksis/core/templates/core/announcement/form.html b/aleksis/core/templates/core/announcement/form.html index f085758a3395ca74de1dba8e0affec9fb453cc03..60d573d0f0de3cc2f4e3e8409beab1716690715c 100644 --- a/aleksis/core/templates/core/announcement/form.html +++ b/aleksis/core/templates/core/announcement/form.html @@ -31,7 +31,7 @@ <button type="submit" class="btn green waves-effect waves-light"> <i class="material-icons left iconify" data-icon="mdi:content-save-outline"></i> - {% trans "Save und publish announcement" %} + {% trans "Save and publish announcement" %} </button> </form> {% include_js "select2-materialize" %} diff --git a/aleksis/core/templates/core/group/full.html b/aleksis/core/templates/core/group/full.html index 3c6e5488d6174e30847eabcfda2e97b244112938..34b5e647590806e72666701ae0bd1ca1196d9638 100644 --- a/aleksis/core/templates/core/group/full.html +++ b/aleksis/core/templates/core/group/full.html @@ -9,7 +9,9 @@ {% block browser_title %}{{ group.name }}{% endblock %} {% block content %} - <h1>{{ group.name }} <small class="grey-text">{{ group.short_name }}</small></h1> + <h1>{{ group.name }} + <small class="grey-text">{{ group.short_name }}</small> + </h1> {% has_perm 'core.edit_group_rule' user group as can_change_group %} {% has_perm 'core.change_group_preferences_rule' user group as can_change_group_preferences %} @@ -44,39 +46,57 @@ <table> <tr> <th> - <i class="material-icons iconify center" data-icon="mdi:shape-outline" title="{% trans "Group type" %}"></i> + <i class="material-icons iconify left" data-icon="mdi:shape-outline"></i> + {% trans "Group type" %} </th> <td> - {{ group.group_type }} + {{ group.group_type|default:"–" }} </td> </tr> <tr> <th> - <i class="material-icons iconify center" data-icon="mdi:format-vertical-align-top" title="{% trans "Parent groups" %}"></i> + <i class="material-icons iconify left" data-icon="mdi:format-vertical-align-top"></i> + {% trans "Parent groups" %} </th> <td> - {{ group.parent_groups.all|join:", " }} + {{ group.parent_groups.all|join:", "|default:"–" }} </td> </tr> </table> {% if can_view_group_stats %} <h2>{% blocktrans %}Statistics{% endblocktrans %}</h2> - <ul> - <li> - {% trans "Count of members" %}: {{ stats.members }} - </li> + <table> + <tr> + <th> + <i class="material-icons iconify left" data-icon="mdi:account-group-outline"></i> + {% trans "Count of members" %} + </th> + <td>{{ stats.members }}</td> + </tr> {% if stats.age_avg %} - <li> - {% trans "Average age" %}: {{ stats.age_avg|floatformat }} - </li> + <tr> + <th> + <i class="material-icons iconify left" data-icon="mdi:cake-variant-outline"></i> + {% trans "Average age" %} + </th> + <td>{{ stats.age_avg|floatformat }}</td> + </tr> {% endif %} {% if stats.age_range_min %} - <li> - {% trans "Age range" %}: {{ stats.age_range_min }} {% trans "years to" %} {{ stats.age_range_max }} {% trans "years "%} - </li> + <tr> + <th> + <i class="material-icons iconify left" data-icon="mdi:calendar-range-outline"></i> + {% trans "Age range" %} + </th> + <td> + {% blocktrans with min=stats.age_range_min max=stats.age_range_max %} + {{ min }} years to {{ max }} years + {% endblocktrans %} + </td> + </tr> {% endif %} - </ul> + </table> {% endif %} <h2>{% blocktrans %}Owners{% endblocktrans %}</h2> diff --git a/aleksis/core/templates/core/ical/ical_list.html b/aleksis/core/templates/core/ical/ical_list.html index 2388feb2daa9c4b31abb80bc830055e2d2d3efc6..3396515d77423542046f5702b14ead4f572aa805 100644 --- a/aleksis/core/templates/core/ical/ical_list.html +++ b/aleksis/core/templates/core/ical/ical_list.html @@ -1,8 +1,8 @@ {% extends 'core/base.html' %} {% load i18n msg_box static html_helpers %} -{% block page_title %}{% trans "ICal Feeds" %}{% endblock page_title %} -{% block browser_title %}{% trans "ICal Feeds" %}{% endblock browser_title %} +{% block page_title %}{% trans "iCal Feeds" %}{% endblock page_title %} +{% block browser_title %}{% trans "iCal Feeds" %}{% endblock browser_title %} {% block content %} {% trans "These are URLs for different Calendar Feeds in the iCal (.ics) format. You can create as many as you want and import them in your calendar software." as msg %} diff --git a/aleksis/core/templates/core/partials/address.html b/aleksis/core/templates/core/partials/address.html new file mode 100644 index 0000000000000000000000000000000000000000..74a01bde2494d94256432923f5f27c279da2e564 --- /dev/null +++ b/aleksis/core/templates/core/partials/address.html @@ -0,0 +1,2 @@ +{{ person.street }} {{ person.housenumber }}<br> +{{ person.postal_code }} {{ person.place }} diff --git a/aleksis/core/templates/core/partials/footer-menu.html b/aleksis/core/templates/core/partials/footer-menu.html index 2db2689efed0b3488dc7ba4362d2ff6747863f0e..6a67fa8a8592c5686a1efda8bd0ea9a19e71155b 100644 --- a/aleksis/core/templates/core/partials/footer-menu.html +++ b/aleksis/core/templates/core/partials/footer-menu.html @@ -3,7 +3,7 @@ {% for item in FOOTER_MENU.items.all %} <a class="blue-text text-lighten-4 btn-flat" href="{{ item.url }}"> {% if item.icon %} - <i class="material-icons iconify footer-icon left" data-icon="{{ item.icon }}">{{ item.icon }}</i> + <i class="material-icons iconify footer-icon left" data-icon="mdi:{{ item.icon }}"></i> {% endif %} {{ item.name }} </a> diff --git a/aleksis/core/templates/core/partials/language_form.html b/aleksis/core/templates/core/partials/language_form.html index 197906bb09d6c43d187c63f118261eaf6bbead9e..247dfe386c6dc003e4436415afbf13c34a557612 100644 --- a/aleksis/core/templates/core/partials/language_form.html +++ b/aleksis/core/templates/core/partials/language_form.html @@ -8,7 +8,9 @@ <input name="next" type="hidden" value="{{ request.get_full_path }}"> {% get_current_language as LANGUAGE_CODE %} - {% get_language_info_list for request.site.preferences.internationalisation__languages as languages %} + {% get_available_languages as LANGUAGES %} + {% get_language_info_list for LANGUAGES as languages %} + {# Select #} <div class="input-field language-field"> diff --git a/aleksis/core/templates/two_factor/core/login.html b/aleksis/core/templates/two_factor/core/login.html index 77b135569d797181a45bd49d7fd7e9cded4e9a5c..6145855229d9fec9f15edbd8ee597811250e2140 100644 --- a/aleksis/core/templates/two_factor/core/login.html +++ b/aleksis/core/templates/two_factor/core/login.html @@ -1,6 +1,6 @@ {# -*- engine:django -*- #} {% extends "two_factor/_base_focus.html" %} -{% load i18n two_factor account socialaccount %} +{% load i18n phonenumber account socialaccount %} {% block browser_title %} {% trans "Login" %} diff --git a/aleksis/core/templates/two_factor/profile/profile.html b/aleksis/core/templates/two_factor/profile/profile.html index dd9472e7fb9a09051b35d7be57f59dcab1549dae..fe96135d0dfae6fd16ffad4fece50148115c8b69 100644 --- a/aleksis/core/templates/two_factor/profile/profile.html +++ b/aleksis/core/templates/two_factor/profile/profile.html @@ -1,5 +1,5 @@ {% extends "two_factor/_base_focus.html" %} -{% load i18n two_factor %} +{% load i18n phonenumber %} {% block browser_title %} {% trans "Account Security" %} diff --git a/aleksis/core/tests/regression/test_regression.py b/aleksis/core/tests/regression/test_regression.py index b9d33e6981312817324b92d4fe67176b96763cda..6d6056ad272fa87c9df9d4cf7ba16f87a70dbf40 100644 --- a/aleksis/core/tests/regression/test_regression.py +++ b/aleksis/core/tests/regression/test_regression.py @@ -1,10 +1,16 @@ +import base64 + from django.contrib.auth import get_user_model import pytest -from aleksis.core.models import Group, Person +from aleksis.core.models import Group, OAuthApplication, Person pytestmark = pytest.mark.django_db +from django.http import HttpResponse +from django.test import override_settings +from django.urls import path, reverse +from django.views.generic import View def test_all_settigns_registered(): @@ -82,3 +88,72 @@ def test_reassign_user_to_person(): assert user2.groups.count() == 1 assert user1.groups.first().name == "Group 2" assert user2.groups.first().name == "Group 1" + + +@override_settings(ROOT_URLCONF="aleksis.core.tests.regression.view_oauth") +def test_no_access_oauth2_client_credentials_without_allowed_scopes(client): + """Tests that ClientProtectedResourceMixin doesn't allow access if no allowed scopes are set. + + https://edugit.org/AlekSIS/official/AlekSIS-Core/-/issues/688 + """ + + wrong_application = OAuthApplication.objects.create( + name="Test Application", + allowed_scopes=[], + authorization_grant_type=OAuthApplication.GRANT_CLIENT_CREDENTIALS, + client_type=OAuthApplication.CLIENT_CONFIDENTIAL, + redirect_uris=["http://localhost:8000/"], + ) + wrong_application_2 = OAuthApplication.objects.create( + name="Test Application", + allowed_scopes=["read"], + authorization_grant_type=OAuthApplication.GRANT_CLIENT_CREDENTIALS, + client_type=OAuthApplication.CLIENT_CONFIDENTIAL, + redirect_uris=["http://localhost:8000/"], + ) + correct_application = OAuthApplication.objects.create( + name="Test Application", + allowed_scopes=["write"], + authorization_grant_type=OAuthApplication.GRANT_CLIENT_CREDENTIALS, + client_type=OAuthApplication.CLIENT_CONFIDENTIAL, + redirect_uris=["http://localhost:8000/"], + ) + + url = reverse("client_protected_resource_mixin_test") + auth_header = ( + "Basic " + + base64.b64encode( + f"{wrong_application.client_id}:{wrong_application.client_secret}".encode() + ).decode() + ) + r = client.get(url, HTTP_AUTHORIZATION=auth_header) + assert r.status_code == 403 + + auth_header = ( + "Basic " + + base64.b64encode( + f"{wrong_application_2.client_id}:{wrong_application_2.client_secret}".encode() + ).decode() + ) + r = client.get(url, HTTP_AUTHORIZATION=auth_header) + assert r.status_code == 403 + + auth_header = ( + "Basic " + + base64.b64encode( + f"{correct_application.client_id}:{correct_application.client_secret}".encode() + ).decode() + ) + r = client.get(url, HTTP_AUTHORIZATION=auth_header) + assert r.status_code == 200 + + +def test_change_password_not_logged_in(client): + """Tests that CustomPasswordChangeView redirects to login when accessed unauthenticated. + + https://edugit.org/AlekSIS/official/AlekSIS-Core/-/issues/703 + """ + response = client.get(reverse("account_change_password"), follow=True) + + assert response.status_code == 200 + assert "Please login to see this page." in response.content.decode("utf-8") diff --git a/aleksis/core/tests/regression/view_oauth.py b/aleksis/core/tests/regression/view_oauth.py new file mode 100644 index 0000000000000000000000000000000000000000..d5671208e127e79c30d7bb179bbf2e82a35616fb --- /dev/null +++ b/aleksis/core/tests/regression/view_oauth.py @@ -0,0 +1,24 @@ +from django.http import HttpResponse +from django.test import override_settings +from django.urls import path, reverse +from django.views.generic import View + +from oauth2_provider.views.mixins import ScopedResourceMixin + +from aleksis.core.util.auth_helpers import ClientProtectedResourceMixin + + +class TestViewClientProtectedResourceMixin(ScopedResourceMixin, ClientProtectedResourceMixin, View): + required_scopes = ["write"] + + def get(self, request): + return HttpResponse("OK") + + +urlpatterns = [ + path( + "client_protected_resource_mixin_test/", + TestViewClientProtectedResourceMixin.as_view(), + name="client_protected_resource_mixin_test", + ), +] diff --git a/aleksis/core/util/auth_helpers.py b/aleksis/core/util/auth_helpers.py index 6edfac83373882d077d0a588d822fd3a0d0cc9b4..ca80aeae4a59ac069023465559d599f929bab6d8 100644 --- a/aleksis/core/util/auth_helpers.py +++ b/aleksis/core/util/auth_helpers.py @@ -134,6 +134,10 @@ class ClientProtectedResourceMixin(_ClientProtectedResourceMixin): # Verify scopes of configured application # The OAuth request was enriched with a reference to the Application when using the # validator above. + if not oauth_request.client.allowed_scopes: + # If there are no allowed scopes, the client is not allowed to access this resource + return False + required_scopes = set(self.get_scopes() or []) allowed_scopes = set(AppScopes().get_available_scopes(oauth_request.client) or []) return required_scopes.issubset(allowed_scopes) diff --git a/aleksis/core/util/core_helpers.py b/aleksis/core/util/core_helpers.py index ffdba5f45c55454489c8b21c81688458c9808163..67adbf943886d5e503a9009e56b8eeb7f1ed823c 100644 --- a/aleksis/core/util/core_helpers.py +++ b/aleksis/core/util/core_helpers.py @@ -23,8 +23,8 @@ from cachalot.signals import post_invalidation from cache_memoize import cache_memoize -def copyright_years(years: Sequence[int], seperator: str = ", ", joiner: str = "–") -> str: - """Take a sequence of integegers and produces a string with ranges. +def copyright_years(years: Sequence[int], separator: str = ", ", joiner: str = "–") -> str: + """Take a sequence of integers and produces a string with ranges. >>> copyright_years([1999, 2000, 2001, 2005, 2007, 2008, 2009]) '1999–2001, 2005, 2007–2009' @@ -38,11 +38,11 @@ def copyright_years(years: Sequence[int], seperator: str = ", ", joiner: str = " for range_ in ranges ] - return seperator.join(years_strs) + return separator.join(years_strs) def dt_show_toolbar(request: HttpRequest) -> bool: - """Add a helper to determin if Django debug toolbar should be displayed. + """Add a helper to determine if Django debug toolbar should be displayed. Extends the default behaviour by enabling DJDT for superusers independent of source IP. diff --git a/aleksis/core/util/model_helpers.py b/aleksis/core/util/model_helpers.py index 57fab43ab14b787b9300b523e963efbcb0cee121..f1732a72fb3e17ecdcfee18b59cb18d7fd98fd55 100644 --- a/aleksis/core/util/model_helpers.py +++ b/aleksis/core/util/model_helpers.py @@ -1,3 +1,5 @@ +from dj_iconify.util import icon_choices + # Materialize colors (without accent, darken and lighten classes) COLOURS = [ ("red", "red"), @@ -24,938 +26,8 @@ COLOURS = [ ("transparent", "transparent"), ] -# About 1000 icon names from Google's github repository -ICONS = [ - ("3d_rotation", "3d_rotation"), - ("ac_unit", "ac_unit"), - ("access_alarm", "access_alarm"), - ("access_alarms", "access_alarms"), - ("access_time", "access_time"), - ("accessibility", "accessibility"), - ("accessible", "accessible"), - ("account_balance", "account_balance"), - ("account_balance_wallet", "account_balance_wallet"), - ("account_box", "account_box"), - ("account_circle", "account_circle"), - ("adb", "adb"), - ("add", "add"), - ("add_a_photo", "add_a_photo"), - ("add_alarm", "add_alarm"), - ("add_alert", "add_alert"), - ("add_box", "add_box"), - ("add_circle", "add_circle"), - ("add_circle_outline", "add_circle_outline"), - ("add_location", "add_location"), - ("add_shopping_cart", "add_shopping_cart"), - ("add_to_photos", "add_to_photos"), - ("add_to_queue", "add_to_queue"), - ("adjust", "adjust"), - ("airline_seat_flat", "airline_seat_flat"), - ("airline_seat_flat_angled", "airline_seat_flat_angled"), - ("airline_seat_individual_suite", "airline_seat_individual_suite"), - ("airline_seat_legroom_extra", "airline_seat_legroom_extra"), - ("airline_seat_legroom_normal", "airline_seat_legroom_normal"), - ("airline_seat_legroom_reduced", "airline_seat_legroom_reduced"), - ("airline_seat_recline_extra", "airline_seat_recline_extra"), - ("airline_seat_recline_normal", "airline_seat_recline_normal"), - ("airplanemode_active", "airplanemode_active"), - ("airplanemode_inactive", "airplanemode_inactive"), - ("airplay", "airplay"), - ("airport_shuttle", "airport_shuttle"), - ("alarm", "alarm"), - ("alarm_add", "alarm_add"), - ("alarm_off", "alarm_off"), - ("alarm_on", "alarm_on"), - ("album", "album"), - ("all_inclusive", "all_inclusive"), - ("all_out", "all_out"), - ("android", "android"), - ("announcement", "announcement"), - ("apps", "apps"), - ("archive", "archive"), - ("arrow_back", "arrow_back"), - ("arrow_downward", "arrow_downward"), - ("arrow_drop_down", "arrow_drop_down"), - ("arrow_drop_down_circle", "arrow_drop_down_circle"), - ("arrow_drop_up", "arrow_drop_up"), - ("arrow_forward", "arrow_forward"), - ("arrow_upward", "arrow_upward"), - ("art_track", "art_track"), - ("aspect_ratio", "aspect_ratio"), - ("assessment", "assessment"), - ("assignment", "assignment"), - ("assignment_ind", "assignment_ind"), - ("assignment_late", "assignment_late"), - ("assignment_return", "assignment_return"), - ("assignment_returned", "assignment_returned"), - ("assignment_turned_in", "assignment_turned_in"), - ("assistant", "assistant"), - ("assistant_photo", "assistant_photo"), - ("attach_file", "attach_file"), - ("attach_money", "attach_money"), - ("attachment", "attachment"), - ("audiotrack", "audiotrack"), - ("autorenew", "autorenew"), - ("av_timer", "av_timer"), - ("backspace", "backspace"), - ("backup", "backup"), - ("battery_alert", "battery_alert"), - ("battery_charging_full", "battery_charging_full"), - ("battery_full", "battery_full"), - ("battery_std", "battery_std"), - ("battery_unknown", "battery_unknown"), - ("beach_access", "beach_access"), - ("beenhere", "beenhere"), - ("block", "block"), - ("bluetooth", "bluetooth"), - ("bluetooth_audio", "bluetooth_audio"), - ("bluetooth_connected", "bluetooth_connected"), - ("bluetooth_disabled", "bluetooth_disabled"), - ("bluetooth_searching", "bluetooth_searching"), - ("blur_circular", "blur_circular"), - ("blur_linear", "blur_linear"), - ("blur_off", "blur_off"), - ("blur_on", "blur_on"), - ("book", "book"), - ("bookmark", "bookmark"), - ("bookmark_border", "bookmark_border"), - ("border_all", "border_all"), - ("border_bottom", "border_bottom"), - ("border_clear", "border_clear"), - ("border_color", "border_color"), - ("border_horizontal", "border_horizontal"), - ("border_inner", "border_inner"), - ("border_left", "border_left"), - ("border_outer", "border_outer"), - ("border_right", "border_right"), - ("border_style", "border_style"), - ("border_top", "border_top"), - ("border_vertical", "border_vertical"), - ("branding_watermark", "branding_watermark"), - ("brightness_1", "brightness_1"), - ("brightness_2", "brightness_2"), - ("brightness_3", "brightness_3"), - ("brightness_4", "brightness_4"), - ("brightness_5", "brightness_5"), - ("brightness_6", "brightness_6"), - ("brightness_7", "brightness_7"), - ("brightness_auto", "brightness_auto"), - ("brightness_high", "brightness_high"), - ("brightness_low", "brightness_low"), - ("brightness_medium", "brightness_medium"), - ("broken_image", "broken_image"), - ("brush", "brush"), - ("bubble_chart", "bubble_chart"), - ("bug_report", "bug_report"), - ("build", "build"), - ("burst_mode", "burst_mode"), - ("business", "business"), - ("business_center", "business_center"), - ("cached", "cached"), - ("cake", "cake"), - ("call", "call"), - ("call_end", "call_end"), - ("call_made", "call_made"), - ("call_merge", "call_merge"), - ("call_missed", "call_missed"), - ("call_missed_outgoing", "call_missed_outgoing"), - ("call_received", "call_received"), - ("call_split", "call_split"), - ("call_to_action", "call_to_action"), - ("camera", "camera"), - ("camera_alt", "camera_alt"), - ("camera_enhance", "camera_enhance"), - ("camera_front", "camera_front"), - ("camera_rear", "camera_rear"), - ("camera_roll", "camera_roll"), - ("cancel", "cancel"), - ("card_giftcard", "card_giftcard"), - ("card_membership", "card_membership"), - ("card_travel", "card_travel"), - ("casino", "casino"), - ("cast", "cast"), - ("cast_connected", "cast_connected"), - ("center_focus_strong", "center_focus_strong"), - ("center_focus_weak", "center_focus_weak"), - ("change_history", "change_history"), - ("chat", "chat"), - ("chat_bubble", "chat_bubble"), - ("chat_bubble_outline", "chat_bubble_outline"), - ("check", "check"), - ("check_box", "check_box"), - ("check_box_outline_blank", "check_box_outline_blank"), - ("check_circle", "check_circle"), - ("chevron_left", "chevron_left"), - ("chevron_right", "chevron_right"), - ("child_care", "child_care"), - ("child_friendly", "child_friendly"), - ("chrome_reader_mode", "chrome_reader_mode"), - ("class", "class"), - ("clear", "clear"), - ("clear_all", "clear_all"), - ("close", "close"), - ("closed_caption", "closed_caption"), - ("cloud", "cloud"), - ("cloud_circle", "cloud_circle"), - ("cloud_done", "cloud_done"), - ("cloud_download", "cloud_download"), - ("cloud_off", "cloud_off"), - ("cloud_queue", "cloud_queue"), - ("cloud_upload", "cloud_upload"), - ("code", "code"), - ("collections", "collections"), - ("collections_bookmark", "collections_bookmark"), - ("color_lens", "color_lens"), - ("colorize", "colorize"), - ("comment", "comment"), - ("compare", "compare"), - ("compare_arrows", "compare_arrows"), - ("computer", "computer"), - ("confirmation_number", "confirmation_number"), - ("contact_mail", "contact_mail"), - ("contact_phone", "contact_phone"), - ("contacts", "contacts"), - ("content_copy", "content_copy"), - ("content_cut", "content_cut"), - ("content_paste", "content_paste"), - ("control_point", "control_point"), - ("control_point_duplicate", "control_point_duplicate"), - ("copyright", "copyright"), - ("create", "create"), - ("create_new_folder", "create_new_folder"), - ("credit_card", "credit_card"), - ("crop", "crop"), - ("crop_16_9", "crop_16_9"), - ("crop_3_2", "crop_3_2"), - ("crop_5_4", "crop_5_4"), - ("crop_7_5", "crop_7_5"), - ("crop_din", "crop_din"), - ("crop_free", "crop_free"), - ("crop_landscape", "crop_landscape"), - ("crop_original", "crop_original"), - ("crop_portrait", "crop_portrait"), - ("crop_rotate", "crop_rotate"), - ("crop_square", "crop_square"), - ("dashboard", "dashboard"), - ("data_usage", "data_usage"), - ("date_range", "date_range"), - ("dehaze", "dehaze"), - ("delete", "delete"), - ("delete_forever", "delete_forever"), - ("delete_sweep", "delete_sweep"), - ("description", "description"), - ("desktop_mac", "desktop_mac"), - ("desktop_windows", "desktop_windows"), - ("details", "details"), - ("developer_board", "developer_board"), - ("developer_mode", "developer_mode"), - ("device_hub", "device_hub"), - ("devices", "devices"), - ("devices_other", "devices_other"), - ("dialer_sip", "dialer_sip"), - ("dialpad", "dialpad"), - ("directions", "directions"), - ("directions_bike", "directions_bike"), - ("directions_boat", "directions_boat"), - ("directions_bus", "directions_bus"), - ("directions_car", "directions_car"), - ("directions_railway", "directions_railway"), - ("directions_run", "directions_run"), - ("directions_subway", "directions_subway"), - ("directions_transit", "directions_transit"), - ("directions_walk", "directions_walk"), - ("disc_full", "disc_full"), - ("dns", "dns"), - ("do_not_disturb", "do_not_disturb"), - ("do_not_disturb_alt", "do_not_disturb_alt"), - ("do_not_disturb_off", "do_not_disturb_off"), - ("do_not_disturb_on", "do_not_disturb_on"), - ("dock", "dock"), - ("domain", "domain"), - ("done", "done"), - ("done_all", "done_all"), - ("donut_large", "donut_large"), - ("donut_small", "donut_small"), - ("drafts", "drafts"), - ("drag_handle", "drag_handle"), - ("drive_eta", "drive_eta"), - ("dvr", "dvr"), - ("edit", "edit"), - ("edit_location", "edit_location"), - ("eject", "eject"), - ("email", "email"), - ("enhanced_encryption", "enhanced_encryption"), - ("equalizer", "equalizer"), - ("error", "error"), - ("error_outline", "error_outline"), - ("euro_symbol", "euro_symbol"), - ("ev_station", "ev_station"), - ("event", "event"), - ("event_available", "event_available"), - ("event_busy", "event_busy"), - ("event_note", "event_note"), - ("event_seat", "event_seat"), - ("exit_to_app", "exit_to_app"), - ("expand_less", "expand_less"), - ("expand_more", "expand_more"), - ("explicit", "explicit"), - ("explore", "explore"), - ("exposure", "exposure"), - ("exposure_neg_1", "exposure_neg_1"), - ("exposure_neg_2", "exposure_neg_2"), - ("exposure_plus_1", "exposure_plus_1"), - ("exposure_plus_2", "exposure_plus_2"), - ("exposure_zero", "exposure_zero"), - ("extension", "extension"), - ("face", "face"), - ("fast_forward", "fast_forward"), - ("fast_rewind", "fast_rewind"), - ("favorite", "favorite"), - ("favorite_border", "favorite_border"), - ("featured_play_list", "featured_play_list"), - ("featured_video", "featured_video"), - ("feedback", "feedback"), - ("fiber_dvr", "fiber_dvr"), - ("fiber_manual_record", "fiber_manual_record"), - ("fiber_new", "fiber_new"), - ("fiber_pin", "fiber_pin"), - ("fiber_smart_record", "fiber_smart_record"), - ("file_download", "file_download"), - ("file_upload", "file_upload"), - ("filter", "filter"), - ("filter_1", "filter_1"), - ("filter_2", "filter_2"), - ("filter_3", "filter_3"), - ("filter_4", "filter_4"), - ("filter_5", "filter_5"), - ("filter_6", "filter_6"), - ("filter_7", "filter_7"), - ("filter_8", "filter_8"), - ("filter_9", "filter_9"), - ("filter_9_plus", "filter_9_plus"), - ("filter_b_and_w", "filter_b_and_w"), - ("filter_center_focus", "filter_center_focus"), - ("filter_drama", "filter_drama"), - ("filter_frames", "filter_frames"), - ("filter_hdr", "filter_hdr"), - ("filter_list", "filter_list"), - ("filter_none", "filter_none"), - ("filter_tilt_shift", "filter_tilt_shift"), - ("filter_vintage", "filter_vintage"), - ("find_in_page", "find_in_page"), - ("find_replace", "find_replace"), - ("fingerprint", "fingerprint"), - ("first_page", "first_page"), - ("fitness_center", "fitness_center"), - ("flag", "flag"), - ("flare", "flare"), - ("flash_auto", "flash_auto"), - ("flash_off", "flash_off"), - ("flash_on", "flash_on"), - ("flight", "flight"), - ("flight_land", "flight_land"), - ("flight_takeoff", "flight_takeoff"), - ("flip", "flip"), - ("flip_to_back", "flip_to_back"), - ("flip_to_front", "flip_to_front"), - ("folder", "folder"), - ("folder_open", "folder_open"), - ("folder_shared", "folder_shared"), - ("folder_special", "folder_special"), - ("font_download", "font_download"), - ("format_align_center", "format_align_center"), - ("format_align_justify", "format_align_justify"), - ("format_align_left", "format_align_left"), - ("format_align_right", "format_align_right"), - ("format_bold", "format_bold"), - ("format_clear", "format_clear"), - ("format_color_fill", "format_color_fill"), - ("format_color_reset", "format_color_reset"), - ("format_color_text", "format_color_text"), - ("format_indent_decrease", "format_indent_decrease"), - ("format_indent_increase", "format_indent_increase"), - ("format_italic", "format_italic"), - ("format_line_spacing", "format_line_spacing"), - ("format_list_bulleted", "format_list_bulleted"), - ("format_list_numbered", "format_list_numbered"), - ("format_paint", "format_paint"), - ("format_quote", "format_quote"), - ("format_shapes", "format_shapes"), - ("format_size", "format_size"), - ("format_strikethrough", "format_strikethrough"), - ("format_textdirection_l_to_r", "format_textdirection_l_to_r"), - ("format_textdirection_r_to_l", "format_textdirection_r_to_l"), - ("format_underlined", "format_underlined"), - ("forum", "forum"), - ("forward", "forward"), - ("forward_10", "forward_10"), - ("forward_30", "forward_30"), - ("forward_5", "forward_5"), - ("free_breakfast", "free_breakfast"), - ("fullscreen", "fullscreen"), - ("fullscreen_exit", "fullscreen_exit"), - ("functions", "functions"), - ("g_translate", "g_translate"), - ("gamepad", "gamepad"), - ("games", "games"), - ("gavel", "gavel"), - ("gesture", "gesture"), - ("get_app", "get_app"), - ("gif", "gif"), - ("golf_course", "golf_course"), - ("gps_fixed", "gps_fixed"), - ("gps_not_fixed", "gps_not_fixed"), - ("gps_off", "gps_off"), - ("grade", "grade"), - ("gradient", "gradient"), - ("grain", "grain"), - ("graphic_eq", "graphic_eq"), - ("grid_off", "grid_off"), - ("grid_on", "grid_on"), - ("group", "group"), - ("group_add", "group_add"), - ("group_work", "group_work"), - ("hd", "hd"), - ("hdr_off", "hdr_off"), - ("hdr_on", "hdr_on"), - ("hdr_strong", "hdr_strong"), - ("hdr_weak", "hdr_weak"), - ("headset", "headset"), - ("headset_mic", "headset_mic"), - ("healing", "healing"), - ("hearing", "hearing"), - ("help", "help"), - ("help_outline", "help_outline"), - ("high_quality", "high_quality"), - ("highlight", "highlight"), - ("highlight_off", "highlight_off"), - ("history", "history"), - ("home", "home"), - ("hot_tub", "hot_tub"), - ("hotel", "hotel"), - ("hourglass_empty", "hourglass_empty"), - ("hourglass_full", "hourglass_full"), - ("http", "http"), - ("https", "https"), - ("image", "image"), - ("image_aspect_ratio", "image_aspect_ratio"), - ("import_contacts", "import_contacts"), - ("import_export", "import_export"), - ("important_devices", "important_devices"), - ("inbox", "inbox"), - ("indeterminate_check_box", "indeterminate_check_box"), - ("info", "info"), - ("info_outline", "info_outline"), - ("input", "input"), - ("insert_chart", "insert_chart"), - ("insert_comment", "insert_comment"), - ("insert_drive_file", "insert_drive_file"), - ("insert_emoticon", "insert_emoticon"), - ("insert_invitation", "insert_invitation"), - ("insert_link", "insert_link"), - ("insert_photo", "insert_photo"), - ("invert_colors", "invert_colors"), - ("invert_colors_off", "invert_colors_off"), - ("iso", "iso"), - ("keyboard", "keyboard"), - ("keyboard_arrow_down", "keyboard_arrow_down"), - ("keyboard_arrow_left", "keyboard_arrow_left"), - ("keyboard_arrow_right", "keyboard_arrow_right"), - ("keyboard_arrow_up", "keyboard_arrow_up"), - ("keyboard_backspace", "keyboard_backspace"), - ("keyboard_capslock", "keyboard_capslock"), - ("keyboard_hide", "keyboard_hide"), - ("keyboard_return", "keyboard_return"), - ("keyboard_tab", "keyboard_tab"), - ("keyboard_voice", "keyboard_voice"), - ("kitchen", "kitchen"), - ("label", "label"), - ("label_outline", "label_outline"), - ("landscape", "landscape"), - ("language", "language"), - ("laptop", "laptop"), - ("laptop_chromebook", "laptop_chromebook"), - ("laptop_mac", "laptop_mac"), - ("laptop_windows", "laptop_windows"), - ("last_page", "last_page"), - ("launch", "launch"), - ("layers", "layers"), - ("layers_clear", "layers_clear"), - ("leak_add", "leak_add"), - ("leak_remove", "leak_remove"), - ("lens", "lens"), - ("library_add", "library_add"), - ("library_books", "library_books"), - ("library_music", "library_music"), - ("lightbulb_outline", "lightbulb_outline"), - ("line_style", "line_style"), - ("line_weight", "line_weight"), - ("linear_scale", "linear_scale"), - ("link", "link"), - ("linked_camera", "linked_camera"), - ("list", "list"), - ("live_help", "live_help"), - ("live_tv", "live_tv"), - ("local_activity", "local_activity"), - ("local_airport", "local_airport"), - ("local_atm", "local_atm"), - ("local_bar", "local_bar"), - ("local_cafe", "local_cafe"), - ("local_car_wash", "local_car_wash"), - ("local_convenience_store", "local_convenience_store"), - ("local_dining", "local_dining"), - ("local_drink", "local_drink"), - ("local_florist", "local_florist"), - ("local_gas_station", "local_gas_station"), - ("local_grocery_store", "local_grocery_store"), - ("local_hospital", "local_hospital"), - ("local_hotel", "local_hotel"), - ("local_laundry_service", "local_laundry_service"), - ("local_library", "local_library"), - ("local_mall", "local_mall"), - ("local_movies", "local_movies"), - ("local_offer", "local_offer"), - ("local_parking", "local_parking"), - ("local_pharmacy", "local_pharmacy"), - ("local_phone", "local_phone"), - ("local_pizza", "local_pizza"), - ("local_play", "local_play"), - ("local_post_office", "local_post_office"), - ("local_printshop", "local_printshop"), - ("local_see", "local_see"), - ("local_shipping", "local_shipping"), - ("local_taxi", "local_taxi"), - ("location_city", "location_city"), - ("location_disabled", "location_disabled"), - ("location_off", "location_off"), - ("location_on", "location_on"), - ("location_searching", "location_searching"), - ("lock", "lock"), - ("lock_open", "lock_open"), - ("lock_outline", "lock_outline"), - ("looks", "looks"), - ("looks_3", "looks_3"), - ("looks_4", "looks_4"), - ("looks_5", "looks_5"), - ("looks_6", "looks_6"), - ("looks_one", "looks_one"), - ("looks_two", "looks_two"), - ("loop", "loop"), - ("loupe", "loupe"), - ("low_priority", "low_priority"), - ("loyalty", "loyalty"), - ("mail", "mail"), - ("mail_outline", "mail_outline"), - ("map", "map"), - ("markunread", "markunread"), - ("markunread_mailbox", "markunread_mailbox"), - ("memory", "memory"), - ("menu", "menu"), - ("merge_type", "merge_type"), - ("message", "message"), - ("mic", "mic"), - ("mic_none", "mic_none"), - ("mic_off", "mic_off"), - ("mms", "mms"), - ("mode_comment", "mode_comment"), - ("mode_edit", "mode_edit"), - ("monetization_on", "monetization_on"), - ("money_off", "money_off"), - ("monochrome_photos", "monochrome_photos"), - ("mood", "mood"), - ("mood_bad", "mood_bad"), - ("more", "more"), - ("more_horiz", "more_horiz"), - ("more_vert", "more_vert"), - ("motorcycle", "motorcycle"), - ("mouse", "mouse"), - ("move_to_inbox", "move_to_inbox"), - ("movie", "movie"), - ("movie_creation", "movie_creation"), - ("movie_filter", "movie_filter"), - ("multiline_chart", "multiline_chart"), - ("music_note", "music_note"), - ("music_video", "music_video"), - ("my_location", "my_location"), - ("nature", "nature"), - ("nature_people", "nature_people"), - ("navigate_before", "navigate_before"), - ("navigate_next", "navigate_next"), - ("navigation", "navigation"), - ("near_me", "near_me"), - ("network_cell", "network_cell"), - ("network_check", "network_check"), - ("network_locked", "network_locked"), - ("network_wifi", "network_wifi"), - ("new_releases", "new_releases"), - ("next_week", "next_week"), - ("nfc", "nfc"), - ("no_encryption", "no_encryption"), - ("no_sim", "no_sim"), - ("not_interested", "not_interested"), - ("note", "note"), - ("note_add", "note_add"), - ("notifications", "notifications"), - ("notifications_active", "notifications_active"), - ("notifications_none", "notifications_none"), - ("notifications_off", "notifications_off"), - ("notifications_paused", "notifications_paused"), - ("offline_pin", "offline_pin"), - ("ondemand_video", "ondemand_video"), - ("opacity", "opacity"), - ("open_in_browser", "open_in_browser"), - ("open_in_new", "open_in_new"), - ("open_with", "open_with"), - ("pages", "pages"), - ("pageview", "pageview"), - ("palette", "palette"), - ("pan_tool", "pan_tool"), - ("panorama", "panorama"), - ("panorama_fish_eye", "panorama_fish_eye"), - ("panorama_horizontal", "panorama_horizontal"), - ("panorama_vertical", "panorama_vertical"), - ("panorama_wide_angle", "panorama_wide_angle"), - ("party_mode", "party_mode"), - ("pause", "pause"), - ("pause_circle_filled", "pause_circle_filled"), - ("pause_circle_outline", "pause_circle_outline"), - ("payment", "payment"), - ("people", "people"), - ("people_outline", "people_outline"), - ("perm_camera_mic", "perm_camera_mic"), - ("perm_contact_calendar", "perm_contact_calendar"), - ("perm_data_setting", "perm_data_setting"), - ("perm_device_information", "perm_device_information"), - ("perm_identity", "perm_identity"), - ("perm_media", "perm_media"), - ("perm_phone_msg", "perm_phone_msg"), - ("perm_scan_wifi", "perm_scan_wifi"), - ("person", "person"), - ("person_add", "person_add"), - ("person_outline", "person_outline"), - ("person_pin", "person_pin"), - ("person_pin_circle", "person_pin_circle"), - ("personal_video", "personal_video"), - ("pets", "pets"), - ("phone", "phone"), - ("phone_android", "phone_android"), - ("phone_bluetooth_speaker", "phone_bluetooth_speaker"), - ("phone_forwarded", "phone_forwarded"), - ("phone_in_talk", "phone_in_talk"), - ("phone_iphone", "phone_iphone"), - ("phone_locked", "phone_locked"), - ("phone_missed", "phone_missed"), - ("phone_paused", "phone_paused"), - ("phonelink", "phonelink"), - ("phonelink_erase", "phonelink_erase"), - ("phonelink_lock", "phonelink_lock"), - ("phonelink_off", "phonelink_off"), - ("phonelink_ring", "phonelink_ring"), - ("phonelink_setup", "phonelink_setup"), - ("photo", "photo"), - ("photo_album", "photo_album"), - ("photo_camera", "photo_camera"), - ("photo_filter", "photo_filter"), - ("photo_library", "photo_library"), - ("photo_size_select_actual", "photo_size_select_actual"), - ("photo_size_select_large", "photo_size_select_large"), - ("photo_size_select_small", "photo_size_select_small"), - ("picture_as_pdf", "picture_as_pdf"), - ("picture_in_picture", "picture_in_picture"), - ("picture_in_picture_alt", "picture_in_picture_alt"), - ("pie_chart", "pie_chart"), - ("pie_chart_outlined", "pie_chart_outlined"), - ("pin_drop", "pin_drop"), - ("place", "place"), - ("play_arrow", "play_arrow"), - ("play_circle_filled", "play_circle_filled"), - ("play_circle_outline", "play_circle_outline"), - ("play_for_work", "play_for_work"), - ("playlist_add", "playlist_add"), - ("playlist_add_check", "playlist_add_check"), - ("playlist_play", "playlist_play"), - ("plus_one", "plus_one"), - ("poll", "poll"), - ("polymer", "polymer"), - ("pool", "pool"), - ("portable_wifi_off", "portable_wifi_off"), - ("portrait", "portrait"), - ("power", "power"), - ("power_input", "power_input"), - ("power_settings_new", "power_settings_new"), - ("pregnant_woman", "pregnant_woman"), - ("present_to_all", "present_to_all"), - ("print", "print"), - ("priority_high", "priority_high"), - ("public", "public"), - ("publish", "publish"), - ("query_builder", "query_builder"), - ("question_answer", "question_answer"), - ("queue", "queue"), - ("queue_music", "queue_music"), - ("queue_play_next", "queue_play_next"), - ("radio", "radio"), - ("radio_button_checked", "radio_button_checked"), - ("radio_button_unchecked", "radio_button_unchecked"), - ("rate_review", "rate_review"), - ("receipt", "receipt"), - ("recent_actors", "recent_actors"), - ("record_voice_over", "record_voice_over"), - ("redeem", "redeem"), - ("redo", "redo"), - ("refresh", "refresh"), - ("remove", "remove"), - ("remove_circle", "remove_circle"), - ("remove_circle_outline", "remove_circle_outline"), - ("remove_from_queue", "remove_from_queue"), - ("remove_red_eye", "remove_red_eye"), - ("remove_shopping_cart", "remove_shopping_cart"), - ("reorder", "reorder"), - ("repeat", "repeat"), - ("repeat_one", "repeat_one"), - ("replay", "replay"), - ("replay_10", "replay_10"), - ("replay_30", "replay_30"), - ("replay_5", "replay_5"), - ("reply", "reply"), - ("reply_all", "reply_all"), - ("report", "report"), - ("report_problem", "report_problem"), - ("restaurant", "restaurant"), - ("restaurant_menu", "restaurant_menu"), - ("restore", "restore"), - ("restore_page", "restore_page"), - ("ring_volume", "ring_volume"), - ("room", "room"), - ("room_service", "room_service"), - ("rotate_90_degrees_ccw", "rotate_90_degrees_ccw"), - ("rotate_left", "rotate_left"), - ("rotate_right", "rotate_right"), - ("rounded_corner", "rounded_corner"), - ("router", "router"), - ("rowing", "rowing"), - ("rss_feed", "rss_feed"), - ("rv_hookup", "rv_hookup"), - ("satellite", "satellite"), - ("save", "save"), - ("scanner", "scanner"), - ("schedule", "schedule"), - ("school", "school"), - ("screen_lock_landscape", "screen_lock_landscape"), - ("screen_lock_portrait", "screen_lock_portrait"), - ("screen_lock_rotation", "screen_lock_rotation"), - ("screen_rotation", "screen_rotation"), - ("screen_share", "screen_share"), - ("sd_card", "sd_card"), - ("sd_storage", "sd_storage"), - ("search", "search"), - ("security", "security"), - ("select_all", "select_all"), - ("send", "send"), - ("sentiment_dissatisfied", "sentiment_dissatisfied"), - ("sentiment_neutral", "sentiment_neutral"), - ("sentiment_satisfied", "sentiment_satisfied"), - ("sentiment_very_dissatisfied", "sentiment_very_dissatisfied"), - ("sentiment_very_satisfied", "sentiment_very_satisfied"), - ("settings", "settings"), - ("settings_applications", "settings_applications"), - ("settings_backup_restore", "settings_backup_restore"), - ("settings_bluetooth", "settings_bluetooth"), - ("settings_brightness", "settings_brightness"), - ("settings_cell", "settings_cell"), - ("settings_ethernet", "settings_ethernet"), - ("settings_input_antenna", "settings_input_antenna"), - ("settings_input_component", "settings_input_component"), - ("settings_input_composite", "settings_input_composite"), - ("settings_input_hdmi", "settings_input_hdmi"), - ("settings_input_svideo", "settings_input_svideo"), - ("settings_overscan", "settings_overscan"), - ("settings_phone", "settings_phone"), - ("settings_power", "settings_power"), - ("settings_remote", "settings_remote"), - ("settings_system_daydream", "settings_system_daydream"), - ("settings_voice", "settings_voice"), - ("share", "share"), - ("shop", "shop"), - ("shop_two", "shop_two"), - ("shopping_basket", "shopping_basket"), - ("shopping_cart", "shopping_cart"), - ("short_text", "short_text"), - ("show_chart", "show_chart"), - ("shuffle", "shuffle"), - ("signal_cellular_4_bar", "signal_cellular_4_bar"), - ("signal_cellular_connected_no_internet_4_bar", "signal_cellular_connected_no_internet_4_bar"), - ("signal_cellular_no_sim", "signal_cellular_no_sim"), - ("signal_cellular_null", "signal_cellular_null"), - ("signal_cellular_off", "signal_cellular_off"), - ("signal_wifi_4_bar", "signal_wifi_4_bar"), - ("signal_wifi_4_bar_lock", "signal_wifi_4_bar_lock"), - ("signal_wifi_off", "signal_wifi_off"), - ("sim_card", "sim_card"), - ("sim_card_alert", "sim_card_alert"), - ("skip_next", "skip_next"), - ("skip_previous", "skip_previous"), - ("slideshow", "slideshow"), - ("slow_motion_video", "slow_motion_video"), - ("smartphone", "smartphone"), - ("smoke_free", "smoke_free"), - ("smoking_rooms", "smoking_rooms"), - ("sms", "sms"), - ("sms_failed", "sms_failed"), - ("snooze", "snooze"), - ("sort", "sort"), - ("sort_by_alpha", "sort_by_alpha"), - ("spa", "spa"), - ("space_bar", "space_bar"), - ("speaker", "speaker"), - ("speaker_group", "speaker_group"), - ("speaker_notes", "speaker_notes"), - ("speaker_notes_off", "speaker_notes_off"), - ("speaker_phone", "speaker_phone"), - ("spellcheck", "spellcheck"), - ("star", "star"), - ("star_border", "star_border"), - ("star_half", "star_half"), - ("stars", "stars"), - ("stay_current_landscape", "stay_current_landscape"), - ("stay_current_portrait", "stay_current_portrait"), - ("stay_primary_landscape", "stay_primary_landscape"), - ("stay_primary_portrait", "stay_primary_portrait"), - ("stop", "stop"), - ("stop_screen_share", "stop_screen_share"), - ("storage", "storage"), - ("store", "store"), - ("store_mall_directory", "store_mall_directory"), - ("straighten", "straighten"), - ("streetview", "streetview"), - ("strikethrough_s", "strikethrough_s"), - ("style", "style"), - ("subdirectory_arrow_left", "subdirectory_arrow_left"), - ("subdirectory_arrow_right", "subdirectory_arrow_right"), - ("subject", "subject"), - ("subscriptions", "subscriptions"), - ("subtitles", "subtitles"), - ("subway", "subway"), - ("supervisor_account", "supervisor_account"), - ("surround_sound", "surround_sound"), - ("swap_calls", "swap_calls"), - ("swap_horiz", "swap_horiz"), - ("swap_vert", "swap_vert"), - ("swap_vertical_circle", "swap_vertical_circle"), - ("switch_camera", "switch_camera"), - ("switch_video", "switch_video"), - ("sync", "sync"), - ("sync_disabled", "sync_disabled"), - ("sync_problem", "sync_problem"), - ("system_update", "system_update"), - ("system_update_alt", "system_update_alt"), - ("tab", "tab"), - ("tab_unselected", "tab_unselected"), - ("tablet", "tablet"), - ("tablet_android", "tablet_android"), - ("tablet_mac", "tablet_mac"), - ("tag_faces", "tag_faces"), - ("tap_and_play", "tap_and_play"), - ("terrain", "terrain"), - ("text_fields", "text_fields"), - ("text_format", "text_format"), - ("textsms", "textsms"), - ("texture", "texture"), - ("theaters", "theaters"), - ("thumb_down", "thumb_down"), - ("thumb_up", "thumb_up"), - ("thumbs_up_down", "thumbs_up_down"), - ("time_to_leave", "time_to_leave"), - ("timelapse", "timelapse"), - ("timeline", "timeline"), - ("timer", "timer"), - ("timer_10", "timer_10"), - ("timer_3", "timer_3"), - ("timer_off", "timer_off"), - ("title", "title"), - ("toc", "toc"), - ("today", "today"), - ("toll", "toll"), - ("tonality", "tonality"), - ("touch_app", "touch_app"), - ("toys", "toys"), - ("track_changes", "track_changes"), - ("traffic", "traffic"), - ("train", "train"), - ("tram", "tram"), - ("transfer_within_a_station", "transfer_within_a_station"), - ("transform", "transform"), - ("translate", "translate"), - ("trending_down", "trending_down"), - ("trending_flat", "trending_flat"), - ("trending_up", "trending_up"), - ("tune", "tune"), - ("turned_in", "turned_in"), - ("turned_in_not", "turned_in_not"), - ("tv", "tv"), - ("unarchive", "unarchive"), - ("undo", "undo"), - ("unfold_less", "unfold_less"), - ("unfold_more", "unfold_more"), - ("update", "update"), - ("usb", "usb"), - ("verified_user", "verified_user"), - ("vertical_align_bottom", "vertical_align_bottom"), - ("vertical_align_center", "vertical_align_center"), - ("vertical_align_top", "vertical_align_top"), - ("vibration", "vibration"), - ("video_call", "video_call"), - ("video_label", "video_label"), - ("video_library", "video_library"), - ("videocam", "videocam"), - ("videocam_off", "videocam_off"), - ("videogame_asset", "videogame_asset"), - ("view_agenda", "view_agenda"), - ("view_array", "view_array"), - ("view_carousel", "view_carousel"), - ("view_column", "view_column"), - ("view_comfy", "view_comfy"), - ("view_compact", "view_compact"), - ("view_day", "view_day"), - ("view_headline", "view_headline"), - ("view_list", "view_list"), - ("view_module", "view_module"), - ("view_quilt", "view_quilt"), - ("view_stream", "view_stream"), - ("view_week", "view_week"), - ("vignette", "vignette"), - ("visibility", "visibility"), - ("visibility_off", "visibility_off"), - ("voice_chat", "voice_chat"), - ("voicemail", "voicemail"), - ("volume_down", "volume_down"), - ("volume_mute", "volume_mute"), - ("volume_off", "volume_off"), - ("volume_up", "volume_up"), - ("vpn_key", "vpn_key"), - ("vpn_lock", "vpn_lock"), - ("wallpaper", "wallpaper"), - ("warning", "warning"), - ("watch", "watch"), - ("watch_later", "watch_later"), - ("wb_auto", "wb_auto"), - ("wb_cloudy", "wb_cloudy"), - ("wb_incandescent", "wb_incandescent"), - ("wb_iridescent", "wb_iridescent"), - ("wb_sunny", "wb_sunny"), - ("wc", "wc"), - ("web", "web"), - ("web_asset", "web_asset"), - ("weekend", "weekend"), - ("whatshot", "whatshot"), - ("widgets", "widgets"), - ("wifi", "wifi"), - ("wifi_lock", "wifi_lock"), - ("wifi_tethering", "wifi_tethering"), - ("work", "work"), - ("wrap_text", "wrap_text"), - ("youtube_searched_for", "youtube_searched_for"), - ("zoom_in", "zoom_in"), - ("zoom_out", "zoom_out"), - ("zoom_out_map", "zoom_out_map"), -] +try: + ICONS = icon_choices("mdi") +except FileNotFoundError: + # If icons aren't installed yet, set choices to empty list + ICONS = [] diff --git a/aleksis/core/views.py b/aleksis/core/views.py index ed20571dd83aee3bfc5d3bc4fd1dc2c8a7211b1d..38d8f8c7dac99a1f81d2b34d89dd65db078eda8c 100644 --- a/aleksis/core/views.py +++ b/aleksis/core/views.py @@ -4,6 +4,7 @@ from urllib.parse import urlencode, urlparse, urlunparse from django.apps import apps from django.conf import settings +from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.models import Group as DjangoGroup from django.contrib.auth.models import Permission, User from django.contrib.contenttypes.models import ContentType @@ -115,6 +116,7 @@ from .registries import ( from .tables import ( AdditionalFieldsTable, DashboardWidgetTable, + FullPersonsTable, GroupGlobalPermissionTable, GroupObjectPermissionTable, GroupsTable, @@ -358,7 +360,7 @@ def group(request: HttpRequest, id_: int) -> HttpResponse: members = group.members.all() # Build table - members_table = PersonsTable(members) + members_table = FullPersonsTable(members) RequestConfig(request).configure(members_table) context["members_table"] = members_table @@ -366,7 +368,7 @@ def group(request: HttpRequest, id_: int) -> HttpResponse: owners = group.owners.all() # Build table - owners_table = PersonsTable(owners) + owners_table = FullPersonsTable(owners) RequestConfig(request).configure(owners_table) context["owners_table"] = owners_table @@ -770,7 +772,7 @@ def edit_additional_field(request: HttpRequest, id_: Optional[int] = None) -> Ht if edit_additional_field_form.is_valid(): edit_additional_field_form.save(commit=True) - messages.success(request, _("The additional_field has been saved.")) + messages.success(request, _("The additional field has been saved.")) return redirect("additional_fields") @@ -1358,7 +1360,7 @@ class CeleryProgressView(View): return get_progress(request, task_id, *args, **kwargs) -class CustomPasswordChangeView(PermissionRequiredMixin, PasswordChangeView): +class CustomPasswordChangeView(LoginRequiredMixin, PermissionRequiredMixin, PasswordChangeView): """Custom password change view to allow to disable changing of password.""" permission_required = "core.can_change_password" @@ -1595,7 +1597,7 @@ class ICalFeedEditView(PermissionRequiredMixin, AdvancedEditView): model = PersonalICalUrl template_name = "core/ical/ical_edit.html" success_url = reverse_lazy("ical_feed_list") - success_message = _("ICal feed updated successfully") + success_message = _("iCal feed updated successfully") permission_required = "core.edit_ical_rule" fields = ["name", "ical_feed"] @@ -1605,7 +1607,7 @@ class ICalFeedDeleteView(PermissionRequiredMixin, AdvancedDeleteView): model = PersonalICalUrl template_name = "core/pages/delete.html" success_url = reverse_lazy("ical_feed_list") - success_message = _("ICal feed deleted successfully") + success_message = _("iCal feed deleted successfully") permission_required = "core.delete_ical_rule" @@ -1613,7 +1615,7 @@ class ICalFeedCreateView(PermissionRequiredMixin, AdvancedCreateView): model = PersonalICalUrl template_name = "core/ical/ical_create.html" success_url = reverse_lazy("ical_feed_list") - success_message = _("ICal feed created successfully") + success_message = _("iCal feed created successfully") permission_required = "core.create_ical_rule" fields = ["name", "ical_feed"] diff --git a/docs/admin/01_core_concepts.rst b/docs/admin/01_core_concepts.rst index cdd49c7183217897b09cf1fda5575307e0a5f08c..2d626927ae2845594a0a67525d213064f2581e97 100644 --- a/docs/admin/01_core_concepts.rst +++ b/docs/admin/01_core_concepts.rst @@ -1,3 +1,5 @@ +.. _core-concept: + Concepts of the AlekSIS core ============================ @@ -93,7 +95,7 @@ In contrast to persons, groups are supposed to be **linked to school terms** (but they don’t have to be). For example, the composition of a class or a course varies from school term to school term. In order to archive historical data according to local laws, these groups have to be -separeted which is solved by linking them to a school term. +separated which is solved by linking them to a school term. Manage groups ~~~~~~~~~~~~~ diff --git a/docs/admin/10_install.rst b/docs/admin/10_install.rst index f8b41d0d98efd5daa1df64a5fceea9ae5b86c662..05baa14a8c76f91b3407c47a97c2609c0decad6d 100644 --- a/docs/admin/10_install.rst +++ b/docs/admin/10_install.rst @@ -55,7 +55,8 @@ Install some packages from the Debian package system. chromium \ redis-server \ postgresql \ - locales-all + locales-all \ + celery Create PostgreSQL user and database ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -78,7 +79,6 @@ Create the directories for storage /usr/share/aleksis/{static,node_modules} \ /var/lib/aleksis/media \ /var/backups/aleksis - chown -R www-data:www-data /var/lib/aleksis Create AlekSIS configuration file ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -111,6 +111,18 @@ favourite text editor and adding the following configuration. password = "admin" email = "root@localhost" +Make sure you specify the correct `allowed_hosts`. It is used for things like the OpenID Connect issuer and the standard mail domain. + +Generate OpenID Connect certificate +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +OpenID Connect needs a certificate, which you need to generate and assign required permissions. + +.. code-block:: shell + + openssl genrsa -out /etc/aleksis/oidc.pem + chown www-data:www-data /etc/aleksis/oidc.pem + Install AlekSIS itself ~~~~~~~~~~~~~~~~~~~~~~ @@ -119,14 +131,30 @@ They will pull the AlekSIS standard distribution from `PyPI`_ and install it to system-wide `dist-packages` of Python. Afterwards, it will download frontend dependencies from `yarnpkg`, collect static files, and migrate the database to the final schema. +`aleksis` is a meta-package which will install the :ref:`core-concept` and all official apps. If you want to install only the AlekSIS Core and your own set of apps, you can install `aleksis-core` instead of `aleksis`. + +You only need to install these additional dependencies if installing the meta-package: + .. code-block:: shell + apt install libmariadb-dev libldap2-dev libsasl2-dev + +After that, you can install the aleksis meta-package, or only `aleksis-core`: +.. code-block:: shell pip3 install aleksis aleksis-admin yarn install aleksis-admin collectstatic aleksis-admin migrate aleksis-admin createinitialrevisions +Make dynamic content writable for webserver +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To make AlekSIS® able to write dynamic content, you need to assign permissions to the webserver user. + +.. code-block:: shell + chown -R www-data:www-data /var/lib/aleksis + .. _core-configure-uwsgi: Configure uWSGI diff --git a/docs/admin/21_ldap.rst b/docs/admin/21_ldap.rst index 7b123a594154950482a6cdf7ac095a3030ee5359..389b3fca9c9c0f0af8f2f54fe448d87daf7bf776 100644 --- a/docs/admin/21_ldap.rst +++ b/docs/admin/21_ldap.rst @@ -13,7 +13,7 @@ the AlekSIS system (see below). Installing packages for LDAP support ------------------------------------ -Installing the necessary librairies for LDAP support unfortunately is not +Installing the necessary libraries for LDAP support unfortunately is not very straightforward under all circumstances. On Debian, install these packages:: sudo apt install python3-ldap libldap2-dev libssl-dev libsasl2-dev python3-dev diff --git a/docs/admin/22_registration.rst b/docs/admin/22_registration.rst index 510500f2198ec6377c91d97bf1be903411f0daea..84ae59f0c881772b72ca023bdb68c53c62717fca 100644 --- a/docs/admin/22_registration.rst +++ b/docs/admin/22_registration.rst @@ -4,7 +4,7 @@ Registration and user invitations In addition to central management of user accounts, AlekSIS allows self-registration by users. Registration can be either fully open, or based on personal invitations. -In a system handling ciritcal data, access control should be as tight as possible. +In a system handling critical data, access control should be as tight as possible. However, there are scenarios where central account creation is not feasible, e.g. for optional guardian accounts. In such a scenario, the invitation system allows for processes like handing out invitation codes as a letter or through e-mail diff --git a/docs/admin/31_monitoring.rst b/docs/admin/31_monitoring.rst index 1847297352a135aafdff954d98eb2a2cc1a69573..0d079bf4b615e2c4bebb0af1dca6f736d4fce49f 100644 --- a/docs/admin/31_monitoring.rst +++ b/docs/admin/31_monitoring.rst @@ -58,7 +58,7 @@ Monitoring with Icinga2 As already mentioned, there is a JSON endpoint at https://aleksis.example.com/health/. You can use an json check plugin to -check seperate health checks or just use a HTTP check to check if the +check separate health checks or just use a HTTP check to check if the site returns HTTP 200. Performance monitoring with Prometheus diff --git a/docs/conf.py b/docs/conf.py index dc58a3b9a1acc1ecb89552e27e33a4c66dd48c96..b31ca6be5a35d2e169c9c13c52de1180b108b608 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -29,9 +29,9 @@ copyright = "2019-2022 The AlekSIS team" author = "The AlekSIS Team" # The short X.Y version -version = "2.8" +version = "2.9" # The full version, including alpha/beta/rc tags -release = "2.8.2.dev0" +release = "2.9.1.dev0" # -- General configuration --------------------------------------------------- diff --git a/docs/dev/01_setup.rst b/docs/dev/01_setup.rst index e52941af0c77b266ffd74bf410cccb0ef04b2678..75cf677a7f43703dc5e6a389e97be28fcf813a02 100644 --- a/docs/dev/01_setup.rst +++ b/docs/dev/01_setup.rst @@ -2,7 +2,7 @@ Setting up the development environment ====================================== AlekSIS and all official apps use `Poetry`_ to manage virtualenvs and -dependencies. You should make yourself a bit confortable with poetry +dependencies. You should make yourself a bit comfortable with poetry by reading its documentation. Poetry makes a lot of stuff very easy, especially managing a virtual diff --git a/docs/dev/03_run_tests.rst b/docs/dev/03_run_tests.rst index c50eda52d1c04d183c518a938a6f6a7a1c579ab3..9d38bdf6382d250ce6d1d05dfae37e699c268afa 100644 --- a/docs/dev/03_run_tests.rst +++ b/docs/dev/03_run_tests.rst @@ -29,7 +29,7 @@ setting certain environment variables: Selenium tests are enabled if `TEST_SELENIUM_BROWSERS` is non-empty. -To set variables, use env to wrap the tox ommand:: +To set variables, use env to wrap the tox command:: TEST_SELENIUM_BROWSERS=chrome,firefox tox @@ -69,5 +69,5 @@ look like they should or for documentation purposes. To enable screenshots, add the `TEST_SCREENSHOT_PATH` environment variable when running the tests. -If runnin multiple browsers, screenshots are placed in separate directories +If running multiple browsers, screenshots are placed in separate directories per browser. diff --git a/docs/user/01_registration.rst b/docs/user/01_registration.rst index 3beb4fb51621af47b97a51a1cb6719773249ecf7..19d0b7a893c00f12b0c92fc5f71b0209edbaab8d 100644 --- a/docs/user/01_registration.rst +++ b/docs/user/01_registration.rst @@ -15,7 +15,7 @@ AlekSIS account. :alt: Signup formular If enabled, you have to verify your email address after signup. To do so, click -on the link you recieved on the email address you entered in the signup form. +on the link you received on the email address you entered in the signup form. .. note:: Normally, AlekSIS does not allow public registratio, and all accounts are @@ -32,5 +32,5 @@ enter it. You will be redirected to the signup form. :width: 100% :alt: Accept invitation -If you've recieved an invitation link (e.g. via email), clicking the link +If you've received an invitation link (e.g. via email), clicking the link will redirect you to the signup form automatically. diff --git a/docs/user/02_personal_account.rst b/docs/user/02_personal_account.rst index a506b9e759ddf0b9f0e8235db784c51c150317c8..fe584615cefbaf284a6b3ba2cfd7babeca076f0d 100644 --- a/docs/user/02_personal_account.rst +++ b/docs/user/02_personal_account.rst @@ -90,6 +90,6 @@ Authorized applications ----------------------- On the page ``Account → Authorized applications`` you can see all -external applications you authorized to retreive data about you from +external applications you authorized to retrieve data about you from AlekSIS. That can be services provided by your local institution like a chat platform, for example. diff --git a/pyproject.toml b/pyproject.toml index 1b73c5c2106156a4770b862f9a320b57159622ff..548e785e3db046aa57d0627239ad906452b79ce7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "AlekSIS-Core" -version = "2.8.2.dev0" +version = "2.9.1.dev0" packages = [ { include = "aleksis" } ] @@ -71,7 +71,7 @@ django-ipware = "^4.0" django-impersonate = "^1.4" psycopg2 = "^2.8" django_select2 = "^7.1" -django-two-factor-auth = { version = "^1.12.1", extras = [ "yubikey", "phonenumbers", "call", "sms" ] } +django-two-factor-auth = { version = "^1.14.0", extras = [ "yubikey", "phonenumbers", "call", "sms" ] } django-yarnpkg = "^6.0" django-material = "^1.6.0" django-dynamic-preferences = "^1.11" @@ -88,7 +88,7 @@ django-celery-beat = "^2.2.0" django-celery-email = "^3.0.0" django-jsonstore = "^0.5.0" django-polymorphic = "^3.0.0" -django-colorfield = "^0.6.0" +django-colorfield = "^0.7.0" django-bleach = "^2.0.0" django-guardian = "^2.2.0" rules = "^3.0" @@ -127,7 +127,7 @@ sentry-sdk = {version = "^1.4.3", optional = true} django-cte = "^1.1.5" pycountry = "^22.0.0" django-ical = "^1.8.3" -django-iconify = "^0.2.0" +django-iconify = "^0.3" customidenticon = "^0.1.5" [tool.poetry.extras]