\n"
+"Last-Translator: Anna Dunn, 2022\n"
"Language-Team: Ukrainian (http://www.transifex.com/coders4help/volunteer-planner/language/uk/)\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
@@ -15,22 +16,22 @@ msgstr ""
"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"
msgid "first name"
-msgstr ""
+msgstr "Ім'я"
msgid "last name"
msgstr ""
msgid "email"
-msgstr ""
+msgstr "Електронна пошта"
msgid "date joined"
-msgstr ""
+msgstr "Дата приєднання"
msgid "last login"
-msgstr ""
+msgstr "Останній вхід"
msgid "Accounts"
-msgstr ""
+msgstr "Облікові записи"
msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"."
msgstr ""
@@ -41,101 +42,112 @@ msgstr ""
msgid "Username must end with a letter, a number or \"_\"."
msgstr ""
-msgid "Username must not contain consecutive . or _ characters."
+msgid "Username must not contain consecutive \".\" or \"_\" characters."
msgstr ""
msgid "Accept privacy policy"
-msgstr ""
+msgstr "Прийміть політику конфіденційності"
msgid "user account"
-msgstr ""
+msgstr "Обліковий запис користувача"
msgid "user accounts"
-msgstr ""
+msgstr "Облікові записи користувачів"
msgid "My shifts today:"
-msgstr ""
+msgstr "Мої сьогоднішні зміни:"
msgid "No shifts today."
-msgstr ""
+msgstr "Сьогодні без змін."
msgid "Show this work shift"
-msgstr ""
+msgstr "Показати робочу зміну"
msgid "My shifts tomorrow:"
-msgstr ""
+msgstr "Мої зміни завтра:"
msgid "No shifts tomorrow."
-msgstr ""
+msgstr "Завтра без змін."
msgid "My shifts the day after tomorrow:"
-msgstr ""
+msgstr "Мої зміни післязавтра:"
msgid "No shifts the day after tomorrow."
-msgstr ""
+msgstr "Післязавтра немає змін."
msgid "Further shifts:"
-msgstr ""
+msgstr "Подальші зміни:"
msgid "No further shifts."
-msgstr ""
+msgstr "Більше ніяких змін."
msgid "Show my work shifts in the past"
-msgstr ""
+msgstr "Показати мої робочі зміни у минулому"
msgid "My work shifts in the past:"
-msgstr ""
+msgstr "Мої робочі зміни в минулому:"
msgid "No work shifts in the past days yet."
-msgstr ""
+msgstr "Протягом останніх днів робочих змін не було."
msgid "Show my work shifts in the future"
-msgstr ""
+msgstr "Показати мої робочі зміни на майбутнє"
msgid "Username"
-msgstr ""
+msgstr "Ім'я користувача"
msgid "First name"
-msgstr ""
+msgstr "Ім'я"
msgid "Last name"
-msgstr ""
+msgstr "Прізвище"
msgid "Email"
-msgstr ""
+msgstr "Електронна пошта"
msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore."
-msgstr ""
+msgstr "Якщо ви видалите свій обліковий запис, ця інформація буде анонімізована, і ви більше не зможете ввійти в Volunteer-Planner."
msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account."
-msgstr ""
+msgstr "Відновити цю інформацію неможливо. Якщо ви хочете знову працювати волонтером, вам доведеться створити новий обліковий запис."
msgid "Delete Account (no additional warning)"
-msgstr ""
+msgstr "Видалити обліковий запис (без додаткового попередження)"
msgid "Save"
-msgstr ""
+msgstr "Зберегти"
msgid "Edit Account"
-msgstr ""
+msgstr "Редагувати обліковий запис"
msgid "Delete Account"
-msgstr ""
+msgstr "Видалити обліковий запис"
msgid "Your user account has been deleted."
+msgstr "Ваш обліковий запис користувача було видалено."
+
+#, python-brace-format
+msgid "Error {error_code}"
+msgstr ""
+
+msgid "Permission denied"
+msgstr ""
+
+#, python-brace-format
+msgid "You are not allowed to do this and have been redirected to {redirect_path}."
msgstr ""
msgid "additional CSS"
msgstr ""
msgid "translation"
-msgstr ""
+msgstr "переклад"
msgid "translations"
msgstr ""
msgid "No translation available"
-msgstr ""
+msgstr "Немає перекладу"
msgid "additional style"
msgstr ""
@@ -150,13 +162,13 @@ msgid "flat page"
msgstr ""
msgid "language"
-msgstr ""
+msgstr "мова"
msgid "title"
-msgstr ""
+msgstr "титул"
msgid "content"
-msgstr ""
+msgstr "зміст"
msgid "flat page translation"
msgstr ""
@@ -165,117 +177,117 @@ msgid "flat page translations"
msgstr ""
msgid "View on site"
-msgstr ""
+msgstr "Подивитися на сайті"
msgid "Remove"
-msgstr ""
+msgstr "Видалити"
#, python-format
msgid "Add another %(verbose_name)s"
-msgstr ""
+msgstr "Додати %(verbose_name)s"
msgid "Edit this page"
-msgstr ""
+msgstr "Редагувати цю сторінку"
msgid "subtitle"
-msgstr ""
+msgstr "Підзаголовок"
msgid "articletext"
-msgstr ""
+msgstr "стаття"
msgid "creation date"
-msgstr ""
+msgstr "дата створення"
msgid "news entry"
-msgstr ""
+msgstr "запис новин"
msgid "news entries"
-msgstr ""
+msgstr "записи новин"
msgid "Page not found"
-msgstr ""
+msgstr "Сторінку не знайдено"
msgid "We're sorry, but the requested page could not be found."
-msgstr ""
+msgstr "На жаль, не вдалося знайти потрібну сторінку."
msgid "server error"
-msgstr ""
+msgstr "помилка сервера"
msgid "Server Error (500)"
-msgstr ""
+msgstr "Помилка сервера 1(500)1"
msgid "There's been an error. It should be fixed shortly. Thanks for your patience."
-msgstr ""
+msgstr "Сталася помилка. Це має бути виправлено найближчим часом. Дякуємо за ваше терпіння."
msgid "Login"
-msgstr ""
+msgstr "Увійти"
msgid "Start helping"
-msgstr ""
+msgstr "Почни допомагати"
msgid "Main page"
-msgstr ""
+msgstr "Головна сторінка"
msgid "Imprint"
-msgstr ""
+msgstr "Головна інформація"
msgid "About"
-msgstr ""
+msgstr "Про нас"
msgid "Supporter"
-msgstr ""
+msgstr "Підтримка"
msgid "Press"
-msgstr ""
+msgstr "Контакти для преси"
msgid "Contact"
-msgstr ""
+msgstr "Наші контакти"
msgid "FAQ"
-msgstr ""
+msgstr "Поширені запитання"
msgid "I want to help!"
-msgstr ""
+msgstr "Я хочу допомогти!"
msgid "Register and see where you can help"
-msgstr ""
+msgstr "Зареєструйтесь і подивіться, де ви можете допомогти"
msgid "Organize volunteers!"
-msgstr ""
+msgstr "Організуйте волонтерів!"
msgid "Register a shelter and organize volunteers"
-msgstr ""
+msgstr "Зареєструйте притулок і організуйте волонтерів"
msgid "Places to help"
-msgstr ""
+msgstr "Місця, де можна допомогти"
msgid "Registered Volunteers"
-msgstr ""
+msgstr "Зареєстровані волонтери"
msgid "Worked Hours"
-msgstr ""
+msgstr "Відпрацьовані години"
msgid "What is it all about?"
-msgstr ""
+msgstr "Про що йдеться?"
msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field."
-msgstr ""
+msgstr "Ви волонтер і хочете допомогти біженцям? Volunteer-Planner.org показує вам, де, коли і як допомогти безпосередньо на місцях."
msgid "This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.
"
-msgstr ""
+msgstr "Ця платформа є некомерційною та без реклами. Міжнародна команда проектних робітників, програмістів, менеджерів проектів і дизайнерів є волонтерами для цього проекту та надає свій професійний досвід, щоб змінити ситуацію.
"
msgid "You can help at these locations:"
-msgstr ""
+msgstr "Ви можете допомогти у цих місцях:"
msgid "There are currently no places in need of help."
-msgstr ""
+msgstr "Наразі немає місць, які потребують допомоги."
msgid "Privacy Policy"
-msgstr ""
+msgstr "Політика конфіденційності"
msgctxt "Privacy Policy Sec1"
msgid "Scope"
-msgstr ""
+msgstr "Сфера дії"
msgctxt "Privacy Policy Sec1 P1"
msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)."
@@ -404,13 +416,13 @@ msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW
msgstr ""
msgid "advantages"
-msgstr ""
+msgstr "Переваги"
msgid "save time"
-msgstr ""
+msgstr "заощадити час"
msgid "improve selforganization of the volunteers"
-msgstr ""
+msgstr "покращити самоорганізацію волонтерів"
msgid ""
"\n"
@@ -1233,18 +1245,24 @@ msgstr ""
msgid "Sign-up"
msgstr ""
+msgid "Ukrainian"
+msgstr ""
+
msgid "English"
msgstr ""
msgid "German"
msgstr ""
-msgid "French"
+msgid "Czech"
msgstr ""
msgid "Greek"
msgstr ""
+msgid "French"
+msgstr ""
+
msgid "Hungarian"
msgstr ""
diff --git a/locale/zh_CN/LC_MESSAGES/django.po b/locale/zh_CN/LC_MESSAGES/django.po
index 4e46736a..57283ab4 100644
--- a/locale/zh_CN/LC_MESSAGES/django.po
+++ b/locale/zh_CN/LC_MESSAGES/django.po
@@ -4,7 +4,7 @@ msgid ""
msgstr ""
"Project-Id-Version: volunteer-planner.org\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-27 12:33+0200\n"
+"POT-Creation-Date: 2022-03-30 18:28+0200\n"
"PO-Revision-Date: 2015-09-24 12:23+0000\n"
"Last-Translator: Dorian Cantzen \n"
"Language-Team: Chinese (China) (http://www.transifex.com/coders4help/volunteer-planner/language/zh_CN/)\n"
@@ -41,7 +41,7 @@ msgstr ""
msgid "Username must end with a letter, a number or \"_\"."
msgstr ""
-msgid "Username must not contain consecutive . or _ characters."
+msgid "Username must not contain consecutive \".\" or \"_\" characters."
msgstr ""
msgid "Accept privacy policy"
@@ -125,6 +125,17 @@ msgstr ""
msgid "Your user account has been deleted."
msgstr ""
+#, python-brace-format
+msgid "Error {error_code}"
+msgstr ""
+
+msgid "Permission denied"
+msgstr ""
+
+#, python-brace-format
+msgid "You are not allowed to do this and have been redirected to {redirect_path}."
+msgstr ""
+
msgid "additional CSS"
msgstr ""
@@ -1224,18 +1235,24 @@ msgstr ""
msgid "Sign-up"
msgstr ""
+msgid "Ukrainian"
+msgstr ""
+
msgid "English"
msgstr ""
msgid "German"
msgstr ""
-msgid "French"
+msgid "Czech"
msgstr ""
msgid "Greek"
msgstr ""
+msgid "French"
+msgstr ""
+
msgid "Hungarian"
msgstr ""
diff --git a/scheduler/managers.py b/scheduler/managers.py
index c8bdc11c..a63f02f9 100644
--- a/scheduler/managers.py
+++ b/scheduler/managers.py
@@ -2,11 +2,11 @@
from datetime import datetime, time, timedelta
-from django.conf import settings
from django.db import models
from django.utils import timezone
from places import models as place_models
+from .settings import DEFAULT_SHIFT_CONFLICT_GRACE
class ShiftQuerySet(models.QuerySet):
@@ -84,9 +84,7 @@ class ShiftHelperManager(models.Manager):
QuerySet on conflicting shifts.
"""
- def conflicting(
- self, shift, user_account=None, grace=settings.DEFAULT_SHIFT_CONFLICT_GRACE
- ):
+ def conflicting(self, shift, user_account=None, grace=DEFAULT_SHIFT_CONFLICT_GRACE):
"""Filters QuerySet of ShiftHelper objects by selecting those that
intersect with respect to time.
diff --git a/scheduler/settings.py b/scheduler/settings.py
new file mode 100644
index 00000000..56e067e8
--- /dev/null
+++ b/scheduler/settings.py
@@ -0,0 +1,7 @@
+from datetime import timedelta
+
+from django.conf import settings
+
+DEFAULT_SHIFT_CONFLICT_GRACE = getattr(
+ settings, "DEFAULT_SHIFT_CONFLICT_GRACE", timedelta(0)
+)
diff --git a/templates/admin/base_site.html b/templates/admin/base_site.html
new file mode 100644
index 00000000..4f7bd589
--- /dev/null
+++ b/templates/admin/base_site.html
@@ -0,0 +1,40 @@
+{% extends "admin/base_site.html" %}
+
+{% block extrastyle %}
+
+{% endblock %}
diff --git a/tests/registration/test_registration.py b/tests/registration/test_registration.py
index 147c1075..7d5bb00f 100644
--- a/tests/registration/test_registration.py
+++ b/tests/registration/test_registration.py
@@ -141,28 +141,33 @@ def test_username_too_long(self):
def test_username_with_consequtive_underscores(self):
self.try_invalid_username(
- "invalid__name", "Username must not contain consecutive . or _ characters."
+ "invalid__name",
+ 'Username must not contain consecutive "." or "_" characters.',
)
self.try_invalid_username(
- "invalid___name", "Username must not contain consecutive . or _ characters."
+ "invalid___name",
+ 'Username must not contain consecutive "." or "_" characters.',
)
def test_username_with_consequtive_dots(self):
self.try_invalid_username(
- "invalid..name", "Username must not contain consecutive . or _ characters."
+ "invalid..name",
+ 'Username must not contain consecutive "." or "_" characters.',
)
self.try_invalid_username(
- "invalid...name", "Username must not contain consecutive . or _ characters."
+ "invalid...name",
+ 'Username must not contain consecutive "." or "_" characters.',
)
def test_username_with_consequtive_funnystuff(self):
self.try_invalid_username(
"invalid._._name",
- "Username must not contain consecutive . or _ characters.",
+ 'Username must not contain consecutive "." or "_" characters.',
)
self.try_invalid_username(
- "invalid_._name", "Username must not contain consecutive . or _ characters."
+ "invalid_._name",
+ 'Username must not contain consecutive "." or "_" characters.',
)
def test_username_with_whitespaces(self):
diff --git a/tests/scheduler/test_models.py b/tests/scheduler/test_models.py
index fae7d707..92fd05b6 100644
--- a/tests/scheduler/test_models.py
+++ b/tests/scheduler/test_models.py
@@ -1,6 +1,5 @@
from datetime import datetime, timedelta
-from django.conf import settings
from django.test import TestCase
from django.utils import timezone
from django.utils.timezone import get_current_timezone
@@ -34,7 +33,7 @@ def assert_shift_conflict_count(
shift,
hard_conflict_count,
soft_conflict_count,
- grace=settings.DEFAULT_SHIFT_CONFLICT_GRACE,
+ grace=timedelta(hours=1),
):
hard_conflicting_shifts, soft_conflicting_shifts = ShiftHelper.objects.conflicting(
shift=shift, grace=grace
diff --git a/volunteer_planner/settings/base.py b/volunteer_planner/settings/base.py
index 6a1fa7b2..aa9905ea 100644
--- a/volunteer_planner/settings/base.py
+++ b/volunteer_planner/settings/base.py
@@ -10,6 +10,7 @@
https://docs.djangoproject.com/en/dev/ref/settings/
"""
import os
+from datetime import timedelta
from django.utils.translation import gettext_lazy as _
@@ -41,7 +42,6 @@
THIRD_PARTY_APPS = (
"ckeditor",
- # A prettier theme
"accounts.apps.RegistrationConfig",
"django_ajax",
"django_extensions",
@@ -76,6 +76,7 @@
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
+ "common.admin.RedirectOnAdminPermissionDenied403",
]
AUTHENTICATION_BACKENDS = [
@@ -142,13 +143,15 @@
USE_TZ = True
TIME_ZONE = "Europe/Berlin"
-LANGUAGE_CODE = "en"
+LANGUAGE_CODE = "en-us"
LANGUAGES = (
+ ("uk", _("Ukrainian")),
("en", _("English")),
("de", _("German")),
- ("fr", _("French")),
+ ("cs", _("Czech")),
("el", _("Greek")),
+ ("fr", _("French")),
("hu", _("Hungarian")),
("pl", _("Polish")),
("pt", _("Portuguese")),
@@ -162,8 +165,6 @@
WSGI_APPLICATION = "%s.wsgi.application" % SITE_NAME
FIXTURE_DIRS = (os.path.join(PROJECT_ROOT, "fixtures"),)
-CKEDITOR_JQUERY_URL = "//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"
-CKEDITOR_UPLOAD_PATH = "uploads/"
DATE_FORMAT = "l, d.m.Y"
@@ -173,3 +174,5 @@
FACILITY_MANAGER_GROUPNAME = "Facility Manager"
ORGANIZATION_MANAGER_GROUPNAME = "Organization Manager"
+
+DEFAULT_SHIFT_CONFLICT_GRACE = timedelta(hours=1)
diff --git a/volunteer_planner/settings/local.py b/volunteer_planner/settings/local.py
index cc3411f4..b8bd3a9e 100644
--- a/volunteer_planner/settings/local.py
+++ b/volunteer_planner/settings/local.py
@@ -1,5 +1,4 @@
# coding=utf-8
-from datetime import timedelta
from .base import * # noqa: F401
@@ -87,8 +86,6 @@
SECRET_KEY = os.environ.get("SECRET_KEY", "local")
LANGUAGE_CODE = os.environ.get("LANGUAGE_CODE", "de")
-DEFAULT_SHIFT_CONFLICT_GRACE = timedelta(hours=1)
-
# for testing on mobile devices in local networks it's necessary to overwrite
# with a local ip
ALLOWED_HOSTS = os.environ.get("ALLOWED_HOSTS", "localhost,127.0.0.1,[::1]").split(
diff --git a/volunteer_planner/settings/production.py b/volunteer_planner/settings/production.py
index fda060db..a85130af 100644
--- a/volunteer_planner/settings/production.py
+++ b/volunteer_planner/settings/production.py
@@ -1,7 +1,5 @@
# coding=utf-8
-from datetime import timedelta
-
from .base import * # noqa: F401
DEBUG = os.environ.get("BETA", False)
@@ -51,7 +49,4 @@
}
}
-DEFAULT_SHIFT_CONFLICT_GRACE = timedelta(hours=1)
-
-
INTERNAL_IPS = ["127.0.0.1", "172.20.0.1"]
diff --git a/volunteer_planner/settings/tests.py b/volunteer_planner/settings/tests.py
index fbef31c1..20c617ba 100644
--- a/volunteer_planner/settings/tests.py
+++ b/volunteer_planner/settings/tests.py
@@ -1,11 +1,8 @@
-from datetime import timedelta
-
from .local import * # noqa: F401
DEBUG = False
# Needed for letting Selenium access our server.
-ALLOWED_HOSTS = ["localhost"]
+ALLOWED_HOSTS += ["localhost"]
SECRET_KEY = "Kitten like fish"
-DEFAULT_SHIFT_CONFLICT_GRACE = timedelta(hours=1)
diff --git a/volunteer_planner/urls.py b/volunteer_planner/urls.py
index 40154bf1..c781287c 100644
--- a/volunteer_planner/urls.py
+++ b/volunteer_planner/urls.py
@@ -15,7 +15,6 @@
re_path(r"^orgs/", include("organizations.urls")),
re_path(r"^places/", include("scheduler.place_urls")),
re_path(r"^admin/", admin.site.urls),
- re_path(r"^ckeditor/", include("ckeditor_uploader.urls")),
re_path(r"^i18n/", include("django.conf.urls.i18n")),
re_path(
r"^favicon.ico",