From 6b844ef8e2b32395a4836189337d9fc64a721c69 Mon Sep 17 00:00:00 2001 From: Christian Schliz Date: Sun, 15 Mar 2026 17:57:14 +0100 Subject: [PATCH 01/13] refactor: extract OIDC user population into shared utility Move _populate_user from AuthorizeSSOUser view into accounts/oidc.py as populate_user_from_oidc so it can be reused by the offline token refresh logic without a model-to-view circular dependency. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/shiftings/accounts/oidc.py | 38 ++++++++++++++++++++++++++ src/shiftings/accounts/views/auth.py | 41 ++++++++-------------------- 2 files changed, 49 insertions(+), 30 deletions(-) create mode 100644 src/shiftings/accounts/oidc.py diff --git a/src/shiftings/accounts/oidc.py b/src/shiftings/accounts/oidc.py new file mode 100644 index 0000000..7ab770e --- /dev/null +++ b/src/shiftings/accounts/oidc.py @@ -0,0 +1,38 @@ +from __future__ import annotations + +import re +from typing import Any + +from django.conf import settings +from django.contrib.auth.models import AbstractUser, Group +from django.contrib.auth.views import UserModel + +from shiftings.accounts.models import User + + +def populate_user_from_oidc(user_data: dict[str, Any]) -> AbstractUser: + """Create or update a Django user from OIDC userinfo claims. + + Syncs username, email, groups, and admin status from the OIDC provider. + """ + username = user_data.get(settings.OAUTH_USERNAME_CLAIM, '') + groups: list[str] = user_data.get(settings.OAUTH_GROUP_CLAIM, []) + for group in groups: + if re.match(settings.OAUTH_GROUP_IGNORE_REGEX, group) is None: + Group.objects.get_or_create(name=group) + try: + user: AbstractUser = User.objects.get_by_natural_key(username) + except UserModel.DoesNotExist: + user = User.objects.create(username=username) + user.set_unusable_password() + # ignore secondary names + user.first_name = user_data.get(settings.OAUTH_FIRST_NAME_CLAIM, '').split(' ')[0] + user.last_name = user_data.get(settings.OAUTH_LAST_NAME_CLAIM, '') + user.email = user_data.get(settings.OAUTH_EMAIL_CLAIM, '') + user.groups.set(Group.objects.filter(name__in=groups)) + + user.is_superuser = settings.OAUTH_ADMIN_GROUP in groups + user.is_staff = settings.OAUTH_ADMIN_GROUP in groups + user.backend = 'django.contrib.auth.backends.ModelBackend' + user.save() + return user diff --git a/src/shiftings/accounts/views/auth.py b/src/shiftings/accounts/views/auth.py index 10d9ba2..265696d 100644 --- a/src/shiftings/accounts/views/auth.py +++ b/src/shiftings/accounts/views/auth.py @@ -1,6 +1,5 @@ from __future__ import annotations -import re from json import JSONDecodeError from typing import Any, Optional @@ -9,8 +8,8 @@ from django.conf import settings from django.contrib import messages from django.contrib.auth import login as login_user, logout, REDIRECT_FIELD_NAME -from django.contrib.auth.models import AbstractUser, Group -from django.contrib.auth.views import LoginView, LogoutView, UserModel +from django.contrib.auth.models import AbstractUser +from django.contrib.auth.views import LoginView, LogoutView from django.http import HttpRequest, HttpResponse, HttpResponseRedirect from django.urls import reverse from django.utils.decorators import method_decorator @@ -18,8 +17,6 @@ from django.views.decorators.cache import never_cache from django.views.generic import RedirectView -from shiftings.accounts.models import User - class UserLoginView(LoginView): redirect_authenticated_user = True @@ -95,35 +92,19 @@ def authenticate(self, request: HttpRequest) -> Optional[AbstractUser]: try: token = oauth.shiftings.authorize_access_token(request) if 'userinfo' in token: - return self._populate_user(token['userinfo']) + from shiftings.accounts.oidc import populate_user_from_oidc + user = populate_user_from_oidc(token['userinfo']) + if 'refresh_token' in token: + from shiftings.accounts.models import OIDCOfflineToken + OIDCOfflineToken.objects.update_or_create( + user=user, + defaults={'refresh_token': token['refresh_token']}, + ) + return user except JSONDecodeError: pass return None - @staticmethod - def _populate_user(user_data: dict[str, Any]) -> AbstractUser: - username = user_data.get(settings.OAUTH_USERNAME_CLAIM, '') - groups: list[str] = user_data.get(settings.OAUTH_GROUP_CLAIM, []) - for group in groups: - if re.match(settings.OAUTH_GROUP_IGNORE_REGEX, group) is None: - Group.objects.get_or_create(name=group) - try: - user: AbstractUser = User.objects.get_by_natural_key(username) - except UserModel.DoesNotExist: - user = User.objects.create(username=username) - user.set_unusable_password() - # ignore secondary names - user.first_name = user_data.get(settings.OAUTH_FIRST_NAME_CLAIM, '').split(' ')[0] - user.last_name = user_data.get(settings.OAUTH_LAST_NAME_CLAIM, '') - user.email = user_data.get(settings.OAUTH_EMAIL_CLAIM, '') - user.groups.set(Group.objects.filter(name__in=groups)) - - user.is_superuser = settings.OAUTH_ADMIN_GROUP in groups - user.is_staff = settings.OAUTH_ADMIN_GROUP in groups - user.backend = 'django.contrib.auth.backends.ModelBackend' - user.save() - return user - class UserLogoutView(LogoutView): template_name = 'accounts/logout.html' From 271e3c340187032a33173ccfdf046be7440d7d80 Mon Sep 17 00:00:00 2001 From: Christian Schliz Date: Sun, 15 Mar 2026 17:57:20 +0100 Subject: [PATCH 02/13] feat: add CalendarToken and OIDCOfflineToken models CalendarToken stores a unique per-user token for session-less iCal feed access. OIDCOfflineToken stores the OIDC refresh token and implements refresh_user_info() to sync groups from the identity provider before serving calendar data. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../migrations/0002_oidcofflinetoken.py | 27 ++++ src/shiftings/accounts/models/__init__.py | 1 + .../accounts/models/calendar_token.py | 141 ++++++++++++++++++ 3 files changed, 169 insertions(+) create mode 100644 src/shiftings/accounts/migrations/0002_oidcofflinetoken.py create mode 100644 src/shiftings/accounts/models/calendar_token.py diff --git a/src/shiftings/accounts/migrations/0002_oidcofflinetoken.py b/src/shiftings/accounts/migrations/0002_oidcofflinetoken.py new file mode 100644 index 0000000..c3e40e7 --- /dev/null +++ b/src/shiftings/accounts/migrations/0002_oidcofflinetoken.py @@ -0,0 +1,27 @@ +# Generated by Django 6.0.2 on 2026-03-15 16:45 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('accounts', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='OIDCOfflineToken', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('refresh_token', models.TextField(verbose_name='Refresh Token')), + ('updated', models.DateTimeField(auto_now=True, verbose_name='Updated')), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='oidc_offline_token', to=settings.AUTH_USER_MODEL, verbose_name='User')), + ], + options={ + 'default_permissions': (), + }, + ), + ] diff --git a/src/shiftings/accounts/models/__init__.py b/src/shiftings/accounts/models/__init__.py index 3ececc2..c873588 100644 --- a/src/shiftings/accounts/models/__init__.py +++ b/src/shiftings/accounts/models/__init__.py @@ -1 +1,2 @@ +from .calendar_token import CalendarToken, OIDCOfflineToken from .user import BaseUser, User diff --git a/src/shiftings/accounts/models/calendar_token.py b/src/shiftings/accounts/models/calendar_token.py new file mode 100644 index 0000000..d684065 --- /dev/null +++ b/src/shiftings/accounts/models/calendar_token.py @@ -0,0 +1,141 @@ +from __future__ import annotations + +import logging +import secrets +from functools import cache +from typing import Any + +import requests +from django.conf import settings +from django.db import models +from django.utils.translation import gettext_lazy as _ + +logger = logging.getLogger(__name__) + + +class CalendarToken(models.Model): + user = models.OneToOneField( + settings.AUTH_USER_MODEL, + on_delete=models.CASCADE, + related_name='calendar_token', + verbose_name=_('User'), + ) + token = models.CharField( + max_length=64, + unique=True, + db_index=True, + verbose_name=_('Token'), + ) + created = models.DateTimeField(auto_now_add=True, verbose_name=_('Created')) + + class Meta: + default_permissions = () + + def __str__(self) -> str: + return f'{self.user} ({self.token[:8]}...)' + + def save(self, *args: Any, **kwargs: Any) -> None: + if not self.token: + self.token = secrets.token_hex(32) + super().save(*args, **kwargs) + + def regenerate(self) -> CalendarToken: + self.token = secrets.token_hex(32) + self.save(update_fields=['token']) + return self + + +@cache +def _get_oidc_endpoints() -> dict[str, str]: + """Fetch and cache the OpenID Connect discovery document.""" + resp = requests.get(settings.OPENID_CONF_URL, timeout=10) + resp.raise_for_status() + return resp.json() + + +class OIDCOfflineToken(models.Model): + user = models.OneToOneField( + settings.AUTH_USER_MODEL, + on_delete=models.CASCADE, + related_name='oidc_offline_token', + verbose_name=_('User'), + ) + refresh_token = models.TextField(verbose_name=_('Refresh Token')) + updated = models.DateTimeField(auto_now=True, verbose_name=_('Updated')) + + class Meta: + default_permissions = () + + def __str__(self) -> str: + return f'OIDCOfflineToken for {self.user}' + + def refresh_user_info(self) -> bool: + """Use the stored offline token to refresh the user's OIDC data. + + Returns True on success, False if the token is expired or invalid. + """ + try: + endpoints = _get_oidc_endpoints() + token_endpoint = endpoints['token_endpoint'] + userinfo_endpoint = endpoints['userinfo_endpoint'] + except Exception: + logger.exception('Failed to fetch OIDC discovery document') + return False + + client_config = settings.AUTHLIB_OAUTH_CLIENTS['shiftings'] + + # Exchange refresh token for new access token + try: + token_resp = requests.post( + token_endpoint, + data={ + 'grant_type': 'refresh_token', + 'refresh_token': self.refresh_token, + 'client_id': client_config['client_id'], + 'client_secret': client_config['client_secret'], + }, + timeout=10, + ) + except Exception: + logger.exception('Failed to call OIDC token endpoint') + return False + + if token_resp.status_code != 200: + logger.warning( + 'OIDC token refresh failed (status %d): %s', + token_resp.status_code, + token_resp.text, + ) + return False + + token_data = token_resp.json() + + # Update stored refresh token + self.refresh_token = token_data['refresh_token'] + self.save(update_fields=['refresh_token', 'updated']) + + # Fetch current userinfo + access_token = token_data['access_token'] + try: + userinfo_resp = requests.get( + userinfo_endpoint, + headers={'Authorization': f'Bearer {access_token}'}, + timeout=10, + ) + except Exception: + logger.exception('Failed to call OIDC userinfo endpoint') + return False + + if userinfo_resp.status_code != 200: + logger.warning( + 'OIDC userinfo request failed (status %d): %s', + userinfo_resp.status_code, + userinfo_resp.text, + ) + return False + + # Reuse the existing user population logic + from shiftings.accounts.oidc import populate_user_from_oidc + + populate_user_from_oidc(userinfo_resp.json()) + return True From 43016b19290bfbcb726ffd00bbe9d01f860dfe70 Mon Sep 17 00:00:00 2001 From: Christian Schliz Date: Sun, 15 Mar 2026 17:57:27 +0100 Subject: [PATCH 03/13] feat: add token-authenticated iCal feed endpoints Introduce TokenAuthMixin that authenticates feed requests via a CalendarToken URL parameter and refreshes OIDC user data with a 10-minute cooldown. Register token feed URLs under /calendar/token//{user,participation,organization,event}/. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/shiftings/cal/feed/token_feeds.py | 80 +++++++++++++++++++++++++++ src/shiftings/cal/urls/__init__.py | 8 +++ 2 files changed, 88 insertions(+) create mode 100644 src/shiftings/cal/feed/token_feeds.py diff --git a/src/shiftings/cal/feed/token_feeds.py b/src/shiftings/cal/feed/token_feeds.py new file mode 100644 index 0000000..57319f6 --- /dev/null +++ b/src/shiftings/cal/feed/token_feeds.py @@ -0,0 +1,80 @@ +from __future__ import annotations + +import logging +from datetime import timedelta +from typing import Any + +from django.conf import settings +from django.http import HttpRequest, HttpResponse +from django.utils import timezone + +from shiftings.accounts.models import CalendarToken, OIDCOfflineToken +from shiftings.cal.feed.event import EventFeed +from shiftings.cal.feed.organization import OrganizationFeed +from shiftings.cal.feed.user import OwnShiftsFeed, UserFeed +from shiftings.utils.exceptions import Http403 + +logger = logging.getLogger(__name__) + +# Skip OIDC refresh if user data was synced within this period +OIDC_REFRESH_COOLDOWN = timedelta(minutes=10) + + +class TokenAuthMixin: + """Authenticate iCal feed requests via a CalendarToken URL parameter. + + Before serving the feed, refreshes the user's OIDC data (groups, admin status) + using the stored offline token when OAUTH is enabled. Skips the refresh if + user data was synced within the last OIDC_REFRESH_COOLDOWN period. + """ + + def __call__(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: + token_str = kwargs.pop('token', None) + if not token_str: + raise Http403() + + try: + calendar_token = CalendarToken.objects.select_related('user').get(token=token_str) + except CalendarToken.DoesNotExist: + raise Http403() + + user = calendar_token.user + + if settings.OAUTH_ENABLED: + try: + offline_token = OIDCOfflineToken.objects.get(user=user) + needs_refresh = offline_token.updated < timezone.now() - OIDC_REFRESH_COOLDOWN + if needs_refresh: + success = offline_token.refresh_user_info() + if not success: + return HttpResponse( + 'OIDC token expired. Please log in via browser to renew.', + status=401, + content_type='text/plain', + ) + user.refresh_from_db() + except OIDCOfflineToken.DoesNotExist: + return HttpResponse( + 'No OIDC token stored. Please log in via browser.', + status=401, + content_type='text/plain', + ) + + request.user = user + return super().__call__(request, *args, **kwargs) + + +class TokenUserFeed(TokenAuthMixin, UserFeed): + pass + + +class TokenOwnShiftsFeed(TokenAuthMixin, OwnShiftsFeed): + pass + + +class TokenOrganizationFeed(TokenAuthMixin, OrganizationFeed): + pass + + +class TokenEventFeed(TokenAuthMixin, EventFeed): + pass diff --git a/src/shiftings/cal/urls/__init__.py b/src/shiftings/cal/urls/__init__.py index 69945a4..16b7b9f 100644 --- a/src/shiftings/cal/urls/__init__.py +++ b/src/shiftings/cal/urls/__init__.py @@ -1,5 +1,8 @@ from django.urls import path +from shiftings.cal.feed.token_feeds import ( + TokenEventFeed, TokenOrganizationFeed, TokenOwnShiftsFeed, TokenUserFeed, +) from shiftings.cal.views.day_calendar import DetailDayView, ShiftTypesDayView from shiftings.cal.views.month_calendar import MonthCalenderView from shiftings.cal.views.list import DetailListView, ShiftTypesListView @@ -15,4 +18,9 @@ path('overview/month///', MonthCalenderView.as_view(), name='overview_month'), path('overview/list/detail/', DetailListView.as_view(), name='overview_list'), path('overview/list/shift_types/', ShiftTypesListView.as_view(), name='overview_list_shift_types'), + # Token-based iCal feeds (no session required) + path('token//user/', TokenUserFeed(), name='token_user_calendar'), + path('token//participation/', TokenOwnShiftsFeed(), name='token_participation_calendar'), + path('token//organization//', TokenOrganizationFeed(), name='token_organization_calendar'), + path('token//event//', TokenEventFeed(), name='token_event_calendar'), ] From 12ca93e105ceb933b936e74d367be37514127de0 Mon Sep 17 00:00:00 2001 From: Christian Schliz Date: Sun, 15 Mar 2026 17:57:32 +0100 Subject: [PATCH 04/13] feat: add calendar subscription UI to user profile Add token management views (create/regenerate/delete) and a Calendar Subscriptions card on the profile page showing copyable iCal URLs with regenerate and revoke controls. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../templates/accounts/user_detail.html | 62 +++++++++++++++++++ src/shiftings/accounts/urls/user.py | 3 + .../accounts/views/calendar_token.py | 32 ++++++++++ src/shiftings/accounts/views/user.py | 16 ++++- 4 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 src/shiftings/accounts/views/calendar_token.py diff --git a/src/shiftings/accounts/templates/accounts/user_detail.html b/src/shiftings/accounts/templates/accounts/user_detail.html index 20b4fef..64916b2 100644 --- a/src/shiftings/accounts/templates/accounts/user_detail.html +++ b/src/shiftings/accounts/templates/accounts/user_detail.html @@ -114,6 +114,68 @@

{% trans "Organizations" %}

+
+
+

{% trans "Calendar Subscriptions" %}

+
+
+ {% if calendar_token %} +

+ {% trans "Use these URLs to subscribe to your shifts in a calendar app. Treat them like a password." %} +

+
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+ {% csrf_token %} + +
+
+ {% csrf_token %} + +
+
+ {% else %} +

+ {% trans "Generate a calendar URL to subscribe to your shifts from a mobile calendar app." %} +

+
+ {% csrf_token %} + +
+ {% endif %} +
+
{% endblock %} diff --git a/src/shiftings/accounts/urls/user.py b/src/shiftings/accounts/urls/user.py index d43e869..3bdf88b 100644 --- a/src/shiftings/accounts/urls/user.py +++ b/src/shiftings/accounts/urls/user.py @@ -5,6 +5,7 @@ from django.views.generic import TemplateView from shiftings.accounts.views.auth import UserLoginView, UserLogoutView, UserReLoginView +from shiftings.accounts.views.calendar_token import CalendarTokenCreateView, CalendarTokenDeleteView from shiftings.accounts.views.password import PasswordResetConfirmView, PasswordResetView from shiftings.accounts.views.user import (ConfirmEMailView, UserDeleteSelfView, UserEditView, UserProfileView, UserRegisterView) @@ -30,6 +31,8 @@ name='password_reset_success'), path('calendar/', UserFeed(), name='user_calendar'), path('participation_calendar/', OwnShiftsFeed(), name='user_participation_calendar'), + path('calendar_token/create/', CalendarTokenCreateView.as_view(), name='calendar_token_create'), + path('calendar_token/delete/', CalendarTokenDeleteView.as_view(), name='calendar_token_delete'), ] if settings.FEATURES.get('registration', False): urlpatterns.append(path('register/', UserRegisterView.as_view(), name='register')) diff --git a/src/shiftings/accounts/views/calendar_token.py b/src/shiftings/accounts/views/calendar_token.py new file mode 100644 index 0000000..533ab25 --- /dev/null +++ b/src/shiftings/accounts/views/calendar_token.py @@ -0,0 +1,32 @@ +from __future__ import annotations + +from django.contrib import messages +from django.contrib.auth.mixins import LoginRequiredMixin +from django.http import HttpRequest, HttpResponse, HttpResponseRedirect +from django.urls import reverse +from django.utils.translation import gettext_lazy as _ +from django.views import View + +from shiftings.accounts.models import CalendarToken + + +class CalendarTokenCreateView(LoginRequiredMixin, View): + """Create or regenerate a calendar subscription token for the current user.""" + + def post(self, request: HttpRequest) -> HttpResponse: + token, created = CalendarToken.objects.get_or_create(user=request.user) + if not created: + token.regenerate() + messages.success(request, _('Calendar subscription URL regenerated. Old URLs will stop working.')) + else: + messages.success(request, _('Calendar subscription URL generated.')) + return HttpResponseRedirect(reverse('user_profile')) + + +class CalendarTokenDeleteView(LoginRequiredMixin, View): + """Revoke the calendar subscription token for the current user.""" + + def post(self, request: HttpRequest) -> HttpResponse: + CalendarToken.objects.filter(user=request.user).delete() + messages.success(request, _('Calendar subscription URL revoked.')) + return HttpResponseRedirect(reverse('user_profile')) diff --git a/src/shiftings/accounts/views/user.py b/src/shiftings/accounts/views/user.py index a60f501..eba1512 100644 --- a/src/shiftings/accounts/views/user.py +++ b/src/shiftings/accounts/views/user.py @@ -20,7 +20,7 @@ from django.views.generic import CreateView, DetailView, TemplateView, UpdateView from shiftings.accounts.forms.user_form import UserCreateForm, UserUpdateForm -from shiftings.accounts.models import User +from shiftings.accounts.models import CalendarToken, User from shiftings.accounts.token import email_confirm_token_generator from shiftings.shifts.models import Shift from shiftings.shifts.utils.filter_mixin import ShiftFilterMixin @@ -48,6 +48,20 @@ def get_context_data(self, **kwargs: Any) -> dict[str, Any]: Q(organization__in=self.object.organizations) | Q(participants__user=self.object))).distinct() context['shifts'] = get_pagination_context(self.request, shifts.filter(self.get_filters()), 5, 'shifts') + + # Calendar subscription token + try: + cal_token = self.object.calendar_token + context['calendar_token'] = cal_token + context['calendar_user_url'] = self.request.build_absolute_uri( + reverse('token_user_calendar', kwargs={'token': cal_token.token}) + ) + context['calendar_participation_url'] = self.request.build_absolute_uri( + reverse('token_participation_calendar', kwargs={'token': cal_token.token}) + ) + except CalendarToken.DoesNotExist: + context['calendar_token'] = None + return context From 808dd054fee6aed48903c6b57e1629f8297ec55e Mon Sep 17 00:00:00 2001 From: Christian Schliz Date: Sun, 15 Mar 2026 18:29:47 +0100 Subject: [PATCH 05/13] feat: move calendar card to main column and add webcal buttons Move the Calendar Subscriptions card from the left sidebar into the right column above Upcoming Shifts for better visibility. Add "Add to Calendar" buttons using the webcal:// protocol so users can subscribe with a single click from their device. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../templates/accounts/user_detail.html | 124 ++++++++++-------- src/shiftings/accounts/views/user.py | 8 +- 2 files changed, 73 insertions(+), 59 deletions(-) diff --git a/src/shiftings/accounts/templates/accounts/user_detail.html b/src/shiftings/accounts/templates/accounts/user_detail.html index 64916b2..ff86a26 100644 --- a/src/shiftings/accounts/templates/accounts/user_detail.html +++ b/src/shiftings/accounts/templates/accounts/user_detail.html @@ -114,72 +114,82 @@

{% trans "Organizations" %}

-
-
-

{% trans "Calendar Subscriptions" %}

-
-
- {% if calendar_token %} -

- {% trans "Use these URLs to subscribe to your shifts in a calendar app. Treat them like a password." %} -

-
- -
- - -
+
+{% endblock %} + +{% block right %} +
+
+

{% trans "Calendar Subscriptions" %}

+
+
+ {% if calendar_token %} +

+ {% trans "Use these URLs to subscribe to your shifts in a calendar app. Treat them like a password." %} +

+
+ + -
- -
- - -
+
+ +
-
-
- {% csrf_token %} - -
-
- {% csrf_token %} - -
+
+
+ + - {% else %} -

- {% trans "Generate a calendar URL to subscribe to your shifts from a mobile calendar app." %} -

+
+ + +
+
+
{% csrf_token %} -
- {% endif %} -
+
+ {% csrf_token %} + +
+
+ {% else %} +

+ {% trans "Generate a calendar URL to subscribe to your shifts from a mobile calendar app." %} +

+
+ {% csrf_token %} + +
+ {% endif %}
-{% endblock %} - -{% block right %}
{% url "user_profile_past" as past_url %} diff --git a/src/shiftings/accounts/views/user.py b/src/shiftings/accounts/views/user.py index eba1512..209bdac 100644 --- a/src/shiftings/accounts/views/user.py +++ b/src/shiftings/accounts/views/user.py @@ -53,12 +53,16 @@ def get_context_data(self, **kwargs: Any) -> dict[str, Any]: try: cal_token = self.object.calendar_token context['calendar_token'] = cal_token - context['calendar_user_url'] = self.request.build_absolute_uri( + user_url = self.request.build_absolute_uri( reverse('token_user_calendar', kwargs={'token': cal_token.token}) ) - context['calendar_participation_url'] = self.request.build_absolute_uri( + participation_url = self.request.build_absolute_uri( reverse('token_participation_calendar', kwargs={'token': cal_token.token}) ) + context['calendar_user_url'] = user_url + context['calendar_participation_url'] = participation_url + context['webcal_user_url'] = user_url.replace('http://', 'webcal://', 1).replace('https://', 'webcal://', 1) + context['webcal_participation_url'] = participation_url.replace('http://', 'webcal://', 1).replace('https://', 'webcal://', 1) except CalendarToken.DoesNotExist: context['calendar_token'] = None From 20ac9e6fbde999fc1ebab68c2452e605ce9bca38 Mon Sep 17 00:00:00 2001 From: Christian Schliz Date: Sun, 15 Mar 2026 18:32:33 +0100 Subject: [PATCH 06/13] style: place calendar button and URL field in a single row Combine the "Add to Calendar" button and the copyable URL input into one flex row per feed for a more compact layout. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../templates/accounts/user_detail.html | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/shiftings/accounts/templates/accounts/user_detail.html b/src/shiftings/accounts/templates/accounts/user_detail.html index ff86a26..4b0ff7a 100644 --- a/src/shiftings/accounts/templates/accounts/user_detail.html +++ b/src/shiftings/accounts/templates/accounts/user_detail.html @@ -129,36 +129,36 @@

{% trans "Calendar Subscriptions" %}

-
-
From 2aadf109d8c8de4c062435da5dfac8daa1854c58 Mon Sep 17 00:00:00 2001 From: Christian Schliz Date: Sun, 15 Mar 2026 18:33:47 +0100 Subject: [PATCH 07/13] style: match calendar card format to user info card Use the same card structure (p-3, center-items header row) as the user info card. Move regenerate and revoke buttons into the title row as icon-only buttons, and show the generate button there when no token exists. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../templates/accounts/user_detail.html | 127 +++++++++--------- 1 file changed, 65 insertions(+), 62 deletions(-) diff --git a/src/shiftings/accounts/templates/accounts/user_detail.html b/src/shiftings/accounts/templates/accounts/user_detail.html index 4b0ff7a..328543e 100644 --- a/src/shiftings/accounts/templates/accounts/user_detail.html +++ b/src/shiftings/accounts/templates/accounts/user_detail.html @@ -118,77 +118,80 @@

{% trans "Organizations" %}

{% endblock %} {% block right %} -
-
+
+

{% trans "Calendar Subscriptions" %}

-
-
- {% if calendar_token %} -

- {% trans "Use these URLs to subscribe to your shifts in a calendar app. Treat them like a password." %} -

-
- - -
-
- - -
-
-
+
+ {% if calendar_token %} + {% csrf_token %} -
{% csrf_token %} -
-
- {% else %} -

- {% trans "Generate a calendar URL to subscribe to your shifts from a mobile calendar app." %} -

-
- {% csrf_token %} - -
- {% endif %} + {% else %} +
+ {% csrf_token %} + +
+ {% endif %} +
+ {% if calendar_token %} +

+ {% trans "Use these URLs to subscribe to your shifts in a calendar app. Treat them like a password." %} +

+
+ + +
+
+ + +
+ {% else %} +

+ {% trans "Generate a calendar URL to subscribe to your shifts from a mobile calendar app." %} +

+ {% endif %}
From 86d74b6aab0761c483df5315255a49ba32e9e49b Mon Sep 17 00:00:00 2001 From: Christian Schliz Date: Sun, 15 Mar 2026 18:36:46 +0100 Subject: [PATCH 08/13] feat: add German translations and rename My Participations to My Shifts Add German translations for all calendar subscription strings. Rename "My Participations" to "My Shifts" for clarity. Increase spacing between subtitle text and feed sections. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/locale/de/LC_MESSAGES/django.po | 2706 +++-------------- src/locale/en/LC_MESSAGES/django.po | 2370 +-------------- .../templates/accounts/user_detail.html | 6 +- 3 files changed, 564 insertions(+), 4518 deletions(-) diff --git a/src/locale/de/LC_MESSAGES/django.po b/src/locale/de/LC_MESSAGES/django.po index 03ac8c4..c522e68 100644 --- a/src/locale/de/LC_MESSAGES/django.po +++ b/src/locale/de/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-25 15:12+0000\n" +"POT-Creation-Date: 2026-03-15 17:34+0000\n" "PO-Revision-Date: 2023-04-17 23:37+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -18,1689 +18,74 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.1.1\n" -#: venv/lib/python3.11/site-packages/click/_termui_impl.py:518 -#, python-brace-format -msgid "{editor}: Editing failed" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/_termui_impl.py:522 -#, python-brace-format -msgid "{editor}: Editing failed: {e}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:1120 -#, fuzzy -#| msgid "Abort" -msgid "Aborted!" -msgstr "Abbrechen" - -#: venv/lib/python3.11/site-packages/click/core.py:1309 -#: venv/lib/python3.11/site-packages/click/decorators.py:559 -msgid "Show this message and exit." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:1340 -#: venv/lib/python3.11/site-packages/click/core.py:1370 -#, python-brace-format -msgid "(Deprecated) {text}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:1387 -#, fuzzy -#| msgid "Actions" -msgid "Options" -msgstr "Aktionen" - -#: venv/lib/python3.11/site-packages/click/core.py:1413 -#, python-brace-format -msgid "Got unexpected extra argument ({args})" -msgid_plural "Got unexpected extra arguments ({args})" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/click/core.py:1429 -msgid "DeprecationWarning: The command {name!r} is deprecated." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:1636 -msgid "Commands" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:1668 -msgid "Missing command." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:1746 -msgid "No such command {name!r}." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:2310 -msgid "Value must be an iterable." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:2331 -#, python-brace-format -msgid "Takes {nargs} values but 1 was given." -msgid_plural "Takes {nargs} values but {len} were given." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/click/core.py:2778 -#, python-brace-format -msgid "env var: {var}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:2808 -msgid "(dynamic)" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:2821 -#, python-brace-format -msgid "default: {default}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:2834 -#, fuzzy -#| msgid "Required" -msgid "required" -msgstr "Benötigt" - -#: venv/lib/python3.11/site-packages/click/decorators.py:465 -#, python-format -msgid "%(prog)s, version %(version)s" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/decorators.py:528 -msgid "Show the version and exit." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:44 -#: venv/lib/python3.11/site-packages/click/exceptions.py:80 -#, python-brace-format -msgid "Error: {message}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:72 -#, python-brace-format -msgid "Try '{command} {option}' for help." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:121 -#, python-brace-format -msgid "Invalid value: {message}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:123 -#, python-brace-format -msgid "Invalid value for {param_hint}: {message}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:179 -msgid "Missing argument" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:181 -msgid "Missing option" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:183 -msgid "Missing parameter" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:185 -#, python-brace-format -msgid "Missing {param_type}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:192 -#, python-brace-format -msgid "Missing parameter: {param_name}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:212 -#, python-brace-format -msgid "No such option: {name}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:224 -#, python-brace-format -msgid "Did you mean {possibility}?" -msgid_plural "(Possible options: {possibilities})" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:262 -#, fuzzy -#| msgid "Unknown User" -msgid "unknown error" -msgstr "Unbekannter Benutzer" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:269 -msgid "Could not open file {filename!r}: {message}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/parser.py:231 -msgid "Argument {name!r} takes {nargs} values." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/parser.py:413 -msgid "Option {name!r} does not take a value." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/parser.py:474 -msgid "Option {name!r} requires an argument." -msgid_plural "Option {name!r} requires {nargs} arguments." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/click/shell_completion.py:319 -msgid "Shell completion is not supported for Bash versions older than 4.4." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/shell_completion.py:326 -msgid "Couldn't detect Bash version, shell completion is not supported." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/termui.py:158 -msgid "Repeat for confirmation" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/termui.py:174 -msgid "Error: The value you entered was invalid." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/termui.py:176 -#, python-brace-format -msgid "Error: {e.message}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/termui.py:187 -msgid "Error: The two entered values do not match." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/termui.py:243 -msgid "Error: invalid input" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/termui.py:773 -msgid "Press any key to continue..." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:266 -#, python-brace-format -msgid "" -"Choose from:\n" -"\t{choices}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:298 -msgid "{value!r} is not {choice}." -msgid_plural "{value!r} is not one of {choices}." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/click/types.py:392 -msgid "{value!r} does not match the format {format}." -msgid_plural "{value!r} does not match the formats {formats}." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/click/types.py:414 -msgid "{value!r} is not a valid {number_type}." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:470 -#, python-brace-format -msgid "{value} is not in the range {range}." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:611 -msgid "{value!r} is not a valid boolean." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:635 -msgid "{value!r} is not a valid UUID." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:822 -#, fuzzy -#| msgid "Profile" -msgid "file" -msgstr "Profil" - -#: venv/lib/python3.11/site-packages/click/types.py:824 -msgid "directory" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:826 -msgid "path" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:877 -msgid "{name} {filename!r} does not exist." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:886 -msgid "{name} {filename!r} is a file." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:894 -#, python-brace-format -msgid "{name} '{filename}' is a directory." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:903 -msgid "{name} {filename!r} is not readable." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:912 -msgid "{name} {filename!r} is not writable." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:921 -msgid "{name} {filename!r} is not executable." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:988 -#, python-brace-format -msgid "{len_type} values are required, but {len_value} was given." -msgid_plural "{len_type} values are required, but {len_value} were given." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/colorfield/validators.py:9 -msgid "Enter a valid hex color, eg. #000000" -msgstr "" - -#: venv/lib/python3.11/site-packages/colorfield/validators.py:17 -msgid "Enter a valid hexa color, eg. #00000000" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/contrib/messages/apps.py:7 -msgid "Messages" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/contrib/sitemaps/apps.py:8 -msgid "Site Maps" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/contrib/staticfiles/apps.py:9 -msgid "Static Files" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/contrib/syndication/apps.py:7 -#, fuzzy -#| msgid "Organization" -msgid "Syndication" -msgstr "Organisation" - -#. Translators: String used to replace omitted page numbers in elided page -#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. -#: venv/lib/python3.11/site-packages/django/core/paginator.py:30 -msgid "…" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/paginator.py:50 -msgid "That page number is not an integer" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/paginator.py:52 -msgid "That page number is less than 1" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/paginator.py:57 -msgid "That page contains no results" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:23 -msgid "Enter a valid value." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:105 -#: venv/lib/python3.11/site-packages/django/forms/fields.py:743 -msgid "Enter a valid URL." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:166 -msgid "Enter a valid integer." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:177 -msgid "Enter a valid email address." -msgstr "" - -#. Translators: "letters" means latin letters: a-z and A-Z. -#: venv/lib/python3.11/site-packages/django/core/validators.py:285 -msgid "" -"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:293 -msgid "" -"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " -"hyphens." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:305 -#: venv/lib/python3.11/site-packages/django/core/validators.py:313 -#: venv/lib/python3.11/site-packages/django/core/validators.py:342 -msgid "Enter a valid IPv4 address." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:322 -#: venv/lib/python3.11/site-packages/django/core/validators.py:343 -msgid "Enter a valid IPv6 address." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:334 -#: venv/lib/python3.11/site-packages/django/core/validators.py:341 -msgid "Enter a valid IPv4 or IPv6 address." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:377 -msgid "Enter only digits separated by commas." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:383 -#, python-format -msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:418 -#, python-format -msgid "Ensure this value is less than or equal to %(limit_value)s." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:427 -#, python-format -msgid "Ensure this value is greater than or equal to %(limit_value)s." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:437 -#, python-format -msgid "" -"Ensure this value has at least %(limit_value)d character (it has " -"%(show_value)d)." -msgid_plural "" -"Ensure this value has at least %(limit_value)d characters (it has " -"%(show_value)d)." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:455 -#, python-format -msgid "" -"Ensure this value has at most %(limit_value)d character (it has " -"%(show_value)d)." -msgid_plural "" -"Ensure this value has at most %(limit_value)d characters (it has " -"%(show_value)d)." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:478 -#: venv/lib/python3.11/site-packages/django/forms/fields.py:343 -#: venv/lib/python3.11/site-packages/django/forms/fields.py:378 -#, fuzzy -#| msgid "Enter Name" -msgid "Enter a number." -msgstr "Name einegeben" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:480 -#, python-format -msgid "Ensure that there are no more than %(max)s digit in total." -msgid_plural "Ensure that there are no more than %(max)s digits in total." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:485 -#, python-format -msgid "Ensure that there are no more than %(max)s decimal place." -msgid_plural "Ensure that there are no more than %(max)s decimal places." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:490 -#, python-format -msgid "" -"Ensure that there are no more than %(max)s digit before the decimal point." -msgid_plural "" -"Ensure that there are no more than %(max)s digits before the decimal point." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:559 -#, python-format -msgid "" -"File extension “%(extension)s” is not allowed. Allowed extensions are: " -"%(allowed_extensions)s." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:620 -msgid "Null characters are not allowed." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/base.py:1364 -#: venv/lib/python3.11/site-packages/django/forms/models.py:894 -#, fuzzy -#| msgid "End" -msgid "and" -msgstr "Ende" - -#: venv/lib/python3.11/site-packages/django/db/models/base.py:1366 -#, python-format -msgid "%(model_name)s with this %(field_labels)s already exists." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:129 -#, python-format -msgid "Value %(value)r is not a valid choice." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:130 -msgid "This field cannot be null." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:131 -msgid "This field cannot be blank." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:132 -#, python-format -msgid "%(model_name)s with this %(field_label)s already exists." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:136 -#, python-format -msgid "" -"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:156 -#, python-format -msgid "Field of type: %(field_type)s" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1050 -#, python-format -msgid "“%(value)s” value must be either True or False." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1051 -#, python-format -msgid "“%(value)s” value must be either True, False, or None." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1053 -msgid "Boolean (Either True or False)" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1094 -#, python-format -msgid "String (up to %(max_length)s)" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1192 -msgid "Comma-separated integers" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1293 -#, python-format -msgid "" -"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " -"format." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1297 -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1432 -#, python-format -msgid "" -"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " -"date." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1301 -msgid "Date (without time)" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1428 -#, python-format -msgid "" -"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." -"uuuuuu]][TZ] format." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1436 -#, python-format -msgid "" -"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" -"[TZ]) but it is an invalid date/time." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1441 -msgid "Date (with time)" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1565 -#, python-format -msgid "“%(value)s” value must be a decimal number." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1567 -#, fuzzy -#| msgid "December" -msgid "Decimal number" -msgstr "Dezember" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1724 -#, python-format -msgid "" -"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." -"uuuuuu] format." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1728 -#: src/shiftings/shifts/forms/template.py:40 -#: src/shiftings/shifts/models/template.py:23 -#: src/shiftings/shifts/templates/shifts/recurring/list.html:11 -msgid "Duration" -msgstr "Dauer" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1780 -msgid "Email address" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1805 -msgid "File path" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1883 -#, python-format -msgid "“%(value)s” value must be a float." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1885 -msgid "Floating point number" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1925 -#, python-format -msgid "“%(value)s” value must be an integer." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1927 -msgid "Integer" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2019 -msgid "Big (8 byte) integer" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2036 -msgid "Small integer" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2044 -msgid "IPv4 address" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2075 -msgid "IP address" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2168 -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2169 -#, python-format -msgid "“%(value)s” value must be either None, True or False." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2171 -msgid "Boolean (Either True, False or None)" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2222 -msgid "Positive big integer" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2237 -msgid "Positive integer" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2252 -msgid "Positive small integer" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2268 -#, python-format -msgid "Slug (up to %(max_length)s)" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2304 -#: src/shiftings/mail/forms/mail.py:11 -msgid "Text" -msgstr "Text" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2374 -#, python-format -msgid "" -"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " -"format." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2378 -#, python-format -msgid "" -"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " -"invalid time." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2382 -#: src/shiftings/cal/templates/cal/template/day_calendar_shift_types.html:23 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:197 -#: src/shiftings/shifts/templates/shifts/template/group.html:43 -#: src/shiftings/shifts/templates/shifts/template/group_template.html:23 -#: src/shiftings/shifts/templates/shifts/template/shift.html:10 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:33 -msgid "Time" -msgstr "Zeit" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2490 -msgid "URL" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2514 -msgid "Raw binary data" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2579 -#, python-format -msgid "“%(value)s” is not a valid UUID." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2581 -msgid "Universally unique identifier" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/files.py:232 -msgid "File" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/files.py:392 -msgid "Image" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/json.py:18 -#, fuzzy -#| msgid "Subject" -msgid "A JSON object" -msgstr "Betreff" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/json.py:20 -msgid "Value must be valid JSON." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/related.py:903 -#, python-format -msgid "%(model)s instance with %(field)s %(value)r does not exist." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/related.py:905 -msgid "Foreign Key (type determined by related field)" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/related.py:1204 -msgid "One-to-one relationship" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/related.py:1261 -#, python-format -msgid "%(from)s-%(to)s relationship" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/related.py:1263 -#, python-format -msgid "%(from)s-%(to)s relationships" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/related.py:1311 -msgid "Many-to-many relationship" -msgstr "" - -#. Translators: If found as last label character, these punctuation -#. characters will prevent the default label_suffix to be appended to the label -#: venv/lib/python3.11/site-packages/django/forms/boundfield.py:176 -msgid ":?.!" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:91 -#, fuzzy -#| msgid "One of the user fields is required!" -msgid "This field is required." -msgstr "Eines der Benutzerfelder ist benötigt!" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:298 -msgid "Enter a whole number." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:459 -#: venv/lib/python3.11/site-packages/django/forms/fields.py:1232 -msgid "Enter a valid date." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:482 -#: venv/lib/python3.11/site-packages/django/forms/fields.py:1233 -#, fuzzy -#| msgid "Enter Name" -msgid "Enter a valid time." -msgstr "Name einegeben" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:509 -msgid "Enter a valid date/time." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:543 -#, fuzzy -#| msgid "Enter Name or Organization" -msgid "Enter a valid duration." -msgstr "Name oder Organisation angeben" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:544 -#, python-brace-format -msgid "The number of days must be between {min_days} and {max_days}." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:610 -msgid "No file was submitted. Check the encoding type on the form." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:611 -msgid "No file was submitted." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:612 -msgid "The submitted file is empty." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:614 -#, python-format -msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." -msgid_plural "" -"Ensure this filename has at most %(max)d characters (it has %(length)d)." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:619 -msgid "Please either submit a file or check the clear checkbox, not both." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:685 -msgid "" -"Upload a valid image. The file you uploaded was either not an image or a " -"corrupted image." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:848 -#: venv/lib/python3.11/site-packages/django/forms/fields.py:940 -#: venv/lib/python3.11/site-packages/django/forms/models.py:1563 -#, python-format -msgid "Select a valid choice. %(value)s is not one of the available choices." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:942 -#: venv/lib/python3.11/site-packages/django/forms/fields.py:1061 -#: venv/lib/python3.11/site-packages/django/forms/models.py:1561 -msgid "Enter a list of values." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:1062 -msgid "Enter a complete value." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:1301 -msgid "Enter a valid UUID." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:1331 -msgid "Enter a valid JSON." -msgstr "" - -#. Translators: This is the default suffix added to form field labels -#: venv/lib/python3.11/site-packages/django/forms/forms.py:98 -msgid ":" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/forms.py:248 -#: venv/lib/python3.11/site-packages/django/forms/forms.py:328 -#, python-format -msgid "(Hidden field %(name)s) %(error)s" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/formsets.py:67 -#, python-format -msgid "" -"ManagementForm data is missing or has been tampered with. Missing fields: " -"%(field_names)s. You may need to file a bug report if the issue persists." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/formsets.py:418 -#, python-format -msgid "Please submit at most %d form." -msgid_plural "Please submit at most %d forms." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/forms/formsets.py:434 -#, python-format -msgid "Please submit at least %d form." -msgid_plural "Please submit at least %d forms." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/forms/formsets.py:470 -#: venv/lib/python3.11/site-packages/django/forms/formsets.py:477 -#: src/shiftings/organizations/templates/organizations/organization_settings.html:38 -msgid "Order" -msgstr "Reihenfolge" - -#: venv/lib/python3.11/site-packages/django/forms/formsets.py:483 -#, fuzzy -#| msgid "Delete Shift" -msgid "Delete" -msgstr "Schicht löschen" - -#: venv/lib/python3.11/site-packages/django/forms/models.py:887 -#, python-format -msgid "Please correct the duplicate data for %(field)s." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/models.py:892 -#, python-format -msgid "Please correct the duplicate data for %(field)s, which must be unique." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/models.py:899 -#, python-format -msgid "" -"Please correct the duplicate data for %(field_name)s which must be unique " -"for the %(lookup)s in %(date_field)s." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/models.py:908 -msgid "Please correct the duplicate values below." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/models.py:1335 -msgid "The inline value did not match the parent instance." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/models.py:1426 -msgid "Select a valid choice. That choice is not one of the available choices." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/models.py:1565 -#, python-format -msgid "“%(pk)s” is not a valid value." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/utils.py:204 -#, python-format -msgid "" -"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " -"may be ambiguous or it may not exist." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/widgets.py:434 -msgid "Clear" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/widgets.py:435 -#, fuzzy -#| msgid "Current Events" -msgid "Currently" -msgstr "Aktuelle Events" - -#: venv/lib/python3.11/site-packages/django/forms/widgets.py:436 -msgid "Change" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/widgets.py:765 -#: src/shiftings/accounts/templates/accounts/user_detail.html:55 -#: src/shiftings/accounts/templates/accounts/user_detail.html:65 -msgid "Unknown" -msgstr "Unbekannt" - -#: venv/lib/python3.11/site-packages/django/forms/widgets.py:766 -#: src/shiftings/templates/generic/delete.html:9 -msgid "Yes" -msgstr "Ja" - -#: venv/lib/python3.11/site-packages/django/forms/widgets.py:767 -#: src/shiftings/templates/generic/delete.html:11 -msgid "No" -msgstr "Nein" - -#. Translators: Please do not add spaces around commas. -#: venv/lib/python3.11/site-packages/django/template/defaultfilters.py:858 -msgid "yes,no,maybe" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/template/defaultfilters.py:888 -#: venv/lib/python3.11/site-packages/django/template/defaultfilters.py:905 -#, python-format -msgid "%(size)d byte" -msgid_plural "%(size)d bytes" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/template/defaultfilters.py:907 -#, python-format -msgid "%s KB" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/template/defaultfilters.py:909 -#, python-format -msgid "%s MB" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/template/defaultfilters.py:911 -#, python-format -msgid "%s GB" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/template/defaultfilters.py:913 -#, python-format -msgid "%s TB" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/template/defaultfilters.py:915 -#, python-format -msgid "%s PB" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dateformat.py:77 -msgid "p.m." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dateformat.py:78 -msgid "a.m." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dateformat.py:83 -#, fuzzy -#| msgid "M" -msgid "PM" -msgstr "M" - -#: venv/lib/python3.11/site-packages/django/utils/dateformat.py:84 -#, fuzzy -#| msgid "M" -msgid "AM" -msgstr "M" - -#: venv/lib/python3.11/site-packages/django/utils/dateformat.py:155 -msgid "midnight" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dateformat.py:157 -msgid "noon" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:7 -#: src/shiftings/utils/time/week.py:13 -msgid "Monday" -msgstr "Montag" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:8 -#: src/shiftings/utils/time/week.py:14 -msgid "Tuesday" -msgstr "Dienstag" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:9 -#: src/shiftings/utils/time/week.py:15 -msgid "Wednesday" -msgstr "Mittwoch" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:10 -#: src/shiftings/utils/time/week.py:16 -msgid "Thursday" -msgstr "Donnerstag" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:11 -#: src/shiftings/utils/time/week.py:17 -msgid "Friday" -msgstr "Freitag" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:12 -#: src/shiftings/utils/time/week.py:18 -msgid "Saturday" -msgstr "Samstag" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:13 -#: src/shiftings/utils/time/week.py:19 -msgid "Sunday" -msgstr "Sonntag" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:16 -#, fuzzy -#| msgid "Month" -msgid "Mon" -msgstr "Monat" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:17 -#, fuzzy -#| msgid "Tuesday" -msgid "Tue" -msgstr "Dienstag" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:18 -msgid "Wed" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:19 -msgid "Thu" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:20 -#, fuzzy -#| msgid "Friday" -msgid "Fri" -msgstr "Freitag" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:21 -#, fuzzy -#| msgid "Start" -msgid "Sat" -msgstr "Start" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:22 -#, fuzzy -#| msgid "Sunday" -msgid "Sun" -msgstr "Sonntag" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:25 -#: src/shiftings/utils/time/month.py:10 -msgid "January" -msgstr "Januar" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:26 -#: src/shiftings/utils/time/month.py:11 -msgid "February" -msgstr "Februar" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:27 -#: src/shiftings/utils/time/month.py:12 -msgid "March" -msgstr "März" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:28 -#: src/shiftings/utils/time/month.py:13 -msgid "April" -msgstr "April" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:29 -#: src/shiftings/utils/time/month.py:14 -msgid "May" -msgstr "Mai" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:30 -#: src/shiftings/utils/time/month.py:15 -msgid "June" -msgstr "Juni" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:31 -#: src/shiftings/utils/time/month.py:16 -msgid "July" -msgstr "Juli" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:32 -#: src/shiftings/utils/time/month.py:17 -msgid "August" -msgstr "August" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:33 -#: src/shiftings/utils/time/month.py:18 -msgid "September" -msgstr "September" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:34 -#: src/shiftings/utils/time/month.py:19 -msgid "October" -msgstr "Oktober" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:35 -#: src/shiftings/utils/time/month.py:20 -msgid "November" -msgstr "November" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:36 -#: src/shiftings/utils/time/month.py:21 -msgid "December" -msgstr "Dezember" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:39 -msgid "jan" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:40 -msgid "feb" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:41 -msgid "mar" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:42 -msgid "apr" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:43 -#, fuzzy -#| msgid "May" -msgid "may" -msgstr "Mai" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:44 -msgid "jun" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:45 -msgid "jul" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:46 -msgid "aug" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:47 -msgid "sep" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:48 -msgid "oct" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:49 -msgid "nov" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:50 -msgid "dec" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:53 -msgctxt "abbrev. month" -msgid "Jan." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:54 -msgctxt "abbrev. month" -msgid "Feb." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:55 -#, fuzzy -#| msgid "March" -msgctxt "abbrev. month" -msgid "March" -msgstr "März" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:56 -#, fuzzy -#| msgid "April" -msgctxt "abbrev. month" -msgid "April" -msgstr "April" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:57 -#, fuzzy -#| msgid "May" -msgctxt "abbrev. month" -msgid "May" -msgstr "Mai" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:58 -#, fuzzy -#| msgid "June" -msgctxt "abbrev. month" -msgid "June" -msgstr "Juni" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:59 -#, fuzzy -#| msgid "July" -msgctxt "abbrev. month" -msgid "July" -msgstr "Juli" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:60 -msgctxt "abbrev. month" -msgid "Aug." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:61 -msgctxt "abbrev. month" -msgid "Sept." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:62 -msgctxt "abbrev. month" -msgid "Oct." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:63 -msgctxt "abbrev. month" -msgid "Nov." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:64 -msgctxt "abbrev. month" -msgid "Dec." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:67 -#, fuzzy -#| msgid "January" -msgctxt "alt. month" -msgid "January" -msgstr "Januar" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:68 -#, fuzzy -#| msgid "February" -msgctxt "alt. month" -msgid "February" -msgstr "Februar" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:69 -#, fuzzy -#| msgid "March" -msgctxt "alt. month" -msgid "March" -msgstr "März" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:70 -#, fuzzy -#| msgid "April" -msgctxt "alt. month" -msgid "April" -msgstr "April" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:71 -#, fuzzy -#| msgid "May" -msgctxt "alt. month" -msgid "May" -msgstr "Mai" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:72 -#, fuzzy -#| msgid "June" -msgctxt "alt. month" -msgid "June" -msgstr "Juni" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:73 -#, fuzzy -#| msgid "July" -msgctxt "alt. month" -msgid "July" -msgstr "Juli" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:74 -#, fuzzy -#| msgid "August" -msgctxt "alt. month" -msgid "August" -msgstr "August" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:75 -#, fuzzy -#| msgid "September" -msgctxt "alt. month" -msgid "September" -msgstr "September" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:76 -#, fuzzy -#| msgid "October" -msgctxt "alt. month" -msgid "October" -msgstr "Oktober" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:77 -#, fuzzy -#| msgid "November" -msgctxt "alt. month" -msgid "November" -msgstr "November" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:78 -#, fuzzy -#| msgid "December" -msgctxt "alt. month" -msgid "December" -msgstr "Dezember" - -#: venv/lib/python3.11/site-packages/django/utils/ipv6.py:8 -msgid "This is not a valid IPv6 address." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/text.py:77 -#, python-format -msgctxt "String to return when truncating text" -msgid "%(truncated_text)s…" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/text.py:253 -msgid "or" -msgstr "" - -#. Translators: This string is used as a separator between list elements -#: venv/lib/python3.11/site-packages/django/utils/text.py:272 -#: venv/lib/python3.11/site-packages/django/utils/timesince.py:94 -msgid ", " -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/timesince.py:9 -#, python-format -msgid "%(num)d year" -msgid_plural "%(num)d years" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/utils/timesince.py:10 -#, python-format -msgid "%(num)d month" -msgid_plural "%(num)d months" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/utils/timesince.py:11 -#, python-format -msgid "%(num)d week" -msgid_plural "%(num)d weeks" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/utils/timesince.py:12 -#, python-format -msgid "%(num)d day" -msgid_plural "%(num)d days" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/utils/timesince.py:13 -#, python-format -msgid "%(num)d hour" -msgid_plural "%(num)d hours" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/utils/timesince.py:14 -#, python-format -msgid "%(num)d minute" -msgid_plural "%(num)d minutes" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/views/csrf.py:111 -#, fuzzy -#| msgid "Forbidden Method GET" -msgid "Forbidden" -msgstr "Verbotene Methode GET" - -#: venv/lib/python3.11/site-packages/django/views/csrf.py:112 -msgid "CSRF verification failed. Request aborted." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/csrf.py:116 -msgid "" -"You are seeing this message because this HTTPS site requires a “Referer " -"header” to be sent by your web browser, but none was sent. This header is " -"required for security reasons, to ensure that your browser is not being " -"hijacked by third parties." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/csrf.py:122 -msgid "" -"If you have configured your browser to disable “Referer” headers, please re-" -"enable them, at least for this site, or for HTTPS connections, or for “same-" -"origin” requests." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/csrf.py:127 -msgid "" -"If you are using the tag or " -"including the “Referrer-Policy: no-referrer” header, please remove them. The " -"CSRF protection requires the “Referer” header to do strict referer checking. " -"If you’re concerned about privacy, use alternatives like for links to third-party sites." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/csrf.py:136 -msgid "" -"You are seeing this message because this site requires a CSRF cookie when " -"submitting forms. This cookie is required for security reasons, to ensure " -"that your browser is not being hijacked by third parties." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/csrf.py:142 -msgid "" -"If you have configured your browser to disable cookies, please re-enable " -"them, at least for this site, or for “same-origin” requests." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/csrf.py:148 -msgid "More information is available with DEBUG=True." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:44 -msgid "No year specified" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:64 -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:115 -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:214 -msgid "Date out of range" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:94 -msgid "No month specified" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:147 -msgid "No day specified" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:194 -msgid "No week specified" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:349 -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:380 -#, python-format -msgid "No %(verbose_name_plural)s available" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:652 -#, python-format -msgid "" -"Future %(verbose_name_plural)s not available because %(class_name)s." -"allow_future is False." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:692 -#, python-format -msgid "Invalid date string “%(datestr)s” given format “%(format)s”" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/detail.py:56 -#, python-format -msgid "No %(verbose_name)s found matching the query" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/list.py:70 -msgid "Page is not “last”, nor can it be converted to an int." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/list.py:77 -#, python-format -msgid "Invalid page (%(page_number)s): %(message)s" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/list.py:169 -#, python-format -msgid "Empty list and “%(class_name)s.allow_empty” is False." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/static.py:39 -msgid "Directory indexes are not allowed here." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/static.py:41 -#, python-format -msgid "“%(path)s” does not exist" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/static.py:80 -#, python-format -msgid "Index of %(directory)s" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:7 -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:221 -msgid "The install worked successfully! Congratulations!" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:207 -#, python-format -msgid "" -"View release notes for Django %(version)s" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:222 -#, python-format -msgid "" -"You are seeing this page because DEBUG=True is in your settings file and you have not " -"configured any URLs." -msgstr "" +msgid "Confirm password" +msgstr "Passwort bestätigen" -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:230 -msgid "Django Documentation" -msgstr "" +msgid "Please enter matching passwords" +msgstr "Bitte gebe identische Passwörter ein" -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:231 -msgid "Topics, references, & how-to’s" +msgid "Cannot change first name, last name or email for LDAP users." msgstr "" -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:239 -msgid "Tutorial: A Polling App" -msgstr "" +msgid "User" +msgstr "Benutzer" -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:240 -msgid "Get started with Django" +msgid "Token" msgstr "" -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:248 -msgid "Django Community" -msgstr "" +msgid "Created" +msgstr "Erstellt" -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:249 -msgid "Connect, get help, or contribute" +msgid "Refresh Token" msgstr "" -#: venv/lib/python3.11/site-packages/django_bootstrap5/components.py:26 #, fuzzy -#| msgid "Close" -msgid "close" -msgstr "Schließen" - -#: venv/lib/python3.11/site-packages/isort/main.py:158 -msgid "show this help message and exit" -msgstr "" - -#: venv/lib/python3.11/site-packages/mypy/main.py:376 -#, python-format -msgid "%(prog)s: error: %(message)s\n" -msgstr "" - -#: src/shiftings/accounts/forms/user_form.py:11 -msgid "Confirm password" -msgstr "Passwort bestätigen" - -#: src/shiftings/accounts/forms/user_form.py:30 -msgid "Please enter matching passwords" -msgstr "Bitte gebe identische Passwörter ein" +#| msgid "Update" +msgid "Updated" +msgstr "Aktualisieren" -#: src/shiftings/accounts/models/user.py:32 -#: src/shiftings/accounts/templates/accounts/user_detail.html:52 -#: src/shiftings/shifts/models/participant.py:15 msgid "Display Name" msgstr "Anzeigename" -#: src/shiftings/accounts/models/user.py:33 -#: src/shiftings/events/models/event.py:29 -#: src/shiftings/organizations/models/organization.py:28 msgid "Telephone Number" msgstr "Telefonnummer" -#: src/shiftings/accounts/templates/accounts/confirm_email.html:7 msgid "Go to Login" msgstr "Zum Login" -#: src/shiftings/accounts/templates/accounts/login_form.html:6 -#: src/shiftings/accounts/templates/accounts/login_multiple.html:12 msgid "Login with local Account" msgstr "Login mit lokalem Account" -#: src/shiftings/accounts/templates/accounts/login_form.html:8 -#: src/shiftings/accounts/templates/accounts/login_multiple.html:20 msgid "Login with LDAP Account" msgstr "Login mit LDAP Account" -#: src/shiftings/accounts/templates/accounts/login_form.html:14 -#: src/shiftings/accounts/views/auth.py:27 -#: src/shiftings/templates/top_nav.html:57 msgid "Login" msgstr "Einloggen" -#: src/shiftings/accounts/templates/accounts/login_form.html:16 -#: src/shiftings/accounts/templates/accounts/password_reset/prompt.html:10 msgid "Reset Password" msgstr "Passwort zurücksetzen" -#: src/shiftings/accounts/templates/accounts/login_form.html:18 msgid "Return to selection" msgstr "Zur Auswahl zurückkehren" -#: src/shiftings/accounts/templates/accounts/login_form.html:29 msgid "You don't have an Account?" msgstr "Noch kein Account?" -#: src/shiftings/accounts/templates/accounts/login_form.html:30 msgid "Register here" msgstr "Hier registrieren" -#: src/shiftings/accounts/templates/accounts/login_form.html:32 msgid "Or login using another Method" msgstr "Oder nutze eine andere Loginmethode" -#: src/shiftings/accounts/templates/accounts/login_multiple.html:5 msgid "Welcome to Shiftings" msgstr "Wilkommen bei Shiftings" -#: src/shiftings/accounts/templates/accounts/login_multiple.html:6 msgid "" "To manage your shifts please authenticate with one of the given methods:" msgstr "" "Um deine Schichten zu verwalten melde dich bitte mit einer dieser Methoden " "an:" -#: src/shiftings/accounts/templates/accounts/login_multiple.html:31 #, fuzzy, python-format #| msgid "" #| "\n" @@ -1715,28 +100,21 @@ msgstr "" " vor %(time)s\n" " " -#: src/shiftings/accounts/templates/accounts/logout.html:6 msgid "Successfully logged out" msgstr "Erfolgreich ausgeloggt" -#: src/shiftings/accounts/templates/accounts/logout.html:7 msgid "Login again" msgstr "Wieder einloggen" -#: src/shiftings/accounts/templates/accounts/password_reset/confirm.html:7 msgid "Change Password" msgstr "Passwort ändern" -#: src/shiftings/accounts/templates/accounts/password_reset/done.html:4 msgid "Your password has been reset, check your email!" msgstr "Dein Passwort wurde zurückgesetzt, überprüfe deine E-Mails!" -#: src/shiftings/accounts/templates/accounts/password_reset/done.html:5 -#: src/shiftings/accounts/templates/accounts/password_reset/success.html:5 msgid "Back to login" msgstr "Zurück zum Login" -#: src/shiftings/accounts/templates/accounts/password_reset/prompt.html:4 msgid "" "\n" " If you are an local user enter your email-adress below to reset your " @@ -1748,15 +126,12 @@ msgstr "" "Passwort zurückzusetzen!\n" " " -#: src/shiftings/accounts/templates/accounts/password_reset/success.html:4 msgid "Your password has been successfully reset!" msgstr "Deine Passwort wurde erfolgreich zurückgesetzt!" -#: src/shiftings/accounts/templates/accounts/user_detail.html:3 msgid "Confirm User Deletion" msgstr "Bestätige die Löschung des Benutzers" -#: src/shiftings/accounts/templates/accounts/user_detail.html:5 #, python-format msgid "" "\n" @@ -1772,128 +147,116 @@ msgstr "" "werden.\n" " " -#: src/shiftings/accounts/templates/accounts/user_detail.html:17 msgid "Yes, I want to permanently delete my Data" msgstr "Ja, ich möchte meine Daten entgültig löschen" -#: src/shiftings/accounts/templates/accounts/user_detail.html:19 msgid "Abort" msgstr "Abbrechen" -#: src/shiftings/accounts/templates/accounts/user_detail.html:29 -#: src/shiftings/organizations/models/membership.py:68 -#: src/shiftings/shifts/models/participant.py:13 -#: src/shiftings/templates/top_nav.html:47 -msgid "User" -msgstr "Benutzer" - -#: src/shiftings/accounts/templates/accounts/user_detail.html:37 -#: src/shiftings/accounts/templates/accounts/user_detail.html:57 msgid "Edit user data" msgstr "Benutzerdaten bearbeiten" -#: src/shiftings/accounts/templates/accounts/user_detail.html:48 -#: src/shiftings/organizations/forms/membership.py:16 msgid "Username" msgstr "Benutzername" -#: src/shiftings/accounts/templates/accounts/user_detail.html:50 -#: src/shiftings/events/models/event.py:25 -#: src/shiftings/events/templates/events/event.html:85 -#: src/shiftings/organizations/models/membership.py:10 -#: src/shiftings/organizations/models/organization.py:24 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:195 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:239 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:278 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:388 -#: src/shiftings/organizations/templates/organizations/organization_settings.html:39 -#: src/shiftings/organizations/templates/organizations/user/claim_users.html:13 -#: src/shiftings/shifts/models/base.py:8 -#: src/shiftings/shifts/models/recurring.py:32 -#: src/shiftings/shifts/models/template.py:17 -#: src/shiftings/shifts/models/template_group.py:20 -#: src/shiftings/shifts/models/type.py:40 -#: src/shiftings/shifts/models/type_group.py:16 -#: src/shiftings/shifts/templates/shifts/group/list.html:6 -#: src/shiftings/shifts/templates/shifts/list.html:6 -#: src/shiftings/shifts/templates/shifts/recurring/list.html:6 -#: src/shiftings/shifts/templates/shifts/template/group_list.html:6 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:5 -#: src/shiftings/shifts/templates/shifts/type_group/list.html:7 msgid "Name" msgstr "Name" -#: src/shiftings/accounts/templates/accounts/user_detail.html:58 +msgid "Unknown" +msgstr "Unbekannt" + msgid "Set Display Name" msgstr "Setze Anzeigename" -#: src/shiftings/accounts/templates/accounts/user_detail.html:62 msgid "Email" msgstr "Email" -#: src/shiftings/accounts/templates/accounts/user_detail.html:64 msgid "Phone Number" msgstr "Telefonnummer" -#: src/shiftings/accounts/templates/accounts/user_detail.html:66 msgid "Member since" msgstr "Mitglied seit" -#: src/shiftings/accounts/templates/accounts/user_detail.html:68 msgid "Total Shifts" msgstr "Anzahl Schichten" -#: src/shiftings/accounts/templates/accounts/user_detail.html:70 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:124 msgid "Groups" msgstr "Gruppen" -#: src/shiftings/accounts/templates/accounts/user_detail.html:71 -#: src/shiftings/events/templates/events/template/event.html:32 -#: src/shiftings/shifts/templates/shifts/template/template.html:19 msgid "None" msgstr "Keine" -#: src/shiftings/accounts/templates/accounts/user_detail.html:77 msgid "Organizations" msgstr "Organisationen" -#: src/shiftings/accounts/templates/accounts/user_detail.html:83 msgid "Hide organizations" msgstr "Organisationen einklappen" -#: src/shiftings/accounts/templates/accounts/user_detail.html:102 -#: src/shiftings/events/templates/events/template/event.html:12 msgid "No Logo available" msgstr "Kein Logo verfügbar" -#: src/shiftings/accounts/templates/accounts/user_detail.html:125 +msgid "Calendar Subscriptions" +msgstr "Kalender-Abonnements" + +msgid "Regenerating will invalidate existing calendar subscriptions. Continue?" +msgstr "Beim Erneuern werden bestehende Kalender-Abonnements ungültig. Fortfahren?" + +msgid "Regenerate" +msgstr "Erneuern" + +msgid "Revoking will stop all calendar subscriptions. Continue?" +msgstr "Beim Widerrufen werden alle Kalender-Abonnements deaktiviert. Fortfahren?" + +msgid "Revoke" +msgstr "Widerrufen" + +msgid "Generate Calendar URL" +msgstr "Kalender-URL erzeugen" + +msgid "" +"Use these URLs to subscribe to your shifts in a calendar app. Treat them " +"like a password." +msgstr "" +"Verwende diese URLs, um deine Schichten in einer Kalender-App zu " +"abonnieren. Behandle sie wie ein Passwort." + +msgid "All Shifts" +msgstr "Alle Schichten" + +msgid "Add to Calendar" +msgstr "Zum Kalender hinzufügen" + +msgid "Copy URL" +msgstr "URL kopieren" + +msgid "My Shifts" +msgstr "Meine Schichten" + +msgid "" +"Generate a calendar URL to subscribe to your shifts from a mobile calendar " +"app." +msgstr "" +"Erzeuge eine Kalender-URL, um deine Schichten in einer mobilen Kalender-App " +"zu abonnieren." + msgid "Recent Shifts" msgstr "Letzte Schichten" -#: src/shiftings/accounts/templates/accounts/user_detail.html:127 -#: src/shiftings/accounts/templates/accounts/user_detail.html:132 msgid "Upcoming Shifts" msgstr "Anstehende Schichten" -#: src/shiftings/accounts/templates/accounts/user_detail.html:136 msgid "Past Shifts" msgstr "Vergangene Schichten" -#: src/shiftings/accounts/templates/accounts/user_detail.html:157 msgid "No recent Shifts" msgstr "Keine vergangenen Schichten" -#: src/shiftings/accounts/templates/accounts/user_detail.html:159 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:135 msgid "No upcoming shifts" msgstr "Keine anstehenden Schichten" -#: src/shiftings/accounts/templates/accounts/user_form.html:6 msgid "Register" msgstr "Registrieren" -#: src/shiftings/accounts/templates/accounts/user_form.html:8 #, python-format msgid "" "\n" @@ -1904,434 +267,273 @@ msgstr "" " Bearbeite Benutzer %(user)s\n" " " -#: src/shiftings/accounts/templates/accounts/user_form.html:19 -#: src/shiftings/templates/template/simple_form_modal.html:21 msgid "Submit" msgstr "Bestätigen" -#: src/shiftings/accounts/views/auth.py:83 msgid "Error while creating the user instance!" msgstr "Fehler beim erstellen der Benutzerinstanz!" -#: src/shiftings/accounts/views/auth.py:87 msgid "Successfully logged in!" msgstr "Erfolgreich eingeloggt!" -#: src/shiftings/accounts/views/auth.py:90 #, python-format msgid "Error while trying to authenticate with sso! %(message)s" msgstr "Fehler beim Versuch gegen SSO zu authentifizieren! %(message)s" -#: src/shiftings/accounts/views/auth.py:131 -#: src/shiftings/templates/top_nav.html:52 msgid "Logout" msgstr "Ausloggen" -#: src/shiftings/accounts/views/password.py:13 +msgid "Calendar subscription URL regenerated. Old URLs will stop working." +msgstr "Kalender-Abonnement-URL erneuert. Alte URLs funktionieren nicht mehr." + +msgid "Calendar subscription URL generated." +msgstr "Kalender-Abonnement-URL erzeugt." + +msgid "Calendar subscription URL revoked." +msgstr "Kalender-Abonnement-URL widerrufen." + msgid "Password Reset" msgstr "Passwort zurücksetzen" -#: src/shiftings/accounts/views/password.py:19 msgid "Confirm Password Reset" msgstr "Passwort Zurücksetzung bestätigen" -#: src/shiftings/accounts/views/user.py:35 -#: src/shiftings/templates/top_nav.html:15 msgid "My Shifts" msgstr "Meine Schichten" -#: src/shiftings/accounts/views/user.py:100 msgid "Could not find your user." msgstr "Konnte deinen Benutzer nicht finden." -#: src/shiftings/accounts/views/user.py:106 msgid "Your EMail was confirmed. You can now login." msgstr "Deine EMail wurde bestätigt. Du kannst dich jetzt einloggen." -#: src/shiftings/accounts/views/user.py:109 msgid "Your activation link was invalid." msgstr "Dein Aktivierungslink war ungültig." -#: src/shiftings/accounts/views/user.py:126 msgid "Error while deleting your data: Please confirm deletion!" msgstr "Fehler beim Löschen deiner Daten: Bitte bestätige die Löschung!" -#: src/shiftings/cal/feed/event.py:44 msgid "Public Events" msgstr "Öffentliche Events" -#: src/shiftings/cal/forms/day_form.py:8 msgid "Select Day" msgstr "Tag auswählen" -#: src/shiftings/cal/templates/cal/calendar_base.html:14 -#: src/shiftings/cal/templates/cal/calendar_base.html:24 msgid "Day View" msgstr "Tagesansicht" -#: src/shiftings/cal/templates/cal/calendar_base.html:20 msgid "Day (Detailed)" msgstr "Tag (Detailliert)" -#: src/shiftings/cal/templates/cal/calendar_base.html:30 msgid "Day (By Types)" msgstr "Tag (Nach Typ)" -#: src/shiftings/cal/templates/cal/calendar_base.html:37 msgid "Month View" msgstr "Monatsansicht" -#: src/shiftings/cal/templates/cal/calendar_base.html:38 -#: src/shiftings/utils/time/month.py:25 -#: src/shiftings/utils/time/timerange.py:12 msgid "Month" msgstr "Monat" -#: src/shiftings/cal/templates/cal/calendar_base.html:42 -#: src/shiftings/cal/templates/cal/calendar_base.html:48 msgid "List View" msgstr "Listenansicht" -#: src/shiftings/cal/templates/cal/calendar_base.html:44 msgid "List (Detailed)" msgstr "Liste (Detailliert)" -#: src/shiftings/cal/templates/cal/calendar_base.html:50 msgid "List (By Types)" msgstr "Liste (Nach Typ)" -#: src/shiftings/cal/templates/cal/calendar_templates/cal_shift_create_entry.html:4 -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:106 -#: src/shiftings/events/templates/events/event.html:74 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:376 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:120 msgid "Create Shift" msgstr "Schicht erstellen" -#: src/shiftings/cal/templates/cal/calendar_templates/recurring_shift_entry.html:5 msgid "Recurring" msgstr "Wiederholend" -#: src/shiftings/cal/templates/cal/day_calendar.html:14 msgid "Previous Day" msgstr "Letzter Tag" -#: src/shiftings/cal/templates/cal/day_calendar.html:22 msgid "Jump to Date" msgstr "Zum Datum springen" -#: src/shiftings/cal/templates/cal/day_calendar.html:28 msgid "Jump to Day" msgstr "Zum Tag springen" -#: src/shiftings/cal/templates/cal/day_calendar.html:30 msgid "Select" msgstr "Auswählen" -#: src/shiftings/cal/templates/cal/day_calendar.html:38 msgid "Next Day" msgstr "Nächster Tag" -#: src/shiftings/cal/templates/cal/list_calendar.html:12 #, fuzzy #| msgid "Shifts" msgid "Shift list" msgstr "Schichten" -#: src/shiftings/cal/templates/cal/template/day_calendar_shift_types.html:7 -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:48 -#: src/shiftings/shifts/templates/shifts/shift_participants.html:4 +#, python-format +msgid "" +"\n" +" Your query was capped to the server limit of %(max_entries)s. Please " +"filter more specifically.\n" +" " +msgstr "" +"\n" +" Deine Anfrage wurde auf %(max_entries)s Schichten begrenzt. Bitte gib " +"genauere Filter an.\n" +" " + msgid "Add with Name to Shift" msgstr "Mit Namen zur Schicht hinzufügen" -#: src/shiftings/cal/templates/cal/template/day_calendar_shift_types.html:33 -#: src/shiftings/organizations/models/membership.py:12 +msgid "Time" +msgstr "Zeit" + msgid "Default" msgstr "Standard" -#: src/shiftings/cal/templates/cal/template/day_calendar_shift_types.html:38 -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:95 msgid "No Shifts found with these parameters or planned on this day" msgstr "" "An diesem Tag sind keine Schichten mit diesen Parametern gefunden oder " "geplant" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:3 -msgid "" -"\n" -" Your query was capped to the server limit of %(max_entries)s. Please " -"filter more specifically.\n" -" " -msgstr "" -"\n" -" Deine Anfrage wurde auf %(max_entries)s Schichten begrenzt. Bitte " -"gib genauere Filter an.\n" -" " - -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:12 -#: src/shiftings/events/models/event.py:24 -#: src/shiftings/shifts/models/base.py:12 -#: src/shiftings/shifts/models/recurring.py:34 -#: src/shiftings/shifts/models/template_group.py:24 -#: src/shiftings/shifts/models/type.py:37 -#: src/shiftings/shifts/models/type_group.py:14 -#: src/shiftings/shifts/templates/shifts/create_shift.html:79 -#: src/shiftings/shifts/templates/shifts/list.html:9 -#: src/shiftings/shifts/templates/shifts/recurring/list.html:9 -#: src/shiftings/shifts/templates/shifts/shift.html:47 -#: src/shiftings/shifts/templates/shifts/template/group.html:39 -#: src/shiftings/shifts/templates/shifts/template/group.html:45 -#: src/shiftings/shifts/templates/shifts/template/group_list.html:8 -#: src/shiftings/shifts/templates/shifts/template/group_template.html:25 msgid "Organization" msgstr "Organisation" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:13 msgid "Org" msgstr "Org" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:14 msgid "Shift" msgstr "Schicht" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:15 -#: src/shiftings/shifts/templates/shifts/create_shift.html:56 -#: src/shiftings/shifts/templates/shifts/template/shift.html:12 -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:21 msgid "Participants" msgstr "Teilnehmer" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:16 -#: src/shiftings/shifts/templates/shifts/list.html:10 msgid "Start" msgstr "Start" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:17 -#: src/shiftings/shifts/templates/shifts/list.html:11 msgid "End" msgstr "Ende" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:36 -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:7 msgid "Shift Details" msgstr "Schicht Details" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:61 -#: src/shiftings/shifts/templates/shifts/shift_participants.html:23 -#: src/shiftings/shifts/templates/shifts/template/slots_display.html:29 -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:44 msgid "Add me" msgstr "Mich hinzufügen" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:112 -#: src/shiftings/shifts/templates/shifts/edit_participation_permissions.html:31 -#: src/shiftings/shifts/templates/shifts/edit_templates.html:26 msgid "Add Shift" msgstr "Schicht hinzufügen" -#: src/shiftings/cal/templates/cal/template/month_calendar.html:7 msgid "Previous Month" msgstr "Letzter Monat" -#: src/shiftings/cal/templates/cal/template/month_calendar.html:15 msgid "Next Month" msgstr "Nächster Monat" -#: src/shiftings/cal/templates/cal/week_calendar.html:9 msgid "Previous Week" msgstr "Letzte Woche" -#: src/shiftings/cal/templates/cal/week_calendar.html:13 msgid "Week" msgstr "Woche" -#: src/shiftings/cal/templates/cal/week_calendar.html:17 msgid "Next Week" msgstr "Nächste Woche" -#: src/shiftings/cal/views/day_calendar.py:24 #, python-brace-format msgid "Day {date}" msgstr "Tag {date}" -#: src/shiftings/cal/views/day_calendar.py:25 msgid "Day Overview" msgstr "Tagesübersicht" -#: src/shiftings/cal/views/list.py:24 -#: src/shiftings/organizations/templates/organizations/template/org_info.html:6 msgid "Shift Overview" msgstr "Schichtenübersicht" -#: src/shiftings/cal/views/month_calendar.py:24 #, python-brace-format msgid "Month {year}/{month:0>2}" msgstr "Monat {year}/{month:0>2}" -#: src/shiftings/cal/views/month_calendar.py:26 -#: src/shiftings/events/templates/events/event.html:52 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:162 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:28 msgid "Month Overview" msgstr "Monatsübersicht" -#: src/shiftings/events/forms/event.py:24 #, python-format msgid "Start date %(start)s was after end_date %(end)s" msgstr "Startdatum %(start)s ist nach dem Enddatum %(end)s" -#: src/shiftings/events/models/event.py:26 -#: src/shiftings/events/templates/events/event.html:19 -#: src/shiftings/organizations/models/organization.py:25 -#: src/shiftings/organizations/templates/organizations/template/org_info.html:58 msgid "Logo" msgstr "Logo" -#: src/shiftings/events/models/event.py:28 -#: src/shiftings/organizations/models/organization.py:27 msgid "E-Mail" msgstr "E-Mail" -#: src/shiftings/events/models/event.py:30 -#: src/shiftings/organizations/models/organization.py:29 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:81 -#: src/shiftings/organizations/templates/organizations/template/organization.html:27 msgid "Website" msgstr "Webseite" -#: src/shiftings/events/models/event.py:32 msgid "Start Date" msgstr "Startdatum" -#: src/shiftings/events/models/event.py:32 msgid "Earliest date where there are shifts available" msgstr "Frühestes Datum an dem Schichten verfügbar sind" -#: src/shiftings/events/models/event.py:33 msgid "End Date" msgstr "Enddatum" -#: src/shiftings/events/models/event.py:33 msgid "Latest date where there are shifts available" msgstr "Spätestes Datum an dem Schichten verfügbar sind" -#: src/shiftings/events/models/event.py:35 -#: src/shiftings/organizations/models/organization.py:32 msgid "Description" msgstr "Beschreibung" -#: src/shiftings/events/models/event.py:55 #, python-brace-format msgid "{name} (by {organization})" msgstr "{name} (von {organization})" -#: src/shiftings/events/templates/events/event.html:10 msgid "Edit Event" msgstr "Event bearbeiten" -#: src/shiftings/events/templates/events/event.html:55 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:165 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:31 msgid "Complete Overview" msgstr "Komplette Übersicht" -#: src/shiftings/events/templates/events/event.html:69 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:363 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:109 msgid "Shifts" msgstr "Schichten" -#: src/shiftings/events/templates/events/event.html:71 -#: src/shiftings/events/templates/events/event.html:72 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:371 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:112 msgid "ical Export" msgstr "ical Export" -#: src/shiftings/events/templates/events/event.html:86 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:389 -#: src/shiftings/shifts/templates/shifts/list.html:7 -#: src/shiftings/shifts/templates/shifts/recurring/list.html:7 -#: src/shiftings/shifts/templates/shifts/template/shift.html:8 -#: src/shiftings/shifts/templates/shifts/template/template.html:7 msgid "Type" msgstr "Typ" -#: src/shiftings/events/templates/events/event.html:87 -#: src/shiftings/mail/forms/mail.py:39 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:241 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:390 -#: src/shiftings/shifts/models/template_group.py:26 -#: src/shiftings/shifts/templates/shifts/shift.html:43 -#: src/shiftings/shifts/templates/shifts/template/group_list.html:9 -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:17 -#: src/shiftings/shifts/templates/shifts/template/template.html:13 msgid "Start Time" msgstr "Startzeit" -#: src/shiftings/events/templates/events/event.html:88 -#: src/shiftings/mail/forms/mail.py:40 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:391 -#: src/shiftings/shifts/templates/shifts/shift.html:45 -#: src/shiftings/shifts/templates/shifts/template/template.html:15 msgid "End Time" msgstr "Endzeit" -#: src/shiftings/events/templates/events/event.html:89 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:198 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:240 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:392 -#: src/shiftings/shifts/models/base.py:9 -#: src/shiftings/shifts/models/template_group.py:21 -#: src/shiftings/shifts/templates/shifts/list.html:8 -#: src/shiftings/shifts/templates/shifts/recurring/list.html:8 -#: src/shiftings/shifts/templates/shifts/shift.html:41 -#: src/shiftings/shifts/templates/shifts/template/group.html:41 -#: src/shiftings/shifts/templates/shifts/template/group_list.html:7 -#: src/shiftings/shifts/templates/shifts/template/group_template.html:21 -#: src/shiftings/shifts/templates/shifts/template/shift_card.html:12 -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:18 msgid "Place" msgstr "Ort" -#: src/shiftings/events/templates/events/event.html:90 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:393 msgid "Users/Required/Max" msgstr "Benutzer/Benötigt/Maximum" -#: src/shiftings/events/templates/events/event.html:108 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:416 msgid "No current shifts" msgstr "Keine aktuellen Schichten" -#: src/shiftings/events/templates/events/list.html:5 -#: src/shiftings/events/templates/events/list.html:13 -#: src/shiftings/events/templates/events/list.html:22 msgid "All Events" msgstr "Alle Events" -#: src/shiftings/events/templates/events/list.html:7 -#: src/shiftings/templates/top_nav.html:22 msgid "Current Events" msgstr "Aktuelle Events" -#: src/shiftings/events/templates/events/list.html:16 msgid "All upcoming Events" msgstr "Alle anstehenden Events" -#: src/shiftings/events/templates/events/list.html:20 msgid "Enter Name or Organization" msgstr "Name oder Organisation angeben" -#: src/shiftings/events/templates/events/list.html:26 msgid "Future Events" msgstr "Zukünftige Events" -#: src/shiftings/events/templates/events/list.html:39 msgid "No Events found." msgstr "Keine Events gefunden." -#: src/shiftings/events/templates/events/template/event.html:23 #, python-format msgid "" "\n" @@ -2342,69 +544,60 @@ msgstr "" " %(start_date)s bis %(end_date)s\n" " " -#: src/shiftings/events/templates/events/template/event.html:31 msgid "Open Shifts" msgstr "Offene Schichten" -#: src/shiftings/events/templates/events/template/event.html:32 msgid "Required People" msgstr "Benötigte Personen" -#: src/shiftings/events/templates/events/template/event.html:33 msgid "Visibility" msgstr "Sichtbarkeit" -#: src/shiftings/events/templates/events/template/event.html:33 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:350 msgid "Public,Private,Unknown" msgstr "Öffentlich,Privat,Unbekannt" -#: src/shiftings/events/templates/events/template/event_stats.html:2 msgid "Shifts that are below the required amount of users" msgstr "Schichten mit weniger als den benötigten Benutzern" -#: src/shiftings/events/templates/events/template/event_stats.html:3 msgid "Shifts missing users" msgstr "Schichten mit fehlenden Benutzern" -#: src/shiftings/events/templates/events/template/event_stats.html:6 msgid "Shifts that are below the required and maximum amount of users" msgstr "Schichten unter der benötigten und maximalen Benutzeranzahl" -#: src/shiftings/events/templates/events/template/event_stats.html:7 msgid "Shifts with open slots" msgstr "Schichten mit offenen Positionen" -#: src/shiftings/events/templates/events/template/event_stats.html:10 msgid "Number of Shift slots filled with users" msgstr "Anzahl mit Benutzern gefüllte Positionen" -#: src/shiftings/events/templates/events/template/event_stats.html:11 msgid "Filled Slots" msgstr "Gefüllte Positionen" -#: src/shiftings/events/templates/events/template/event_stats.html:12 -#: src/shiftings/events/templates/events/template/event_stats.html:16 msgid "No Shifts available" msgstr "Keine Schichten verfügbar" -#: src/shiftings/events/templates/events/template/event_stats.html:14 msgid "Number of Shift slots that are still open" msgstr "Anzahl offene Postiionen" -#: src/shiftings/events/templates/events/template/event_stats.html:15 msgid "Open Slots" msgstr "Offene Postionen" -#: src/shiftings/mail/forms/mail.py:10 msgid "Subject" msgstr "Betreff" -#: src/shiftings/mail/forms/mail.py:12 +msgid "Text" +msgstr "Text" + msgid "Attachments" msgstr "Anhänge" -#: src/shiftings/mail/forms/mail.py:22 +msgid "Each attachment must be smaller than 10 MB." +msgstr "" + +msgid "Total attachment size must be smaller than 25 MB." +msgstr "" + msgid "" "Send the mail only to specific membership types. Or leave blank to send to " "all." @@ -2412,7 +605,6 @@ msgstr "" "Email nur an bestimmte Mitgliedertypen senden oder leerlassen um sie an alle " "zu schicken." -#: src/shiftings/mail/forms/mail.py:37 #, fuzzy #| msgid "" #| "Send the mail only to specific membership types. Or leave blank to send " @@ -2423,193 +615,143 @@ msgstr "" "Email nur an bestimmte Mitgliedertypen senden oder leerlassen um sie an alle " "zu schicken." -#: src/shiftings/mail/templates/mail/mail.html:8 +msgid "Start time must be before end time." +msgstr "" + msgid "Send Mail" msgstr "Email versenden" -#: src/shiftings/mail/views/mail.py:45 #, python-brace-format msgid "E-Mail sent to {count} user(s)." msgstr "Email an {count} Benutzer verschickt." -#: src/shiftings/organizations/forms/membership.py:40 -#: src/shiftings/shifts/forms/participant.py:57 msgid "The user you entered could not be found." msgstr "Der eingetragene Benutzer konnte nicht gefunden werden." -#: src/shiftings/organizations/models/membership.py:11 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:68 -#: src/shiftings/templates/top_nav.html:50 msgid "Admin" msgstr "Admin" -#: src/shiftings/organizations/models/membership.py:13 msgid "Permissions" msgstr "Berechtigungen" -#: src/shiftings/organizations/models/membership.py:19 msgid "edit organization details" msgstr "Organisationdetails bearbeiten" -#: src/shiftings/organizations/models/membership.py:20 msgid "see members of the organization" msgstr "Mitglieder der Organisation sehen" -#: src/shiftings/organizations/models/membership.py:21 msgid "see shift participation statistics" msgstr "Schicht Teilnahmestatistik der Organistation sehen" -#: src/shiftings/organizations/models/membership.py:22 msgid "send emails to everyone in the organization" msgstr "Emails an alle in der Organisation senden" -#: src/shiftings/organizations/models/membership.py:24 msgid "create and update membership types for the organization" msgstr "Mitgliedschaftstypen in der Organisation erstellen und ändern" -#: src/shiftings/organizations/models/membership.py:25 msgid "add and remove members for the organization" msgstr "Mitglieder in der Organisation hinzufügen und entfernen" -#: src/shiftings/organizations/models/membership.py:27 msgid "create and update events for the organization" msgstr "Events für die Organisation erstellen und bearbeiten" -#: src/shiftings/organizations/models/membership.py:29 msgid "create and update recurring shifts for the organization" msgstr "Wiederkehrende Schichten für die Organisation erstellen und bearbeiten" -#: src/shiftings/organizations/models/membership.py:30 msgid "create and update shifts templates for the organization" msgstr "Schichtvorlagen für die Organisation erstellen und bearbeiten" -#: src/shiftings/organizations/models/membership.py:31 msgid "create and update shifts for the organization" msgstr "Schichten für die Organisation erstellen und bearbeiten" -#: src/shiftings/organizations/models/membership.py:32 msgid "delete uncompleted shifts for the organization" msgstr "Unabgeschlossene Schichten der Organistation löschen" -#: src/shiftings/organizations/models/membership.py:34 msgid "remove others from shifts" msgstr "Andere von Schichten entfernen" -#: src/shiftings/organizations/models/membership.py:35 msgid "add other users that are not members of the organization to shifts" msgstr "" "Andere Benutzer zu Schichten hinzufügen, die keine Mitglieder der " "Organisation sind" -#: src/shiftings/organizations/models/membership.py:36 msgid "add other organization members to shifts" msgstr "Andere Organisationsmitglieder zu Schichten hinzufügen" -#: src/shiftings/organizations/models/membership.py:37 msgid "participate in shifts" msgstr "An Schichten teilnehmen" -#: src/shiftings/organizations/models/membership.py:38 msgid "add self/others (depending on other permissions) to past shifts" msgstr "" -#: src/shiftings/organizations/models/membership.py:57 #, python-brace-format msgid "{name} (Admin)" msgstr "{name} (Admin)" -#: src/shiftings/organizations/models/membership.py:59 #, python-brace-format msgid "{name} (Default)" msgstr "{name} (Standard)" -#: src/shiftings/organizations/models/membership.py:65 msgid "Membership Type" msgstr "Mitgliedschaftstyp" -#: src/shiftings/organizations/models/membership.py:69 -#: src/shiftings/shifts/models/type.py:38 msgid "Group" msgstr "Gruppe" -#: src/shiftings/organizations/models/membership.py:100 msgid "Membership can only be either user or group, not both." msgstr "" "Mitgliedschaft kann nur für Benutzer oder Gruppe eingetragen werden nicht " "beides auf einmal." -#: src/shiftings/organizations/models/membership.py:102 msgid "Membership must consist of a user or a group." msgstr "Mitgliedschaft muss aus einem Benutzer oder einer Gruppe bestehen." -#: src/shiftings/organizations/models/organization.py:30 msgid "Include Protocol i.E. https://example.com" msgstr "Inklusive Protokoll z.B. https://example.com" -#: src/shiftings/organizations/models/organization.py:33 -#: src/shiftings/shifts/models/base.py:24 -#: src/shiftings/shifts/models/recurring.py:56 -#: src/shiftings/shifts/models/recurring.py:63 -#: src/shiftings/shifts/models/shift.py:32 -#: src/shiftings/shifts/models/template.py:33 #, python-brace-format msgid "A maximum of {amount} characters is allowed" msgstr "Es sind maximal {amount} Zeichen erlaubt" -#: src/shiftings/organizations/models/organization.py:34 msgid "Confirm Participants" msgstr "Teilnehmer bestätigen" -#: src/shiftings/organizations/models/organization.py:35 msgid "Whether the participants can be confirmed or not. Default: False" msgstr "Telnehmer können bestätigt werden. Standard: False" -#: src/shiftings/organizations/models/organization.py:49 msgid "manage all organizations" msgstr "Alle Organisationen bearbeiten" -#: src/shiftings/organizations/models/user.py:10 msgid "Claimed by" msgstr "Beansprucht von" -#: src/shiftings/organizations/templates/organizations/list.html:5 msgid "All Organizations" msgstr "Alle Organisationen" -#: src/shiftings/organizations/templates/organizations/list.html:7 -#: src/shiftings/templates/top_nav.html:18 msgid "My Organizations" msgstr "Meine Organisationen" -#: src/shiftings/organizations/templates/organizations/list.html:12 msgid "Enter Name" msgstr "Name einegeben" -#: src/shiftings/organizations/templates/organizations/list.html:14 msgid "Add new Organization" msgstr "Neue Organisation hinzufügen" -#: src/shiftings/organizations/templates/organizations/list.html:25 msgid "No Organizations found." msgstr "Keine Organisationen gefunden." -#: src/shiftings/organizations/templates/organizations/organization_admin.html:6 msgid "Show membership Permissions" msgstr "Mitgliedschaftsberechtigungen anzeigen" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:10 msgid "All Permissions" msgstr "Alle Berechtigungen" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:19 msgid "No permissions" msgstr "Keine Berechtigungen" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:26 msgid "Add member" msgstr "Mitglied hinzufügen" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:41 #, python-format msgid "" "\n" @@ -2620,183 +762,129 @@ msgstr "" " Mitglieder von %(organization)s\n" " " -#: src/shiftings/organizations/templates/organizations/organization_admin.html:48 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:8 msgid "Member Shift Summary" msgstr "Mitglieder Schichten Zusammenfassung" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:54 msgid "Add Membership Type" msgstr "Mitgliedschaftstyp hinzufügen" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:78 msgid "Show user permissions" msgstr "Benutzerberechtigungen anzeigen" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:81 msgid "Edit Membership Type" msgstr "Mitgliedschaftstyp bearbeiten" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:90 msgid "Add Member" msgstr "Mitglied hinzufügen" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:100 msgid "No Members of this type!" msgstr "Keine Mitglieder von diesem Typ!" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:106 msgid "Direct Members" msgstr "Direkte Mitglieder" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:150 msgid "Next Shift" msgstr "Nächste Schicht" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:154 msgid "No Shifts planned" msgstr "Keine Schichten geplant" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:179 -#: src/shiftings/shifts/templates/shifts/template/group.html:52 msgid "Recurring Shifts" msgstr "Wiederkehrende Schichten" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:184 msgid "Add recurring shift" msgstr "Wiederkehrende Schicht hinzufügen" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:196 msgid "Shift count" msgstr "Schichten Anzahl" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:199 msgid "Status" msgstr "Status" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:210 msgid "Inactive,Active,Undefined" msgstr "Inaktiv,Aktiv,Unbekannt" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:216 msgid "No recurring shifts" msgstr "Keine wiederkehrenden Schichten" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:223 msgid "Shifts Templates" msgstr "Schichtvorlagen" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:228 msgid "Add shifts template" msgstr "Schichtvorlagen hinzufügen" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:255 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:309 msgid "No shifts templates" msgstr "Keine Schichtvorlagen" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:262 msgid "Shifts Types" msgstr "Schichttypen" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:267 msgid "Add Shift Type" msgstr "Schichttyp hinzufügen" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:279 msgid "Color" msgstr "Farbe" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:280 -#: src/shiftings/organizations/templates/organizations/user/claim_users.html:15 msgid "Shift Count" msgstr "Schichten Anzahl" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:281 -#: src/shiftings/organizations/templates/organizations/organization_settings.html:41 -#: src/shiftings/organizations/templates/organizations/user/claim_users.html:16 msgid "Action" msgstr "Aktion" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:290 msgid "Shift Type Background Color" msgstr "Schichttyp Hintergrundfarbe" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:317 msgid "Upcoming Events" msgstr "Anstehende Events" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:321 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:50 msgid "Expired Events" msgstr "Abgelaufene Events" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:326 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:55 msgid "Add Event" msgstr "Event hinzufügen" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:356 msgid "No upcoming Events planned" msgstr "Keine anstehenden Events" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:367 msgid "Claim Legacy Shifts" msgstr "Beanspruche alte Schichten" -#: src/shiftings/organizations/templates/organizations/organization_settings.html:19 -#: src/shiftings/shifts/templates/shifts/edit_participation_permissions.html:36 -#: src/shiftings/shifts/templates/shifts/edit_templates.html:31 -#: src/shiftings/shifts/templates/shifts/recurring/form.html:25 -#: src/shiftings/templates/generic/create_or_update.html:20 -#: src/shiftings/templates/generic/formset.html:17 msgid "Save" msgstr "Speichern" -#: src/shiftings/organizations/templates/organizations/organization_settings.html:26 msgid "Shift Type Groups" msgstr "Schichttypgruppen" -#: src/shiftings/organizations/templates/organizations/organization_settings.html:29 msgid "Create Type Group" msgstr "Schichttypgruppe hinzufügen" -#: src/shiftings/organizations/templates/organizations/organization_settings.html:40 +msgid "Order" +msgstr "Reihenfolge" + msgid "Types" msgstr "Typen" -#: src/shiftings/organizations/templates/organizations/organization_settings.html:61 msgid "Edit Type Group" msgstr "Typgruppe editieren" -#: src/shiftings/organizations/templates/organizations/organization_settings.html:72 -#: src/shiftings/organizations/templates/organizations/organization_settings.html:77 msgid "Move Up" msgstr "Nach oben" -#: src/shiftings/organizations/templates/organizations/organization_settings.html:84 -#: src/shiftings/organizations/templates/organizations/organization_settings.html:89 msgid "Move Down" msgstr "Nach unten" -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:11 msgid "Full Summary" msgstr "Komplette Zusammenfassung" -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:46 msgid "Upcoming Event" msgstr "Anstehendes Event" -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:66 -#: src/shiftings/shifts/models/shift.py:21 msgid "Event" msgstr "Event" -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:68 msgid "Go to Event" msgstr "Zum Event springen" -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:74 #, python-format msgid "" "\n" @@ -2811,128 +899,96 @@ msgstr "" "td>\n" " " -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:94 msgid "No Events planned" msgstr "Keine geplanten Events" -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:102 msgid "Events disabled" msgstr "Events deaktiviert" -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:117 msgid "Create Shift from Template" msgstr "Schichten aus Vorlage erstellen" -#: src/shiftings/organizations/templates/organizations/template/member_group.html:6 msgid "Click to expand members" msgstr "Klicke für detaillierte Mitgliederansicht" -#: src/shiftings/organizations/templates/organizations/template/org_info.html:8 msgid "Organization Overview" msgstr "Organisationsübersicht" -#: src/shiftings/organizations/templates/organizations/template/org_info.html:12 msgid "Administrate Organization" msgstr "Organisation administrieren" -#: src/shiftings/organizations/templates/organizations/template/org_info.html:14 msgid "Organization Admin View" msgstr "Organisation Admin Ansicht" -#: src/shiftings/organizations/templates/organizations/template/org_info.html:19 msgid "Organization Settings" msgstr "Organisationseinstellungen" -#: src/shiftings/organizations/templates/organizations/template/org_info.html:21 msgid "Organization Settings View" msgstr "Organisations Einstellungen" -#: src/shiftings/organizations/templates/organizations/template/org_info.html:35 #, fuzzy #| msgid "See Shift Participants" msgid "Send Mail to shift participants" msgstr "Schichtteilnehmer sehen" -#: src/shiftings/organizations/templates/organizations/template/org_info.html:41 msgid "Edit Organization" msgstr "Organisation bearbeiten" -#: src/shiftings/organizations/templates/organizations/template/org_info.html:47 msgid "Update Shift Permissions" msgstr "Schichtberechtigungen aktualisieren" -#: src/shiftings/organizations/templates/organizations/template/organization.html:12 msgid "No Image available" msgstr "Kein Bild verfügbar" -#: src/shiftings/organizations/templates/organizations/user/claim_users.html:6 msgid "Imported Users" msgstr "Importierte Benutzer" -#: src/shiftings/organizations/templates/organizations/user/claim_users.html:14 msgid "Claimed" msgstr "Beansprucht" -#: src/shiftings/organizations/templates/organizations/user/claim_users.html:36 msgid "Claim" msgstr "Beanspruchen" -#: src/shiftings/organizations/templates/organizations/user/claim_users.html:43 msgid "Unclaim" msgstr "Freigeben" -#: src/shiftings/organizations/views/membership.py:55 -#: src/shiftings/organizations/views/membership_type.py:57 msgid "Membership removed" msgstr "Mitgliedschaft entfernt" -#: src/shiftings/organizations/views/organization.py:62 #, python-brace-format msgid "{org} Overview" msgstr "{org}Übersicht" -#: src/shiftings/organizations/views/organization.py:89 #, python-brace-format msgid "{org} Administration" msgstr "{org} Administration" -#: src/shiftings/organizations/views/organization.py:135 #, python-brace-format msgid "{org} Settings" msgstr "{org} Einstellungen" -#: src/shiftings/organizations/views/user.py:36 msgid "You can't claim users that are already claimed." msgstr "Du kannst keine Benutzer beanspruchen, die bereits beansprucht sind." -#: src/shiftings/shifts/forms/filters.py:12 msgid "Shifts I participate in" msgstr "Schichten, an denen ich teilnehme" -#: src/shiftings/shifts/forms/filters.py:17 -#: src/shiftings/shifts/forms/filters.py:19 msgid "Date YYYY-MM-DD" msgstr "Datum YYYY-MM-DD" -#: src/shiftings/shifts/forms/filters.py:18 -#: src/shiftings/shifts/forms/filters.py:20 msgid "Time HH:MM" msgstr "Uhrzeit HH:MM" -#: src/shiftings/shifts/forms/participant.py:28 #, python-brace-format msgid "User {user} is already registered for this shift." msgstr "Benutzer {user} wurde bereits für diese Schicht eingetragen." -#: src/shiftings/shifts/forms/participant.py:32 msgid "Organization Users" msgstr "Organisationsmitglieder" -#: src/shiftings/shifts/forms/participant.py:33 msgid "Other Users" msgstr "Andere Benutzer" -#: src/shiftings/shifts/forms/participant.py:34 msgid "" "To add users that do not belong to your organization please enter their " "username." @@ -2940,21 +996,16 @@ msgstr "" "Um Benutzer, die nicht Teil der Organisation sind, hinzuzufügen gib deren " "Benutzernamen an." -#: src/shiftings/shifts/forms/participant.py:65 msgid "Only select one type of user!" msgstr "Wähle nur einen Benutzertyp aus!" -#: src/shiftings/shifts/forms/participant.py:75 msgid "One of the user fields is required!" msgstr "Eines der Benutzerfelder ist benötigt!" -#: src/shiftings/shifts/forms/participant.py:80 #, python-brace-format msgid "Cannot add {user} multiple times to this shift" msgstr "Benutzer {user} kann nicht mehrmals zur Schicht hinzugefügt werden" -#: src/shiftings/shifts/forms/permission.py:36 -#: src/shiftings/shifts/forms/permission.py:90 #, python-brace-format msgid "" "Permission would have no effect. Permission for all Users is more extensive: " @@ -2963,7 +1014,6 @@ msgstr "" "Berechtigung hätte keinen Effekt. Berechtigung für alle Benutzer ist " "weitergehender: {permission}" -#: src/shiftings/shifts/forms/permission.py:47 #, python-brace-format msgid "" "Permission would have no effect. There is an inherited more extensive " @@ -2972,7 +1022,6 @@ msgstr "" "Berechtigung hätte keinen Effekt. Es existiert eine weitergehende " "Berechtigung: {referred_object} ({permission})" -#: src/shiftings/shifts/forms/permission.py:56 #, python-brace-format msgid "" "Permission would have no effect. There is an inherited more extensive " @@ -2981,166 +1030,124 @@ msgstr "" "Berechtigung hätte keinen Effekt. Es existiert eine weitergehende " "Berechtigung für alle Benutzer: {referred_object} ({permission})" -#: src/shiftings/shifts/forms/permission.py:78 #, python-brace-format msgid "Can only set one permission for organization \"{organization}\"" msgstr "" "Es kann nur eine Berechtigung für die Organistation \"{organization}\" " "gesetzt werden" -#: src/shiftings/shifts/forms/permission.py:80 msgid "Can only set one permission for all Users" msgstr "Es kann nur eine Berechtigung für alle Benutzer gesetzt werden" -#: src/shiftings/shifts/forms/recurring.py:13 msgid "Ordinal" msgstr "Ordinal" -#: src/shiftings/shifts/forms/recurring.py:35 msgid "Weekday can't be empty with the chosen time frame type." msgstr "Der Wochentag ist erforderlich für den angegeben Zeitraumtyp." -#: src/shiftings/shifts/forms/recurring.py:37 msgid "Month can't be empty with the chosen time frame type." msgstr "Der Monat ist erforderlich für den angegebenen Zeitraumtyp." -#: src/shiftings/shifts/forms/recurring.py:39 msgid "You need to add a warning for weekend handling." msgstr "Du musst eine Warnung für die Wochenendproblembehandlung hinzufügen." -#: src/shiftings/shifts/forms/recurring.py:41 msgid "You need to add a warning for holiday handling." msgstr "Du musst eine Warnung für die Feiertagsproblembehandlung hinzufügen." -#: src/shiftings/shifts/forms/shift.py:38 -#: src/shiftings/shifts/forms/template.py:66 +msgid "End time must be after start time" +msgstr "" + #, python-brace-format msgid "Shift is too long, can at most be {max} long" msgstr "Diese Schicht ist zu lang, sie kann Maximal {max} lang sein" -#: src/shiftings/shifts/forms/template.py:18 msgid "Date" msgstr "Datum" -#: src/shiftings/shifts/forms/template.py:18 msgid "Date to create the template on" msgstr "Datum an dem die Vorlage erstellt wird" -#: src/shiftings/shifts/forms/template.py:38 -#: src/shiftings/shifts/models/template.py:22 msgid "Start Delay" msgstr "Startverzögerung" -#: src/shiftings/shifts/forms/template.py:58 +msgid "Duration" +msgstr "Dauer" + msgid "Start Delay was None please reload and use the slider." msgstr "" "Anfangsverzögerung war None bitte lade die Seite neu und benutze den Slider." -#: src/shiftings/shifts/forms/template.py:64 msgid "Duration was None please reload and use the slider." msgstr "Dauer war None bitte lade die Seite neu und benutze den Slider." -#: src/shiftings/shifts/forms/type.py:22 msgid "Can't name a shift type \"System\"." msgstr "Ungültiger Name \"System\" für einen Schichttyp." -#: src/shiftings/shifts/models/base.py:13 -#: src/shiftings/shifts/models/template.py:19 -#: src/shiftings/shifts/templates/shifts/shift.html:39 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:18 msgid "Shift Type" msgstr "Schicht Typ" -#: src/shiftings/shifts/models/base.py:16 msgid "Required Users" msgstr "Benötigte Benutzer" -#: src/shiftings/shifts/models/base.py:18 -#: src/shiftings/shifts/models/template.py:27 msgid "A maximum of 32 users can be required" msgstr "Es können maximal 32 Benutzer benötigt werden" -#: src/shiftings/shifts/models/base.py:19 msgid "Maximum Users" msgstr "Maximale Benutzer" -#: src/shiftings/shifts/models/base.py:21 -#: src/shiftings/shifts/models/template.py:30 msgid "A maximum of 64 users can be present" msgstr "Es können maximal 64 Benutzer teilnehmen" -#: src/shiftings/shifts/models/base.py:23 -#: src/shiftings/shifts/models/template.py:32 -#: src/shiftings/shifts/templates/shifts/shift.html:79 -#: src/shiftings/shifts/templates/shifts/template/template.html:26 msgid "Additional Infos" msgstr "Zusätzliche Informationen" -#: src/shiftings/shifts/models/participant.py:16 msgid "Display Name is optional, and will be shown instead of the username" msgstr "" "Der Anzeigename ist optional und wird anstatt dem Benutzernamen angezeigt" -#: src/shiftings/shifts/models/participant.py:17 msgid "Participation confirmed" msgstr "Teilnahme bestätigt" -#: src/shiftings/shifts/models/participant.py:18 msgid "" "Whether the participant has taken part in the shift or not. Default: False" msgstr "Hat der Teilnehmer die Schicht ausgeführt. Standard: False" -#: src/shiftings/shifts/models/permission.py:18 msgid "No Permission" msgstr "Keine Berechtigung" -#: src/shiftings/shifts/models/permission.py:19 msgid "See Shift exists" msgstr "Schichttexistenz sehen" -#: src/shiftings/shifts/models/permission.py:20 msgid "See Shift Details" msgstr "Schichtdetails sehen" -#: src/shiftings/shifts/models/permission.py:21 msgid "See Shift Participants" msgstr "Schichtteilnehmer sehen" -#: src/shiftings/shifts/models/permission.py:22 msgid "Participate" msgstr "Teilnehmen" -#: src/shiftings/shifts/models/permission.py:80 msgid "Permission Type" msgstr "Berechtigungstyp" -#: src/shiftings/shifts/models/permission.py:82 msgid "Affected Organization" msgstr "Betroffene Organisationen" -#: src/shiftings/shifts/models/recurring.py:26 msgid "ignore" msgstr "ignorieren" -#: src/shiftings/shifts/models/recurring.py:27 msgid "cancel" msgstr "abbrechen" -#: src/shiftings/shifts/models/recurring.py:28 msgid "show warning" msgstr "Warnung anzeigen" -#: src/shiftings/shifts/models/recurring.py:36 msgid "Timeframe Type" msgstr "Zeitraum Typ" -#: src/shiftings/shifts/models/recurring.py:41 -#: src/shiftings/shifts/templates/shifts/recurring/list.html:10 -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:53 msgid "First Occurrence" msgstr "Erster Termin" -#: src/shiftings/shifts/models/recurring.py:42 msgid "" "Choose a minimum day for first occurrence and the system will automatically " "choose the next applicable day." @@ -3148,142 +1155,101 @@ msgstr "" "Wähle einen Tag für die erste Angabe und das system wird automatisch den " "nächsten zutreffenden Tag berechnen." -#: src/shiftings/shifts/models/recurring.py:46 msgid "Auto create days" msgstr "" -#: src/shiftings/shifts/models/recurring.py:46 msgid "How many days in advance should the shifts be created?" msgstr "" -#: src/shiftings/shifts/models/recurring.py:48 msgid "Shift Template" msgstr "Schichtvorlage" -#: src/shiftings/shifts/models/recurring.py:52 msgid "Weekend problem handling" msgstr "Wochenendproblembehandlung" -#: src/shiftings/shifts/models/recurring.py:54 msgid "Warning text for weekend" msgstr "Warnung für Wochenenden" -#: src/shiftings/shifts/models/recurring.py:59 msgid "Holidays problem handling" msgstr "Feiertagsproblembehandlung" -#: src/shiftings/shifts/models/recurring.py:61 msgid "Warning text for holidays" msgstr "Warnung für Feiertage" -#: src/shiftings/shifts/models/recurring.py:67 msgid "Manually Disabled" msgstr "Manuell deaktiviert" -#: src/shiftings/shifts/models/recurring.py:88 msgid "Nth" msgstr "Nte" -#: src/shiftings/shifts/models/recurring.py:89 msgid "[weekday]" msgstr "[Wochentag]" -#: src/shiftings/shifts/models/recurring.py:90 msgid "[month]" msgstr "[Monat]" -#: src/shiftings/shifts/models/shift.py:24 msgid "Start Date and Time" msgstr "Startdatum und Zeit" -#: src/shiftings/shifts/models/shift.py:25 msgid "End Date and Time" msgstr "Enddatum und Zeit" -#: src/shiftings/shifts/models/shift.py:27 -#: src/shiftings/shifts/templates/shifts/template/shift.html:13 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:21 msgid "Users" msgstr "Benutzer" -#: src/shiftings/shifts/models/shift.py:30 msgid "Locked for Participation" msgstr "Teilnahme geschlossen" -#: src/shiftings/shifts/models/shift.py:31 -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:58 -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:64 msgid "Warning" msgstr "Warnung" -#: src/shiftings/shifts/models/shift.py:35 msgid "Created by Recurring Shift" msgstr "Erstellt von wiederkehrender Schicht" -#: src/shiftings/shifts/models/shift.py:37 -#: src/shiftings/shifts/templates/shifts/shift.html:53 -msgid "Created" -msgstr "Erstellt" - -#: src/shiftings/shifts/models/shift.py:38 -#: src/shiftings/shifts/templates/shifts/shift.html:55 msgid "Last Modified" msgstr "Zuletzt geändert" -#: src/shiftings/shifts/models/shift.py:54 msgid "Organization and Event Organization must be identical." msgstr "Organistion und Event Organistation müssen identisch sein." -#: src/shiftings/shifts/models/shift.py:57 #, python-brace-format msgid "Shift {name} on {time}" msgstr "Schicht {name} am {time}" -#: src/shiftings/shifts/models/shift.py:65 #, python-brace-format msgid "{name} from {start} to {end} " msgstr "{name} von {start} bis {end} " -#: src/shiftings/shifts/models/shift.py:72 #, python-brace-format msgid "{start} to {end_time} on {end_date} " msgstr "{start} bis {end_time} am {end_date} " -#: src/shiftings/shifts/models/shift.py:76 #, python-brace-format msgid "{start} to {end_time}" msgstr "{start} bis {end_time}" -#: src/shiftings/shifts/models/summary.py:11 msgid "\"Other\" Shift Type Group Name" msgstr "\"Sonstige\" Schichttyp Gruppenname" -#: src/shiftings/shifts/models/summary.py:14 msgid "Default time range for summary" msgstr "Standard Zeitraum für die Zusammenfassung" -#: src/shiftings/shifts/models/summary.py:25 #, python-brace-format msgid "Organization summary settings of {organization}" msgstr "Zusammenfassungseinstellungen von {organization}" -#: src/shiftings/shifts/models/template.py:16 msgid "Template Group" msgstr "Vorlagengruppe" -#: src/shiftings/shifts/models/template.py:25 msgid "Required User" msgstr "Benötigte Benutzer" -#: src/shiftings/shifts/models/template.py:28 msgid "Maximum User" msgstr "Maximale Benutzer" -#: src/shiftings/shifts/signals.py:26 msgid "Could not find a valid first occurrence." msgstr "Konnte keinen validen ersten Termin finden." -#: src/shiftings/shifts/templates/shifts/create_shift.html:11 #, python-format msgid "" "\n" @@ -3294,7 +1260,6 @@ msgstr "" "

Neue Schicht für %(organization)s erstellen

\n" " " -#: src/shiftings/shifts/templates/shifts/create_shift.html:15 #, python-format msgid "" "\n" @@ -3306,70 +1271,46 @@ msgstr "" "h4>\n" " " -#: src/shiftings/shifts/templates/shifts/create_shift.html:22 -#: src/shiftings/shifts/templates/shifts/create_shift.html:83 -#: src/shiftings/shifts/templates/shifts/recurring/form.html:23 -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:19 -#: src/shiftings/templates/generic/create_or_update.html:18 -#: src/shiftings/templates/generic/form_card.html:8 msgid "Create" msgstr "Erstellen" -#: src/shiftings/shifts/templates/shifts/create_shift.html:24 msgid "Update" msgstr "Aktualisieren" -#: src/shiftings/shifts/templates/shifts/create_shift.html:26 -#: src/shiftings/shifts/templates/shifts/edit_participation_permissions.html:34 -#: src/shiftings/templates/generic/create_or_update.html:22 msgid "Back" msgstr "Zurück" -#: src/shiftings/shifts/templates/shifts/create_shift.html:47 msgid "Shift starting time" msgstr "Schicht Startzeit" -#: src/shiftings/shifts/templates/shifts/create_shift.html:48 msgctxt "Shift time" msgid "Start Time" msgstr "Startzeit" -#: src/shiftings/shifts/templates/shifts/create_shift.html:52 msgid "Shift end time" msgstr "Schichtende" -#: src/shiftings/shifts/templates/shifts/create_shift.html:53 msgctxt "Shift time" msgid "End Time" msgstr "Endzeit" -#: src/shiftings/shifts/templates/shifts/create_shift.html:59 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:24 msgid "Required number of users to fill this shift" msgstr "Benötigte Anzahl an Benutzern um die Schicht zu füllen" -#: src/shiftings/shifts/templates/shifts/create_shift.html:60 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:25 msgctxt "Shift users" msgid "Required" msgstr "Benötigt" -#: src/shiftings/shifts/templates/shifts/create_shift.html:64 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:29 msgid "Maximum number of users allowed in this shift" msgstr "Maximale Anzahl an Benutzern in dieser Schicht" -#: src/shiftings/shifts/templates/shifts/create_shift.html:65 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:30 msgctxt "Shift users" msgid "Maximum" msgstr "Maximum" -#: src/shiftings/shifts/templates/shifts/create_shift.html:76 msgid "Create from Template" msgstr "Aus Vorlage erstellen" -#: src/shiftings/shifts/templates/shifts/edit_participation_permissions.html:17 #, python-format msgid "" "\n" @@ -3382,39 +1323,30 @@ msgstr "" "mit \"+\" hinzu\n" " " -#: src/shiftings/shifts/templates/shifts/edit_participation_permissions.html:26 msgid "Edit Shift Permissions for" msgstr "Schichtberechtigungen bearbeiten" -#: src/shiftings/shifts/templates/shifts/edit_participation_permissions.html:38 msgid "How does it work?" msgstr "Wie funktioniert es?" -#: src/shiftings/shifts/templates/shifts/edit_participation_permissions.html:53 msgid "Inherited Permissions" msgstr "Geerbte Berechtigungen" -#: src/shiftings/shifts/templates/shifts/edit_participation_permissions.html:65 msgid "All Users" msgstr "Alle Benutzer" -#: src/shiftings/shifts/templates/shifts/edit_templates.html:21 msgid "Edit Templates for" msgstr "Bearbeite Vorlagen für" -#: src/shiftings/shifts/templates/shifts/edit_templates.html:29 msgid "Cancel" msgstr "Abbrechen" -#: src/shiftings/shifts/templates/shifts/recurring/form.html:33 msgid "Recurring Time Frame" msgstr "Wiederkehrender Zeitraum" -#: src/shiftings/shifts/templates/shifts/recurring/form.html:42 msgid "Shift Information" msgstr "Schichtinformation" -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:16 #, python-format msgid "" "\n" @@ -3425,11 +1357,9 @@ msgstr "" " Möchtest du diese Schicht am %(date)s erstellen\n" " " -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:37 msgid "Edit Recurring Shift" msgstr "Wiederkehrende Schicht bearbeiten" -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:44 #, python-format msgid "" "\n" @@ -3442,7 +1372,6 @@ msgstr "" "%(time)s\n" " " -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:48 #, fuzzy, python-format #| msgid "" #| "\n" @@ -3457,44 +1386,33 @@ msgstr "" " vor %(time)s\n" " " -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:55 msgid "Weekend Handling" msgstr "Wochenendvorgehen" -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:61 msgid "Holiday Handling" msgstr "Feiertagsvorgehen" -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:75 msgid "Upcoming recurring Shifts" msgstr "Anstehende wiederkehrende Schichten" -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:86 msgid "No upcoming created Shifts" msgstr "Keine anstehenden erstellten Schichten" -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:93 msgid "Passed recurring Shifts" msgstr "Vergangenen Wiederkehrende Schichten" -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:104 msgid "No created Shifts have passed yet" msgstr "Keine erstellten Schichten sind abgelaufen" -#: src/shiftings/shifts/templates/shifts/shift.html:16 -#: src/shiftings/shifts/views/shift.py:78 msgid "Edit Shift" msgstr "Schicht bearbeiten" -#: src/shiftings/shifts/templates/shifts/shift.html:22 msgid "Delete Shift" msgstr "Schicht löschen" -#: src/shiftings/shifts/templates/shifts/shift.html:28 msgid "Edit Permissions" msgstr "Berechtigungen bearbeiten" -#: src/shiftings/shifts/templates/shifts/shift.html:57 #, python-format msgid "" "\n" @@ -3505,219 +1423,163 @@ msgstr "" " vor %(time)s\n" " " -#: src/shiftings/shifts/templates/shifts/shift.html:66 -#: src/shiftings/shifts/templates/shifts/template/shift_card.html:13 msgid "Shift Participants" msgstr "Schichtteilnehmer" -#: src/shiftings/shifts/templates/shifts/shift.html:71 msgid "Add participant" msgstr "Teilnehmer hinzufügen" -#: src/shiftings/shifts/templates/shifts/shift.html:84 msgid "Nothing to consider." msgstr "Nichts zu beachten." -#: src/shiftings/shifts/templates/shifts/shift_participants.html:11 msgid "" "This shift is over, do you really want/need to add yourself as participant?" msgstr "" -#: src/shiftings/shifts/templates/shifts/shift_url_filters.html:8 msgid "Toggle Shift Filters" msgstr "Schichtfilter umschalten" -#: src/shiftings/shifts/templates/shifts/summary/summary.html:6 msgid "Shift Summary" msgstr "Mitglieder Schichten Zusammenfassung" -#: src/shiftings/shifts/templates/shifts/template/group.html:17 msgid "Delete Template" msgstr "Vorlage löschen" -#: src/shiftings/shifts/templates/shifts/template/group.html:21 msgid "Edit Template" msgstr "Vorlage bearbeiten" -#: src/shiftings/shifts/templates/shifts/template/group.html:25 -#: src/shiftings/shifts/templates/shifts/template/group_template.html:13 msgid "Edit Shifts" msgstr "Schichten bearbeiten" -#: src/shiftings/shifts/templates/shifts/template/group.html:31 msgid "Edit Template Permissions" msgstr "Vorlagenberechtigungen bearbeiten" -#: src/shiftings/shifts/templates/shifts/template/group.html:70 msgid "Create Shift Templates" msgstr "Schichtvorlagen erstellen" -#: src/shiftings/shifts/templates/shifts/template/group_template.html:9 msgid "Edit Shifts Template" msgstr "Schichtvorlage bearbeiten" -#: src/shiftings/shifts/templates/shifts/template/member_shift_summary.html:3 msgid "Member" msgstr "Mitglied" -#: src/shiftings/shifts/templates/shifts/template/member_shift_summary.html:10 msgid "Total" msgstr "Summe" -#: src/shiftings/shifts/templates/shifts/template/participation_permission_form.html:9 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:10 msgid "Remove Shift" msgstr "Schicht löschen" -#: src/shiftings/shifts/templates/shifts/template/participation_permission_form.html:12 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:13 msgid "Restore Shift" msgstr "Schicht wiederherstellen" -#: src/shiftings/shifts/templates/shifts/template/select_org.html:3 msgid "Select Organization to create Shift for" msgstr "Organisation auswählen für die eine Schicht erstellt werden soll" -#: src/shiftings/shifts/templates/shifts/template/shift.html:5 msgid "Go to Shift" msgstr "Zur Schicht springen" -#: src/shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:5 msgid "Filters" msgstr "Filter" -#: src/shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:8 msgid "Reset Filter" msgstr "Filter zurürcksetzen" -#: src/shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:12 msgid "Apply Filter" msgstr "Filter anwenden" -#: src/shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:15 msgid "Parameters" msgstr "Parameter" -#: src/shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:29 msgid "Select Organizations" msgstr "Wähle Organisationen" -#: src/shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:47 msgid "Shift starts after" msgstr "Schicht startet nach" -#: src/shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:52 msgid "Shift ends before" msgstr "Schicht endet vor" -#: src/shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:65 msgid "Select Events" msgstr "Events auswählen" -#: src/shiftings/shifts/templates/shifts/template/slots_display.html:4 msgid "Required to carry out this Shift" msgstr "Benötigte um die Schicht zu erledigen" -#: src/shiftings/shifts/templates/shifts/template/slots_display.html:6 msgid "Open Shift Slot" msgstr "Offene Postiion" -#: src/shiftings/shifts/templates/shifts/template/slots_display.html:32 msgid "Free" msgstr "Frei" -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:20 msgid "Required" msgstr "Benötigt" -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:23 msgid "Confirmed" msgstr "Bestätigt" -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:29 msgid "Participating" msgstr "Teilnehmer" -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:34 msgid "Full" msgstr "Voll" -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:40 msgid "Additional Users required" msgstr "Zusätzliche Mitglieder benötigt" -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:42 msgid "Additional Slots available" msgstr "Zusätzliche Plätze verfügbar" -#: src/shiftings/shifts/templates/shifts/template/template.html:11 msgid "Calendar Background Color" msgstr "Kalender Hintergrundfarbe" -#: src/shiftings/shifts/templates/shifts/template/template.html:17 msgid "Required Users/Max Users" msgstr "Benötigte Benutzer/Maximale Benutzer" -#: src/shiftings/shifts/templates/shifts/template/template.html:21 msgid "Unlimited" msgstr "Unbegrenzt" -#: src/shiftings/shifts/templates/shifts/template/template_form.html:36 msgid "Delay to starting time" msgstr "Verzögerung zur Startzeit" -#: src/shiftings/shifts/templates/shifts/template/template_form.html:37 msgctxt "Shift time" msgid "Start Delay" msgstr "Startverzögerung" -#: src/shiftings/shifts/templates/shifts/template/template_form.html:41 msgid "Shift Duration" msgstr "Dauer der Schicht" -#: src/shiftings/shifts/templates/shifts/template/template_form.html:42 msgctxt "Shift time" msgid "Duration" msgstr "Dauer" -#: src/shiftings/shifts/templates/shifts/type_group/list.html:8 msgid "Actions" msgstr "Aktionen" -#: src/shiftings/shifts/templatetags/shifts.py:90 #, python-brace-format msgid "Days + {delta_days}" msgstr "Tage + {delta_days}" -#: src/shiftings/shifts/utils/time_frame.py:17 msgid "Nth [weekday] of each month" msgstr "Nte [Wochentag] jeden Monat" -#: src/shiftings/shifts/utils/time_frame.py:18 msgid "Nth day of each month" msgstr "Nte Tag jeden Monat" -#: src/shiftings/shifts/utils/time_frame.py:19 msgid "every Nth [weekday]" msgstr "Jeden Nte [Wochentag]" -#: src/shiftings/shifts/utils/time_frame.py:20 msgid "Nth workday of each month" msgstr "Jeden Nte Werktag jedes Monats" -#: src/shiftings/shifts/utils/time_frame.py:21 msgid "Nth day of [month]" msgstr "Nte Tag des [Monats]" -#: src/shiftings/shifts/utils/time_frame.py:22 msgid "Nth workday of [month]" msgstr "Nte Werktag des [Monats]" -#: src/shiftings/shifts/views/participant.py:42 msgid "This shift is over, do you really want/need to add a participant?" msgstr "" -#: src/shiftings/shifts/views/permission.py:50 #, python-brace-format msgid "" "

Any Permission present will be applied to all Shifts belonging to " @@ -3732,35 +1594,27 @@ msgstr "" "weitergehenden Berechtigungen. Berechtigungen können für \"Alle Benutzer " "oder spezielle Organisationen festgelegt werden.\"

" -#: src/shiftings/shifts/views/recurring.py:85 msgid "Forbidden Method GET" msgstr "Verbotene Methode GET" -#: src/shiftings/shifts/views/recurring.py:98 msgid "Created Shifts on {}" msgstr "Schicht am {} erstellt" -#: src/shiftings/shifts/views/recurring.py:102 msgid "Error while creating shifts. Invalid Date" msgstr "Fehler beim erstellen der Schichten. Ungültiges Datum" -#: src/shiftings/shifts/views/shift.py:164 msgid "Unable to delete past shifts." msgstr "Konnte vergangene Schichten nicht löschen." -#: src/shiftings/templates/403.html:6 msgid "You don't have the permission to do that!" msgstr "Du besitzt nicht die benötigten Berechtigungen!" -#: src/shiftings/templates/404.html:6 msgid "The site you requested was not found." msgstr "Die gesuchte Seite wurde nicht gefunden." -#: src/shiftings/templates/500.html:6 msgid "A server error occured the admins have been notified" msgstr "Ein Fehler ist aufgereten die Admins wurden benachrichtigt" -#: src/shiftings/templates/generic/create_or_update.html:5 #, python-format msgid "" "\n" @@ -3771,7 +1625,6 @@ msgstr "" "

Erstelle %(object)s

\n" " " -#: src/shiftings/templates/generic/create_or_update.html:9 #, python-format msgid "" "\n" @@ -3782,7 +1635,6 @@ msgstr "" "

Aktualisiere %(object_name)s

\n" " " -#: src/shiftings/templates/generic/delete.html:6 #, python-format msgid "" "\n" @@ -3794,53 +1646,48 @@ msgstr "" "p>\n" " " -#: src/shiftings/templates/generic/modular_search.html:4 +msgid "Yes" +msgstr "Ja" + +msgid "No" +msgstr "Nein" + msgid "Filter by Name" msgstr "Nach Namen filtern" -#: src/shiftings/templates/generic/modular_search.html:6 msgid "submit search" msgstr "Suche starten" -#: src/shiftings/templates/language.html:16 msgid "Language" msgstr "Sprache" -#: src/shiftings/templates/language.html:21 msgid "German" msgstr "Deutsch" -#: src/shiftings/templates/language.html:24 msgid "English" msgstr "Englisch" -#: src/shiftings/templates/month_view.html:2 +msgid "Close" +msgstr "Schließen" + msgid "M" msgstr "M" -#: src/shiftings/templates/month_view.html:3 -#: src/shiftings/templates/month_view.html:5 msgid "T" msgstr "T" -#: src/shiftings/templates/month_view.html:4 msgid "W" msgstr "W" -#: src/shiftings/templates/month_view.html:6 msgid "F" msgstr "F" -#: src/shiftings/templates/month_view.html:7 -#: src/shiftings/templates/month_view.html:8 msgid "S" msgstr "S" -#: src/shiftings/templates/switch_user.html:5 msgid "Switch User" msgstr "Benutzer wechseln" -#: src/shiftings/templates/template/remove_modal.html:12 #, python-format msgid "" "\n" @@ -3853,7 +1700,6 @@ msgstr "" "bold\"> von %(target)s\n" " " -#: src/shiftings/templates/template/remove_modal.html:16 msgid "" "\n" " Removing \n" " " -#: src/shiftings/templates/template/remove_modal.html:26 #, python-format msgid "" "\n" @@ -3880,7 +1725,6 @@ msgstr "" "text-danger\">\" von %(target)s\n" " " -#: src/shiftings/templates/template/remove_modal.html:31 msgid "" "\n" " Are you sure you want to remove\n" @@ -3894,101 +1738,357 @@ msgstr "" "text-danger\"> löschen möchtest\"\n" " " -#: src/shiftings/templates/template/remove_modal.html:38 msgid "Remove" msgstr "Entfernen" -#: src/shiftings/templates/template/remove_modal.html:39 -#: src/shiftings/templates/template/simple_display_modal.html:15 -#: src/shiftings/templates/template/simple_form_modal.html:22 -msgid "Close" -msgstr "Schließen" - -#: src/shiftings/templates/top_nav.html:12 msgid "Overview" msgstr "Übersicht" -#: src/shiftings/templates/top_nav.html:32 -#: src/shiftings/templates/top_nav.html:33 msgid "Help" msgstr "Hilfe" -#: src/shiftings/templates/top_nav.html:48 msgid "Profile" msgstr "Profil" -#: src/shiftings/templates/widgets/time_slider.html:9 msgid "You need to enter a valid timeframe in the form of HH:MM." msgstr "Du muss einen validen Zeitraum inder Form HH:MM eingeben." -#: src/shiftings/templates/widgets/time_slider.html:13 msgid "Day: +" msgstr "Tag: +" -#: src/shiftings/utils/string.py:5 #, python-format msgid "The function %(name)s has to be implemented." msgstr "Die Funktion %(name)s muss implementiert werden." -#: src/shiftings/utils/time/month.py:32 +msgid "January" +msgstr "Januar" + +msgid "February" +msgstr "Februar" + +msgid "March" +msgstr "März" + +msgid "April" +msgstr "April" + +msgid "May" +msgstr "Mai" + +msgid "June" +msgstr "Juni" + +msgid "July" +msgstr "Juli" + +msgid "August" +msgstr "August" + +msgid "September" +msgstr "September" + +msgid "October" +msgstr "Oktober" + +msgid "November" +msgstr "November" + +msgid "December" +msgstr "Dezember" + msgid "Day of the Month" msgstr "Tag des Monats" -#: src/shiftings/utils/time/timerange.py:13 msgid "Quarter" msgstr "Quartal" -#: src/shiftings/utils/time/timerange.py:14 msgid "Half Year" msgstr "Halbjahr" -#: src/shiftings/utils/time/timerange.py:15 msgid "Year" msgstr "Jahr" -#: src/shiftings/utils/time/timerange.py:16 msgid "Decade" msgstr "Dekade" -#: src/shiftings/utils/time/timerange.py:17 msgid "Century" msgstr "Jahrhundert" -#: src/shiftings/utils/time/timerange.py:18 msgid "Millennium" msgstr "Millennium" -#: src/shiftings/utils/time/week.py:27 +msgid "Monday" +msgstr "Montag" + +msgid "Tuesday" +msgstr "Dienstag" + +msgid "Wednesday" +msgstr "Mittwoch" + +msgid "Thursday" +msgstr "Donnerstag" + +msgid "Friday" +msgstr "Freitag" + +msgid "Saturday" +msgstr "Samstag" + +msgid "Sunday" +msgstr "Sonntag" + msgid "Day of the Week" msgstr "Wochentag" -#: src/shiftings/utils/typing.py:20 msgid "Value is not supposed to be None." msgstr "Dieser Wert sollte nicht None sein." -#: src/shiftings/utils/views/base.py:62 msgid "The pk is missing from the url. This is not supposed to be possible." msgstr "Der PK fehlt in der url. Das sollte nicht passieren." -#: src/shiftings/utils/views/base.py:65 #, python-format msgid "There is no %(name)s with that pk." msgstr "Es existiert kein %(name)s mit diesem pk." -#: src/shiftings/utils/views/base.py:73 msgid "You don't have the required permission." msgstr "Du besitzt nicht die benötigten Berechtigungen." -#: src/shiftings/utils/views/base.py:90 msgid "No URL to redirect to. Provide a success_url." msgstr "Keine URL zum verweisen. Bitte gib eine success_url an." -#: src/shiftings/utils/views/base.py:108 msgid "Could not find the requested page. This might be a configuration error." msgstr "" "Konnte die angefragte Seite nicht finden. Dies könnte ein Einstellungsfehler " "sein." +#, fuzzy +#~| msgid "Abort" +#~ msgid "Aborted!" +#~ msgstr "Abbrechen" + +#, fuzzy +#~| msgid "Actions" +#~ msgid "Options" +#~ msgstr "Aktionen" + +#, fuzzy +#~| msgid "Required" +#~ msgid "required" +#~ msgstr "Benötigt" + +#, fuzzy +#~| msgid "Unknown User" +#~ msgid "unknown error" +#~ msgstr "Unbekannter Benutzer" + +#, fuzzy +#~| msgid "Profile" +#~ msgid "file" +#~ msgstr "Profil" + +#, fuzzy +#~| msgid "Organization" +#~ msgid "Syndication" +#~ msgstr "Organisation" + +#, fuzzy +#~| msgid "Enter Name" +#~ msgid "Enter a number." +#~ msgstr "Name einegeben" + +#, fuzzy +#~| msgid "End" +#~ msgid "and" +#~ msgstr "Ende" + +#, fuzzy +#~| msgid "December" +#~ msgid "Decimal number" +#~ msgstr "Dezember" + +#, fuzzy +#~| msgid "Subject" +#~ msgid "A JSON object" +#~ msgstr "Betreff" + +#, fuzzy +#~| msgid "One of the user fields is required!" +#~ msgid "This field is required." +#~ msgstr "Eines der Benutzerfelder ist benötigt!" + +#, fuzzy +#~| msgid "Enter Name" +#~ msgid "Enter a valid time." +#~ msgstr "Name einegeben" + +#, fuzzy +#~| msgid "Enter Name or Organization" +#~ msgid "Enter a valid duration." +#~ msgstr "Name oder Organisation angeben" + +#, fuzzy +#~| msgid "Delete Shift" +#~ msgid "Delete" +#~ msgstr "Schicht löschen" + +#, fuzzy +#~| msgid "Current Events" +#~ msgid "Currently" +#~ msgstr "Aktuelle Events" + +#, fuzzy +#~| msgid "M" +#~ msgid "PM" +#~ msgstr "M" + +#, fuzzy +#~| msgid "M" +#~ msgid "AM" +#~ msgstr "M" + +#, fuzzy +#~| msgid "Month" +#~ msgid "Mon" +#~ msgstr "Monat" + +#, fuzzy +#~| msgid "Tuesday" +#~ msgid "Tue" +#~ msgstr "Dienstag" + +#, fuzzy +#~| msgid "Friday" +#~ msgid "Fri" +#~ msgstr "Freitag" + +#, fuzzy +#~| msgid "Start" +#~ msgid "Sat" +#~ msgstr "Start" + +#, fuzzy +#~| msgid "Sunday" +#~ msgid "Sun" +#~ msgstr "Sonntag" + +#, fuzzy +#~| msgid "May" +#~ msgid "may" +#~ msgstr "Mai" + +#, fuzzy +#~| msgid "March" +#~ msgctxt "abbrev. month" +#~ msgid "March" +#~ msgstr "März" + +#, fuzzy +#~| msgid "April" +#~ msgctxt "abbrev. month" +#~ msgid "April" +#~ msgstr "April" + +#, fuzzy +#~| msgid "May" +#~ msgctxt "abbrev. month" +#~ msgid "May" +#~ msgstr "Mai" + +#, fuzzy +#~| msgid "June" +#~ msgctxt "abbrev. month" +#~ msgid "June" +#~ msgstr "Juni" + +#, fuzzy +#~| msgid "July" +#~ msgctxt "abbrev. month" +#~ msgid "July" +#~ msgstr "Juli" + +#, fuzzy +#~| msgid "January" +#~ msgctxt "alt. month" +#~ msgid "January" +#~ msgstr "Januar" + +#, fuzzy +#~| msgid "February" +#~ msgctxt "alt. month" +#~ msgid "February" +#~ msgstr "Februar" + +#, fuzzy +#~| msgid "March" +#~ msgctxt "alt. month" +#~ msgid "March" +#~ msgstr "März" + +#, fuzzy +#~| msgid "April" +#~ msgctxt "alt. month" +#~ msgid "April" +#~ msgstr "April" + +#, fuzzy +#~| msgid "May" +#~ msgctxt "alt. month" +#~ msgid "May" +#~ msgstr "Mai" + +#, fuzzy +#~| msgid "June" +#~ msgctxt "alt. month" +#~ msgid "June" +#~ msgstr "Juni" + +#, fuzzy +#~| msgid "July" +#~ msgctxt "alt. month" +#~ msgid "July" +#~ msgstr "Juli" + +#, fuzzy +#~| msgid "August" +#~ msgctxt "alt. month" +#~ msgid "August" +#~ msgstr "August" + +#, fuzzy +#~| msgid "September" +#~ msgctxt "alt. month" +#~ msgid "September" +#~ msgstr "September" + +#, fuzzy +#~| msgid "October" +#~ msgctxt "alt. month" +#~ msgid "October" +#~ msgstr "Oktober" + +#, fuzzy +#~| msgid "November" +#~ msgctxt "alt. month" +#~ msgid "November" +#~ msgstr "November" + +#, fuzzy +#~| msgid "December" +#~ msgctxt "alt. month" +#~ msgid "December" +#~ msgstr "Dezember" + +#, fuzzy +#~| msgid "Forbidden Method GET" +#~ msgid "Forbidden" +#~ msgstr "Verbotene Methode GET" + +#, fuzzy +#~| msgid "Close" +#~ msgid "close" +#~ msgstr "Schließen" + #, python-format #~ msgid "" #~ "\n" @@ -4028,9 +2128,6 @@ msgstr "" #~ msgid "Day" #~ msgstr "Tag" -#~ msgid "All Shifts" -#~ msgstr "Alle Schichten" - #~ msgid "Events" #~ msgstr "Events" @@ -4040,9 +2137,6 @@ msgstr "" #~ msgid "This Day" #~ msgstr "Dieser Tag" -#~ msgid "Calendar" -#~ msgstr "Kalender" - #~ msgid "Organizations which are allowed to participate" #~ msgstr "Organisationen die teilnehmen dürfen" diff --git a/src/locale/en/LC_MESSAGES/django.po b/src/locale/en/LC_MESSAGES/django.po index 335980f..e5559db 100644 --- a/src/locale/en/LC_MESSAGES/django.po +++ b/src/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-25 15:12+0000\n" +"POT-Creation-Date: 2026-03-15 17:34+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,1603 +18,70 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: venv/lib/python3.11/site-packages/click/_termui_impl.py:518 -#, python-brace-format -msgid "{editor}: Editing failed" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/_termui_impl.py:522 -#, python-brace-format -msgid "{editor}: Editing failed: {e}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:1120 -msgid "Aborted!" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:1309 -#: venv/lib/python3.11/site-packages/click/decorators.py:559 -msgid "Show this message and exit." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:1340 -#: venv/lib/python3.11/site-packages/click/core.py:1370 -#, python-brace-format -msgid "(Deprecated) {text}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:1387 -msgid "Options" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:1413 -#, python-brace-format -msgid "Got unexpected extra argument ({args})" -msgid_plural "Got unexpected extra arguments ({args})" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/click/core.py:1429 -msgid "DeprecationWarning: The command {name!r} is deprecated." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:1636 -msgid "Commands" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:1668 -msgid "Missing command." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:1746 -msgid "No such command {name!r}." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:2310 -msgid "Value must be an iterable." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:2331 -#, python-brace-format -msgid "Takes {nargs} values but 1 was given." -msgid_plural "Takes {nargs} values but {len} were given." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/click/core.py:2778 -#, python-brace-format -msgid "env var: {var}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:2808 -msgid "(dynamic)" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:2821 -#, python-brace-format -msgid "default: {default}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/core.py:2834 -msgid "required" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/decorators.py:465 -#, python-format -msgid "%(prog)s, version %(version)s" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/decorators.py:528 -msgid "Show the version and exit." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:44 -#: venv/lib/python3.11/site-packages/click/exceptions.py:80 -#, python-brace-format -msgid "Error: {message}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:72 -#, python-brace-format -msgid "Try '{command} {option}' for help." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:121 -#, python-brace-format -msgid "Invalid value: {message}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:123 -#, python-brace-format -msgid "Invalid value for {param_hint}: {message}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:179 -msgid "Missing argument" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:181 -msgid "Missing option" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:183 -msgid "Missing parameter" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:185 -#, python-brace-format -msgid "Missing {param_type}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:192 -#, python-brace-format -msgid "Missing parameter: {param_name}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:212 -#, python-brace-format -msgid "No such option: {name}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:224 -#, python-brace-format -msgid "Did you mean {possibility}?" -msgid_plural "(Possible options: {possibilities})" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:262 -msgid "unknown error" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/exceptions.py:269 -msgid "Could not open file {filename!r}: {message}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/parser.py:231 -msgid "Argument {name!r} takes {nargs} values." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/parser.py:413 -msgid "Option {name!r} does not take a value." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/parser.py:474 -msgid "Option {name!r} requires an argument." -msgid_plural "Option {name!r} requires {nargs} arguments." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/click/shell_completion.py:319 -msgid "Shell completion is not supported for Bash versions older than 4.4." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/shell_completion.py:326 -msgid "Couldn't detect Bash version, shell completion is not supported." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/termui.py:158 -msgid "Repeat for confirmation" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/termui.py:174 -msgid "Error: The value you entered was invalid." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/termui.py:176 -#, python-brace-format -msgid "Error: {e.message}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/termui.py:187 -msgid "Error: The two entered values do not match." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/termui.py:243 -msgid "Error: invalid input" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/termui.py:773 -msgid "Press any key to continue..." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:266 -#, python-brace-format -msgid "" -"Choose from:\n" -"\t{choices}" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:298 -msgid "{value!r} is not {choice}." -msgid_plural "{value!r} is not one of {choices}." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/click/types.py:392 -msgid "{value!r} does not match the format {format}." -msgid_plural "{value!r} does not match the formats {formats}." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/click/types.py:414 -msgid "{value!r} is not a valid {number_type}." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:470 -#, python-brace-format -msgid "{value} is not in the range {range}." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:611 -msgid "{value!r} is not a valid boolean." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:635 -msgid "{value!r} is not a valid UUID." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:822 -msgid "file" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:824 -msgid "directory" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:826 -msgid "path" -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:877 -msgid "{name} {filename!r} does not exist." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:886 -msgid "{name} {filename!r} is a file." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:894 -#, python-brace-format -msgid "{name} '{filename}' is a directory." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:903 -msgid "{name} {filename!r} is not readable." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:912 -msgid "{name} {filename!r} is not writable." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:921 -msgid "{name} {filename!r} is not executable." -msgstr "" - -#: venv/lib/python3.11/site-packages/click/types.py:988 -#, python-brace-format -msgid "{len_type} values are required, but {len_value} was given." -msgid_plural "{len_type} values are required, but {len_value} were given." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/colorfield/validators.py:9 -msgid "Enter a valid hex color, eg. #000000" -msgstr "" - -#: venv/lib/python3.11/site-packages/colorfield/validators.py:17 -msgid "Enter a valid hexa color, eg. #00000000" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/contrib/messages/apps.py:7 -msgid "Messages" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/contrib/sitemaps/apps.py:8 -msgid "Site Maps" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/contrib/staticfiles/apps.py:9 -msgid "Static Files" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/contrib/syndication/apps.py:7 -msgid "Syndication" -msgstr "" - -#. Translators: String used to replace omitted page numbers in elided page -#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. -#: venv/lib/python3.11/site-packages/django/core/paginator.py:30 -msgid "…" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/paginator.py:50 -msgid "That page number is not an integer" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/paginator.py:52 -msgid "That page number is less than 1" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/paginator.py:57 -msgid "That page contains no results" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:23 -msgid "Enter a valid value." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:105 -#: venv/lib/python3.11/site-packages/django/forms/fields.py:743 -msgid "Enter a valid URL." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:166 -msgid "Enter a valid integer." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:177 -msgid "Enter a valid email address." -msgstr "" - -#. Translators: "letters" means latin letters: a-z and A-Z. -#: venv/lib/python3.11/site-packages/django/core/validators.py:285 -msgid "" -"Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:293 -msgid "" -"Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " -"hyphens." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:305 -#: venv/lib/python3.11/site-packages/django/core/validators.py:313 -#: venv/lib/python3.11/site-packages/django/core/validators.py:342 -msgid "Enter a valid IPv4 address." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:322 -#: venv/lib/python3.11/site-packages/django/core/validators.py:343 -msgid "Enter a valid IPv6 address." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:334 -#: venv/lib/python3.11/site-packages/django/core/validators.py:341 -msgid "Enter a valid IPv4 or IPv6 address." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:377 -msgid "Enter only digits separated by commas." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:383 -#, python-format -msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:418 -#, python-format -msgid "Ensure this value is less than or equal to %(limit_value)s." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:427 -#, python-format -msgid "Ensure this value is greater than or equal to %(limit_value)s." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:437 -#, python-format -msgid "" -"Ensure this value has at least %(limit_value)d character (it has " -"%(show_value)d)." -msgid_plural "" -"Ensure this value has at least %(limit_value)d characters (it has " -"%(show_value)d)." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:455 -#, python-format -msgid "" -"Ensure this value has at most %(limit_value)d character (it has " -"%(show_value)d)." -msgid_plural "" -"Ensure this value has at most %(limit_value)d characters (it has " -"%(show_value)d)." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:478 -#: venv/lib/python3.11/site-packages/django/forms/fields.py:343 -#: venv/lib/python3.11/site-packages/django/forms/fields.py:378 -msgid "Enter a number." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:480 -#, python-format -msgid "Ensure that there are no more than %(max)s digit in total." -msgid_plural "Ensure that there are no more than %(max)s digits in total." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:485 -#, python-format -msgid "Ensure that there are no more than %(max)s decimal place." -msgid_plural "Ensure that there are no more than %(max)s decimal places." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:490 -#, python-format -msgid "" -"Ensure that there are no more than %(max)s digit before the decimal point." -msgid_plural "" -"Ensure that there are no more than %(max)s digits before the decimal point." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:559 -#, python-format -msgid "" -"File extension “%(extension)s” is not allowed. Allowed extensions are: " -"%(allowed_extensions)s." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/core/validators.py:620 -msgid "Null characters are not allowed." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/base.py:1364 -#: venv/lib/python3.11/site-packages/django/forms/models.py:894 -msgid "and" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/base.py:1366 -#, python-format -msgid "%(model_name)s with this %(field_labels)s already exists." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:129 -#, python-format -msgid "Value %(value)r is not a valid choice." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:130 -msgid "This field cannot be null." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:131 -msgid "This field cannot be blank." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:132 -#, python-format -msgid "%(model_name)s with this %(field_label)s already exists." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:136 -#, python-format -msgid "" -"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:156 -#, python-format -msgid "Field of type: %(field_type)s" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1050 -#, python-format -msgid "“%(value)s” value must be either True or False." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1051 -#, python-format -msgid "“%(value)s” value must be either True, False, or None." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1053 -msgid "Boolean (Either True or False)" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1094 -#, python-format -msgid "String (up to %(max_length)s)" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1192 -msgid "Comma-separated integers" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1293 -#, python-format -msgid "" -"“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " -"format." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1297 -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1432 -#, python-format -msgid "" -"“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " -"date." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1301 -msgid "Date (without time)" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1428 -#, python-format -msgid "" -"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." -"uuuuuu]][TZ] format." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1436 -#, python-format -msgid "" -"“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" -"[TZ]) but it is an invalid date/time." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1441 -msgid "Date (with time)" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1565 -#, python-format -msgid "“%(value)s” value must be a decimal number." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1567 -msgid "Decimal number" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1724 -#, python-format -msgid "" -"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." -"uuuuuu] format." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1728 -#: src/shiftings/shifts/forms/template.py:40 -#: src/shiftings/shifts/models/template.py:23 -#: src/shiftings/shifts/templates/shifts/recurring/list.html:11 -msgid "Duration" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1780 -msgid "Email address" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1805 -msgid "File path" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1883 -#, python-format -msgid "“%(value)s” value must be a float." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1885 -msgid "Floating point number" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1925 -#, python-format -msgid "“%(value)s” value must be an integer." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1927 -msgid "Integer" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2019 -msgid "Big (8 byte) integer" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2036 -msgid "Small integer" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2044 -msgid "IPv4 address" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2075 -msgid "IP address" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2168 -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2169 -#, python-format -msgid "“%(value)s” value must be either None, True or False." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2171 -msgid "Boolean (Either True, False or None)" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2222 -msgid "Positive big integer" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2237 -msgid "Positive integer" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2252 -msgid "Positive small integer" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2268 -#, python-format -msgid "Slug (up to %(max_length)s)" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2304 -#: src/shiftings/mail/forms/mail.py:11 -msgid "Text" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2374 -#, python-format -msgid "" -"“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " -"format." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2378 -#, python-format -msgid "" -"“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " -"invalid time." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2382 -#: src/shiftings/cal/templates/cal/template/day_calendar_shift_types.html:23 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:197 -#: src/shiftings/shifts/templates/shifts/template/group.html:43 -#: src/shiftings/shifts/templates/shifts/template/group_template.html:23 -#: src/shiftings/shifts/templates/shifts/template/shift.html:10 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:33 -msgid "Time" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2490 -msgid "URL" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2514 -msgid "Raw binary data" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2579 -#, python-format -msgid "“%(value)s” is not a valid UUID." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:2581 -msgid "Universally unique identifier" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/files.py:232 -msgid "File" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/files.py:392 -msgid "Image" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/json.py:18 -msgid "A JSON object" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/json.py:20 -msgid "Value must be valid JSON." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/related.py:903 -#, python-format -msgid "%(model)s instance with %(field)s %(value)r does not exist." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/related.py:905 -msgid "Foreign Key (type determined by related field)" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/related.py:1204 -msgid "One-to-one relationship" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/related.py:1261 -#, python-format -msgid "%(from)s-%(to)s relationship" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/related.py:1263 -#, python-format -msgid "%(from)s-%(to)s relationships" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/db/models/fields/related.py:1311 -msgid "Many-to-many relationship" -msgstr "" - -#. Translators: If found as last label character, these punctuation -#. characters will prevent the default label_suffix to be appended to the label -#: venv/lib/python3.11/site-packages/django/forms/boundfield.py:176 -msgid ":?.!" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:91 -msgid "This field is required." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:298 -msgid "Enter a whole number." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:459 -#: venv/lib/python3.11/site-packages/django/forms/fields.py:1232 -msgid "Enter a valid date." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:482 -#: venv/lib/python3.11/site-packages/django/forms/fields.py:1233 -msgid "Enter a valid time." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:509 -msgid "Enter a valid date/time." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:543 -msgid "Enter a valid duration." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:544 -#, python-brace-format -msgid "The number of days must be between {min_days} and {max_days}." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:610 -msgid "No file was submitted. Check the encoding type on the form." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:611 -msgid "No file was submitted." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:612 -msgid "The submitted file is empty." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:614 -#, python-format -msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." -msgid_plural "" -"Ensure this filename has at most %(max)d characters (it has %(length)d)." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:619 -msgid "Please either submit a file or check the clear checkbox, not both." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:685 -msgid "" -"Upload a valid image. The file you uploaded was either not an image or a " -"corrupted image." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:848 -#: venv/lib/python3.11/site-packages/django/forms/fields.py:940 -#: venv/lib/python3.11/site-packages/django/forms/models.py:1563 -#, python-format -msgid "Select a valid choice. %(value)s is not one of the available choices." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:942 -#: venv/lib/python3.11/site-packages/django/forms/fields.py:1061 -#: venv/lib/python3.11/site-packages/django/forms/models.py:1561 -msgid "Enter a list of values." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:1062 -msgid "Enter a complete value." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:1301 -msgid "Enter a valid UUID." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/fields.py:1331 -msgid "Enter a valid JSON." -msgstr "" - -#. Translators: This is the default suffix added to form field labels -#: venv/lib/python3.11/site-packages/django/forms/forms.py:98 -msgid ":" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/forms.py:248 -#: venv/lib/python3.11/site-packages/django/forms/forms.py:328 -#, python-format -msgid "(Hidden field %(name)s) %(error)s" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/formsets.py:67 -#, python-format -msgid "" -"ManagementForm data is missing or has been tampered with. Missing fields: " -"%(field_names)s. You may need to file a bug report if the issue persists." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/formsets.py:418 -#, python-format -msgid "Please submit at most %d form." -msgid_plural "Please submit at most %d forms." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/forms/formsets.py:434 -#, python-format -msgid "Please submit at least %d form." -msgid_plural "Please submit at least %d forms." -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/forms/formsets.py:470 -#: venv/lib/python3.11/site-packages/django/forms/formsets.py:477 -#: src/shiftings/organizations/templates/organizations/organization_settings.html:38 -msgid "Order" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/formsets.py:483 -msgid "Delete" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/models.py:887 -#, python-format -msgid "Please correct the duplicate data for %(field)s." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/models.py:892 -#, python-format -msgid "Please correct the duplicate data for %(field)s, which must be unique." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/models.py:899 -#, python-format -msgid "" -"Please correct the duplicate data for %(field_name)s which must be unique " -"for the %(lookup)s in %(date_field)s." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/models.py:908 -msgid "Please correct the duplicate values below." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/models.py:1335 -msgid "The inline value did not match the parent instance." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/models.py:1426 -msgid "Select a valid choice. That choice is not one of the available choices." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/models.py:1565 -#, python-format -msgid "“%(pk)s” is not a valid value." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/utils.py:204 -#, python-format -msgid "" -"%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " -"may be ambiguous or it may not exist." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/widgets.py:434 -msgid "Clear" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/widgets.py:435 -msgid "Currently" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/widgets.py:436 -msgid "Change" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/widgets.py:765 -#: src/shiftings/accounts/templates/accounts/user_detail.html:55 -#: src/shiftings/accounts/templates/accounts/user_detail.html:65 -msgid "Unknown" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/widgets.py:766 -#: src/shiftings/templates/generic/delete.html:9 -msgid "Yes" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/forms/widgets.py:767 -#: src/shiftings/templates/generic/delete.html:11 -msgid "No" -msgstr "" - -#. Translators: Please do not add spaces around commas. -#: venv/lib/python3.11/site-packages/django/template/defaultfilters.py:858 -msgid "yes,no,maybe" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/template/defaultfilters.py:888 -#: venv/lib/python3.11/site-packages/django/template/defaultfilters.py:905 -#, python-format -msgid "%(size)d byte" -msgid_plural "%(size)d bytes" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/template/defaultfilters.py:907 -#, python-format -msgid "%s KB" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/template/defaultfilters.py:909 -#, python-format -msgid "%s MB" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/template/defaultfilters.py:911 -#, python-format -msgid "%s GB" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/template/defaultfilters.py:913 -#, python-format -msgid "%s TB" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/template/defaultfilters.py:915 -#, python-format -msgid "%s PB" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dateformat.py:77 -msgid "p.m." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dateformat.py:78 -msgid "a.m." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dateformat.py:83 -msgid "PM" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dateformat.py:84 -msgid "AM" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dateformat.py:155 -msgid "midnight" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dateformat.py:157 -msgid "noon" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:7 -#: src/shiftings/utils/time/week.py:13 -msgid "Monday" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:8 -#: src/shiftings/utils/time/week.py:14 -msgid "Tuesday" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:9 -#: src/shiftings/utils/time/week.py:15 -msgid "Wednesday" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:10 -#: src/shiftings/utils/time/week.py:16 -msgid "Thursday" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:11 -#: src/shiftings/utils/time/week.py:17 -msgid "Friday" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:12 -#: src/shiftings/utils/time/week.py:18 -msgid "Saturday" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:13 -#: src/shiftings/utils/time/week.py:19 -msgid "Sunday" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:16 -msgid "Mon" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:17 -msgid "Tue" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:18 -msgid "Wed" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:19 -msgid "Thu" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:20 -msgid "Fri" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:21 -msgid "Sat" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:22 -msgid "Sun" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:25 -#: src/shiftings/utils/time/month.py:10 -msgid "January" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:26 -#: src/shiftings/utils/time/month.py:11 -msgid "February" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:27 -#: src/shiftings/utils/time/month.py:12 -msgid "March" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:28 -#: src/shiftings/utils/time/month.py:13 -msgid "April" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:29 -#: src/shiftings/utils/time/month.py:14 -msgid "May" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:30 -#: src/shiftings/utils/time/month.py:15 -msgid "June" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:31 -#: src/shiftings/utils/time/month.py:16 -msgid "July" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:32 -#: src/shiftings/utils/time/month.py:17 -msgid "August" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:33 -#: src/shiftings/utils/time/month.py:18 -msgid "September" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:34 -#: src/shiftings/utils/time/month.py:19 -msgid "October" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:35 -#: src/shiftings/utils/time/month.py:20 -msgid "November" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:36 -#: src/shiftings/utils/time/month.py:21 -msgid "December" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:39 -msgid "jan" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:40 -msgid "feb" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:41 -msgid "mar" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:42 -msgid "apr" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:43 -msgid "may" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:44 -msgid "jun" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:45 -msgid "jul" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:46 -msgid "aug" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:47 -msgid "sep" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:48 -msgid "oct" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:49 -msgid "nov" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:50 -msgid "dec" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:53 -msgctxt "abbrev. month" -msgid "Jan." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:54 -msgctxt "abbrev. month" -msgid "Feb." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:55 -msgctxt "abbrev. month" -msgid "March" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:56 -msgctxt "abbrev. month" -msgid "April" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:57 -msgctxt "abbrev. month" -msgid "May" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:58 -msgctxt "abbrev. month" -msgid "June" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:59 -msgctxt "abbrev. month" -msgid "July" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:60 -msgctxt "abbrev. month" -msgid "Aug." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:61 -msgctxt "abbrev. month" -msgid "Sept." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:62 -msgctxt "abbrev. month" -msgid "Oct." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:63 -msgctxt "abbrev. month" -msgid "Nov." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:64 -msgctxt "abbrev. month" -msgid "Dec." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:67 -msgctxt "alt. month" -msgid "January" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:68 -msgctxt "alt. month" -msgid "February" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:69 -msgctxt "alt. month" -msgid "March" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:70 -msgctxt "alt. month" -msgid "April" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:71 -msgctxt "alt. month" -msgid "May" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:72 -msgctxt "alt. month" -msgid "June" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:73 -msgctxt "alt. month" -msgid "July" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:74 -msgctxt "alt. month" -msgid "August" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:75 -msgctxt "alt. month" -msgid "September" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:76 -msgctxt "alt. month" -msgid "October" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:77 -msgctxt "alt. month" -msgid "November" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/dates.py:78 -msgctxt "alt. month" -msgid "December" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/ipv6.py:8 -msgid "This is not a valid IPv6 address." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/text.py:77 -#, python-format -msgctxt "String to return when truncating text" -msgid "%(truncated_text)s…" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/text.py:253 -msgid "or" -msgstr "" - -#. Translators: This string is used as a separator between list elements -#: venv/lib/python3.11/site-packages/django/utils/text.py:272 -#: venv/lib/python3.11/site-packages/django/utils/timesince.py:94 -msgid ", " -msgstr "" - -#: venv/lib/python3.11/site-packages/django/utils/timesince.py:9 -#, python-format -msgid "%(num)d year" -msgid_plural "%(num)d years" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/utils/timesince.py:10 -#, python-format -msgid "%(num)d month" -msgid_plural "%(num)d months" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/utils/timesince.py:11 -#, python-format -msgid "%(num)d week" -msgid_plural "%(num)d weeks" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/utils/timesince.py:12 -#, python-format -msgid "%(num)d day" -msgid_plural "%(num)d days" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/utils/timesince.py:13 -#, python-format -msgid "%(num)d hour" -msgid_plural "%(num)d hours" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/utils/timesince.py:14 -#, python-format -msgid "%(num)d minute" -msgid_plural "%(num)d minutes" -msgstr[0] "" -msgstr[1] "" - -#: venv/lib/python3.11/site-packages/django/views/csrf.py:111 -msgid "Forbidden" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/csrf.py:112 -msgid "CSRF verification failed. Request aborted." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/csrf.py:116 -msgid "" -"You are seeing this message because this HTTPS site requires a “Referer " -"header” to be sent by your web browser, but none was sent. This header is " -"required for security reasons, to ensure that your browser is not being " -"hijacked by third parties." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/csrf.py:122 -msgid "" -"If you have configured your browser to disable “Referer” headers, please re-" -"enable them, at least for this site, or for HTTPS connections, or for “same-" -"origin” requests." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/csrf.py:127 -msgid "" -"If you are using the tag or " -"including the “Referrer-Policy: no-referrer” header, please remove them. The " -"CSRF protection requires the “Referer” header to do strict referer checking. " -"If you’re concerned about privacy, use alternatives like for links to third-party sites." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/csrf.py:136 -msgid "" -"You are seeing this message because this site requires a CSRF cookie when " -"submitting forms. This cookie is required for security reasons, to ensure " -"that your browser is not being hijacked by third parties." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/csrf.py:142 -msgid "" -"If you have configured your browser to disable cookies, please re-enable " -"them, at least for this site, or for “same-origin” requests." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/csrf.py:148 -msgid "More information is available with DEBUG=True." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:44 -msgid "No year specified" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:64 -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:115 -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:214 -msgid "Date out of range" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:94 -msgid "No month specified" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:147 -msgid "No day specified" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:194 -msgid "No week specified" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:349 -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:380 -#, python-format -msgid "No %(verbose_name_plural)s available" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:652 -#, python-format -msgid "" -"Future %(verbose_name_plural)s not available because %(class_name)s." -"allow_future is False." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/dates.py:692 -#, python-format -msgid "Invalid date string “%(datestr)s” given format “%(format)s”" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/detail.py:56 -#, python-format -msgid "No %(verbose_name)s found matching the query" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/list.py:70 -msgid "Page is not “last”, nor can it be converted to an int." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/list.py:77 -#, python-format -msgid "Invalid page (%(page_number)s): %(message)s" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/generic/list.py:169 -#, python-format -msgid "Empty list and “%(class_name)s.allow_empty” is False." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/static.py:39 -msgid "Directory indexes are not allowed here." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/static.py:41 -#, python-format -msgid "“%(path)s” does not exist" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/static.py:80 -#, python-format -msgid "Index of %(directory)s" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:7 -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:221 -msgid "The install worked successfully! Congratulations!" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:207 -#, python-format -msgid "" -"View release notes for Django %(version)s" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:222 -#, python-format -msgid "" -"You are seeing this page because DEBUG=True is in your settings file and you have not " -"configured any URLs." -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:230 -msgid "Django Documentation" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:231 -msgid "Topics, references, & how-to’s" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:239 -msgid "Tutorial: A Polling App" -msgstr "" - -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:240 -msgid "Get started with Django" +msgid "Confirm password" msgstr "" -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:248 -msgid "Django Community" +msgid "Please enter matching passwords" msgstr "" -#: venv/lib/python3.11/site-packages/django/views/templates/default_urlconf.html:249 -msgid "Connect, get help, or contribute" +msgid "Cannot change first name, last name or email for LDAP users." msgstr "" -#: venv/lib/python3.11/site-packages/django_bootstrap5/components.py:26 -msgid "close" +msgid "User" msgstr "" -#: venv/lib/python3.11/site-packages/isort/main.py:158 -msgid "show this help message and exit" +msgid "Token" msgstr "" -#: venv/lib/python3.11/site-packages/mypy/main.py:376 -#, python-format -msgid "%(prog)s: error: %(message)s\n" +msgid "Created" msgstr "" -#: src/shiftings/accounts/forms/user_form.py:11 -msgid "Confirm password" +msgid "Refresh Token" msgstr "" -#: src/shiftings/accounts/forms/user_form.py:30 -msgid "Please enter matching passwords" +msgid "Updated" msgstr "" -#: src/shiftings/accounts/models/user.py:32 -#: src/shiftings/accounts/templates/accounts/user_detail.html:52 -#: src/shiftings/shifts/models/participant.py:15 msgid "Display Name" msgstr "" -#: src/shiftings/accounts/models/user.py:33 -#: src/shiftings/events/models/event.py:29 -#: src/shiftings/organizations/models/organization.py:28 msgid "Telephone Number" msgstr "" -#: src/shiftings/accounts/templates/accounts/confirm_email.html:7 msgid "Go to Login" msgstr "" -#: src/shiftings/accounts/templates/accounts/login_form.html:6 -#: src/shiftings/accounts/templates/accounts/login_multiple.html:12 msgid "Login with local Account" msgstr "" -#: src/shiftings/accounts/templates/accounts/login_form.html:8 -#: src/shiftings/accounts/templates/accounts/login_multiple.html:20 msgid "Login with LDAP Account" msgstr "" -#: src/shiftings/accounts/templates/accounts/login_form.html:14 -#: src/shiftings/accounts/views/auth.py:27 -#: src/shiftings/templates/top_nav.html:57 msgid "Login" msgstr "" -#: src/shiftings/accounts/templates/accounts/login_form.html:16 -#: src/shiftings/accounts/templates/accounts/password_reset/prompt.html:10 msgid "Reset Password" msgstr "" -#: src/shiftings/accounts/templates/accounts/login_form.html:18 msgid "Return to selection" msgstr "" -#: src/shiftings/accounts/templates/accounts/login_form.html:29 msgid "You don't have an Account?" msgstr "" -#: src/shiftings/accounts/templates/accounts/login_form.html:30 msgid "Register here" msgstr "" -#: src/shiftings/accounts/templates/accounts/login_form.html:32 msgid "Or login using another Method" msgstr "" -#: src/shiftings/accounts/templates/accounts/login_multiple.html:5 msgid "Welcome to Shiftings" msgstr "" -#: src/shiftings/accounts/templates/accounts/login_multiple.html:6 msgid "" "To manage your shifts please authenticate with one of the given methods:" msgstr "" -#: src/shiftings/accounts/templates/accounts/login_multiple.html:31 #, python-format msgid "" "\n" @@ -1622,28 +89,21 @@ msgid "" " " msgstr "" -#: src/shiftings/accounts/templates/accounts/logout.html:6 msgid "Successfully logged out" msgstr "" -#: src/shiftings/accounts/templates/accounts/logout.html:7 msgid "Login again" msgstr "" -#: src/shiftings/accounts/templates/accounts/password_reset/confirm.html:7 msgid "Change Password" msgstr "" -#: src/shiftings/accounts/templates/accounts/password_reset/done.html:4 msgid "Your password has been reset, check your email!" msgstr "" -#: src/shiftings/accounts/templates/accounts/password_reset/done.html:5 -#: src/shiftings/accounts/templates/accounts/password_reset/success.html:5 msgid "Back to login" msgstr "" -#: src/shiftings/accounts/templates/accounts/password_reset/prompt.html:4 msgid "" "\n" " If you are an local user enter your email-adress below to reset your " @@ -1651,15 +111,12 @@ msgid "" " " msgstr "" -#: src/shiftings/accounts/templates/accounts/password_reset/success.html:4 msgid "Your password has been successfully reset!" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:3 msgid "Confirm User Deletion" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:5 #, python-format msgid "" "\n" @@ -1669,128 +126,114 @@ msgid "" " " msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:17 msgid "Yes, I want to permanently delete my Data" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:19 msgid "Abort" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:29 -#: src/shiftings/organizations/models/membership.py:68 -#: src/shiftings/shifts/models/participant.py:13 -#: src/shiftings/templates/top_nav.html:47 -msgid "User" -msgstr "" - -#: src/shiftings/accounts/templates/accounts/user_detail.html:37 -#: src/shiftings/accounts/templates/accounts/user_detail.html:57 msgid "Edit user data" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:48 -#: src/shiftings/organizations/forms/membership.py:16 msgid "Username" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:50 -#: src/shiftings/events/models/event.py:25 -#: src/shiftings/events/templates/events/event.html:85 -#: src/shiftings/organizations/models/membership.py:10 -#: src/shiftings/organizations/models/organization.py:24 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:195 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:239 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:278 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:388 -#: src/shiftings/organizations/templates/organizations/organization_settings.html:39 -#: src/shiftings/organizations/templates/organizations/user/claim_users.html:13 -#: src/shiftings/shifts/models/base.py:8 -#: src/shiftings/shifts/models/recurring.py:32 -#: src/shiftings/shifts/models/template.py:17 -#: src/shiftings/shifts/models/template_group.py:20 -#: src/shiftings/shifts/models/type.py:40 -#: src/shiftings/shifts/models/type_group.py:16 -#: src/shiftings/shifts/templates/shifts/group/list.html:6 -#: src/shiftings/shifts/templates/shifts/list.html:6 -#: src/shiftings/shifts/templates/shifts/recurring/list.html:6 -#: src/shiftings/shifts/templates/shifts/template/group_list.html:6 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:5 -#: src/shiftings/shifts/templates/shifts/type_group/list.html:7 msgid "Name" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:58 +msgid "Unknown" +msgstr "" + msgid "Set Display Name" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:62 msgid "Email" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:64 msgid "Phone Number" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:66 msgid "Member since" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:68 msgid "Total Shifts" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:70 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:124 msgid "Groups" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:71 -#: src/shiftings/events/templates/events/template/event.html:32 -#: src/shiftings/shifts/templates/shifts/template/template.html:19 msgid "None" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:77 msgid "Organizations" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:83 msgid "Hide organizations" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:102 -#: src/shiftings/events/templates/events/template/event.html:12 msgid "No Logo available" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:125 +msgid "Calendar Subscriptions" +msgstr "" + +msgid "Regenerating will invalidate existing calendar subscriptions. Continue?" +msgstr "" + +msgid "Regenerate" +msgstr "" + +msgid "Revoking will stop all calendar subscriptions. Continue?" +msgstr "" + +msgid "Revoke" +msgstr "" + +msgid "Generate Calendar URL" +msgstr "" + +msgid "" +"Use these URLs to subscribe to your shifts in a calendar app. Treat them " +"like a password." +msgstr "" + +#, fuzzy +#| msgid "Shift list" +msgid "All Shifts" +msgstr "Schichtenliste" + +msgid "Add to Calendar" +msgstr "" + +msgid "Copy URL" +msgstr "" + +msgid "My Shifts" +msgstr "" + +msgid "" +"Generate a calendar URL to subscribe to your shifts from a mobile calendar " +"app." +msgstr "" + msgid "Recent Shifts" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:127 -#: src/shiftings/accounts/templates/accounts/user_detail.html:132 msgid "Upcoming Shifts" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:136 msgid "Past Shifts" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:157 msgid "No recent Shifts" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_detail.html:159 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:135 msgid "No upcoming shifts" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_form.html:6 msgid "Register" msgstr "" -#: src/shiftings/accounts/templates/accounts/user_form.html:8 #, python-format msgid "" "\n" @@ -1798,427 +241,265 @@ msgid "" " " msgstr "" -#: src/shiftings/accounts/templates/accounts/user_form.html:19 -#: src/shiftings/templates/template/simple_form_modal.html:21 msgid "Submit" msgstr "" -#: src/shiftings/accounts/views/auth.py:83 msgid "Error while creating the user instance!" msgstr "" -#: src/shiftings/accounts/views/auth.py:87 msgid "Successfully logged in!" msgstr "" -#: src/shiftings/accounts/views/auth.py:90 #, python-format msgid "Error while trying to authenticate with sso! %(message)s" msgstr "" -#: src/shiftings/accounts/views/auth.py:131 -#: src/shiftings/templates/top_nav.html:52 msgid "Logout" msgstr "" -#: src/shiftings/accounts/views/password.py:13 +msgid "Calendar subscription URL regenerated. Old URLs will stop working." +msgstr "" + +msgid "Calendar subscription URL generated." +msgstr "" + +msgid "Calendar subscription URL revoked." +msgstr "" + msgid "Password Reset" msgstr "" -#: src/shiftings/accounts/views/password.py:19 msgid "Confirm Password Reset" msgstr "" -#: src/shiftings/accounts/views/user.py:35 -#: src/shiftings/templates/top_nav.html:15 msgid "My Shifts" msgstr "" -#: src/shiftings/accounts/views/user.py:100 msgid "Could not find your user." msgstr "" -#: src/shiftings/accounts/views/user.py:106 msgid "Your EMail was confirmed. You can now login." msgstr "" -#: src/shiftings/accounts/views/user.py:109 msgid "Your activation link was invalid." msgstr "" -#: src/shiftings/accounts/views/user.py:126 msgid "Error while deleting your data: Please confirm deletion!" msgstr "" -#: src/shiftings/cal/feed/event.py:44 msgid "Public Events" msgstr "" -#: src/shiftings/cal/forms/day_form.py:8 msgid "Select Day" msgstr "" -#: src/shiftings/cal/templates/cal/calendar_base.html:14 -#: src/shiftings/cal/templates/cal/calendar_base.html:24 msgid "Day View" msgstr "" -#: src/shiftings/cal/templates/cal/calendar_base.html:20 msgid "Day (Detailed)" msgstr "" -#: src/shiftings/cal/templates/cal/calendar_base.html:30 msgid "Day (By Types)" msgstr "" -#: src/shiftings/cal/templates/cal/calendar_base.html:37 msgid "Month View" msgstr "" -#: src/shiftings/cal/templates/cal/calendar_base.html:38 -#: src/shiftings/utils/time/month.py:25 -#: src/shiftings/utils/time/timerange.py:12 msgid "Month" msgstr "" -#: src/shiftings/cal/templates/cal/calendar_base.html:42 -#: src/shiftings/cal/templates/cal/calendar_base.html:48 msgid "List View" msgstr "" -#: src/shiftings/cal/templates/cal/calendar_base.html:44 msgid "List (Detailed)" msgstr "" -#: src/shiftings/cal/templates/cal/calendar_base.html:50 msgid "List (By Types)" msgstr "" -#: src/shiftings/cal/templates/cal/calendar_templates/cal_shift_create_entry.html:4 -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:106 -#: src/shiftings/events/templates/events/event.html:74 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:376 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:120 msgid "Create Shift" msgstr "" -#: src/shiftings/cal/templates/cal/calendar_templates/recurring_shift_entry.html:5 msgid "Recurring" msgstr "" -#: src/shiftings/cal/templates/cal/day_calendar.html:14 msgid "Previous Day" msgstr "" -#: src/shiftings/cal/templates/cal/day_calendar.html:22 msgid "Jump to Date" msgstr "" -#: src/shiftings/cal/templates/cal/day_calendar.html:28 msgid "Jump to Day" msgstr "" -#: src/shiftings/cal/templates/cal/day_calendar.html:30 msgid "Select" msgstr "" -#: src/shiftings/cal/templates/cal/day_calendar.html:38 msgid "Next Day" msgstr "" -#: src/shiftings/cal/templates/cal/list_calendar.html:12 msgid "Shift list" msgstr "Schichtenliste" -#: src/shiftings/cal/templates/cal/template/day_calendar_shift_types.html:7 -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:48 -#: src/shiftings/shifts/templates/shifts/shift_participants.html:4 +#, python-format +msgid "" +"\n" +" Your query was capped to the server limit of %(max_entries)s. Please " +"filter more specifically.\n" +" " +msgstr "" + msgid "Add with Name to Shift" msgstr "" -#: src/shiftings/cal/templates/cal/template/day_calendar_shift_types.html:33 -#: src/shiftings/organizations/models/membership.py:12 -msgid "Default" +msgid "Time" msgstr "" -#: src/shiftings/cal/templates/cal/template/day_calendar_shift_types.html:38 -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:95 -msgid "No Shifts found with these parameters or planned on this day" +msgid "Default" msgstr "" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:3 -#, python-format -msgid "" -"\n" -" Your query was capped to the server limit of %(max_entries)s. Please " -"filter more specifically.\n" -" " +msgid "No Shifts found with these parameters or planned on this day" msgstr "" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:12 -#: src/shiftings/events/models/event.py:24 -#: src/shiftings/shifts/models/base.py:12 -#: src/shiftings/shifts/models/recurring.py:34 -#: src/shiftings/shifts/models/template_group.py:24 -#: src/shiftings/shifts/models/type.py:37 -#: src/shiftings/shifts/models/type_group.py:14 -#: src/shiftings/shifts/templates/shifts/create_shift.html:79 -#: src/shiftings/shifts/templates/shifts/list.html:9 -#: src/shiftings/shifts/templates/shifts/recurring/list.html:9 -#: src/shiftings/shifts/templates/shifts/shift.html:47 -#: src/shiftings/shifts/templates/shifts/template/group.html:39 -#: src/shiftings/shifts/templates/shifts/template/group.html:45 -#: src/shiftings/shifts/templates/shifts/template/group_list.html:8 -#: src/shiftings/shifts/templates/shifts/template/group_template.html:25 msgid "Organization" msgstr "" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:13 msgid "Org" msgstr "" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:14 msgid "Shift" msgstr "" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:15 -#: src/shiftings/shifts/templates/shifts/create_shift.html:56 -#: src/shiftings/shifts/templates/shifts/template/shift.html:12 -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:21 msgid "Participants" msgstr "" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:16 -#: src/shiftings/shifts/templates/shifts/list.html:10 msgid "Start" msgstr "" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:17 -#: src/shiftings/shifts/templates/shifts/list.html:11 msgid "End" msgstr "" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:36 -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:7 msgid "Shift Details" msgstr "" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:61 -#: src/shiftings/shifts/templates/shifts/shift_participants.html:23 -#: src/shiftings/shifts/templates/shifts/template/slots_display.html:29 -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:44 msgid "Add me" msgstr "" -#: src/shiftings/cal/templates/cal/template/day_calendar_xs.html:112 -#: src/shiftings/shifts/templates/shifts/edit_participation_permissions.html:31 -#: src/shiftings/shifts/templates/shifts/edit_templates.html:26 msgid "Add Shift" msgstr "" -#: src/shiftings/cal/templates/cal/template/month_calendar.html:7 msgid "Previous Month" msgstr "" -#: src/shiftings/cal/templates/cal/template/month_calendar.html:15 msgid "Next Month" msgstr "" -#: src/shiftings/cal/templates/cal/week_calendar.html:9 msgid "Previous Week" msgstr "" -#: src/shiftings/cal/templates/cal/week_calendar.html:13 msgid "Week" msgstr "" -#: src/shiftings/cal/templates/cal/week_calendar.html:17 msgid "Next Week" msgstr "" -#: src/shiftings/cal/views/day_calendar.py:24 #, python-brace-format msgid "Day {date}" msgstr "" -#: src/shiftings/cal/views/day_calendar.py:25 msgid "Day Overview" msgstr "" -#: src/shiftings/cal/views/list.py:24 -#: src/shiftings/organizations/templates/organizations/template/org_info.html:6 msgid "Shift Overview" msgstr "" -#: src/shiftings/cal/views/month_calendar.py:24 #, python-brace-format msgid "Month {year}/{month:0>2}" msgstr "" -#: src/shiftings/cal/views/month_calendar.py:26 -#: src/shiftings/events/templates/events/event.html:52 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:162 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:28 msgid "Month Overview" msgstr "" -#: src/shiftings/events/forms/event.py:24 #, python-format msgid "Start date %(start)s was after end_date %(end)s" msgstr "" -#: src/shiftings/events/models/event.py:26 -#: src/shiftings/events/templates/events/event.html:19 -#: src/shiftings/organizations/models/organization.py:25 -#: src/shiftings/organizations/templates/organizations/template/org_info.html:58 msgid "Logo" msgstr "" -#: src/shiftings/events/models/event.py:28 -#: src/shiftings/organizations/models/organization.py:27 msgid "E-Mail" msgstr "" -#: src/shiftings/events/models/event.py:30 -#: src/shiftings/organizations/models/organization.py:29 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:81 -#: src/shiftings/organizations/templates/organizations/template/organization.html:27 msgid "Website" msgstr "" -#: src/shiftings/events/models/event.py:32 msgid "Start Date" msgstr "" -#: src/shiftings/events/models/event.py:32 msgid "Earliest date where there are shifts available" msgstr "" -#: src/shiftings/events/models/event.py:33 msgid "End Date" msgstr "" -#: src/shiftings/events/models/event.py:33 msgid "Latest date where there are shifts available" msgstr "" -#: src/shiftings/events/models/event.py:35 -#: src/shiftings/organizations/models/organization.py:32 msgid "Description" msgstr "" -#: src/shiftings/events/models/event.py:55 #, python-brace-format msgid "{name} (by {organization})" msgstr "" -#: src/shiftings/events/templates/events/event.html:10 msgid "Edit Event" msgstr "" -#: src/shiftings/events/templates/events/event.html:55 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:165 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:31 msgid "Complete Overview" msgstr "" -#: src/shiftings/events/templates/events/event.html:69 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:363 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:109 msgid "Shifts" msgstr "" -#: src/shiftings/events/templates/events/event.html:71 -#: src/shiftings/events/templates/events/event.html:72 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:371 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:112 msgid "ical Export" msgstr "" -#: src/shiftings/events/templates/events/event.html:86 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:389 -#: src/shiftings/shifts/templates/shifts/list.html:7 -#: src/shiftings/shifts/templates/shifts/recurring/list.html:7 -#: src/shiftings/shifts/templates/shifts/template/shift.html:8 -#: src/shiftings/shifts/templates/shifts/template/template.html:7 msgid "Type" msgstr "" -#: src/shiftings/events/templates/events/event.html:87 -#: src/shiftings/mail/forms/mail.py:39 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:241 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:390 -#: src/shiftings/shifts/models/template_group.py:26 -#: src/shiftings/shifts/templates/shifts/shift.html:43 -#: src/shiftings/shifts/templates/shifts/template/group_list.html:9 -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:17 -#: src/shiftings/shifts/templates/shifts/template/template.html:13 msgid "Start Time" msgstr "" -#: src/shiftings/events/templates/events/event.html:88 -#: src/shiftings/mail/forms/mail.py:40 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:391 -#: src/shiftings/shifts/templates/shifts/shift.html:45 -#: src/shiftings/shifts/templates/shifts/template/template.html:15 msgid "End Time" msgstr "" -#: src/shiftings/events/templates/events/event.html:89 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:198 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:240 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:392 -#: src/shiftings/shifts/models/base.py:9 -#: src/shiftings/shifts/models/template_group.py:21 -#: src/shiftings/shifts/templates/shifts/list.html:8 -#: src/shiftings/shifts/templates/shifts/recurring/list.html:8 -#: src/shiftings/shifts/templates/shifts/shift.html:41 -#: src/shiftings/shifts/templates/shifts/template/group.html:41 -#: src/shiftings/shifts/templates/shifts/template/group_list.html:7 -#: src/shiftings/shifts/templates/shifts/template/group_template.html:21 -#: src/shiftings/shifts/templates/shifts/template/shift_card.html:12 -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:18 msgid "Place" msgstr "" -#: src/shiftings/events/templates/events/event.html:90 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:393 msgid "Users/Required/Max" msgstr "" -#: src/shiftings/events/templates/events/event.html:108 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:416 msgid "No current shifts" msgstr "" -#: src/shiftings/events/templates/events/list.html:5 -#: src/shiftings/events/templates/events/list.html:13 -#: src/shiftings/events/templates/events/list.html:22 msgid "All Events" msgstr "" -#: src/shiftings/events/templates/events/list.html:7 -#: src/shiftings/templates/top_nav.html:22 msgid "Current Events" msgstr "" -#: src/shiftings/events/templates/events/list.html:16 msgid "All upcoming Events" msgstr "" -#: src/shiftings/events/templates/events/list.html:20 msgid "Enter Name or Organization" msgstr "" -#: src/shiftings/events/templates/events/list.html:26 msgid "Future Events" msgstr "" -#: src/shiftings/events/templates/events/list.html:39 msgid "No Events found." msgstr "" -#: src/shiftings/events/templates/events/template/event.html:23 #, python-format msgid "" "\n" @@ -2226,262 +507,202 @@ msgid "" " " msgstr "" -#: src/shiftings/events/templates/events/template/event.html:31 msgid "Open Shifts" msgstr "" -#: src/shiftings/events/templates/events/template/event.html:32 msgid "Required People" msgstr "" -#: src/shiftings/events/templates/events/template/event.html:33 msgid "Visibility" msgstr "" -#: src/shiftings/events/templates/events/template/event.html:33 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:350 msgid "Public,Private,Unknown" msgstr "" -#: src/shiftings/events/templates/events/template/event_stats.html:2 msgid "Shifts that are below the required amount of users" msgstr "" -#: src/shiftings/events/templates/events/template/event_stats.html:3 msgid "Shifts missing users" msgstr "" -#: src/shiftings/events/templates/events/template/event_stats.html:6 msgid "Shifts that are below the required and maximum amount of users" msgstr "" -#: src/shiftings/events/templates/events/template/event_stats.html:7 msgid "Shifts with open slots" msgstr "" -#: src/shiftings/events/templates/events/template/event_stats.html:10 msgid "Number of Shift slots filled with users" msgstr "" -#: src/shiftings/events/templates/events/template/event_stats.html:11 msgid "Filled Slots" msgstr "" -#: src/shiftings/events/templates/events/template/event_stats.html:12 -#: src/shiftings/events/templates/events/template/event_stats.html:16 msgid "No Shifts available" msgstr "" -#: src/shiftings/events/templates/events/template/event_stats.html:14 msgid "Number of Shift slots that are still open" msgstr "" -#: src/shiftings/events/templates/events/template/event_stats.html:15 msgid "Open Slots" msgstr "" -#: src/shiftings/mail/forms/mail.py:10 msgid "Subject" msgstr "" -#: src/shiftings/mail/forms/mail.py:12 +msgid "Text" +msgstr "" + msgid "Attachments" msgstr "" -#: src/shiftings/mail/forms/mail.py:22 +msgid "Each attachment must be smaller than 10 MB." +msgstr "" + +msgid "Total attachment size must be smaller than 25 MB." +msgstr "" + msgid "" "Send the mail only to specific membership types. Or leave blank to send to " "all." msgstr "" -#: src/shiftings/mail/forms/mail.py:37 msgid "" "Send the mail only to specific shift types. Or leave blank to send to all." msgstr "" -#: src/shiftings/mail/templates/mail/mail.html:8 +msgid "Start time must be before end time." +msgstr "" + msgid "Send Mail" msgstr "" -#: src/shiftings/mail/views/mail.py:45 #, python-brace-format msgid "E-Mail sent to {count} user(s)." msgstr "" -#: src/shiftings/organizations/forms/membership.py:40 -#: src/shiftings/shifts/forms/participant.py:57 msgid "The user you entered could not be found." msgstr "" -#: src/shiftings/organizations/models/membership.py:11 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:68 -#: src/shiftings/templates/top_nav.html:50 msgid "Admin" msgstr "" -#: src/shiftings/organizations/models/membership.py:13 msgid "Permissions" msgstr "" -#: src/shiftings/organizations/models/membership.py:19 msgid "edit organization details" msgstr "" -#: src/shiftings/organizations/models/membership.py:20 msgid "see members of the organization" msgstr "" -#: src/shiftings/organizations/models/membership.py:21 msgid "see shift participation statistics" msgstr "" -#: src/shiftings/organizations/models/membership.py:22 msgid "send emails to everyone in the organization" msgstr "" -#: src/shiftings/organizations/models/membership.py:24 msgid "create and update membership types for the organization" msgstr "" -#: src/shiftings/organizations/models/membership.py:25 msgid "add and remove members for the organization" msgstr "" -#: src/shiftings/organizations/models/membership.py:27 msgid "create and update events for the organization" msgstr "" -#: src/shiftings/organizations/models/membership.py:29 msgid "create and update recurring shifts for the organization" msgstr "" -#: src/shiftings/organizations/models/membership.py:30 msgid "create and update shifts templates for the organization" msgstr "" -#: src/shiftings/organizations/models/membership.py:31 msgid "create and update shifts for the organization" msgstr "" -#: src/shiftings/organizations/models/membership.py:32 msgid "delete uncompleted shifts for the organization" msgstr "" -#: src/shiftings/organizations/models/membership.py:34 msgid "remove others from shifts" msgstr "" -#: src/shiftings/organizations/models/membership.py:35 msgid "add other users that are not members of the organization to shifts" msgstr "" -#: src/shiftings/organizations/models/membership.py:36 msgid "add other organization members to shifts" msgstr "" -#: src/shiftings/organizations/models/membership.py:37 msgid "participate in shifts" msgstr "" -#: src/shiftings/organizations/models/membership.py:38 msgid "add self/others (depending on other permissions) to past shifts" msgstr "" -#: src/shiftings/organizations/models/membership.py:57 #, python-brace-format msgid "{name} (Admin)" msgstr "" -#: src/shiftings/organizations/models/membership.py:59 #, python-brace-format msgid "{name} (Default)" msgstr "" -#: src/shiftings/organizations/models/membership.py:65 msgid "Membership Type" msgstr "" -#: src/shiftings/organizations/models/membership.py:69 -#: src/shiftings/shifts/models/type.py:38 msgid "Group" msgstr "" -#: src/shiftings/organizations/models/membership.py:100 msgid "Membership can only be either user or group, not both." msgstr "" -#: src/shiftings/organizations/models/membership.py:102 msgid "Membership must consist of a user or a group." msgstr "" -#: src/shiftings/organizations/models/organization.py:30 msgid "Include Protocol i.E. https://example.com" msgstr "" -#: src/shiftings/organizations/models/organization.py:33 -#: src/shiftings/shifts/models/base.py:24 -#: src/shiftings/shifts/models/recurring.py:56 -#: src/shiftings/shifts/models/recurring.py:63 -#: src/shiftings/shifts/models/shift.py:32 -#: src/shiftings/shifts/models/template.py:33 #, python-brace-format msgid "A maximum of {amount} characters is allowed" msgstr "" -#: src/shiftings/organizations/models/organization.py:34 msgid "Confirm Participants" msgstr "" -#: src/shiftings/organizations/models/organization.py:35 msgid "Whether the participants can be confirmed or not. Default: False" msgstr "" -#: src/shiftings/organizations/models/organization.py:49 msgid "manage all organizations" msgstr "" -#: src/shiftings/organizations/models/user.py:10 msgid "Claimed by" msgstr "" -#: src/shiftings/organizations/templates/organizations/list.html:5 msgid "All Organizations" msgstr "" -#: src/shiftings/organizations/templates/organizations/list.html:7 -#: src/shiftings/templates/top_nav.html:18 msgid "My Organizations" msgstr "" -#: src/shiftings/organizations/templates/organizations/list.html:12 msgid "Enter Name" msgstr "" -#: src/shiftings/organizations/templates/organizations/list.html:14 msgid "Add new Organization" msgstr "" -#: src/shiftings/organizations/templates/organizations/list.html:25 msgid "No Organizations found." msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:6 msgid "Show membership Permissions" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:10 msgid "All Permissions" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:19 msgid "No permissions" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:26 msgid "Add member" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:41 #, python-format msgid "" "\n" @@ -2489,183 +710,129 @@ msgid "" " " msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:48 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:8 msgid "Member Shift Summary" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:54 msgid "Add Membership Type" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:78 msgid "Show user permissions" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:81 msgid "Edit Membership Type" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:90 msgid "Add Member" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:100 msgid "No Members of this type!" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:106 msgid "Direct Members" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:150 msgid "Next Shift" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:154 msgid "No Shifts planned" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:179 -#: src/shiftings/shifts/templates/shifts/template/group.html:52 msgid "Recurring Shifts" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:184 msgid "Add recurring shift" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:196 msgid "Shift count" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:199 msgid "Status" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:210 msgid "Inactive,Active,Undefined" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:216 msgid "No recurring shifts" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:223 msgid "Shifts Templates" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:228 msgid "Add shifts template" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:255 -#: src/shiftings/organizations/templates/organizations/organization_admin.html:309 msgid "No shifts templates" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:262 msgid "Shifts Types" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:267 msgid "Add Shift Type" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:279 msgid "Color" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:280 -#: src/shiftings/organizations/templates/organizations/user/claim_users.html:15 msgid "Shift Count" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:281 -#: src/shiftings/organizations/templates/organizations/organization_settings.html:41 -#: src/shiftings/organizations/templates/organizations/user/claim_users.html:16 msgid "Action" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:290 msgid "Shift Type Background Color" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:317 msgid "Upcoming Events" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:321 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:50 msgid "Expired Events" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:326 -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:55 msgid "Add Event" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:356 msgid "No upcoming Events planned" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_admin.html:367 msgid "Claim Legacy Shifts" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_settings.html:19 -#: src/shiftings/shifts/templates/shifts/edit_participation_permissions.html:36 -#: src/shiftings/shifts/templates/shifts/edit_templates.html:31 -#: src/shiftings/shifts/templates/shifts/recurring/form.html:25 -#: src/shiftings/templates/generic/create_or_update.html:20 -#: src/shiftings/templates/generic/formset.html:17 msgid "Save" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_settings.html:26 msgid "Shift Type Groups" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_settings.html:29 msgid "Create Type Group" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_settings.html:40 +msgid "Order" +msgstr "" + msgid "Types" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_settings.html:61 msgid "Edit Type Group" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_settings.html:72 -#: src/shiftings/organizations/templates/organizations/organization_settings.html:77 msgid "Move Up" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_settings.html:84 -#: src/shiftings/organizations/templates/organizations/organization_settings.html:89 msgid "Move Down" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:11 msgid "Full Summary" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:46 msgid "Upcoming Event" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:66 -#: src/shiftings/shifts/models/shift.py:21 msgid "Event" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:68 msgid "Go to Event" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:74 #, python-format msgid "" "\n" @@ -2675,463 +842,341 @@ msgid "" " " msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:94 msgid "No Events planned" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:102 msgid "Events disabled" msgstr "" -#: src/shiftings/organizations/templates/organizations/organization_shifts.html:117 msgid "Create Shift from Template" msgstr "" -#: src/shiftings/organizations/templates/organizations/template/member_group.html:6 msgid "Click to expand members" msgstr "" -#: src/shiftings/organizations/templates/organizations/template/org_info.html:8 msgid "Organization Overview" msgstr "" -#: src/shiftings/organizations/templates/organizations/template/org_info.html:12 msgid "Administrate Organization" msgstr "" -#: src/shiftings/organizations/templates/organizations/template/org_info.html:14 msgid "Organization Admin View" msgstr "" -#: src/shiftings/organizations/templates/organizations/template/org_info.html:19 msgid "Organization Settings" msgstr "" -#: src/shiftings/organizations/templates/organizations/template/org_info.html:21 msgid "Organization Settings View" msgstr "" -#: src/shiftings/organizations/templates/organizations/template/org_info.html:35 msgid "Send Mail to shift participants" msgstr "" -#: src/shiftings/organizations/templates/organizations/template/org_info.html:41 msgid "Edit Organization" msgstr "" -#: src/shiftings/organizations/templates/organizations/template/org_info.html:47 msgid "Update Shift Permissions" msgstr "" -#: src/shiftings/organizations/templates/organizations/template/organization.html:12 msgid "No Image available" msgstr "" -#: src/shiftings/organizations/templates/organizations/user/claim_users.html:6 msgid "Imported Users" msgstr "" -#: src/shiftings/organizations/templates/organizations/user/claim_users.html:14 msgid "Claimed" msgstr "" -#: src/shiftings/organizations/templates/organizations/user/claim_users.html:36 msgid "Claim" msgstr "" -#: src/shiftings/organizations/templates/organizations/user/claim_users.html:43 msgid "Unclaim" msgstr "" -#: src/shiftings/organizations/views/membership.py:55 -#: src/shiftings/organizations/views/membership_type.py:57 msgid "Membership removed" msgstr "" -#: src/shiftings/organizations/views/organization.py:62 #, python-brace-format msgid "{org} Overview" msgstr "" -#: src/shiftings/organizations/views/organization.py:89 #, python-brace-format msgid "{org} Administration" msgstr "" -#: src/shiftings/organizations/views/organization.py:135 #, python-brace-format msgid "{org} Settings" msgstr "" -#: src/shiftings/organizations/views/user.py:36 msgid "You can't claim users that are already claimed." msgstr "" -#: src/shiftings/shifts/forms/filters.py:12 msgid "Shifts I participate in" msgstr "" -#: src/shiftings/shifts/forms/filters.py:17 -#: src/shiftings/shifts/forms/filters.py:19 msgid "Date YYYY-MM-DD" msgstr "" -#: src/shiftings/shifts/forms/filters.py:18 -#: src/shiftings/shifts/forms/filters.py:20 msgid "Time HH:MM" msgstr "" -#: src/shiftings/shifts/forms/participant.py:28 #, python-brace-format msgid "User {user} is already registered for this shift." msgstr "" -#: src/shiftings/shifts/forms/participant.py:32 msgid "Organization Users" msgstr "" -#: src/shiftings/shifts/forms/participant.py:33 msgid "Other Users" msgstr "" -#: src/shiftings/shifts/forms/participant.py:34 msgid "" "To add users that do not belong to your organization please enter their " "username." msgstr "" -#: src/shiftings/shifts/forms/participant.py:65 msgid "Only select one type of user!" msgstr "" -#: src/shiftings/shifts/forms/participant.py:75 msgid "One of the user fields is required!" msgstr "" -#: src/shiftings/shifts/forms/participant.py:80 #, python-brace-format msgid "Cannot add {user} multiple times to this shift" msgstr "" -#: src/shiftings/shifts/forms/permission.py:36 -#: src/shiftings/shifts/forms/permission.py:90 #, python-brace-format msgid "" "Permission would have no effect. Permission for all Users is more extensive: " "{permission}" msgstr "" -#: src/shiftings/shifts/forms/permission.py:47 #, python-brace-format msgid "" "Permission would have no effect. There is an inherited more extensive " "permission: {referred_object} ({permission})" msgstr "" -#: src/shiftings/shifts/forms/permission.py:56 #, python-brace-format msgid "" "Permission would have no effect. There is an inherited more extensive " "permission for all Users: {referred_object} ({permission})" msgstr "" -#: src/shiftings/shifts/forms/permission.py:78 #, python-brace-format msgid "Can only set one permission for organization \"{organization}\"" msgstr "" -#: src/shiftings/shifts/forms/permission.py:80 msgid "Can only set one permission for all Users" msgstr "" -#: src/shiftings/shifts/forms/recurring.py:13 msgid "Ordinal" msgstr "" -#: src/shiftings/shifts/forms/recurring.py:35 msgid "Weekday can't be empty with the chosen time frame type." msgstr "" -#: src/shiftings/shifts/forms/recurring.py:37 msgid "Month can't be empty with the chosen time frame type." msgstr "" -#: src/shiftings/shifts/forms/recurring.py:39 msgid "You need to add a warning for weekend handling." msgstr "" -#: src/shiftings/shifts/forms/recurring.py:41 msgid "You need to add a warning for holiday handling." msgstr "" -#: src/shiftings/shifts/forms/shift.py:38 -#: src/shiftings/shifts/forms/template.py:66 +msgid "End time must be after start time" +msgstr "" + #, python-brace-format msgid "Shift is too long, can at most be {max} long" msgstr "" -#: src/shiftings/shifts/forms/template.py:18 msgid "Date" msgstr "" -#: src/shiftings/shifts/forms/template.py:18 msgid "Date to create the template on" msgstr "" -#: src/shiftings/shifts/forms/template.py:38 -#: src/shiftings/shifts/models/template.py:22 msgid "Start Delay" msgstr "" -#: src/shiftings/shifts/forms/template.py:58 +msgid "Duration" +msgstr "" + msgid "Start Delay was None please reload and use the slider." msgstr "" -#: src/shiftings/shifts/forms/template.py:64 msgid "Duration was None please reload and use the slider." msgstr "" -#: src/shiftings/shifts/forms/type.py:22 msgid "Can't name a shift type \"System\"." msgstr "" -#: src/shiftings/shifts/models/base.py:13 -#: src/shiftings/shifts/models/template.py:19 -#: src/shiftings/shifts/templates/shifts/shift.html:39 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:18 msgid "Shift Type" msgstr "" -#: src/shiftings/shifts/models/base.py:16 msgid "Required Users" msgstr "" -#: src/shiftings/shifts/models/base.py:18 -#: src/shiftings/shifts/models/template.py:27 msgid "A maximum of 32 users can be required" msgstr "" -#: src/shiftings/shifts/models/base.py:19 msgid "Maximum Users" msgstr "" -#: src/shiftings/shifts/models/base.py:21 -#: src/shiftings/shifts/models/template.py:30 msgid "A maximum of 64 users can be present" msgstr "" -#: src/shiftings/shifts/models/base.py:23 -#: src/shiftings/shifts/models/template.py:32 -#: src/shiftings/shifts/templates/shifts/shift.html:79 -#: src/shiftings/shifts/templates/shifts/template/template.html:26 msgid "Additional Infos" msgstr "" -#: src/shiftings/shifts/models/participant.py:16 msgid "Display Name is optional, and will be shown instead of the username" msgstr "" -#: src/shiftings/shifts/models/participant.py:17 msgid "Participation confirmed" msgstr "" -#: src/shiftings/shifts/models/participant.py:18 msgid "" "Whether the participant has taken part in the shift or not. Default: False" msgstr "" -#: src/shiftings/shifts/models/permission.py:18 msgid "No Permission" msgstr "" -#: src/shiftings/shifts/models/permission.py:19 msgid "See Shift exists" msgstr "" -#: src/shiftings/shifts/models/permission.py:20 msgid "See Shift Details" msgstr "" -#: src/shiftings/shifts/models/permission.py:21 msgid "See Shift Participants" msgstr "" -#: src/shiftings/shifts/models/permission.py:22 msgid "Participate" msgstr "" -#: src/shiftings/shifts/models/permission.py:80 msgid "Permission Type" msgstr "" -#: src/shiftings/shifts/models/permission.py:82 msgid "Affected Organization" msgstr "" -#: src/shiftings/shifts/models/recurring.py:26 msgid "ignore" msgstr "" -#: src/shiftings/shifts/models/recurring.py:27 msgid "cancel" msgstr "" -#: src/shiftings/shifts/models/recurring.py:28 msgid "show warning" msgstr "" -#: src/shiftings/shifts/models/recurring.py:36 msgid "Timeframe Type" msgstr "" -#: src/shiftings/shifts/models/recurring.py:41 -#: src/shiftings/shifts/templates/shifts/recurring/list.html:10 -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:53 msgid "First Occurrence" msgstr "" -#: src/shiftings/shifts/models/recurring.py:42 msgid "" "Choose a minimum day for first occurrence and the system will automatically " "choose the next applicable day." msgstr "" -#: src/shiftings/shifts/models/recurring.py:46 msgid "Auto create days" msgstr "" -#: src/shiftings/shifts/models/recurring.py:46 msgid "How many days in advance should the shifts be created?" msgstr "" -#: src/shiftings/shifts/models/recurring.py:48 msgid "Shift Template" msgstr "" -#: src/shiftings/shifts/models/recurring.py:52 msgid "Weekend problem handling" msgstr "" -#: src/shiftings/shifts/models/recurring.py:54 msgid "Warning text for weekend" msgstr "" -#: src/shiftings/shifts/models/recurring.py:59 msgid "Holidays problem handling" msgstr "" -#: src/shiftings/shifts/models/recurring.py:61 msgid "Warning text for holidays" msgstr "" -#: src/shiftings/shifts/models/recurring.py:67 msgid "Manually Disabled" msgstr "" -#: src/shiftings/shifts/models/recurring.py:88 msgid "Nth" msgstr "" -#: src/shiftings/shifts/models/recurring.py:89 msgid "[weekday]" msgstr "" -#: src/shiftings/shifts/models/recurring.py:90 msgid "[month]" msgstr "" -#: src/shiftings/shifts/models/shift.py:24 msgid "Start Date and Time" msgstr "" -#: src/shiftings/shifts/models/shift.py:25 msgid "End Date and Time" msgstr "" -#: src/shiftings/shifts/models/shift.py:27 -#: src/shiftings/shifts/templates/shifts/template/shift.html:13 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:21 msgid "Users" msgstr "" -#: src/shiftings/shifts/models/shift.py:30 msgid "Locked for Participation" msgstr "" -#: src/shiftings/shifts/models/shift.py:31 -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:58 -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:64 msgid "Warning" msgstr "" -#: src/shiftings/shifts/models/shift.py:35 msgid "Created by Recurring Shift" msgstr "" -#: src/shiftings/shifts/models/shift.py:37 -#: src/shiftings/shifts/templates/shifts/shift.html:53 -msgid "Created" -msgstr "" - -#: src/shiftings/shifts/models/shift.py:38 -#: src/shiftings/shifts/templates/shifts/shift.html:55 msgid "Last Modified" msgstr "" -#: src/shiftings/shifts/models/shift.py:54 msgid "Organization and Event Organization must be identical." msgstr "" -#: src/shiftings/shifts/models/shift.py:57 #, python-brace-format msgid "Shift {name} on {time}" msgstr "" -#: src/shiftings/shifts/models/shift.py:65 #, python-brace-format msgid "{name} from {start} to {end} " msgstr "" -#: src/shiftings/shifts/models/shift.py:72 #, python-brace-format msgid "{start} to {end_time} on {end_date} " msgstr "" -#: src/shiftings/shifts/models/shift.py:76 #, python-brace-format msgid "{start} to {end_time}" msgstr "" -#: src/shiftings/shifts/models/summary.py:11 msgid "\"Other\" Shift Type Group Name" msgstr "" -#: src/shiftings/shifts/models/summary.py:14 msgid "Default time range for summary" msgstr "" -#: src/shiftings/shifts/models/summary.py:25 #, python-brace-format msgid "Organization summary settings of {organization}" msgstr "" -#: src/shiftings/shifts/models/template.py:16 msgid "Template Group" msgstr "" -#: src/shiftings/shifts/models/template.py:25 msgid "Required User" msgstr "" -#: src/shiftings/shifts/models/template.py:28 msgid "Maximum User" msgstr "" -#: src/shiftings/shifts/signals.py:26 msgid "Could not find a valid first occurrence." msgstr "" -#: src/shiftings/shifts/templates/shifts/create_shift.html:11 #, python-format msgid "" "\n" @@ -3139,7 +1184,6 @@ msgid "" " " msgstr "" -#: src/shiftings/shifts/templates/shifts/create_shift.html:15 #, python-format msgid "" "\n" @@ -3147,70 +1191,46 @@ msgid "" " " msgstr "" -#: src/shiftings/shifts/templates/shifts/create_shift.html:22 -#: src/shiftings/shifts/templates/shifts/create_shift.html:83 -#: src/shiftings/shifts/templates/shifts/recurring/form.html:23 -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:19 -#: src/shiftings/templates/generic/create_or_update.html:18 -#: src/shiftings/templates/generic/form_card.html:8 msgid "Create" msgstr "" -#: src/shiftings/shifts/templates/shifts/create_shift.html:24 msgid "Update" msgstr "" -#: src/shiftings/shifts/templates/shifts/create_shift.html:26 -#: src/shiftings/shifts/templates/shifts/edit_participation_permissions.html:34 -#: src/shiftings/templates/generic/create_or_update.html:22 msgid "Back" msgstr "" -#: src/shiftings/shifts/templates/shifts/create_shift.html:47 msgid "Shift starting time" msgstr "" -#: src/shiftings/shifts/templates/shifts/create_shift.html:48 msgctxt "Shift time" msgid "Start Time" msgstr "" -#: src/shiftings/shifts/templates/shifts/create_shift.html:52 msgid "Shift end time" msgstr "" -#: src/shiftings/shifts/templates/shifts/create_shift.html:53 msgctxt "Shift time" msgid "End Time" msgstr "" -#: src/shiftings/shifts/templates/shifts/create_shift.html:59 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:24 msgid "Required number of users to fill this shift" msgstr "" -#: src/shiftings/shifts/templates/shifts/create_shift.html:60 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:25 msgctxt "Shift users" msgid "Required" msgstr "" -#: src/shiftings/shifts/templates/shifts/create_shift.html:64 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:29 msgid "Maximum number of users allowed in this shift" msgstr "" -#: src/shiftings/shifts/templates/shifts/create_shift.html:65 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:30 msgctxt "Shift users" msgid "Maximum" msgstr "" -#: src/shiftings/shifts/templates/shifts/create_shift.html:76 msgid "Create from Template" msgstr "" -#: src/shiftings/shifts/templates/shifts/edit_participation_permissions.html:17 #, python-format msgid "" "\n" @@ -3219,39 +1239,30 @@ msgid "" " " msgstr "" -#: src/shiftings/shifts/templates/shifts/edit_participation_permissions.html:26 msgid "Edit Shift Permissions for" msgstr "" -#: src/shiftings/shifts/templates/shifts/edit_participation_permissions.html:38 msgid "How does it work?" msgstr "" -#: src/shiftings/shifts/templates/shifts/edit_participation_permissions.html:53 msgid "Inherited Permissions" msgstr "" -#: src/shiftings/shifts/templates/shifts/edit_participation_permissions.html:65 msgid "All Users" msgstr "" -#: src/shiftings/shifts/templates/shifts/edit_templates.html:21 msgid "Edit Templates for" msgstr "" -#: src/shiftings/shifts/templates/shifts/edit_templates.html:29 msgid "Cancel" msgstr "" -#: src/shiftings/shifts/templates/shifts/recurring/form.html:33 msgid "Recurring Time Frame" msgstr "" -#: src/shiftings/shifts/templates/shifts/recurring/form.html:42 msgid "Shift Information" msgstr "" -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:16 #, python-format msgid "" "\n" @@ -3259,11 +1270,9 @@ msgid "" " " msgstr "" -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:37 msgid "Edit Recurring Shift" msgstr "" -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:44 #, python-format msgid "" "\n" @@ -3272,7 +1281,6 @@ msgid "" " " msgstr "" -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:48 #, python-format msgid "" "\n" @@ -3280,44 +1288,33 @@ msgid "" " " msgstr "" -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:55 msgid "Weekend Handling" msgstr "" -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:61 msgid "Holiday Handling" msgstr "" -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:75 msgid "Upcoming recurring Shifts" msgstr "" -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:86 msgid "No upcoming created Shifts" msgstr "" -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:93 msgid "Passed recurring Shifts" msgstr "" -#: src/shiftings/shifts/templates/shifts/recurring/shift.html:104 msgid "No created Shifts have passed yet" msgstr "" -#: src/shiftings/shifts/templates/shifts/shift.html:16 -#: src/shiftings/shifts/views/shift.py:78 msgid "Edit Shift" msgstr "" -#: src/shiftings/shifts/templates/shifts/shift.html:22 msgid "Delete Shift" msgstr "" -#: src/shiftings/shifts/templates/shifts/shift.html:28 msgid "Edit Permissions" msgstr "" -#: src/shiftings/shifts/templates/shifts/shift.html:57 #, python-format msgid "" "\n" @@ -3325,219 +1322,163 @@ msgid "" " " msgstr "" -#: src/shiftings/shifts/templates/shifts/shift.html:66 -#: src/shiftings/shifts/templates/shifts/template/shift_card.html:13 msgid "Shift Participants" msgstr "" -#: src/shiftings/shifts/templates/shifts/shift.html:71 msgid "Add participant" msgstr "" -#: src/shiftings/shifts/templates/shifts/shift.html:84 msgid "Nothing to consider." msgstr "" -#: src/shiftings/shifts/templates/shifts/shift_participants.html:11 msgid "" "This shift is over, do you really want/need to add yourself as participant?" msgstr "" -#: src/shiftings/shifts/templates/shifts/shift_url_filters.html:8 msgid "Toggle Shift Filters" msgstr "" -#: src/shiftings/shifts/templates/shifts/summary/summary.html:6 msgid "Shift Summary" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/group.html:17 msgid "Delete Template" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/group.html:21 msgid "Edit Template" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/group.html:25 -#: src/shiftings/shifts/templates/shifts/template/group_template.html:13 msgid "Edit Shifts" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/group.html:31 msgid "Edit Template Permissions" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/group.html:70 msgid "Create Shift Templates" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/group_template.html:9 msgid "Edit Shifts Template" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/member_shift_summary.html:3 msgid "Member" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/member_shift_summary.html:10 msgid "Total" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/participation_permission_form.html:9 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:10 msgid "Remove Shift" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/participation_permission_form.html:12 -#: src/shiftings/shifts/templates/shifts/template/template_form.html:13 msgid "Restore Shift" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/select_org.html:3 msgid "Select Organization to create Shift for" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/shift.html:5 msgid "Go to Shift" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:5 msgid "Filters" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:8 msgid "Reset Filter" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:12 msgid "Apply Filter" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:15 msgid "Parameters" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:29 msgid "Select Organizations" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:47 msgid "Shift starts after" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:52 msgid "Shift ends before" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:65 msgid "Select Events" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/slots_display.html:4 msgid "Required to carry out this Shift" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/slots_display.html:6 msgid "Open Shift Slot" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/slots_display.html:32 msgid "Free" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:20 msgid "Required" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:23 msgid "Confirmed" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:29 msgid "Participating" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:34 msgid "Full" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:40 msgid "Additional Users required" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/small_shift_display.html:42 msgid "Additional Slots available" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/template.html:11 msgid "Calendar Background Color" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/template.html:17 msgid "Required Users/Max Users" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/template.html:21 msgid "Unlimited" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/template_form.html:36 msgid "Delay to starting time" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/template_form.html:37 msgctxt "Shift time" msgid "Start Delay" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/template_form.html:41 msgid "Shift Duration" msgstr "" -#: src/shiftings/shifts/templates/shifts/template/template_form.html:42 msgctxt "Shift time" msgid "Duration" msgstr "" -#: src/shiftings/shifts/templates/shifts/type_group/list.html:8 msgid "Actions" msgstr "" -#: src/shiftings/shifts/templatetags/shifts.py:90 #, python-brace-format msgid "Days + {delta_days}" msgstr "" -#: src/shiftings/shifts/utils/time_frame.py:17 msgid "Nth [weekday] of each month" msgstr "" -#: src/shiftings/shifts/utils/time_frame.py:18 msgid "Nth day of each month" msgstr "" -#: src/shiftings/shifts/utils/time_frame.py:19 msgid "every Nth [weekday]" msgstr "" -#: src/shiftings/shifts/utils/time_frame.py:20 msgid "Nth workday of each month" msgstr "" -#: src/shiftings/shifts/utils/time_frame.py:21 msgid "Nth day of [month]" msgstr "" -#: src/shiftings/shifts/utils/time_frame.py:22 msgid "Nth workday of [month]" msgstr "" -#: src/shiftings/shifts/views/participant.py:42 msgid "This shift is over, do you really want/need to add a participant?" msgstr "" -#: src/shiftings/shifts/views/permission.py:50 #, python-brace-format msgid "" "

Any Permission present will be applied to all Shifts belonging to " @@ -3547,35 +1488,27 @@ msgid "" "organizations.

" msgstr "" -#: src/shiftings/shifts/views/recurring.py:85 msgid "Forbidden Method GET" msgstr "" -#: src/shiftings/shifts/views/recurring.py:98 msgid "Created Shifts on {}" msgstr "" -#: src/shiftings/shifts/views/recurring.py:102 msgid "Error while creating shifts. Invalid Date" msgstr "" -#: src/shiftings/shifts/views/shift.py:164 msgid "Unable to delete past shifts." msgstr "" -#: src/shiftings/templates/403.html:6 msgid "You don't have the permission to do that!" msgstr "" -#: src/shiftings/templates/404.html:6 msgid "The site you requested was not found." msgstr "" -#: src/shiftings/templates/500.html:6 msgid "A server error occured the admins have been notified" msgstr "" -#: src/shiftings/templates/generic/create_or_update.html:5 #, python-format msgid "" "\n" @@ -3583,7 +1516,6 @@ msgid "" " " msgstr "" -#: src/shiftings/templates/generic/create_or_update.html:9 #, python-format msgid "" "\n" @@ -3591,7 +1523,6 @@ msgid "" " " msgstr "" -#: src/shiftings/templates/generic/delete.html:6 #, python-format msgid "" "\n" @@ -3599,53 +1530,48 @@ msgid "" " " msgstr "" -#: src/shiftings/templates/generic/modular_search.html:4 +msgid "Yes" +msgstr "" + +msgid "No" +msgstr "" + msgid "Filter by Name" msgstr "" -#: src/shiftings/templates/generic/modular_search.html:6 msgid "submit search" msgstr "" -#: src/shiftings/templates/language.html:16 msgid "Language" msgstr "" -#: src/shiftings/templates/language.html:21 msgid "German" msgstr "" -#: src/shiftings/templates/language.html:24 msgid "English" msgstr "" -#: src/shiftings/templates/month_view.html:2 +msgid "Close" +msgstr "" + msgid "M" msgstr "" -#: src/shiftings/templates/month_view.html:3 -#: src/shiftings/templates/month_view.html:5 msgid "T" msgstr "" -#: src/shiftings/templates/month_view.html:4 msgid "W" msgstr "" -#: src/shiftings/templates/month_view.html:6 msgid "F" msgstr "" -#: src/shiftings/templates/month_view.html:7 -#: src/shiftings/templates/month_view.html:8 msgid "S" msgstr "" -#: src/shiftings/templates/switch_user.html:5 msgid "Switch User" msgstr "" -#: src/shiftings/templates/template/remove_modal.html:12 #, python-format msgid "" "\n" @@ -3654,7 +1580,6 @@ msgid "" " " msgstr "" -#: src/shiftings/templates/template/remove_modal.html:16 msgid "" "\n" " Removing {% trans "Calendar Subscriptions" %}
{% if calendar_token %} -

+

{% trans "Use these URLs to subscribe to your shifts in a calendar app. Treat them like a password." %}

-
+
- +
{% trans "Add to Calendar" %} From 6a98b99f4b05e8a2ebbd2327b4c288c1eb93ab2a Mon Sep 17 00:00:00 2001 From: Christian Schliz Date: Sun, 15 Mar 2026 18:55:58 +0100 Subject: [PATCH 09/13] feat: register CalendarToken and OIDCOfflineToken in admin Co-Authored-By: Claude Opus 4.6 (1M context) --- src/shiftings/accounts/admin.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/shiftings/accounts/admin.py b/src/shiftings/accounts/admin.py index 95529ce..1701987 100644 --- a/src/shiftings/accounts/admin.py +++ b/src/shiftings/accounts/admin.py @@ -1,5 +1,19 @@ from django.contrib import admin -from shiftings.accounts.models import User +from shiftings.accounts.models import CalendarToken, OIDCOfflineToken, User admin.site.register(User) + + +@admin.register(CalendarToken) +class CalendarTokenAdmin(admin.ModelAdmin): + list_display = ('user', 'token', 'created') + search_fields = ('user__username',) + readonly_fields = ('created',) + + +@admin.register(OIDCOfflineToken) +class OIDCOfflineTokenAdmin(admin.ModelAdmin): + list_display = ('user', 'updated') + search_fields = ('user__username',) + readonly_fields = ('updated',) From 8c120d1dc2036974ac03651825339455e9e9046a Mon Sep 17 00:00:00 2001 From: Christian Schliz Date: Sun, 15 Mar 2026 22:45:53 +0100 Subject: [PATCH 10/13] refactor: remove CalendarToken and calendar feed integration Co-Authored-By: Claude Opus 4.6 (1M context) --- src/shiftings/accounts/admin.py | 9 +-- .../templates/accounts/user_detail.html | 75 ----------------- src/shiftings/accounts/urls/user.py | 3 - .../accounts/views/calendar_token.py | 32 -------- src/shiftings/accounts/views/user.py | 19 +---- src/shiftings/cal/feed/token_feeds.py | 80 ------------------- src/shiftings/cal/urls/__init__.py | 8 -- 7 files changed, 2 insertions(+), 224 deletions(-) delete mode 100644 src/shiftings/accounts/views/calendar_token.py delete mode 100644 src/shiftings/cal/feed/token_feeds.py diff --git a/src/shiftings/accounts/admin.py b/src/shiftings/accounts/admin.py index 1701987..12b9cc3 100644 --- a/src/shiftings/accounts/admin.py +++ b/src/shiftings/accounts/admin.py @@ -1,17 +1,10 @@ from django.contrib import admin -from shiftings.accounts.models import CalendarToken, OIDCOfflineToken, User +from shiftings.accounts.models import OIDCOfflineToken, User admin.site.register(User) -@admin.register(CalendarToken) -class CalendarTokenAdmin(admin.ModelAdmin): - list_display = ('user', 'token', 'created') - search_fields = ('user__username',) - readonly_fields = ('created',) - - @admin.register(OIDCOfflineToken) class OIDCOfflineTokenAdmin(admin.ModelAdmin): list_display = ('user', 'updated') diff --git a/src/shiftings/accounts/templates/accounts/user_detail.html b/src/shiftings/accounts/templates/accounts/user_detail.html index 7a4d348..20b4fef 100644 --- a/src/shiftings/accounts/templates/accounts/user_detail.html +++ b/src/shiftings/accounts/templates/accounts/user_detail.html @@ -118,81 +118,6 @@

{% trans "Organizations" %}

{% endblock %} {% block right %} -
{% url "user_profile_past" as past_url %} diff --git a/src/shiftings/accounts/urls/user.py b/src/shiftings/accounts/urls/user.py index 3bdf88b..d43e869 100644 --- a/src/shiftings/accounts/urls/user.py +++ b/src/shiftings/accounts/urls/user.py @@ -5,7 +5,6 @@ from django.views.generic import TemplateView from shiftings.accounts.views.auth import UserLoginView, UserLogoutView, UserReLoginView -from shiftings.accounts.views.calendar_token import CalendarTokenCreateView, CalendarTokenDeleteView from shiftings.accounts.views.password import PasswordResetConfirmView, PasswordResetView from shiftings.accounts.views.user import (ConfirmEMailView, UserDeleteSelfView, UserEditView, UserProfileView, UserRegisterView) @@ -31,8 +30,6 @@ name='password_reset_success'), path('calendar/', UserFeed(), name='user_calendar'), path('participation_calendar/', OwnShiftsFeed(), name='user_participation_calendar'), - path('calendar_token/create/', CalendarTokenCreateView.as_view(), name='calendar_token_create'), - path('calendar_token/delete/', CalendarTokenDeleteView.as_view(), name='calendar_token_delete'), ] if settings.FEATURES.get('registration', False): urlpatterns.append(path('register/', UserRegisterView.as_view(), name='register')) diff --git a/src/shiftings/accounts/views/calendar_token.py b/src/shiftings/accounts/views/calendar_token.py deleted file mode 100644 index 533ab25..0000000 --- a/src/shiftings/accounts/views/calendar_token.py +++ /dev/null @@ -1,32 +0,0 @@ -from __future__ import annotations - -from django.contrib import messages -from django.contrib.auth.mixins import LoginRequiredMixin -from django.http import HttpRequest, HttpResponse, HttpResponseRedirect -from django.urls import reverse -from django.utils.translation import gettext_lazy as _ -from django.views import View - -from shiftings.accounts.models import CalendarToken - - -class CalendarTokenCreateView(LoginRequiredMixin, View): - """Create or regenerate a calendar subscription token for the current user.""" - - def post(self, request: HttpRequest) -> HttpResponse: - token, created = CalendarToken.objects.get_or_create(user=request.user) - if not created: - token.regenerate() - messages.success(request, _('Calendar subscription URL regenerated. Old URLs will stop working.')) - else: - messages.success(request, _('Calendar subscription URL generated.')) - return HttpResponseRedirect(reverse('user_profile')) - - -class CalendarTokenDeleteView(LoginRequiredMixin, View): - """Revoke the calendar subscription token for the current user.""" - - def post(self, request: HttpRequest) -> HttpResponse: - CalendarToken.objects.filter(user=request.user).delete() - messages.success(request, _('Calendar subscription URL revoked.')) - return HttpResponseRedirect(reverse('user_profile')) diff --git a/src/shiftings/accounts/views/user.py b/src/shiftings/accounts/views/user.py index 209bdac..a736d26 100644 --- a/src/shiftings/accounts/views/user.py +++ b/src/shiftings/accounts/views/user.py @@ -20,7 +20,7 @@ from django.views.generic import CreateView, DetailView, TemplateView, UpdateView from shiftings.accounts.forms.user_form import UserCreateForm, UserUpdateForm -from shiftings.accounts.models import CalendarToken, User +from shiftings.accounts.models import User from shiftings.accounts.token import email_confirm_token_generator from shiftings.shifts.models import Shift from shiftings.shifts.utils.filter_mixin import ShiftFilterMixin @@ -49,23 +49,6 @@ def get_context_data(self, **kwargs: Any) -> dict[str, Any]: Q(participants__user=self.object))).distinct() context['shifts'] = get_pagination_context(self.request, shifts.filter(self.get_filters()), 5, 'shifts') - # Calendar subscription token - try: - cal_token = self.object.calendar_token - context['calendar_token'] = cal_token - user_url = self.request.build_absolute_uri( - reverse('token_user_calendar', kwargs={'token': cal_token.token}) - ) - participation_url = self.request.build_absolute_uri( - reverse('token_participation_calendar', kwargs={'token': cal_token.token}) - ) - context['calendar_user_url'] = user_url - context['calendar_participation_url'] = participation_url - context['webcal_user_url'] = user_url.replace('http://', 'webcal://', 1).replace('https://', 'webcal://', 1) - context['webcal_participation_url'] = participation_url.replace('http://', 'webcal://', 1).replace('https://', 'webcal://', 1) - except CalendarToken.DoesNotExist: - context['calendar_token'] = None - return context diff --git a/src/shiftings/cal/feed/token_feeds.py b/src/shiftings/cal/feed/token_feeds.py deleted file mode 100644 index 57319f6..0000000 --- a/src/shiftings/cal/feed/token_feeds.py +++ /dev/null @@ -1,80 +0,0 @@ -from __future__ import annotations - -import logging -from datetime import timedelta -from typing import Any - -from django.conf import settings -from django.http import HttpRequest, HttpResponse -from django.utils import timezone - -from shiftings.accounts.models import CalendarToken, OIDCOfflineToken -from shiftings.cal.feed.event import EventFeed -from shiftings.cal.feed.organization import OrganizationFeed -from shiftings.cal.feed.user import OwnShiftsFeed, UserFeed -from shiftings.utils.exceptions import Http403 - -logger = logging.getLogger(__name__) - -# Skip OIDC refresh if user data was synced within this period -OIDC_REFRESH_COOLDOWN = timedelta(minutes=10) - - -class TokenAuthMixin: - """Authenticate iCal feed requests via a CalendarToken URL parameter. - - Before serving the feed, refreshes the user's OIDC data (groups, admin status) - using the stored offline token when OAUTH is enabled. Skips the refresh if - user data was synced within the last OIDC_REFRESH_COOLDOWN period. - """ - - def __call__(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: - token_str = kwargs.pop('token', None) - if not token_str: - raise Http403() - - try: - calendar_token = CalendarToken.objects.select_related('user').get(token=token_str) - except CalendarToken.DoesNotExist: - raise Http403() - - user = calendar_token.user - - if settings.OAUTH_ENABLED: - try: - offline_token = OIDCOfflineToken.objects.get(user=user) - needs_refresh = offline_token.updated < timezone.now() - OIDC_REFRESH_COOLDOWN - if needs_refresh: - success = offline_token.refresh_user_info() - if not success: - return HttpResponse( - 'OIDC token expired. Please log in via browser to renew.', - status=401, - content_type='text/plain', - ) - user.refresh_from_db() - except OIDCOfflineToken.DoesNotExist: - return HttpResponse( - 'No OIDC token stored. Please log in via browser.', - status=401, - content_type='text/plain', - ) - - request.user = user - return super().__call__(request, *args, **kwargs) - - -class TokenUserFeed(TokenAuthMixin, UserFeed): - pass - - -class TokenOwnShiftsFeed(TokenAuthMixin, OwnShiftsFeed): - pass - - -class TokenOrganizationFeed(TokenAuthMixin, OrganizationFeed): - pass - - -class TokenEventFeed(TokenAuthMixin, EventFeed): - pass diff --git a/src/shiftings/cal/urls/__init__.py b/src/shiftings/cal/urls/__init__.py index 16b7b9f..69945a4 100644 --- a/src/shiftings/cal/urls/__init__.py +++ b/src/shiftings/cal/urls/__init__.py @@ -1,8 +1,5 @@ from django.urls import path -from shiftings.cal.feed.token_feeds import ( - TokenEventFeed, TokenOrganizationFeed, TokenOwnShiftsFeed, TokenUserFeed, -) from shiftings.cal.views.day_calendar import DetailDayView, ShiftTypesDayView from shiftings.cal.views.month_calendar import MonthCalenderView from shiftings.cal.views.list import DetailListView, ShiftTypesListView @@ -18,9 +15,4 @@ path('overview/month///', MonthCalenderView.as_view(), name='overview_month'), path('overview/list/detail/', DetailListView.as_view(), name='overview_list'), path('overview/list/shift_types/', ShiftTypesListView.as_view(), name='overview_list_shift_types'), - # Token-based iCal feeds (no session required) - path('token//user/', TokenUserFeed(), name='token_user_calendar'), - path('token//participation/', TokenOwnShiftsFeed(), name='token_participation_calendar'), - path('token//organization//', TokenOrganizationFeed(), name='token_organization_calendar'), - path('token//event//', TokenEventFeed(), name='token_event_calendar'), ] From 01cf213f86a15ffa6954eda10c81274d75d27cbe Mon Sep 17 00:00:00 2001 From: Christian Schliz Date: Sun, 15 Mar 2026 22:48:04 +0100 Subject: [PATCH 11/13] refactor: move OIDCOfflineToken to standalone module, drop CalendarToken Co-Authored-By: Claude Opus 4.6 (1M context) --- src/shiftings/accounts/models/__init__.py | 2 +- .../{calendar_token.py => oidc_token.py} | 38 ------------------- 2 files changed, 1 insertion(+), 39 deletions(-) rename src/shiftings/accounts/models/{calendar_token.py => oidc_token.py} (75%) diff --git a/src/shiftings/accounts/models/__init__.py b/src/shiftings/accounts/models/__init__.py index c873588..878e073 100644 --- a/src/shiftings/accounts/models/__init__.py +++ b/src/shiftings/accounts/models/__init__.py @@ -1,2 +1,2 @@ -from .calendar_token import CalendarToken, OIDCOfflineToken +from .oidc_token import OIDCOfflineToken from .user import BaseUser, User diff --git a/src/shiftings/accounts/models/calendar_token.py b/src/shiftings/accounts/models/oidc_token.py similarity index 75% rename from src/shiftings/accounts/models/calendar_token.py rename to src/shiftings/accounts/models/oidc_token.py index d684065..f7d4c7d 100644 --- a/src/shiftings/accounts/models/calendar_token.py +++ b/src/shiftings/accounts/models/oidc_token.py @@ -1,7 +1,6 @@ from __future__ import annotations import logging -import secrets from functools import cache from typing import Any @@ -13,38 +12,6 @@ logger = logging.getLogger(__name__) -class CalendarToken(models.Model): - user = models.OneToOneField( - settings.AUTH_USER_MODEL, - on_delete=models.CASCADE, - related_name='calendar_token', - verbose_name=_('User'), - ) - token = models.CharField( - max_length=64, - unique=True, - db_index=True, - verbose_name=_('Token'), - ) - created = models.DateTimeField(auto_now_add=True, verbose_name=_('Created')) - - class Meta: - default_permissions = () - - def __str__(self) -> str: - return f'{self.user} ({self.token[:8]}...)' - - def save(self, *args: Any, **kwargs: Any) -> None: - if not self.token: - self.token = secrets.token_hex(32) - super().save(*args, **kwargs) - - def regenerate(self) -> CalendarToken: - self.token = secrets.token_hex(32) - self.save(update_fields=['token']) - return self - - @cache def _get_oidc_endpoints() -> dict[str, str]: """Fetch and cache the OpenID Connect discovery document.""" @@ -84,7 +51,6 @@ def refresh_user_info(self) -> bool: client_config = settings.AUTHLIB_OAUTH_CLIENTS['shiftings'] - # Exchange refresh token for new access token try: token_resp = requests.post( token_endpoint, @@ -110,11 +76,9 @@ def refresh_user_info(self) -> bool: token_data = token_resp.json() - # Update stored refresh token self.refresh_token = token_data['refresh_token'] self.save(update_fields=['refresh_token', 'updated']) - # Fetch current userinfo access_token = token_data['access_token'] try: userinfo_resp = requests.get( @@ -134,8 +98,6 @@ def refresh_user_info(self) -> bool: ) return False - # Reuse the existing user population logic from shiftings.accounts.oidc import populate_user_from_oidc - populate_user_from_oidc(userinfo_resp.json()) return True From f59576a569959eec0ac1f183274df64399ce925d Mon Sep 17 00:00:00 2001 From: Christian Schliz Date: Sun, 15 Mar 2026 22:49:31 +0100 Subject: [PATCH 12/13] feat: add sync_oidc_users management command for periodic group sync Co-Authored-By: Claude Opus 4.6 (1M context) --- .../management/commands/sync_oidc_users.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/shiftings/accounts/management/commands/sync_oidc_users.py diff --git a/src/shiftings/accounts/management/commands/sync_oidc_users.py b/src/shiftings/accounts/management/commands/sync_oidc_users.py new file mode 100644 index 0000000..3f05dbe --- /dev/null +++ b/src/shiftings/accounts/management/commands/sync_oidc_users.py @@ -0,0 +1,44 @@ +from __future__ import annotations + +import logging + +from django.core.management.base import BaseCommand + +from shiftings.accounts.models import OIDCOfflineToken + +logger = logging.getLogger(__name__) + + +class Command(BaseCommand): + help = 'Sync all users with stored OIDC offline tokens (groups, admin status).' + + def add_arguments(self, parser): + parser.add_argument( + '--purge-expired', + action='store_true', + help='Delete offline tokens that fail to refresh (expired/revoked).', + ) + + def handle(self, *args, **options): + tokens = OIDCOfflineToken.objects.select_related('user').all() + total = tokens.count() + success = 0 + failed = 0 + + self.stdout.write(f'Syncing {total} OIDC user(s)...') + + for offline_token in tokens: + username = offline_token.user.username + if offline_token.refresh_user_info(): + success += 1 + logger.info('Synced user %s', username) + else: + failed += 1 + logger.warning('Failed to sync user %s', username) + if options['purge_expired']: + offline_token.delete() + logger.info('Purged expired token for user %s', username) + + self.stdout.write(self.style.SUCCESS( + f'Done. {success} synced, {failed} failed (of {total} total).' + )) From 11c13e07bdbb3ee16ca4cf55d7791a6ec8905fc9 Mon Sep 17 00:00:00 2001 From: Christian Schliz Date: Sun, 15 Mar 2026 22:52:01 +0100 Subject: [PATCH 13/13] chore: remove stale translation strings and clean up .po files Remove all obsolete (#~) entries including calendar-related strings and fix duplicate "My Shifts" entries that caused msgmerge errors. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/locale/de/LC_MESSAGES/django.po | 987 ++++++++++++++++++++-------- src/locale/en/LC_MESSAGES/django.po | 761 +++++++++++++++++++-- 2 files changed, 1419 insertions(+), 329 deletions(-) diff --git a/src/locale/de/LC_MESSAGES/django.po b/src/locale/de/LC_MESSAGES/django.po index c522e68..6ed30cc 100644 --- a/src/locale/de/LC_MESSAGES/django.po +++ b/src/locale/de/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-15 17:34+0000\n" +"POT-Creation-Date: 2026-03-15 21:51+0000\n" "PO-Revision-Date: 2023-04-17 23:37+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -18,74 +18,100 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.1.1\n" +#: shiftings/accounts/forms/user_form.py:13 msgid "Confirm password" msgstr "Passwort bestätigen" +#: shiftings/accounts/forms/user_form.py:31 +#: shiftings/accounts/forms/user_form.py:32 msgid "Please enter matching passwords" msgstr "Bitte gebe identische Passwörter ein" +#: shiftings/accounts/forms/user_form.py:65 msgid "Cannot change first name, last name or email for LDAP users." msgstr "" +#: shiftings/accounts/models/oidc_token.py:28 +#: shiftings/accounts/templates/accounts/user_detail.html:29 +#: shiftings/organizations/models/membership.py:68 +#: shiftings/shifts/models/participant.py:13 +#: shiftings/templates/top_nav.html:47 msgid "User" msgstr "Benutzer" -msgid "Token" -msgstr "" - -msgid "Created" -msgstr "Erstellt" - +#: shiftings/accounts/models/oidc_token.py:30 msgid "Refresh Token" msgstr "" +#: shiftings/accounts/models/oidc_token.py:31 #, fuzzy #| msgid "Update" msgid "Updated" msgstr "Aktualisieren" +#: shiftings/accounts/models/user.py:32 +#: shiftings/accounts/templates/accounts/user_detail.html:52 +#: shiftings/shifts/models/participant.py:15 msgid "Display Name" msgstr "Anzeigename" +#: shiftings/accounts/models/user.py:33 shiftings/events/models/event.py:29 +#: shiftings/organizations/models/organization.py:28 msgid "Telephone Number" msgstr "Telefonnummer" +#: shiftings/accounts/templates/accounts/confirm_email.html:7 msgid "Go to Login" msgstr "Zum Login" +#: shiftings/accounts/templates/accounts/login_form.html:6 +#: shiftings/accounts/templates/accounts/login_multiple.html:12 msgid "Login with local Account" msgstr "Login mit lokalem Account" +#: shiftings/accounts/templates/accounts/login_form.html:8 +#: shiftings/accounts/templates/accounts/login_multiple.html:20 msgid "Login with LDAP Account" msgstr "Login mit LDAP Account" +#: shiftings/accounts/templates/accounts/login_form.html:14 +#: shiftings/accounts/views/auth.py:23 shiftings/templates/top_nav.html:60 msgid "Login" msgstr "Einloggen" +#: shiftings/accounts/templates/accounts/login_form.html:16 +#: shiftings/accounts/templates/accounts/password_reset/prompt.html:10 msgid "Reset Password" msgstr "Passwort zurücksetzen" +#: shiftings/accounts/templates/accounts/login_form.html:18 msgid "Return to selection" msgstr "Zur Auswahl zurückkehren" +#: shiftings/accounts/templates/accounts/login_form.html:29 msgid "You don't have an Account?" msgstr "Noch kein Account?" +#: shiftings/accounts/templates/accounts/login_form.html:30 msgid "Register here" msgstr "Hier registrieren" +#: shiftings/accounts/templates/accounts/login_form.html:32 msgid "Or login using another Method" msgstr "Oder nutze eine andere Loginmethode" +#: shiftings/accounts/templates/accounts/login_multiple.html:5 msgid "Welcome to Shiftings" msgstr "Wilkommen bei Shiftings" +#: shiftings/accounts/templates/accounts/login_multiple.html:6 msgid "" "To manage your shifts please authenticate with one of the given methods:" msgstr "" "Um deine Schichten zu verwalten melde dich bitte mit einer dieser Methoden " "an:" +#: shiftings/accounts/templates/accounts/login_multiple.html:31 #, fuzzy, python-format #| msgid "" #| "\n" @@ -100,21 +126,28 @@ msgstr "" " vor %(time)s\n" " " +#: shiftings/accounts/templates/accounts/logout.html:6 msgid "Successfully logged out" msgstr "Erfolgreich ausgeloggt" +#: shiftings/accounts/templates/accounts/logout.html:7 msgid "Login again" msgstr "Wieder einloggen" +#: shiftings/accounts/templates/accounts/password_reset/confirm.html:7 msgid "Change Password" msgstr "Passwort ändern" +#: shiftings/accounts/templates/accounts/password_reset/done.html:4 msgid "Your password has been reset, check your email!" msgstr "Dein Passwort wurde zurückgesetzt, überprüfe deine E-Mails!" +#: shiftings/accounts/templates/accounts/password_reset/done.html:5 +#: shiftings/accounts/templates/accounts/password_reset/success.html:5 msgid "Back to login" msgstr "Zurück zum Login" +#: shiftings/accounts/templates/accounts/password_reset/prompt.html:4 msgid "" "\n" " If you are an local user enter your email-adress below to reset your " @@ -126,12 +159,15 @@ msgstr "" "Passwort zurückzusetzen!\n" " " +#: shiftings/accounts/templates/accounts/password_reset/success.html:4 msgid "Your password has been successfully reset!" msgstr "Deine Passwort wurde erfolgreich zurückgesetzt!" +#: shiftings/accounts/templates/accounts/user_detail.html:3 msgid "Confirm User Deletion" msgstr "Bestätige die Löschung des Benutzers" +#: shiftings/accounts/templates/accounts/user_detail.html:5 #, python-format msgid "" "\n" @@ -147,116 +183,124 @@ msgstr "" "werden.\n" " " +#: shiftings/accounts/templates/accounts/user_detail.html:17 msgid "Yes, I want to permanently delete my Data" msgstr "Ja, ich möchte meine Daten entgültig löschen" +#: shiftings/accounts/templates/accounts/user_detail.html:19 msgid "Abort" msgstr "Abbrechen" +#: shiftings/accounts/templates/accounts/user_detail.html:37 +#: shiftings/accounts/templates/accounts/user_detail.html:57 msgid "Edit user data" msgstr "Benutzerdaten bearbeiten" +#: shiftings/accounts/templates/accounts/user_detail.html:48 +#: shiftings/organizations/forms/membership.py:16 msgid "Username" msgstr "Benutzername" +#: shiftings/accounts/templates/accounts/user_detail.html:50 +#: shiftings/events/models/event.py:25 +#: shiftings/events/templates/events/event.html:85 +#: shiftings/organizations/models/membership.py:10 +#: shiftings/organizations/models/organization.py:24 +#: shiftings/organizations/templates/organizations/organization_admin.html:195 +#: shiftings/organizations/templates/organizations/organization_admin.html:239 +#: shiftings/organizations/templates/organizations/organization_admin.html:278 +#: shiftings/organizations/templates/organizations/organization_admin.html:388 +#: shiftings/organizations/templates/organizations/organization_settings.html:39 +#: shiftings/organizations/templates/organizations/user/claim_users.html:13 +#: shiftings/shifts/models/base.py:8 shiftings/shifts/models/recurring.py:32 +#: shiftings/shifts/models/template.py:17 +#: shiftings/shifts/models/template_group.py:20 +#: shiftings/shifts/models/type.py:40 shiftings/shifts/models/type_group.py:16 +#: shiftings/shifts/templates/shifts/group/list.html:6 +#: shiftings/shifts/templates/shifts/list.html:6 +#: shiftings/shifts/templates/shifts/recurring/list.html:6 +#: shiftings/shifts/templates/shifts/template/group_list.html:6 +#: shiftings/shifts/templates/shifts/template/template_form.html:5 +#: shiftings/shifts/templates/shifts/type_group/list.html:7 msgid "Name" msgstr "Name" +#: shiftings/accounts/templates/accounts/user_detail.html:55 +#: shiftings/accounts/templates/accounts/user_detail.html:65 msgid "Unknown" msgstr "Unbekannt" +#: shiftings/accounts/templates/accounts/user_detail.html:58 msgid "Set Display Name" msgstr "Setze Anzeigename" +#: shiftings/accounts/templates/accounts/user_detail.html:62 msgid "Email" msgstr "Email" +#: shiftings/accounts/templates/accounts/user_detail.html:64 msgid "Phone Number" msgstr "Telefonnummer" +#: shiftings/accounts/templates/accounts/user_detail.html:66 msgid "Member since" msgstr "Mitglied seit" +#: shiftings/accounts/templates/accounts/user_detail.html:68 msgid "Total Shifts" msgstr "Anzahl Schichten" +#: shiftings/accounts/templates/accounts/user_detail.html:70 +#: shiftings/organizations/templates/organizations/organization_admin.html:124 msgid "Groups" msgstr "Gruppen" +#: shiftings/accounts/templates/accounts/user_detail.html:71 +#: shiftings/events/templates/events/template/event.html:32 +#: shiftings/shifts/templates/shifts/template/template.html:19 msgid "None" msgstr "Keine" +#: shiftings/accounts/templates/accounts/user_detail.html:77 msgid "Organizations" msgstr "Organisationen" +#: shiftings/accounts/templates/accounts/user_detail.html:83 msgid "Hide organizations" msgstr "Organisationen einklappen" +#: shiftings/accounts/templates/accounts/user_detail.html:102 +#: shiftings/events/templates/events/template/event.html:12 msgid "No Logo available" msgstr "Kein Logo verfügbar" -msgid "Calendar Subscriptions" -msgstr "Kalender-Abonnements" - -msgid "Regenerating will invalidate existing calendar subscriptions. Continue?" -msgstr "Beim Erneuern werden bestehende Kalender-Abonnements ungültig. Fortfahren?" - -msgid "Regenerate" -msgstr "Erneuern" - -msgid "Revoking will stop all calendar subscriptions. Continue?" -msgstr "Beim Widerrufen werden alle Kalender-Abonnements deaktiviert. Fortfahren?" - -msgid "Revoke" -msgstr "Widerrufen" - -msgid "Generate Calendar URL" -msgstr "Kalender-URL erzeugen" - -msgid "" -"Use these URLs to subscribe to your shifts in a calendar app. Treat them " -"like a password." -msgstr "" -"Verwende diese URLs, um deine Schichten in einer Kalender-App zu " -"abonnieren. Behandle sie wie ein Passwort." - -msgid "All Shifts" -msgstr "Alle Schichten" - -msgid "Add to Calendar" -msgstr "Zum Kalender hinzufügen" - -msgid "Copy URL" -msgstr "URL kopieren" - -msgid "My Shifts" -msgstr "Meine Schichten" - -msgid "" -"Generate a calendar URL to subscribe to your shifts from a mobile calendar " -"app." -msgstr "" -"Erzeuge eine Kalender-URL, um deine Schichten in einer mobilen Kalender-App " -"zu abonnieren." - +#: shiftings/accounts/templates/accounts/user_detail.html:125 msgid "Recent Shifts" msgstr "Letzte Schichten" +#: shiftings/accounts/templates/accounts/user_detail.html:127 +#: shiftings/accounts/templates/accounts/user_detail.html:132 msgid "Upcoming Shifts" msgstr "Anstehende Schichten" +#: shiftings/accounts/templates/accounts/user_detail.html:136 msgid "Past Shifts" msgstr "Vergangene Schichten" +#: shiftings/accounts/templates/accounts/user_detail.html:157 msgid "No recent Shifts" msgstr "Keine vergangenen Schichten" +#: shiftings/accounts/templates/accounts/user_detail.html:159 +#: shiftings/organizations/templates/organizations/organization_shifts.html:135 msgid "No upcoming shifts" msgstr "Keine anstehenden Schichten" +#: shiftings/accounts/templates/accounts/user_form.html:6 msgid "Register" msgstr "Registrieren" +#: shiftings/accounts/templates/accounts/user_form.html:8 #, python-format msgid "" "\n" @@ -267,108 +311,139 @@ msgstr "" " Bearbeite Benutzer %(user)s\n" " " +#: shiftings/accounts/templates/accounts/user_form.html:19 +#: shiftings/templates/template/simple_form_modal.html:21 msgid "Submit" msgstr "Bestätigen" +#: shiftings/accounts/views/auth.py:79 msgid "Error while creating the user instance!" msgstr "Fehler beim erstellen der Benutzerinstanz!" +#: shiftings/accounts/views/auth.py:83 msgid "Successfully logged in!" msgstr "Erfolgreich eingeloggt!" +#: shiftings/accounts/views/auth.py:86 #, python-format msgid "Error while trying to authenticate with sso! %(message)s" msgstr "Fehler beim Versuch gegen SSO zu authentifizieren! %(message)s" +#: shiftings/accounts/views/auth.py:111 shiftings/templates/top_nav.html:54 msgid "Logout" msgstr "Ausloggen" -msgid "Calendar subscription URL regenerated. Old URLs will stop working." -msgstr "Kalender-Abonnement-URL erneuert. Alte URLs funktionieren nicht mehr." - -msgid "Calendar subscription URL generated." -msgstr "Kalender-Abonnement-URL erzeugt." - -msgid "Calendar subscription URL revoked." -msgstr "Kalender-Abonnement-URL widerrufen." - +#: shiftings/accounts/views/password.py:13 msgid "Password Reset" msgstr "Passwort zurücksetzen" +#: shiftings/accounts/views/password.py:19 msgid "Confirm Password Reset" msgstr "Passwort Zurücksetzung bestätigen" +#: shiftings/accounts/views/user.py:35 shiftings/templates/top_nav.html:15 msgid "My Shifts" msgstr "Meine Schichten" +#: shiftings/accounts/views/user.py:102 msgid "Could not find your user." msgstr "Konnte deinen Benutzer nicht finden." +#: shiftings/accounts/views/user.py:108 msgid "Your EMail was confirmed. You can now login." msgstr "Deine EMail wurde bestätigt. Du kannst dich jetzt einloggen." +#: shiftings/accounts/views/user.py:111 msgid "Your activation link was invalid." msgstr "Dein Aktivierungslink war ungültig." +#: shiftings/accounts/views/user.py:128 msgid "Error while deleting your data: Please confirm deletion!" msgstr "Fehler beim Löschen deiner Daten: Bitte bestätige die Löschung!" +#: shiftings/cal/feed/event.py:44 msgid "Public Events" msgstr "Öffentliche Events" +#: shiftings/cal/forms/day_form.py:8 msgid "Select Day" msgstr "Tag auswählen" +#: shiftings/cal/templates/cal/calendar_base.html:14 +#: shiftings/cal/templates/cal/calendar_base.html:24 msgid "Day View" msgstr "Tagesansicht" +#: shiftings/cal/templates/cal/calendar_base.html:20 msgid "Day (Detailed)" msgstr "Tag (Detailliert)" +#: shiftings/cal/templates/cal/calendar_base.html:30 msgid "Day (By Types)" msgstr "Tag (Nach Typ)" +#: shiftings/cal/templates/cal/calendar_base.html:37 msgid "Month View" msgstr "Monatsansicht" +#: shiftings/cal/templates/cal/calendar_base.html:38 +#: shiftings/utils/time/month.py:25 shiftings/utils/time/timerange.py:12 msgid "Month" msgstr "Monat" +#: shiftings/cal/templates/cal/calendar_base.html:42 +#: shiftings/cal/templates/cal/calendar_base.html:48 msgid "List View" msgstr "Listenansicht" +#: shiftings/cal/templates/cal/calendar_base.html:44 msgid "List (Detailed)" msgstr "Liste (Detailliert)" +#: shiftings/cal/templates/cal/calendar_base.html:50 msgid "List (By Types)" msgstr "Liste (Nach Typ)" +#: shiftings/cal/templates/cal/calendar_templates/cal_shift_create_entry.html:4 +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:106 +#: shiftings/events/templates/events/event.html:74 +#: shiftings/organizations/templates/organizations/organization_admin.html:376 +#: shiftings/organizations/templates/organizations/organization_shifts.html:120 msgid "Create Shift" msgstr "Schicht erstellen" +#: shiftings/cal/templates/cal/calendar_templates/recurring_shift_entry.html:5 msgid "Recurring" msgstr "Wiederholend" +#: shiftings/cal/templates/cal/day_calendar.html:14 msgid "Previous Day" msgstr "Letzter Tag" +#: shiftings/cal/templates/cal/day_calendar.html:22 msgid "Jump to Date" msgstr "Zum Datum springen" +#: shiftings/cal/templates/cal/day_calendar.html:28 msgid "Jump to Day" msgstr "Zum Tag springen" +#: shiftings/cal/templates/cal/day_calendar.html:30 msgid "Select" msgstr "Auswählen" +#: shiftings/cal/templates/cal/day_calendar.html:38 msgid "Next Day" msgstr "Nächster Tag" +#: shiftings/cal/templates/cal/list_calendar.html:12 #, fuzzy #| msgid "Shifts" msgid "Shift list" msgstr "Schichten" +#: shiftings/cal/templates/cal/template/day_calendar_shift_types.html:3 +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:3 #, python-format msgid "" "\n" @@ -381,159 +456,295 @@ msgstr "" "genauere Filter an.\n" " " +#: shiftings/cal/templates/cal/template/day_calendar_shift_types.html:14 +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:48 +#: shiftings/shifts/templates/shifts/shift_participants.html:4 msgid "Add with Name to Shift" msgstr "Mit Namen zur Schicht hinzufügen" +#: shiftings/cal/templates/cal/template/day_calendar_shift_types.html:30 +#: shiftings/organizations/templates/organizations/organization_admin.html:197 +#: shiftings/shifts/templates/shifts/template/group.html:43 +#: shiftings/shifts/templates/shifts/template/group_template.html:23 +#: shiftings/shifts/templates/shifts/template/shift.html:10 +#: shiftings/shifts/templates/shifts/template/template_form.html:33 msgid "Time" msgstr "Zeit" +#: shiftings/cal/templates/cal/template/day_calendar_shift_types.html:40 +#: shiftings/organizations/models/membership.py:12 msgid "Default" msgstr "Standard" +#: shiftings/cal/templates/cal/template/day_calendar_shift_types.html:45 +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:95 msgid "No Shifts found with these parameters or planned on this day" msgstr "" "An diesem Tag sind keine Schichten mit diesen Parametern gefunden oder " "geplant" +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:12 +#: shiftings/events/models/event.py:24 shiftings/shifts/models/base.py:12 +#: shiftings/shifts/models/recurring.py:34 +#: shiftings/shifts/models/template_group.py:24 +#: shiftings/shifts/models/type.py:37 shiftings/shifts/models/type_group.py:14 +#: shiftings/shifts/templates/shifts/create_shift.html:79 +#: shiftings/shifts/templates/shifts/list.html:9 +#: shiftings/shifts/templates/shifts/recurring/list.html:9 +#: shiftings/shifts/templates/shifts/shift.html:47 +#: shiftings/shifts/templates/shifts/template/group.html:39 +#: shiftings/shifts/templates/shifts/template/group.html:45 +#: shiftings/shifts/templates/shifts/template/group_list.html:8 +#: shiftings/shifts/templates/shifts/template/group_template.html:25 msgid "Organization" msgstr "Organisation" +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:13 msgid "Org" msgstr "Org" +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:14 msgid "Shift" msgstr "Schicht" +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:15 +#: shiftings/shifts/templates/shifts/create_shift.html:56 +#: shiftings/shifts/templates/shifts/template/shift.html:12 +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:21 msgid "Participants" msgstr "Teilnehmer" +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:16 +#: shiftings/shifts/templates/shifts/list.html:10 msgid "Start" msgstr "Start" +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:17 +#: shiftings/shifts/templates/shifts/list.html:11 msgid "End" msgstr "Ende" +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:36 +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:7 msgid "Shift Details" msgstr "Schicht Details" +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:61 +#: shiftings/shifts/templates/shifts/shift_participants.html:23 +#: shiftings/shifts/templates/shifts/template/slots_display.html:29 +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:44 msgid "Add me" msgstr "Mich hinzufügen" +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:112 +#: shiftings/shifts/templates/shifts/edit_participation_permissions.html:31 +#: shiftings/shifts/templates/shifts/edit_templates.html:26 msgid "Add Shift" msgstr "Schicht hinzufügen" +#: shiftings/cal/templates/cal/template/month_calendar.html:7 msgid "Previous Month" msgstr "Letzter Monat" +#: shiftings/cal/templates/cal/template/month_calendar.html:15 msgid "Next Month" msgstr "Nächster Monat" +#: shiftings/cal/templates/cal/week_calendar.html:9 msgid "Previous Week" msgstr "Letzte Woche" +#: shiftings/cal/templates/cal/week_calendar.html:13 msgid "Week" msgstr "Woche" +#: shiftings/cal/templates/cal/week_calendar.html:17 msgid "Next Week" msgstr "Nächste Woche" +#: shiftings/cal/views/day_calendar.py:24 #, python-brace-format msgid "Day {date}" msgstr "Tag {date}" +#: shiftings/cal/views/day_calendar.py:25 msgid "Day Overview" msgstr "Tagesübersicht" +#: shiftings/cal/views/list.py:24 +#: shiftings/organizations/templates/organizations/template/org_info.html:6 msgid "Shift Overview" msgstr "Schichtenübersicht" +#: shiftings/cal/views/month_calendar.py:24 #, python-brace-format msgid "Month {year}/{month:0>2}" msgstr "Monat {year}/{month:0>2}" +#: shiftings/cal/views/month_calendar.py:26 +#: shiftings/events/templates/events/event.html:52 +#: shiftings/organizations/templates/organizations/organization_admin.html:162 +#: shiftings/organizations/templates/organizations/organization_shifts.html:28 msgid "Month Overview" msgstr "Monatsübersicht" +#: shiftings/events/forms/event.py:24 #, python-format msgid "Start date %(start)s was after end_date %(end)s" msgstr "Startdatum %(start)s ist nach dem Enddatum %(end)s" +#: shiftings/events/models/event.py:26 +#: shiftings/events/templates/events/event.html:19 +#: shiftings/organizations/models/organization.py:25 +#: shiftings/organizations/templates/organizations/template/org_info.html:58 msgid "Logo" msgstr "Logo" +#: shiftings/events/models/event.py:28 +#: shiftings/organizations/models/organization.py:27 msgid "E-Mail" msgstr "E-Mail" +#: shiftings/events/models/event.py:30 +#: shiftings/organizations/models/organization.py:29 +#: shiftings/organizations/templates/organizations/organization_shifts.html:81 +#: shiftings/organizations/templates/organizations/template/organization.html:27 msgid "Website" msgstr "Webseite" +#: shiftings/events/models/event.py:32 msgid "Start Date" msgstr "Startdatum" +#: shiftings/events/models/event.py:32 msgid "Earliest date where there are shifts available" msgstr "Frühestes Datum an dem Schichten verfügbar sind" +#: shiftings/events/models/event.py:33 msgid "End Date" msgstr "Enddatum" +#: shiftings/events/models/event.py:33 msgid "Latest date where there are shifts available" msgstr "Spätestes Datum an dem Schichten verfügbar sind" +#: shiftings/events/models/event.py:35 +#: shiftings/organizations/models/organization.py:32 msgid "Description" msgstr "Beschreibung" +#: shiftings/events/models/event.py:55 #, python-brace-format msgid "{name} (by {organization})" msgstr "{name} (von {organization})" +#: shiftings/events/templates/events/event.html:10 msgid "Edit Event" msgstr "Event bearbeiten" +#: shiftings/events/templates/events/event.html:55 +#: shiftings/organizations/templates/organizations/organization_admin.html:165 +#: shiftings/organizations/templates/organizations/organization_shifts.html:31 msgid "Complete Overview" msgstr "Komplette Übersicht" +#: shiftings/events/templates/events/event.html:69 +#: shiftings/organizations/templates/organizations/organization_admin.html:363 +#: shiftings/organizations/templates/organizations/organization_shifts.html:109 msgid "Shifts" msgstr "Schichten" +#: shiftings/events/templates/events/event.html:71 +#: shiftings/events/templates/events/event.html:72 +#: shiftings/organizations/templates/organizations/organization_admin.html:371 +#: shiftings/organizations/templates/organizations/organization_shifts.html:112 msgid "ical Export" msgstr "ical Export" +#: shiftings/events/templates/events/event.html:86 +#: shiftings/organizations/templates/organizations/organization_admin.html:389 +#: shiftings/shifts/templates/shifts/list.html:7 +#: shiftings/shifts/templates/shifts/recurring/list.html:7 +#: shiftings/shifts/templates/shifts/template/shift.html:8 +#: shiftings/shifts/templates/shifts/template/template.html:7 msgid "Type" msgstr "Typ" +#: shiftings/events/templates/events/event.html:87 +#: shiftings/mail/forms/mail.py:55 +#: shiftings/organizations/templates/organizations/organization_admin.html:241 +#: shiftings/organizations/templates/organizations/organization_admin.html:390 +#: shiftings/shifts/models/template_group.py:26 +#: shiftings/shifts/templates/shifts/shift.html:43 +#: shiftings/shifts/templates/shifts/template/group_list.html:9 +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:17 +#: shiftings/shifts/templates/shifts/template/template.html:13 msgid "Start Time" msgstr "Startzeit" +#: shiftings/events/templates/events/event.html:88 +#: shiftings/mail/forms/mail.py:56 +#: shiftings/organizations/templates/organizations/organization_admin.html:391 +#: shiftings/shifts/templates/shifts/shift.html:45 +#: shiftings/shifts/templates/shifts/template/template.html:15 msgid "End Time" msgstr "Endzeit" +#: shiftings/events/templates/events/event.html:89 +#: shiftings/organizations/templates/organizations/organization_admin.html:198 +#: shiftings/organizations/templates/organizations/organization_admin.html:240 +#: shiftings/organizations/templates/organizations/organization_admin.html:392 +#: shiftings/shifts/models/base.py:9 +#: shiftings/shifts/models/template_group.py:21 +#: shiftings/shifts/templates/shifts/list.html:8 +#: shiftings/shifts/templates/shifts/recurring/list.html:8 +#: shiftings/shifts/templates/shifts/shift.html:41 +#: shiftings/shifts/templates/shifts/template/group.html:41 +#: shiftings/shifts/templates/shifts/template/group_list.html:7 +#: shiftings/shifts/templates/shifts/template/group_template.html:21 +#: shiftings/shifts/templates/shifts/template/shift_card.html:12 +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:18 msgid "Place" msgstr "Ort" +#: shiftings/events/templates/events/event.html:90 +#: shiftings/organizations/templates/organizations/organization_admin.html:393 msgid "Users/Required/Max" msgstr "Benutzer/Benötigt/Maximum" +#: shiftings/events/templates/events/event.html:108 +#: shiftings/organizations/templates/organizations/organization_admin.html:416 msgid "No current shifts" msgstr "Keine aktuellen Schichten" +#: shiftings/events/templates/events/list.html:5 +#: shiftings/events/templates/events/list.html:13 +#: shiftings/events/templates/events/list.html:22 msgid "All Events" msgstr "Alle Events" +#: shiftings/events/templates/events/list.html:7 +#: shiftings/templates/top_nav.html:22 msgid "Current Events" msgstr "Aktuelle Events" +#: shiftings/events/templates/events/list.html:16 msgid "All upcoming Events" msgstr "Alle anstehenden Events" +#: shiftings/events/templates/events/list.html:20 msgid "Enter Name or Organization" msgstr "Name oder Organisation angeben" +#: shiftings/events/templates/events/list.html:26 msgid "Future Events" msgstr "Zukünftige Events" +#: shiftings/events/templates/events/list.html:39 msgid "No Events found." msgstr "Keine Events gefunden." +#: shiftings/events/templates/events/template/event.html:23 #, python-format msgid "" "\n" @@ -544,60 +755,81 @@ msgstr "" " %(start_date)s bis %(end_date)s\n" " " +#: shiftings/events/templates/events/template/event.html:31 msgid "Open Shifts" msgstr "Offene Schichten" +#: shiftings/events/templates/events/template/event.html:32 msgid "Required People" msgstr "Benötigte Personen" +#: shiftings/events/templates/events/template/event.html:33 msgid "Visibility" msgstr "Sichtbarkeit" +#: shiftings/events/templates/events/template/event.html:33 +#: shiftings/organizations/templates/organizations/organization_admin.html:350 msgid "Public,Private,Unknown" msgstr "Öffentlich,Privat,Unbekannt" +#: shiftings/events/templates/events/template/event_stats.html:2 msgid "Shifts that are below the required amount of users" msgstr "Schichten mit weniger als den benötigten Benutzern" +#: shiftings/events/templates/events/template/event_stats.html:3 msgid "Shifts missing users" msgstr "Schichten mit fehlenden Benutzern" +#: shiftings/events/templates/events/template/event_stats.html:6 msgid "Shifts that are below the required and maximum amount of users" msgstr "Schichten unter der benötigten und maximalen Benutzeranzahl" +#: shiftings/events/templates/events/template/event_stats.html:7 msgid "Shifts with open slots" msgstr "Schichten mit offenen Positionen" +#: shiftings/events/templates/events/template/event_stats.html:10 msgid "Number of Shift slots filled with users" msgstr "Anzahl mit Benutzern gefüllte Positionen" +#: shiftings/events/templates/events/template/event_stats.html:11 msgid "Filled Slots" msgstr "Gefüllte Positionen" +#: shiftings/events/templates/events/template/event_stats.html:12 +#: shiftings/events/templates/events/template/event_stats.html:16 msgid "No Shifts available" msgstr "Keine Schichten verfügbar" +#: shiftings/events/templates/events/template/event_stats.html:14 msgid "Number of Shift slots that are still open" msgstr "Anzahl offene Postiionen" +#: shiftings/events/templates/events/template/event_stats.html:15 msgid "Open Slots" msgstr "Offene Postionen" +#: shiftings/mail/forms/mail.py:13 msgid "Subject" msgstr "Betreff" +#: shiftings/mail/forms/mail.py:14 msgid "Text" msgstr "Text" +#: shiftings/mail/forms/mail.py:15 msgid "Attachments" msgstr "Anhänge" +#: shiftings/mail/forms/mail.py:26 msgid "Each attachment must be smaller than 10 MB." msgstr "" +#: shiftings/mail/forms/mail.py:30 msgid "Total attachment size must be smaller than 25 MB." msgstr "" +#: shiftings/mail/forms/mail.py:38 msgid "" "Send the mail only to specific membership types. Or leave blank to send to " "all." @@ -605,6 +837,7 @@ msgstr "" "Email nur an bestimmte Mitgliedertypen senden oder leerlassen um sie an alle " "zu schicken." +#: shiftings/mail/forms/mail.py:53 #, fuzzy #| msgid "" #| "Send the mail only to specific membership types. Or leave blank to send " @@ -615,143 +848,195 @@ msgstr "" "Email nur an bestimmte Mitgliedertypen senden oder leerlassen um sie an alle " "zu schicken." +#: shiftings/mail/forms/mail.py:71 msgid "Start time must be before end time." msgstr "" +#: shiftings/mail/templates/mail/mail.html:8 msgid "Send Mail" msgstr "Email versenden" +#: shiftings/mail/views/mail.py:45 #, python-brace-format msgid "E-Mail sent to {count} user(s)." msgstr "Email an {count} Benutzer verschickt." +#: shiftings/organizations/forms/membership.py:40 +#: shiftings/shifts/forms/participant.py:57 msgid "The user you entered could not be found." msgstr "Der eingetragene Benutzer konnte nicht gefunden werden." +#: shiftings/organizations/models/membership.py:11 +#: shiftings/organizations/templates/organizations/organization_admin.html:68 +#: shiftings/templates/top_nav.html:50 msgid "Admin" msgstr "Admin" +#: shiftings/organizations/models/membership.py:13 msgid "Permissions" msgstr "Berechtigungen" +#: shiftings/organizations/models/membership.py:19 msgid "edit organization details" msgstr "Organisationdetails bearbeiten" +#: shiftings/organizations/models/membership.py:20 msgid "see members of the organization" msgstr "Mitglieder der Organisation sehen" +#: shiftings/organizations/models/membership.py:21 msgid "see shift participation statistics" msgstr "Schicht Teilnahmestatistik der Organistation sehen" +#: shiftings/organizations/models/membership.py:22 msgid "send emails to everyone in the organization" msgstr "Emails an alle in der Organisation senden" +#: shiftings/organizations/models/membership.py:24 msgid "create and update membership types for the organization" msgstr "Mitgliedschaftstypen in der Organisation erstellen und ändern" +#: shiftings/organizations/models/membership.py:25 msgid "add and remove members for the organization" msgstr "Mitglieder in der Organisation hinzufügen und entfernen" +#: shiftings/organizations/models/membership.py:27 msgid "create and update events for the organization" msgstr "Events für die Organisation erstellen und bearbeiten" +#: shiftings/organizations/models/membership.py:29 msgid "create and update recurring shifts for the organization" msgstr "Wiederkehrende Schichten für die Organisation erstellen und bearbeiten" +#: shiftings/organizations/models/membership.py:30 msgid "create and update shifts templates for the organization" msgstr "Schichtvorlagen für die Organisation erstellen und bearbeiten" +#: shiftings/organizations/models/membership.py:31 msgid "create and update shifts for the organization" msgstr "Schichten für die Organisation erstellen und bearbeiten" +#: shiftings/organizations/models/membership.py:32 msgid "delete uncompleted shifts for the organization" msgstr "Unabgeschlossene Schichten der Organistation löschen" +#: shiftings/organizations/models/membership.py:34 msgid "remove others from shifts" msgstr "Andere von Schichten entfernen" +#: shiftings/organizations/models/membership.py:35 msgid "add other users that are not members of the organization to shifts" msgstr "" "Andere Benutzer zu Schichten hinzufügen, die keine Mitglieder der " "Organisation sind" +#: shiftings/organizations/models/membership.py:36 msgid "add other organization members to shifts" msgstr "Andere Organisationsmitglieder zu Schichten hinzufügen" +#: shiftings/organizations/models/membership.py:37 msgid "participate in shifts" msgstr "An Schichten teilnehmen" +#: shiftings/organizations/models/membership.py:38 msgid "add self/others (depending on other permissions) to past shifts" msgstr "" +#: shiftings/organizations/models/membership.py:57 #, python-brace-format msgid "{name} (Admin)" msgstr "{name} (Admin)" +#: shiftings/organizations/models/membership.py:59 #, python-brace-format msgid "{name} (Default)" msgstr "{name} (Standard)" +#: shiftings/organizations/models/membership.py:65 msgid "Membership Type" msgstr "Mitgliedschaftstyp" +#: shiftings/organizations/models/membership.py:69 +#: shiftings/shifts/models/type.py:38 msgid "Group" msgstr "Gruppe" +#: shiftings/organizations/models/membership.py:100 msgid "Membership can only be either user or group, not both." msgstr "" "Mitgliedschaft kann nur für Benutzer oder Gruppe eingetragen werden nicht " "beides auf einmal." +#: shiftings/organizations/models/membership.py:102 msgid "Membership must consist of a user or a group." msgstr "Mitgliedschaft muss aus einem Benutzer oder einer Gruppe bestehen." +#: shiftings/organizations/models/organization.py:30 msgid "Include Protocol i.E. https://example.com" msgstr "Inklusive Protokoll z.B. https://example.com" +#: shiftings/organizations/models/organization.py:33 +#: shiftings/shifts/models/base.py:24 shiftings/shifts/models/recurring.py:56 +#: shiftings/shifts/models/recurring.py:63 shiftings/shifts/models/shift.py:32 +#: shiftings/shifts/models/template.py:33 #, python-brace-format msgid "A maximum of {amount} characters is allowed" msgstr "Es sind maximal {amount} Zeichen erlaubt" +#: shiftings/organizations/models/organization.py:34 msgid "Confirm Participants" msgstr "Teilnehmer bestätigen" +#: shiftings/organizations/models/organization.py:35 msgid "Whether the participants can be confirmed or not. Default: False" msgstr "Telnehmer können bestätigt werden. Standard: False" +#: shiftings/organizations/models/organization.py:49 msgid "manage all organizations" msgstr "Alle Organisationen bearbeiten" +#: shiftings/organizations/models/user.py:10 msgid "Claimed by" msgstr "Beansprucht von" +#: shiftings/organizations/templates/organizations/list.html:5 msgid "All Organizations" msgstr "Alle Organisationen" +#: shiftings/organizations/templates/organizations/list.html:7 +#: shiftings/templates/top_nav.html:18 msgid "My Organizations" msgstr "Meine Organisationen" +#: shiftings/organizations/templates/organizations/list.html:12 msgid "Enter Name" msgstr "Name einegeben" +#: shiftings/organizations/templates/organizations/list.html:14 msgid "Add new Organization" msgstr "Neue Organisation hinzufügen" +#: shiftings/organizations/templates/organizations/list.html:25 msgid "No Organizations found." msgstr "Keine Organisationen gefunden." +#: shiftings/organizations/templates/organizations/organization_admin.html:6 msgid "Show membership Permissions" msgstr "Mitgliedschaftsberechtigungen anzeigen" +#: shiftings/organizations/templates/organizations/organization_admin.html:10 msgid "All Permissions" msgstr "Alle Berechtigungen" +#: shiftings/organizations/templates/organizations/organization_admin.html:19 msgid "No permissions" msgstr "Keine Berechtigungen" +#: shiftings/organizations/templates/organizations/organization_admin.html:26 msgid "Add member" msgstr "Mitglied hinzufügen" +#: shiftings/organizations/templates/organizations/organization_admin.html:41 #, python-format msgid "" "\n" @@ -762,129 +1047,187 @@ msgstr "" " Mitglieder von %(organization)s\n" " " +#: shiftings/organizations/templates/organizations/organization_admin.html:48 +#: shiftings/organizations/templates/organizations/organization_shifts.html:8 msgid "Member Shift Summary" msgstr "Mitglieder Schichten Zusammenfassung" +#: shiftings/organizations/templates/organizations/organization_admin.html:54 msgid "Add Membership Type" msgstr "Mitgliedschaftstyp hinzufügen" +#: shiftings/organizations/templates/organizations/organization_admin.html:78 msgid "Show user permissions" msgstr "Benutzerberechtigungen anzeigen" +#: shiftings/organizations/templates/organizations/organization_admin.html:81 msgid "Edit Membership Type" msgstr "Mitgliedschaftstyp bearbeiten" +#: shiftings/organizations/templates/organizations/organization_admin.html:90 msgid "Add Member" msgstr "Mitglied hinzufügen" +#: shiftings/organizations/templates/organizations/organization_admin.html:100 msgid "No Members of this type!" msgstr "Keine Mitglieder von diesem Typ!" +#: shiftings/organizations/templates/organizations/organization_admin.html:106 msgid "Direct Members" msgstr "Direkte Mitglieder" +#: shiftings/organizations/templates/organizations/organization_admin.html:150 msgid "Next Shift" msgstr "Nächste Schicht" +#: shiftings/organizations/templates/organizations/organization_admin.html:154 msgid "No Shifts planned" msgstr "Keine Schichten geplant" +#: shiftings/organizations/templates/organizations/organization_admin.html:179 +#: shiftings/shifts/templates/shifts/template/group.html:52 msgid "Recurring Shifts" msgstr "Wiederkehrende Schichten" +#: shiftings/organizations/templates/organizations/organization_admin.html:184 msgid "Add recurring shift" msgstr "Wiederkehrende Schicht hinzufügen" +#: shiftings/organizations/templates/organizations/organization_admin.html:196 msgid "Shift count" msgstr "Schichten Anzahl" +#: shiftings/organizations/templates/organizations/organization_admin.html:199 msgid "Status" msgstr "Status" +#: shiftings/organizations/templates/organizations/organization_admin.html:210 msgid "Inactive,Active,Undefined" msgstr "Inaktiv,Aktiv,Unbekannt" +#: shiftings/organizations/templates/organizations/organization_admin.html:216 msgid "No recurring shifts" msgstr "Keine wiederkehrenden Schichten" +#: shiftings/organizations/templates/organizations/organization_admin.html:223 msgid "Shifts Templates" msgstr "Schichtvorlagen" +#: shiftings/organizations/templates/organizations/organization_admin.html:228 msgid "Add shifts template" msgstr "Schichtvorlagen hinzufügen" +#: shiftings/organizations/templates/organizations/organization_admin.html:255 +#: shiftings/organizations/templates/organizations/organization_admin.html:309 msgid "No shifts templates" msgstr "Keine Schichtvorlagen" +#: shiftings/organizations/templates/organizations/organization_admin.html:262 msgid "Shifts Types" msgstr "Schichttypen" +#: shiftings/organizations/templates/organizations/organization_admin.html:267 msgid "Add Shift Type" msgstr "Schichttyp hinzufügen" +#: shiftings/organizations/templates/organizations/organization_admin.html:279 msgid "Color" msgstr "Farbe" +#: shiftings/organizations/templates/organizations/organization_admin.html:280 +#: shiftings/organizations/templates/organizations/user/claim_users.html:15 msgid "Shift Count" msgstr "Schichten Anzahl" +#: shiftings/organizations/templates/organizations/organization_admin.html:281 +#: shiftings/organizations/templates/organizations/organization_settings.html:41 +#: shiftings/organizations/templates/organizations/user/claim_users.html:16 msgid "Action" msgstr "Aktion" +#: shiftings/organizations/templates/organizations/organization_admin.html:290 msgid "Shift Type Background Color" msgstr "Schichttyp Hintergrundfarbe" +#: shiftings/organizations/templates/organizations/organization_admin.html:317 msgid "Upcoming Events" msgstr "Anstehende Events" +#: shiftings/organizations/templates/organizations/organization_admin.html:321 +#: shiftings/organizations/templates/organizations/organization_shifts.html:50 msgid "Expired Events" msgstr "Abgelaufene Events" +#: shiftings/organizations/templates/organizations/organization_admin.html:326 +#: shiftings/organizations/templates/organizations/organization_shifts.html:55 msgid "Add Event" msgstr "Event hinzufügen" +#: shiftings/organizations/templates/organizations/organization_admin.html:356 msgid "No upcoming Events planned" msgstr "Keine anstehenden Events" +#: shiftings/organizations/templates/organizations/organization_admin.html:367 msgid "Claim Legacy Shifts" msgstr "Beanspruche alte Schichten" +#: shiftings/organizations/templates/organizations/organization_settings.html:19 +#: shiftings/shifts/templates/shifts/edit_participation_permissions.html:36 +#: shiftings/shifts/templates/shifts/edit_templates.html:31 +#: shiftings/shifts/templates/shifts/recurring/form.html:25 +#: shiftings/templates/generic/create_or_update.html:20 +#: shiftings/templates/generic/formset.html:17 msgid "Save" msgstr "Speichern" +#: shiftings/organizations/templates/organizations/organization_settings.html:26 msgid "Shift Type Groups" msgstr "Schichttypgruppen" +#: shiftings/organizations/templates/organizations/organization_settings.html:29 msgid "Create Type Group" msgstr "Schichttypgruppe hinzufügen" +#: shiftings/organizations/templates/organizations/organization_settings.html:38 msgid "Order" msgstr "Reihenfolge" +#: shiftings/organizations/templates/organizations/organization_settings.html:40 msgid "Types" msgstr "Typen" +#: shiftings/organizations/templates/organizations/organization_settings.html:61 msgid "Edit Type Group" msgstr "Typgruppe editieren" +#: shiftings/organizations/templates/organizations/organization_settings.html:72 +#: shiftings/organizations/templates/organizations/organization_settings.html:77 msgid "Move Up" msgstr "Nach oben" +#: shiftings/organizations/templates/organizations/organization_settings.html:84 +#: shiftings/organizations/templates/organizations/organization_settings.html:89 msgid "Move Down" msgstr "Nach unten" +#: shiftings/organizations/templates/organizations/organization_shifts.html:11 msgid "Full Summary" msgstr "Komplette Zusammenfassung" +#: shiftings/organizations/templates/organizations/organization_shifts.html:46 msgid "Upcoming Event" msgstr "Anstehendes Event" +#: shiftings/organizations/templates/organizations/organization_shifts.html:66 +#: shiftings/shifts/models/shift.py:21 msgid "Event" msgstr "Event" +#: shiftings/organizations/templates/organizations/organization_shifts.html:68 msgid "Go to Event" msgstr "Zum Event springen" +#: shiftings/organizations/templates/organizations/organization_shifts.html:74 #, python-format msgid "" "\n" @@ -899,96 +1242,126 @@ msgstr "" "td>\n" " " +#: shiftings/organizations/templates/organizations/organization_shifts.html:94 msgid "No Events planned" msgstr "Keine geplanten Events" +#: shiftings/organizations/templates/organizations/organization_shifts.html:102 msgid "Events disabled" msgstr "Events deaktiviert" +#: shiftings/organizations/templates/organizations/organization_shifts.html:117 msgid "Create Shift from Template" msgstr "Schichten aus Vorlage erstellen" +#: shiftings/organizations/templates/organizations/template/member_group.html:6 msgid "Click to expand members" msgstr "Klicke für detaillierte Mitgliederansicht" +#: shiftings/organizations/templates/organizations/template/org_info.html:8 msgid "Organization Overview" msgstr "Organisationsübersicht" +#: shiftings/organizations/templates/organizations/template/org_info.html:12 msgid "Administrate Organization" msgstr "Organisation administrieren" +#: shiftings/organizations/templates/organizations/template/org_info.html:14 msgid "Organization Admin View" msgstr "Organisation Admin Ansicht" +#: shiftings/organizations/templates/organizations/template/org_info.html:19 msgid "Organization Settings" msgstr "Organisationseinstellungen" +#: shiftings/organizations/templates/organizations/template/org_info.html:21 msgid "Organization Settings View" msgstr "Organisations Einstellungen" +#: shiftings/organizations/templates/organizations/template/org_info.html:35 #, fuzzy #| msgid "See Shift Participants" msgid "Send Mail to shift participants" msgstr "Schichtteilnehmer sehen" +#: shiftings/organizations/templates/organizations/template/org_info.html:41 msgid "Edit Organization" msgstr "Organisation bearbeiten" +#: shiftings/organizations/templates/organizations/template/org_info.html:47 msgid "Update Shift Permissions" msgstr "Schichtberechtigungen aktualisieren" +#: shiftings/organizations/templates/organizations/template/organization.html:12 msgid "No Image available" msgstr "Kein Bild verfügbar" +#: shiftings/organizations/templates/organizations/user/claim_users.html:6 msgid "Imported Users" msgstr "Importierte Benutzer" +#: shiftings/organizations/templates/organizations/user/claim_users.html:14 msgid "Claimed" msgstr "Beansprucht" +#: shiftings/organizations/templates/organizations/user/claim_users.html:36 msgid "Claim" msgstr "Beanspruchen" +#: shiftings/organizations/templates/organizations/user/claim_users.html:43 msgid "Unclaim" msgstr "Freigeben" +#: shiftings/organizations/views/membership.py:55 +#: shiftings/organizations/views/membership_type.py:57 msgid "Membership removed" msgstr "Mitgliedschaft entfernt" +#: shiftings/organizations/views/organization.py:62 #, python-brace-format msgid "{org} Overview" msgstr "{org}Übersicht" +#: shiftings/organizations/views/organization.py:89 #, python-brace-format msgid "{org} Administration" msgstr "{org} Administration" +#: shiftings/organizations/views/organization.py:135 #, python-brace-format msgid "{org} Settings" msgstr "{org} Einstellungen" +#: shiftings/organizations/views/user.py:36 msgid "You can't claim users that are already claimed." msgstr "Du kannst keine Benutzer beanspruchen, die bereits beansprucht sind." +#: shiftings/shifts/forms/filters.py:12 msgid "Shifts I participate in" msgstr "Schichten, an denen ich teilnehme" +#: shiftings/shifts/forms/filters.py:17 shiftings/shifts/forms/filters.py:19 msgid "Date YYYY-MM-DD" msgstr "Datum YYYY-MM-DD" +#: shiftings/shifts/forms/filters.py:18 shiftings/shifts/forms/filters.py:20 msgid "Time HH:MM" msgstr "Uhrzeit HH:MM" +#: shiftings/shifts/forms/participant.py:28 #, python-brace-format msgid "User {user} is already registered for this shift." msgstr "Benutzer {user} wurde bereits für diese Schicht eingetragen." +#: shiftings/shifts/forms/participant.py:32 msgid "Organization Users" msgstr "Organisationsmitglieder" +#: shiftings/shifts/forms/participant.py:33 msgid "Other Users" msgstr "Andere Benutzer" +#: shiftings/shifts/forms/participant.py:34 msgid "" "To add users that do not belong to your organization please enter their " "username." @@ -996,16 +1369,21 @@ msgstr "" "Um Benutzer, die nicht Teil der Organisation sind, hinzuzufügen gib deren " "Benutzernamen an." +#: shiftings/shifts/forms/participant.py:65 msgid "Only select one type of user!" msgstr "Wähle nur einen Benutzertyp aus!" +#: shiftings/shifts/forms/participant.py:75 msgid "One of the user fields is required!" msgstr "Eines der Benutzerfelder ist benötigt!" +#: shiftings/shifts/forms/participant.py:80 #, python-brace-format msgid "Cannot add {user} multiple times to this shift" msgstr "Benutzer {user} kann nicht mehrmals zur Schicht hinzugefügt werden" +#: shiftings/shifts/forms/permission.py:36 +#: shiftings/shifts/forms/permission.py:90 #, python-brace-format msgid "" "Permission would have no effect. Permission for all Users is more extensive: " @@ -1014,6 +1392,7 @@ msgstr "" "Berechtigung hätte keinen Effekt. Berechtigung für alle Benutzer ist " "weitergehender: {permission}" +#: shiftings/shifts/forms/permission.py:47 #, python-brace-format msgid "" "Permission would have no effect. There is an inherited more extensive " @@ -1022,6 +1401,7 @@ msgstr "" "Berechtigung hätte keinen Effekt. Es existiert eine weitergehende " "Berechtigung: {referred_object} ({permission})" +#: shiftings/shifts/forms/permission.py:56 #, python-brace-format msgid "" "Permission would have no effect. There is an inherited more extensive " @@ -1030,124 +1410,169 @@ msgstr "" "Berechtigung hätte keinen Effekt. Es existiert eine weitergehende " "Berechtigung für alle Benutzer: {referred_object} ({permission})" +#: shiftings/shifts/forms/permission.py:78 #, python-brace-format msgid "Can only set one permission for organization \"{organization}\"" msgstr "" "Es kann nur eine Berechtigung für die Organistation \"{organization}\" " "gesetzt werden" +#: shiftings/shifts/forms/permission.py:80 msgid "Can only set one permission for all Users" msgstr "Es kann nur eine Berechtigung für alle Benutzer gesetzt werden" +#: shiftings/shifts/forms/recurring.py:13 msgid "Ordinal" msgstr "Ordinal" +#: shiftings/shifts/forms/recurring.py:35 msgid "Weekday can't be empty with the chosen time frame type." msgstr "Der Wochentag ist erforderlich für den angegeben Zeitraumtyp." +#: shiftings/shifts/forms/recurring.py:37 msgid "Month can't be empty with the chosen time frame type." msgstr "Der Monat ist erforderlich für den angegebenen Zeitraumtyp." +#: shiftings/shifts/forms/recurring.py:39 msgid "You need to add a warning for weekend handling." msgstr "Du musst eine Warnung für die Wochenendproblembehandlung hinzufügen." +#: shiftings/shifts/forms/recurring.py:41 msgid "You need to add a warning for holiday handling." msgstr "Du musst eine Warnung für die Feiertagsproblembehandlung hinzufügen." +#: shiftings/shifts/forms/shift.py:39 msgid "End time must be after start time" msgstr "" +#: shiftings/shifts/forms/shift.py:44 shiftings/shifts/forms/template.py:66 #, python-brace-format msgid "Shift is too long, can at most be {max} long" msgstr "Diese Schicht ist zu lang, sie kann Maximal {max} lang sein" +#: shiftings/shifts/forms/template.py:18 msgid "Date" msgstr "Datum" +#: shiftings/shifts/forms/template.py:18 msgid "Date to create the template on" msgstr "Datum an dem die Vorlage erstellt wird" +#: shiftings/shifts/forms/template.py:38 shiftings/shifts/models/template.py:22 msgid "Start Delay" msgstr "Startverzögerung" +#: shiftings/shifts/forms/template.py:40 shiftings/shifts/models/template.py:23 +#: shiftings/shifts/templates/shifts/recurring/list.html:11 msgid "Duration" msgstr "Dauer" +#: shiftings/shifts/forms/template.py:58 msgid "Start Delay was None please reload and use the slider." msgstr "" "Anfangsverzögerung war None bitte lade die Seite neu und benutze den Slider." +#: shiftings/shifts/forms/template.py:64 msgid "Duration was None please reload and use the slider." msgstr "Dauer war None bitte lade die Seite neu und benutze den Slider." +#: shiftings/shifts/forms/type.py:22 msgid "Can't name a shift type \"System\"." msgstr "Ungültiger Name \"System\" für einen Schichttyp." +#: shiftings/shifts/models/base.py:13 shiftings/shifts/models/template.py:19 +#: shiftings/shifts/templates/shifts/shift.html:39 +#: shiftings/shifts/templates/shifts/template/template_form.html:18 msgid "Shift Type" msgstr "Schicht Typ" +#: shiftings/shifts/models/base.py:16 msgid "Required Users" msgstr "Benötigte Benutzer" +#: shiftings/shifts/models/base.py:18 shiftings/shifts/models/template.py:27 msgid "A maximum of 32 users can be required" msgstr "Es können maximal 32 Benutzer benötigt werden" +#: shiftings/shifts/models/base.py:19 msgid "Maximum Users" msgstr "Maximale Benutzer" +#: shiftings/shifts/models/base.py:21 shiftings/shifts/models/template.py:30 msgid "A maximum of 64 users can be present" msgstr "Es können maximal 64 Benutzer teilnehmen" +#: shiftings/shifts/models/base.py:23 shiftings/shifts/models/template.py:32 +#: shiftings/shifts/templates/shifts/shift.html:79 +#: shiftings/shifts/templates/shifts/template/template.html:26 msgid "Additional Infos" msgstr "Zusätzliche Informationen" +#: shiftings/shifts/models/participant.py:16 msgid "Display Name is optional, and will be shown instead of the username" msgstr "" "Der Anzeigename ist optional und wird anstatt dem Benutzernamen angezeigt" +#: shiftings/shifts/models/participant.py:17 msgid "Participation confirmed" msgstr "Teilnahme bestätigt" +#: shiftings/shifts/models/participant.py:18 msgid "" "Whether the participant has taken part in the shift or not. Default: False" msgstr "Hat der Teilnehmer die Schicht ausgeführt. Standard: False" +#: shiftings/shifts/models/permission.py:18 msgid "No Permission" msgstr "Keine Berechtigung" +#: shiftings/shifts/models/permission.py:19 msgid "See Shift exists" msgstr "Schichttexistenz sehen" +#: shiftings/shifts/models/permission.py:20 msgid "See Shift Details" msgstr "Schichtdetails sehen" +#: shiftings/shifts/models/permission.py:21 msgid "See Shift Participants" msgstr "Schichtteilnehmer sehen" +#: shiftings/shifts/models/permission.py:22 msgid "Participate" msgstr "Teilnehmen" +#: shiftings/shifts/models/permission.py:80 msgid "Permission Type" msgstr "Berechtigungstyp" +#: shiftings/shifts/models/permission.py:82 msgid "Affected Organization" msgstr "Betroffene Organisationen" +#: shiftings/shifts/models/recurring.py:26 msgid "ignore" msgstr "ignorieren" +#: shiftings/shifts/models/recurring.py:27 msgid "cancel" msgstr "abbrechen" +#: shiftings/shifts/models/recurring.py:28 msgid "show warning" msgstr "Warnung anzeigen" +#: shiftings/shifts/models/recurring.py:36 msgid "Timeframe Type" msgstr "Zeitraum Typ" +#: shiftings/shifts/models/recurring.py:41 +#: shiftings/shifts/templates/shifts/recurring/list.html:10 +#: shiftings/shifts/templates/shifts/recurring/shift.html:53 msgid "First Occurrence" msgstr "Erster Termin" +#: shiftings/shifts/models/recurring.py:42 msgid "" "Choose a minimum day for first occurrence and the system will automatically " "choose the next applicable day." @@ -1155,101 +1580,142 @@ msgstr "" "Wähle einen Tag für die erste Angabe und das system wird automatisch den " "nächsten zutreffenden Tag berechnen." +#: shiftings/shifts/models/recurring.py:46 msgid "Auto create days" msgstr "" +#: shiftings/shifts/models/recurring.py:46 msgid "How many days in advance should the shifts be created?" msgstr "" +#: shiftings/shifts/models/recurring.py:48 msgid "Shift Template" msgstr "Schichtvorlage" +#: shiftings/shifts/models/recurring.py:52 msgid "Weekend problem handling" msgstr "Wochenendproblembehandlung" +#: shiftings/shifts/models/recurring.py:54 msgid "Warning text for weekend" msgstr "Warnung für Wochenenden" +#: shiftings/shifts/models/recurring.py:59 msgid "Holidays problem handling" msgstr "Feiertagsproblembehandlung" +#: shiftings/shifts/models/recurring.py:61 msgid "Warning text for holidays" msgstr "Warnung für Feiertage" +#: shiftings/shifts/models/recurring.py:67 msgid "Manually Disabled" msgstr "Manuell deaktiviert" +#: shiftings/shifts/models/recurring.py:88 msgid "Nth" msgstr "Nte" +#: shiftings/shifts/models/recurring.py:89 msgid "[weekday]" msgstr "[Wochentag]" +#: shiftings/shifts/models/recurring.py:90 msgid "[month]" msgstr "[Monat]" +#: shiftings/shifts/models/shift.py:24 msgid "Start Date and Time" msgstr "Startdatum und Zeit" +#: shiftings/shifts/models/shift.py:25 msgid "End Date and Time" msgstr "Enddatum und Zeit" +#: shiftings/shifts/models/shift.py:27 +#: shiftings/shifts/templates/shifts/template/shift.html:13 +#: shiftings/shifts/templates/shifts/template/template_form.html:21 msgid "Users" msgstr "Benutzer" +#: shiftings/shifts/models/shift.py:30 msgid "Locked for Participation" msgstr "Teilnahme geschlossen" +#: shiftings/shifts/models/shift.py:31 +#: shiftings/shifts/templates/shifts/recurring/shift.html:58 +#: shiftings/shifts/templates/shifts/recurring/shift.html:64 msgid "Warning" msgstr "Warnung" +#: shiftings/shifts/models/shift.py:35 msgid "Created by Recurring Shift" msgstr "Erstellt von wiederkehrender Schicht" +#: shiftings/shifts/models/shift.py:37 +#: shiftings/shifts/templates/shifts/shift.html:53 +msgid "Created" +msgstr "Erstellt" + +#: shiftings/shifts/models/shift.py:38 +#: shiftings/shifts/templates/shifts/shift.html:55 msgid "Last Modified" msgstr "Zuletzt geändert" +#: shiftings/shifts/models/shift.py:54 msgid "Organization and Event Organization must be identical." msgstr "Organistion und Event Organistation müssen identisch sein." +#: shiftings/shifts/models/shift.py:57 #, python-brace-format msgid "Shift {name} on {time}" msgstr "Schicht {name} am {time}" +#: shiftings/shifts/models/shift.py:65 #, python-brace-format msgid "{name} from {start} to {end} " msgstr "{name} von {start} bis {end} " +#: shiftings/shifts/models/shift.py:72 #, python-brace-format msgid "{start} to {end_time} on {end_date} " msgstr "{start} bis {end_time} am {end_date} " +#: shiftings/shifts/models/shift.py:76 #, python-brace-format msgid "{start} to {end_time}" msgstr "{start} bis {end_time}" +#: shiftings/shifts/models/summary.py:11 msgid "\"Other\" Shift Type Group Name" msgstr "\"Sonstige\" Schichttyp Gruppenname" +#: shiftings/shifts/models/summary.py:14 msgid "Default time range for summary" msgstr "Standard Zeitraum für die Zusammenfassung" +#: shiftings/shifts/models/summary.py:25 #, python-brace-format msgid "Organization summary settings of {organization}" msgstr "Zusammenfassungseinstellungen von {organization}" +#: shiftings/shifts/models/template.py:16 msgid "Template Group" msgstr "Vorlagengruppe" +#: shiftings/shifts/models/template.py:25 msgid "Required User" msgstr "Benötigte Benutzer" +#: shiftings/shifts/models/template.py:28 msgid "Maximum User" msgstr "Maximale Benutzer" +#: shiftings/shifts/signals.py:26 msgid "Could not find a valid first occurrence." msgstr "Konnte keinen validen ersten Termin finden." +#: shiftings/shifts/templates/shifts/create_shift.html:11 #, python-format msgid "" "\n" @@ -1260,6 +1726,7 @@ msgstr "" "

Neue Schicht für %(organization)s erstellen

\n" " " +#: shiftings/shifts/templates/shifts/create_shift.html:15 #, python-format msgid "" "\n" @@ -1271,46 +1738,70 @@ msgstr "" "h4>\n" " " +#: shiftings/shifts/templates/shifts/create_shift.html:22 +#: shiftings/shifts/templates/shifts/create_shift.html:83 +#: shiftings/shifts/templates/shifts/recurring/form.html:23 +#: shiftings/shifts/templates/shifts/recurring/shift.html:19 +#: shiftings/templates/generic/create_or_update.html:18 +#: shiftings/templates/generic/form_card.html:8 msgid "Create" msgstr "Erstellen" +#: shiftings/shifts/templates/shifts/create_shift.html:24 msgid "Update" msgstr "Aktualisieren" +#: shiftings/shifts/templates/shifts/create_shift.html:26 +#: shiftings/shifts/templates/shifts/edit_participation_permissions.html:34 +#: shiftings/templates/generic/create_or_update.html:22 msgid "Back" msgstr "Zurück" +#: shiftings/shifts/templates/shifts/create_shift.html:47 msgid "Shift starting time" msgstr "Schicht Startzeit" +#: shiftings/shifts/templates/shifts/create_shift.html:48 msgctxt "Shift time" msgid "Start Time" msgstr "Startzeit" +#: shiftings/shifts/templates/shifts/create_shift.html:52 msgid "Shift end time" msgstr "Schichtende" +#: shiftings/shifts/templates/shifts/create_shift.html:53 msgctxt "Shift time" msgid "End Time" msgstr "Endzeit" +#: shiftings/shifts/templates/shifts/create_shift.html:59 +#: shiftings/shifts/templates/shifts/template/template_form.html:24 msgid "Required number of users to fill this shift" msgstr "Benötigte Anzahl an Benutzern um die Schicht zu füllen" +#: shiftings/shifts/templates/shifts/create_shift.html:60 +#: shiftings/shifts/templates/shifts/template/template_form.html:25 msgctxt "Shift users" msgid "Required" msgstr "Benötigt" +#: shiftings/shifts/templates/shifts/create_shift.html:64 +#: shiftings/shifts/templates/shifts/template/template_form.html:29 msgid "Maximum number of users allowed in this shift" msgstr "Maximale Anzahl an Benutzern in dieser Schicht" +#: shiftings/shifts/templates/shifts/create_shift.html:65 +#: shiftings/shifts/templates/shifts/template/template_form.html:30 msgctxt "Shift users" msgid "Maximum" msgstr "Maximum" +#: shiftings/shifts/templates/shifts/create_shift.html:76 msgid "Create from Template" msgstr "Aus Vorlage erstellen" +#: shiftings/shifts/templates/shifts/edit_participation_permissions.html:17 #, python-format msgid "" "\n" @@ -1323,30 +1814,39 @@ msgstr "" "mit \"+\" hinzu\n" " " +#: shiftings/shifts/templates/shifts/edit_participation_permissions.html:26 msgid "Edit Shift Permissions for" msgstr "Schichtberechtigungen bearbeiten" +#: shiftings/shifts/templates/shifts/edit_participation_permissions.html:38 msgid "How does it work?" msgstr "Wie funktioniert es?" +#: shiftings/shifts/templates/shifts/edit_participation_permissions.html:53 msgid "Inherited Permissions" msgstr "Geerbte Berechtigungen" +#: shiftings/shifts/templates/shifts/edit_participation_permissions.html:65 msgid "All Users" msgstr "Alle Benutzer" +#: shiftings/shifts/templates/shifts/edit_templates.html:21 msgid "Edit Templates for" msgstr "Bearbeite Vorlagen für" +#: shiftings/shifts/templates/shifts/edit_templates.html:29 msgid "Cancel" msgstr "Abbrechen" +#: shiftings/shifts/templates/shifts/recurring/form.html:33 msgid "Recurring Time Frame" msgstr "Wiederkehrender Zeitraum" +#: shiftings/shifts/templates/shifts/recurring/form.html:42 msgid "Shift Information" msgstr "Schichtinformation" +#: shiftings/shifts/templates/shifts/recurring/shift.html:16 #, python-format msgid "" "\n" @@ -1357,9 +1857,11 @@ msgstr "" " Möchtest du diese Schicht am %(date)s erstellen\n" " " +#: shiftings/shifts/templates/shifts/recurring/shift.html:37 msgid "Edit Recurring Shift" msgstr "Wiederkehrende Schicht bearbeiten" +#: shiftings/shifts/templates/shifts/recurring/shift.html:44 #, python-format msgid "" "\n" @@ -1372,6 +1874,7 @@ msgstr "" "%(time)s\n" " " +#: shiftings/shifts/templates/shifts/recurring/shift.html:48 #, fuzzy, python-format #| msgid "" #| "\n" @@ -1386,33 +1889,44 @@ msgstr "" " vor %(time)s\n" " " +#: shiftings/shifts/templates/shifts/recurring/shift.html:55 msgid "Weekend Handling" msgstr "Wochenendvorgehen" +#: shiftings/shifts/templates/shifts/recurring/shift.html:61 msgid "Holiday Handling" msgstr "Feiertagsvorgehen" +#: shiftings/shifts/templates/shifts/recurring/shift.html:75 msgid "Upcoming recurring Shifts" msgstr "Anstehende wiederkehrende Schichten" +#: shiftings/shifts/templates/shifts/recurring/shift.html:86 msgid "No upcoming created Shifts" msgstr "Keine anstehenden erstellten Schichten" +#: shiftings/shifts/templates/shifts/recurring/shift.html:93 msgid "Passed recurring Shifts" msgstr "Vergangenen Wiederkehrende Schichten" +#: shiftings/shifts/templates/shifts/recurring/shift.html:104 msgid "No created Shifts have passed yet" msgstr "Keine erstellten Schichten sind abgelaufen" +#: shiftings/shifts/templates/shifts/shift.html:16 +#: shiftings/shifts/views/shift.py:78 msgid "Edit Shift" msgstr "Schicht bearbeiten" +#: shiftings/shifts/templates/shifts/shift.html:22 msgid "Delete Shift" msgstr "Schicht löschen" +#: shiftings/shifts/templates/shifts/shift.html:28 msgid "Edit Permissions" msgstr "Berechtigungen bearbeiten" +#: shiftings/shifts/templates/shifts/shift.html:57 #, python-format msgid "" "\n" @@ -1423,163 +1937,219 @@ msgstr "" " vor %(time)s\n" " " +#: shiftings/shifts/templates/shifts/shift.html:66 +#: shiftings/shifts/templates/shifts/template/shift_card.html:13 msgid "Shift Participants" msgstr "Schichtteilnehmer" +#: shiftings/shifts/templates/shifts/shift.html:71 msgid "Add participant" msgstr "Teilnehmer hinzufügen" +#: shiftings/shifts/templates/shifts/shift.html:84 msgid "Nothing to consider." msgstr "Nichts zu beachten." +#: shiftings/shifts/templates/shifts/shift_participants.html:11 msgid "" "This shift is over, do you really want/need to add yourself as participant?" msgstr "" +#: shiftings/shifts/templates/shifts/shift_url_filters.html:8 msgid "Toggle Shift Filters" msgstr "Schichtfilter umschalten" +#: shiftings/shifts/templates/shifts/summary/summary.html:6 msgid "Shift Summary" msgstr "Mitglieder Schichten Zusammenfassung" +#: shiftings/shifts/templates/shifts/template/group.html:17 msgid "Delete Template" msgstr "Vorlage löschen" +#: shiftings/shifts/templates/shifts/template/group.html:21 msgid "Edit Template" msgstr "Vorlage bearbeiten" +#: shiftings/shifts/templates/shifts/template/group.html:25 +#: shiftings/shifts/templates/shifts/template/group_template.html:13 msgid "Edit Shifts" msgstr "Schichten bearbeiten" +#: shiftings/shifts/templates/shifts/template/group.html:31 msgid "Edit Template Permissions" msgstr "Vorlagenberechtigungen bearbeiten" +#: shiftings/shifts/templates/shifts/template/group.html:70 msgid "Create Shift Templates" msgstr "Schichtvorlagen erstellen" +#: shiftings/shifts/templates/shifts/template/group_template.html:9 msgid "Edit Shifts Template" msgstr "Schichtvorlage bearbeiten" +#: shiftings/shifts/templates/shifts/template/member_shift_summary.html:3 msgid "Member" msgstr "Mitglied" +#: shiftings/shifts/templates/shifts/template/member_shift_summary.html:10 msgid "Total" msgstr "Summe" +#: shiftings/shifts/templates/shifts/template/participation_permission_form.html:9 +#: shiftings/shifts/templates/shifts/template/template_form.html:10 msgid "Remove Shift" msgstr "Schicht löschen" +#: shiftings/shifts/templates/shifts/template/participation_permission_form.html:12 +#: shiftings/shifts/templates/shifts/template/template_form.html:13 msgid "Restore Shift" msgstr "Schicht wiederherstellen" +#: shiftings/shifts/templates/shifts/template/select_org.html:3 msgid "Select Organization to create Shift for" msgstr "Organisation auswählen für die eine Schicht erstellt werden soll" +#: shiftings/shifts/templates/shifts/template/shift.html:5 msgid "Go to Shift" msgstr "Zur Schicht springen" +#: shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:5 msgid "Filters" msgstr "Filter" +#: shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:8 msgid "Reset Filter" msgstr "Filter zurürcksetzen" +#: shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:12 msgid "Apply Filter" msgstr "Filter anwenden" +#: shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:15 msgid "Parameters" msgstr "Parameter" +#: shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:29 msgid "Select Organizations" msgstr "Wähle Organisationen" +#: shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:47 msgid "Shift starts after" msgstr "Schicht startet nach" +#: shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:52 msgid "Shift ends before" msgstr "Schicht endet vor" +#: shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:65 msgid "Select Events" msgstr "Events auswählen" +#: shiftings/shifts/templates/shifts/template/slots_display.html:4 msgid "Required to carry out this Shift" msgstr "Benötigte um die Schicht zu erledigen" +#: shiftings/shifts/templates/shifts/template/slots_display.html:6 msgid "Open Shift Slot" msgstr "Offene Postiion" +#: shiftings/shifts/templates/shifts/template/slots_display.html:32 msgid "Free" msgstr "Frei" +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:20 msgid "Required" msgstr "Benötigt" +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:23 msgid "Confirmed" msgstr "Bestätigt" +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:29 msgid "Participating" msgstr "Teilnehmer" +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:34 msgid "Full" msgstr "Voll" +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:40 msgid "Additional Users required" msgstr "Zusätzliche Mitglieder benötigt" +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:42 msgid "Additional Slots available" msgstr "Zusätzliche Plätze verfügbar" +#: shiftings/shifts/templates/shifts/template/template.html:11 msgid "Calendar Background Color" msgstr "Kalender Hintergrundfarbe" +#: shiftings/shifts/templates/shifts/template/template.html:17 msgid "Required Users/Max Users" msgstr "Benötigte Benutzer/Maximale Benutzer" +#: shiftings/shifts/templates/shifts/template/template.html:21 msgid "Unlimited" msgstr "Unbegrenzt" +#: shiftings/shifts/templates/shifts/template/template_form.html:36 msgid "Delay to starting time" msgstr "Verzögerung zur Startzeit" +#: shiftings/shifts/templates/shifts/template/template_form.html:37 msgctxt "Shift time" msgid "Start Delay" msgstr "Startverzögerung" +#: shiftings/shifts/templates/shifts/template/template_form.html:41 msgid "Shift Duration" msgstr "Dauer der Schicht" +#: shiftings/shifts/templates/shifts/template/template_form.html:42 msgctxt "Shift time" msgid "Duration" msgstr "Dauer" +#: shiftings/shifts/templates/shifts/type_group/list.html:8 msgid "Actions" msgstr "Aktionen" +#: shiftings/shifts/templatetags/shifts.py:90 #, python-brace-format msgid "Days + {delta_days}" msgstr "Tage + {delta_days}" +#: shiftings/shifts/utils/time_frame.py:17 msgid "Nth [weekday] of each month" msgstr "Nte [Wochentag] jeden Monat" +#: shiftings/shifts/utils/time_frame.py:18 msgid "Nth day of each month" msgstr "Nte Tag jeden Monat" +#: shiftings/shifts/utils/time_frame.py:19 msgid "every Nth [weekday]" msgstr "Jeden Nte [Wochentag]" +#: shiftings/shifts/utils/time_frame.py:20 msgid "Nth workday of each month" msgstr "Jeden Nte Werktag jedes Monats" +#: shiftings/shifts/utils/time_frame.py:21 msgid "Nth day of [month]" msgstr "Nte Tag des [Monats]" +#: shiftings/shifts/utils/time_frame.py:22 msgid "Nth workday of [month]" msgstr "Nte Werktag des [Monats]" +#: shiftings/shifts/views/participant.py:42 msgid "This shift is over, do you really want/need to add a participant?" msgstr "" +#: shiftings/shifts/views/permission.py:50 #, python-brace-format msgid "" "

Any Permission present will be applied to all Shifts belonging to " @@ -1594,27 +2164,35 @@ msgstr "" "weitergehenden Berechtigungen. Berechtigungen können für \"Alle Benutzer " "oder spezielle Organisationen festgelegt werden.\"

" +#: shiftings/shifts/views/recurring.py:85 msgid "Forbidden Method GET" msgstr "Verbotene Methode GET" +#: shiftings/shifts/views/recurring.py:98 msgid "Created Shifts on {}" msgstr "Schicht am {} erstellt" +#: shiftings/shifts/views/recurring.py:102 msgid "Error while creating shifts. Invalid Date" msgstr "Fehler beim erstellen der Schichten. Ungültiges Datum" +#: shiftings/shifts/views/shift.py:164 msgid "Unable to delete past shifts." msgstr "Konnte vergangene Schichten nicht löschen." +#: shiftings/templates/403.html:6 msgid "You don't have the permission to do that!" msgstr "Du besitzt nicht die benötigten Berechtigungen!" +#: shiftings/templates/404.html:6 msgid "The site you requested was not found." msgstr "Die gesuchte Seite wurde nicht gefunden." +#: shiftings/templates/500.html:6 msgid "A server error occured the admins have been notified" msgstr "Ein Fehler ist aufgereten die Admins wurden benachrichtigt" +#: shiftings/templates/generic/create_or_update.html:5 #, python-format msgid "" "\n" @@ -1625,6 +2203,7 @@ msgstr "" "

Erstelle %(object)s

\n" " " +#: shiftings/templates/generic/create_or_update.html:9 #, python-format msgid "" "\n" @@ -1635,6 +2214,7 @@ msgstr "" "

Aktualisiere %(object_name)s

\n" " " +#: shiftings/templates/generic/delete.html:6 #, python-format msgid "" "\n" @@ -1646,48 +2226,66 @@ msgstr "" "p>\n" " " +#: shiftings/templates/generic/delete.html:9 msgid "Yes" msgstr "Ja" +#: shiftings/templates/generic/delete.html:11 msgid "No" msgstr "Nein" +#: shiftings/templates/generic/modular_search.html:4 msgid "Filter by Name" msgstr "Nach Namen filtern" +#: shiftings/templates/generic/modular_search.html:6 msgid "submit search" msgstr "Suche starten" +#: shiftings/templates/language.html:16 msgid "Language" msgstr "Sprache" +#: shiftings/templates/language.html:21 msgid "German" msgstr "Deutsch" +#: shiftings/templates/language.html:24 msgid "English" msgstr "Englisch" +#: shiftings/templates/local/gdpr_template.sample.html:29 +#: shiftings/templates/template/remove_modal.html:39 +#: shiftings/templates/template/simple_display_modal.html:15 +#: shiftings/templates/template/simple_form_modal.html:22 msgid "Close" msgstr "Schließen" +#: shiftings/templates/month_view.html:2 msgid "M" msgstr "M" +#: shiftings/templates/month_view.html:3 shiftings/templates/month_view.html:5 msgid "T" msgstr "T" +#: shiftings/templates/month_view.html:4 msgid "W" msgstr "W" +#: shiftings/templates/month_view.html:6 msgid "F" msgstr "F" +#: shiftings/templates/month_view.html:7 shiftings/templates/month_view.html:8 msgid "S" msgstr "S" +#: shiftings/templates/switch_user.html:5 msgid "Switch User" msgstr "Benutzer wechseln" +#: shiftings/templates/template/remove_modal.html:12 #, python-format msgid "" "\n" @@ -1700,6 +2298,7 @@ msgstr "" "bold\"> von %(target)s\n" " " +#: shiftings/templates/template/remove_modal.html:16 msgid "" "\n" " Removing \n" " " +#: shiftings/templates/template/remove_modal.html:26 #, python-format msgid "" "\n" @@ -1725,6 +2325,7 @@ msgstr "" "text-danger\">\" von %(target)s\n" " " +#: shiftings/templates/template/remove_modal.html:31 msgid "" "\n" " Are you sure you want to remove\n" @@ -1738,425 +2339,269 @@ msgstr "" "text-danger\"> löschen möchtest\"\n" " " +#: shiftings/templates/template/remove_modal.html:38 msgid "Remove" msgstr "Entfernen" +#: shiftings/templates/top_nav.html:12 msgid "Overview" msgstr "Übersicht" +#: shiftings/templates/top_nav.html:32 shiftings/templates/top_nav.html:33 msgid "Help" msgstr "Hilfe" +#: shiftings/templates/top_nav.html:48 msgid "Profile" msgstr "Profil" +#: shiftings/templates/widgets/time_slider.html:9 msgid "You need to enter a valid timeframe in the form of HH:MM." msgstr "Du muss einen validen Zeitraum inder Form HH:MM eingeben." +#: shiftings/templates/widgets/time_slider.html:13 msgid "Day: +" msgstr "Tag: +" +#: shiftings/utils/string.py:5 #, python-format msgid "The function %(name)s has to be implemented." msgstr "Die Funktion %(name)s muss implementiert werden." +#: shiftings/utils/time/month.py:10 msgid "January" msgstr "Januar" +#: shiftings/utils/time/month.py:11 msgid "February" msgstr "Februar" +#: shiftings/utils/time/month.py:12 msgid "March" msgstr "März" +#: shiftings/utils/time/month.py:13 msgid "April" msgstr "April" +#: shiftings/utils/time/month.py:14 msgid "May" msgstr "Mai" +#: shiftings/utils/time/month.py:15 msgid "June" msgstr "Juni" +#: shiftings/utils/time/month.py:16 msgid "July" msgstr "Juli" +#: shiftings/utils/time/month.py:17 msgid "August" msgstr "August" +#: shiftings/utils/time/month.py:18 msgid "September" msgstr "September" +#: shiftings/utils/time/month.py:19 msgid "October" msgstr "Oktober" +#: shiftings/utils/time/month.py:20 msgid "November" msgstr "November" +#: shiftings/utils/time/month.py:21 msgid "December" msgstr "Dezember" +#: shiftings/utils/time/month.py:32 msgid "Day of the Month" msgstr "Tag des Monats" +#: shiftings/utils/time/timerange.py:13 msgid "Quarter" msgstr "Quartal" +#: shiftings/utils/time/timerange.py:14 msgid "Half Year" msgstr "Halbjahr" +#: shiftings/utils/time/timerange.py:15 msgid "Year" msgstr "Jahr" +#: shiftings/utils/time/timerange.py:16 msgid "Decade" msgstr "Dekade" +#: shiftings/utils/time/timerange.py:17 msgid "Century" msgstr "Jahrhundert" +#: shiftings/utils/time/timerange.py:18 msgid "Millennium" msgstr "Millennium" +#: shiftings/utils/time/week.py:13 msgid "Monday" msgstr "Montag" +#: shiftings/utils/time/week.py:14 msgid "Tuesday" msgstr "Dienstag" +#: shiftings/utils/time/week.py:15 msgid "Wednesday" msgstr "Mittwoch" +#: shiftings/utils/time/week.py:16 msgid "Thursday" msgstr "Donnerstag" +#: shiftings/utils/time/week.py:17 msgid "Friday" msgstr "Freitag" +#: shiftings/utils/time/week.py:18 msgid "Saturday" msgstr "Samstag" +#: shiftings/utils/time/week.py:19 msgid "Sunday" msgstr "Sonntag" +#: shiftings/utils/time/week.py:27 msgid "Day of the Week" msgstr "Wochentag" +#: shiftings/utils/typing.py:20 msgid "Value is not supposed to be None." msgstr "Dieser Wert sollte nicht None sein." +#: shiftings/utils/views/base.py:62 msgid "The pk is missing from the url. This is not supposed to be possible." msgstr "Der PK fehlt in der url. Das sollte nicht passieren." +#: shiftings/utils/views/base.py:65 #, python-format msgid "There is no %(name)s with that pk." msgstr "Es existiert kein %(name)s mit diesem pk." +#: shiftings/utils/views/base.py:73 msgid "You don't have the required permission." msgstr "Du besitzt nicht die benötigten Berechtigungen." +#: shiftings/utils/views/base.py:90 msgid "No URL to redirect to. Provide a success_url." msgstr "Keine URL zum verweisen. Bitte gib eine success_url an." +#: shiftings/utils/views/base.py:108 msgid "Could not find the requested page. This might be a configuration error." msgstr "" "Konnte die angefragte Seite nicht finden. Dies könnte ein Einstellungsfehler " "sein." -#, fuzzy -#~| msgid "Abort" -#~ msgid "Aborted!" -#~ msgstr "Abbrechen" + + + + + + + + + + + + + #, fuzzy -#~| msgid "Actions" -#~ msgid "Options" -#~ msgstr "Aktionen" #, fuzzy -#~| msgid "Required" -#~ msgid "required" -#~ msgstr "Benötigt" #, fuzzy -#~| msgid "Unknown User" -#~ msgid "unknown error" -#~ msgstr "Unbekannter Benutzer" #, fuzzy -#~| msgid "Profile" -#~ msgid "file" -#~ msgstr "Profil" #, fuzzy -#~| msgid "Organization" -#~ msgid "Syndication" -#~ msgstr "Organisation" #, fuzzy -#~| msgid "Enter Name" -#~ msgid "Enter a number." -#~ msgstr "Name einegeben" #, fuzzy -#~| msgid "End" -#~ msgid "and" -#~ msgstr "Ende" #, fuzzy -#~| msgid "December" -#~ msgid "Decimal number" -#~ msgstr "Dezember" #, fuzzy -#~| msgid "Subject" -#~ msgid "A JSON object" -#~ msgstr "Betreff" #, fuzzy -#~| msgid "One of the user fields is required!" -#~ msgid "This field is required." -#~ msgstr "Eines der Benutzerfelder ist benötigt!" #, fuzzy -#~| msgid "Enter Name" -#~ msgid "Enter a valid time." -#~ msgstr "Name einegeben" #, fuzzy -#~| msgid "Enter Name or Organization" -#~ msgid "Enter a valid duration." -#~ msgstr "Name oder Organisation angeben" #, fuzzy -#~| msgid "Delete Shift" -#~ msgid "Delete" -#~ msgstr "Schicht löschen" #, fuzzy -#~| msgid "Current Events" -#~ msgid "Currently" -#~ msgstr "Aktuelle Events" #, fuzzy -#~| msgid "M" -#~ msgid "PM" -#~ msgstr "M" #, fuzzy -#~| msgid "M" -#~ msgid "AM" -#~ msgstr "M" #, fuzzy -#~| msgid "Month" -#~ msgid "Mon" -#~ msgstr "Monat" #, fuzzy -#~| msgid "Tuesday" -#~ msgid "Tue" -#~ msgstr "Dienstag" #, fuzzy -#~| msgid "Friday" -#~ msgid "Fri" -#~ msgstr "Freitag" #, fuzzy -#~| msgid "Start" -#~ msgid "Sat" -#~ msgstr "Start" #, fuzzy -#~| msgid "Sunday" -#~ msgid "Sun" -#~ msgstr "Sonntag" #, fuzzy -#~| msgid "May" -#~ msgid "may" -#~ msgstr "Mai" #, fuzzy -#~| msgid "March" -#~ msgctxt "abbrev. month" -#~ msgid "March" -#~ msgstr "März" #, fuzzy -#~| msgid "April" -#~ msgctxt "abbrev. month" -#~ msgid "April" -#~ msgstr "April" #, fuzzy -#~| msgid "May" -#~ msgctxt "abbrev. month" -#~ msgid "May" -#~ msgstr "Mai" #, fuzzy -#~| msgid "June" -#~ msgctxt "abbrev. month" -#~ msgid "June" -#~ msgstr "Juni" #, fuzzy -#~| msgid "July" -#~ msgctxt "abbrev. month" -#~ msgid "July" -#~ msgstr "Juli" #, fuzzy -#~| msgid "January" -#~ msgctxt "alt. month" -#~ msgid "January" -#~ msgstr "Januar" #, fuzzy -#~| msgid "February" -#~ msgctxt "alt. month" -#~ msgid "February" -#~ msgstr "Februar" #, fuzzy -#~| msgid "March" -#~ msgctxt "alt. month" -#~ msgid "March" -#~ msgstr "März" #, fuzzy -#~| msgid "April" -#~ msgctxt "alt. month" -#~ msgid "April" -#~ msgstr "April" #, fuzzy -#~| msgid "May" -#~ msgctxt "alt. month" -#~ msgid "May" -#~ msgstr "Mai" #, fuzzy -#~| msgid "June" -#~ msgctxt "alt. month" -#~ msgid "June" -#~ msgstr "Juni" #, fuzzy -#~| msgid "July" -#~ msgctxt "alt. month" -#~ msgid "July" -#~ msgstr "Juli" #, fuzzy -#~| msgid "August" -#~ msgctxt "alt. month" -#~ msgid "August" -#~ msgstr "August" #, fuzzy -#~| msgid "September" -#~ msgctxt "alt. month" -#~ msgid "September" -#~ msgstr "September" #, fuzzy -#~| msgid "October" -#~ msgctxt "alt. month" -#~ msgid "October" -#~ msgstr "Oktober" #, fuzzy -#~| msgid "November" -#~ msgctxt "alt. month" -#~ msgid "November" -#~ msgstr "November" #, fuzzy -#~| msgid "December" -#~ msgctxt "alt. month" -#~ msgid "December" -#~ msgstr "Dezember" #, fuzzy -#~| msgid "Forbidden Method GET" -#~ msgid "Forbidden" -#~ msgstr "Verbotene Methode GET" #, fuzzy -#~| msgid "Close" -#~ msgid "close" -#~ msgstr "Schließen" -#, python-format -#~ msgid "" -#~ "\n" -#~ " Your query resulted in %(shifts|length)s or more shifts. Please " -#~ "adjust the start and end date.\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " Deine Anfrage ergibt %(shifts|length)s oder mehr Schichten. Bitte " -#~ "passe das Start- bzw. Enddatum an.\n" -#~ " " - -#~ msgid "Login via {{ sso_name }}" -#~ msgstr "Mit {{ sso_name }} anmelden" +#, fuzzy #, python-format -#~ msgid "" -#~ "\n" -#~ " Click here\n" -#~ "
\n" -#~ " if you are a Member of HaDiKo e.V. to change your password on " -#~ "myHaDiNet\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " Klicke hier\n" -#~ "
\n" -#~ " wenn du ein Mitglied des HaDiKo e.V. bist um dein Passwort auf " -#~ "myHaDiNet zu ändern\n" -#~ " " - -#~ msgid "Filter Shifts" -#~ msgstr "Schichten Filtern" - -#~ msgid "Day" -#~ msgstr "Tag" - -#~ msgid "Events" -#~ msgstr "Events" - -#~ msgid "No Shifts on this day" -#~ msgstr "Keine Schichten an diesem Tag" - -#~ msgid "This Day" -#~ msgstr "Dieser Tag" -#~ msgid "Organizations which are allowed to participate" -#~ msgstr "Organisationen die teilnehmen dürfen" -#~ msgid "Public" -#~ msgstr "Öffentlich" - -#~ msgid "Allow everyone to participate at this event" -#~ msgstr "Erlaube jedem an dem Event teilzunehmen" - -#~ msgid "Scope" -#~ msgstr "Umfang" - -#~ msgid "Search" -#~ msgstr "Suche" - -#~ msgid "My upcoming Shifts" -#~ msgstr "Meine anstehenden Schichten" - -#~ msgid "Your first occurrence doesn't match your chosen time frame." -#~ msgstr "Dein erster Termin liegt nicht im gewählten Zeitraum." - -#~ msgid "First Occurance" -#~ msgstr "Erster Termin" +#, python-format diff --git a/src/locale/en/LC_MESSAGES/django.po b/src/locale/en/LC_MESSAGES/django.po index e5559db..dca9de0 100644 --- a/src/locale/en/LC_MESSAGES/django.po +++ b/src/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-15 17:34+0000\n" +"POT-Creation-Date: 2026-03-15 21:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,70 +18,96 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: shiftings/accounts/forms/user_form.py:13 msgid "Confirm password" msgstr "" +#: shiftings/accounts/forms/user_form.py:31 +#: shiftings/accounts/forms/user_form.py:32 msgid "Please enter matching passwords" msgstr "" +#: shiftings/accounts/forms/user_form.py:65 msgid "Cannot change first name, last name or email for LDAP users." msgstr "" +#: shiftings/accounts/models/oidc_token.py:28 +#: shiftings/accounts/templates/accounts/user_detail.html:29 +#: shiftings/organizations/models/membership.py:68 +#: shiftings/shifts/models/participant.py:13 +#: shiftings/templates/top_nav.html:47 msgid "User" msgstr "" -msgid "Token" -msgstr "" - -msgid "Created" -msgstr "" - +#: shiftings/accounts/models/oidc_token.py:30 msgid "Refresh Token" msgstr "" +#: shiftings/accounts/models/oidc_token.py:31 msgid "Updated" msgstr "" +#: shiftings/accounts/models/user.py:32 +#: shiftings/accounts/templates/accounts/user_detail.html:52 +#: shiftings/shifts/models/participant.py:15 msgid "Display Name" msgstr "" +#: shiftings/accounts/models/user.py:33 shiftings/events/models/event.py:29 +#: shiftings/organizations/models/organization.py:28 msgid "Telephone Number" msgstr "" +#: shiftings/accounts/templates/accounts/confirm_email.html:7 msgid "Go to Login" msgstr "" +#: shiftings/accounts/templates/accounts/login_form.html:6 +#: shiftings/accounts/templates/accounts/login_multiple.html:12 msgid "Login with local Account" msgstr "" +#: shiftings/accounts/templates/accounts/login_form.html:8 +#: shiftings/accounts/templates/accounts/login_multiple.html:20 msgid "Login with LDAP Account" msgstr "" +#: shiftings/accounts/templates/accounts/login_form.html:14 +#: shiftings/accounts/views/auth.py:23 shiftings/templates/top_nav.html:60 msgid "Login" msgstr "" +#: shiftings/accounts/templates/accounts/login_form.html:16 +#: shiftings/accounts/templates/accounts/password_reset/prompt.html:10 msgid "Reset Password" msgstr "" +#: shiftings/accounts/templates/accounts/login_form.html:18 msgid "Return to selection" msgstr "" +#: shiftings/accounts/templates/accounts/login_form.html:29 msgid "You don't have an Account?" msgstr "" +#: shiftings/accounts/templates/accounts/login_form.html:30 msgid "Register here" msgstr "" +#: shiftings/accounts/templates/accounts/login_form.html:32 msgid "Or login using another Method" msgstr "" +#: shiftings/accounts/templates/accounts/login_multiple.html:5 msgid "Welcome to Shiftings" msgstr "" +#: shiftings/accounts/templates/accounts/login_multiple.html:6 msgid "" "To manage your shifts please authenticate with one of the given methods:" msgstr "" +#: shiftings/accounts/templates/accounts/login_multiple.html:31 #, python-format msgid "" "\n" @@ -89,21 +115,28 @@ msgid "" " " msgstr "" +#: shiftings/accounts/templates/accounts/logout.html:6 msgid "Successfully logged out" msgstr "" +#: shiftings/accounts/templates/accounts/logout.html:7 msgid "Login again" msgstr "" +#: shiftings/accounts/templates/accounts/password_reset/confirm.html:7 msgid "Change Password" msgstr "" +#: shiftings/accounts/templates/accounts/password_reset/done.html:4 msgid "Your password has been reset, check your email!" msgstr "" +#: shiftings/accounts/templates/accounts/password_reset/done.html:5 +#: shiftings/accounts/templates/accounts/password_reset/success.html:5 msgid "Back to login" msgstr "" +#: shiftings/accounts/templates/accounts/password_reset/prompt.html:4 msgid "" "\n" " If you are an local user enter your email-adress below to reset your " @@ -111,12 +144,15 @@ msgid "" " " msgstr "" +#: shiftings/accounts/templates/accounts/password_reset/success.html:4 msgid "Your password has been successfully reset!" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:3 msgid "Confirm User Deletion" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:5 #, python-format msgid "" "\n" @@ -126,114 +162,124 @@ msgid "" " " msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:17 msgid "Yes, I want to permanently delete my Data" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:19 msgid "Abort" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:37 +#: shiftings/accounts/templates/accounts/user_detail.html:57 msgid "Edit user data" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:48 +#: shiftings/organizations/forms/membership.py:16 msgid "Username" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:50 +#: shiftings/events/models/event.py:25 +#: shiftings/events/templates/events/event.html:85 +#: shiftings/organizations/models/membership.py:10 +#: shiftings/organizations/models/organization.py:24 +#: shiftings/organizations/templates/organizations/organization_admin.html:195 +#: shiftings/organizations/templates/organizations/organization_admin.html:239 +#: shiftings/organizations/templates/organizations/organization_admin.html:278 +#: shiftings/organizations/templates/organizations/organization_admin.html:388 +#: shiftings/organizations/templates/organizations/organization_settings.html:39 +#: shiftings/organizations/templates/organizations/user/claim_users.html:13 +#: shiftings/shifts/models/base.py:8 shiftings/shifts/models/recurring.py:32 +#: shiftings/shifts/models/template.py:17 +#: shiftings/shifts/models/template_group.py:20 +#: shiftings/shifts/models/type.py:40 shiftings/shifts/models/type_group.py:16 +#: shiftings/shifts/templates/shifts/group/list.html:6 +#: shiftings/shifts/templates/shifts/list.html:6 +#: shiftings/shifts/templates/shifts/recurring/list.html:6 +#: shiftings/shifts/templates/shifts/template/group_list.html:6 +#: shiftings/shifts/templates/shifts/template/template_form.html:5 +#: shiftings/shifts/templates/shifts/type_group/list.html:7 msgid "Name" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:55 +#: shiftings/accounts/templates/accounts/user_detail.html:65 msgid "Unknown" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:58 msgid "Set Display Name" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:62 msgid "Email" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:64 msgid "Phone Number" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:66 msgid "Member since" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:68 msgid "Total Shifts" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:70 +#: shiftings/organizations/templates/organizations/organization_admin.html:124 msgid "Groups" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:71 +#: shiftings/events/templates/events/template/event.html:32 +#: shiftings/shifts/templates/shifts/template/template.html:19 msgid "None" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:77 msgid "Organizations" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:83 msgid "Hide organizations" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:102 +#: shiftings/events/templates/events/template/event.html:12 msgid "No Logo available" msgstr "" -msgid "Calendar Subscriptions" -msgstr "" - -msgid "Regenerating will invalidate existing calendar subscriptions. Continue?" -msgstr "" - -msgid "Regenerate" -msgstr "" - -msgid "Revoking will stop all calendar subscriptions. Continue?" -msgstr "" - -msgid "Revoke" -msgstr "" - -msgid "Generate Calendar URL" -msgstr "" - -msgid "" -"Use these URLs to subscribe to your shifts in a calendar app. Treat them " -"like a password." -msgstr "" - -#, fuzzy -#| msgid "Shift list" -msgid "All Shifts" -msgstr "Schichtenliste" - -msgid "Add to Calendar" -msgstr "" - -msgid "Copy URL" -msgstr "" - -msgid "My Shifts" -msgstr "" - -msgid "" -"Generate a calendar URL to subscribe to your shifts from a mobile calendar " -"app." -msgstr "" - +#: shiftings/accounts/templates/accounts/user_detail.html:125 msgid "Recent Shifts" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:127 +#: shiftings/accounts/templates/accounts/user_detail.html:132 msgid "Upcoming Shifts" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:136 msgid "Past Shifts" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:157 msgid "No recent Shifts" msgstr "" +#: shiftings/accounts/templates/accounts/user_detail.html:159 +#: shiftings/organizations/templates/organizations/organization_shifts.html:135 msgid "No upcoming shifts" msgstr "" +#: shiftings/accounts/templates/accounts/user_form.html:6 msgid "Register" msgstr "" +#: shiftings/accounts/templates/accounts/user_form.html:8 #, python-format msgid "" "\n" @@ -241,106 +287,137 @@ msgid "" " " msgstr "" +#: shiftings/accounts/templates/accounts/user_form.html:19 +#: shiftings/templates/template/simple_form_modal.html:21 msgid "Submit" msgstr "" +#: shiftings/accounts/views/auth.py:79 msgid "Error while creating the user instance!" msgstr "" +#: shiftings/accounts/views/auth.py:83 msgid "Successfully logged in!" msgstr "" +#: shiftings/accounts/views/auth.py:86 #, python-format msgid "Error while trying to authenticate with sso! %(message)s" msgstr "" +#: shiftings/accounts/views/auth.py:111 shiftings/templates/top_nav.html:54 msgid "Logout" msgstr "" -msgid "Calendar subscription URL regenerated. Old URLs will stop working." -msgstr "" - -msgid "Calendar subscription URL generated." -msgstr "" - -msgid "Calendar subscription URL revoked." -msgstr "" - +#: shiftings/accounts/views/password.py:13 msgid "Password Reset" msgstr "" +#: shiftings/accounts/views/password.py:19 msgid "Confirm Password Reset" msgstr "" +#: shiftings/accounts/views/user.py:35 shiftings/templates/top_nav.html:15 msgid "My Shifts" msgstr "" +#: shiftings/accounts/views/user.py:102 msgid "Could not find your user." msgstr "" +#: shiftings/accounts/views/user.py:108 msgid "Your EMail was confirmed. You can now login." msgstr "" +#: shiftings/accounts/views/user.py:111 msgid "Your activation link was invalid." msgstr "" +#: shiftings/accounts/views/user.py:128 msgid "Error while deleting your data: Please confirm deletion!" msgstr "" +#: shiftings/cal/feed/event.py:44 msgid "Public Events" msgstr "" +#: shiftings/cal/forms/day_form.py:8 msgid "Select Day" msgstr "" +#: shiftings/cal/templates/cal/calendar_base.html:14 +#: shiftings/cal/templates/cal/calendar_base.html:24 msgid "Day View" msgstr "" +#: shiftings/cal/templates/cal/calendar_base.html:20 msgid "Day (Detailed)" msgstr "" +#: shiftings/cal/templates/cal/calendar_base.html:30 msgid "Day (By Types)" msgstr "" +#: shiftings/cal/templates/cal/calendar_base.html:37 msgid "Month View" msgstr "" +#: shiftings/cal/templates/cal/calendar_base.html:38 +#: shiftings/utils/time/month.py:25 shiftings/utils/time/timerange.py:12 msgid "Month" msgstr "" +#: shiftings/cal/templates/cal/calendar_base.html:42 +#: shiftings/cal/templates/cal/calendar_base.html:48 msgid "List View" msgstr "" +#: shiftings/cal/templates/cal/calendar_base.html:44 msgid "List (Detailed)" msgstr "" +#: shiftings/cal/templates/cal/calendar_base.html:50 msgid "List (By Types)" msgstr "" +#: shiftings/cal/templates/cal/calendar_templates/cal_shift_create_entry.html:4 +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:106 +#: shiftings/events/templates/events/event.html:74 +#: shiftings/organizations/templates/organizations/organization_admin.html:376 +#: shiftings/organizations/templates/organizations/organization_shifts.html:120 msgid "Create Shift" msgstr "" +#: shiftings/cal/templates/cal/calendar_templates/recurring_shift_entry.html:5 msgid "Recurring" msgstr "" +#: shiftings/cal/templates/cal/day_calendar.html:14 msgid "Previous Day" msgstr "" +#: shiftings/cal/templates/cal/day_calendar.html:22 msgid "Jump to Date" msgstr "" +#: shiftings/cal/templates/cal/day_calendar.html:28 msgid "Jump to Day" msgstr "" +#: shiftings/cal/templates/cal/day_calendar.html:30 msgid "Select" msgstr "" +#: shiftings/cal/templates/cal/day_calendar.html:38 msgid "Next Day" msgstr "" +#: shiftings/cal/templates/cal/list_calendar.html:12 msgid "Shift list" msgstr "Schichtenliste" +#: shiftings/cal/templates/cal/template/day_calendar_shift_types.html:3 +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:3 #, python-format msgid "" "\n" @@ -349,157 +426,293 @@ msgid "" " " msgstr "" +#: shiftings/cal/templates/cal/template/day_calendar_shift_types.html:14 +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:48 +#: shiftings/shifts/templates/shifts/shift_participants.html:4 msgid "Add with Name to Shift" msgstr "" +#: shiftings/cal/templates/cal/template/day_calendar_shift_types.html:30 +#: shiftings/organizations/templates/organizations/organization_admin.html:197 +#: shiftings/shifts/templates/shifts/template/group.html:43 +#: shiftings/shifts/templates/shifts/template/group_template.html:23 +#: shiftings/shifts/templates/shifts/template/shift.html:10 +#: shiftings/shifts/templates/shifts/template/template_form.html:33 msgid "Time" msgstr "" +#: shiftings/cal/templates/cal/template/day_calendar_shift_types.html:40 +#: shiftings/organizations/models/membership.py:12 msgid "Default" msgstr "" +#: shiftings/cal/templates/cal/template/day_calendar_shift_types.html:45 +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:95 msgid "No Shifts found with these parameters or planned on this day" msgstr "" +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:12 +#: shiftings/events/models/event.py:24 shiftings/shifts/models/base.py:12 +#: shiftings/shifts/models/recurring.py:34 +#: shiftings/shifts/models/template_group.py:24 +#: shiftings/shifts/models/type.py:37 shiftings/shifts/models/type_group.py:14 +#: shiftings/shifts/templates/shifts/create_shift.html:79 +#: shiftings/shifts/templates/shifts/list.html:9 +#: shiftings/shifts/templates/shifts/recurring/list.html:9 +#: shiftings/shifts/templates/shifts/shift.html:47 +#: shiftings/shifts/templates/shifts/template/group.html:39 +#: shiftings/shifts/templates/shifts/template/group.html:45 +#: shiftings/shifts/templates/shifts/template/group_list.html:8 +#: shiftings/shifts/templates/shifts/template/group_template.html:25 msgid "Organization" msgstr "" +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:13 msgid "Org" msgstr "" +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:14 msgid "Shift" msgstr "" +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:15 +#: shiftings/shifts/templates/shifts/create_shift.html:56 +#: shiftings/shifts/templates/shifts/template/shift.html:12 +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:21 msgid "Participants" msgstr "" +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:16 +#: shiftings/shifts/templates/shifts/list.html:10 msgid "Start" msgstr "" +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:17 +#: shiftings/shifts/templates/shifts/list.html:11 msgid "End" msgstr "" +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:36 +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:7 msgid "Shift Details" msgstr "" +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:61 +#: shiftings/shifts/templates/shifts/shift_participants.html:23 +#: shiftings/shifts/templates/shifts/template/slots_display.html:29 +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:44 msgid "Add me" msgstr "" +#: shiftings/cal/templates/cal/template/day_calendar_xs.html:112 +#: shiftings/shifts/templates/shifts/edit_participation_permissions.html:31 +#: shiftings/shifts/templates/shifts/edit_templates.html:26 msgid "Add Shift" msgstr "" +#: shiftings/cal/templates/cal/template/month_calendar.html:7 msgid "Previous Month" msgstr "" +#: shiftings/cal/templates/cal/template/month_calendar.html:15 msgid "Next Month" msgstr "" +#: shiftings/cal/templates/cal/week_calendar.html:9 msgid "Previous Week" msgstr "" +#: shiftings/cal/templates/cal/week_calendar.html:13 msgid "Week" msgstr "" +#: shiftings/cal/templates/cal/week_calendar.html:17 msgid "Next Week" msgstr "" +#: shiftings/cal/views/day_calendar.py:24 #, python-brace-format msgid "Day {date}" msgstr "" +#: shiftings/cal/views/day_calendar.py:25 msgid "Day Overview" msgstr "" +#: shiftings/cal/views/list.py:24 +#: shiftings/organizations/templates/organizations/template/org_info.html:6 msgid "Shift Overview" msgstr "" +#: shiftings/cal/views/month_calendar.py:24 #, python-brace-format msgid "Month {year}/{month:0>2}" msgstr "" +#: shiftings/cal/views/month_calendar.py:26 +#: shiftings/events/templates/events/event.html:52 +#: shiftings/organizations/templates/organizations/organization_admin.html:162 +#: shiftings/organizations/templates/organizations/organization_shifts.html:28 msgid "Month Overview" msgstr "" +#: shiftings/events/forms/event.py:24 #, python-format msgid "Start date %(start)s was after end_date %(end)s" msgstr "" +#: shiftings/events/models/event.py:26 +#: shiftings/events/templates/events/event.html:19 +#: shiftings/organizations/models/organization.py:25 +#: shiftings/organizations/templates/organizations/template/org_info.html:58 msgid "Logo" msgstr "" +#: shiftings/events/models/event.py:28 +#: shiftings/organizations/models/organization.py:27 msgid "E-Mail" msgstr "" +#: shiftings/events/models/event.py:30 +#: shiftings/organizations/models/organization.py:29 +#: shiftings/organizations/templates/organizations/organization_shifts.html:81 +#: shiftings/organizations/templates/organizations/template/organization.html:27 msgid "Website" msgstr "" +#: shiftings/events/models/event.py:32 msgid "Start Date" msgstr "" +#: shiftings/events/models/event.py:32 msgid "Earliest date where there are shifts available" msgstr "" +#: shiftings/events/models/event.py:33 msgid "End Date" msgstr "" +#: shiftings/events/models/event.py:33 msgid "Latest date where there are shifts available" msgstr "" +#: shiftings/events/models/event.py:35 +#: shiftings/organizations/models/organization.py:32 msgid "Description" msgstr "" +#: shiftings/events/models/event.py:55 #, python-brace-format msgid "{name} (by {organization})" msgstr "" +#: shiftings/events/templates/events/event.html:10 msgid "Edit Event" msgstr "" +#: shiftings/events/templates/events/event.html:55 +#: shiftings/organizations/templates/organizations/organization_admin.html:165 +#: shiftings/organizations/templates/organizations/organization_shifts.html:31 msgid "Complete Overview" msgstr "" +#: shiftings/events/templates/events/event.html:69 +#: shiftings/organizations/templates/organizations/organization_admin.html:363 +#: shiftings/organizations/templates/organizations/organization_shifts.html:109 msgid "Shifts" msgstr "" +#: shiftings/events/templates/events/event.html:71 +#: shiftings/events/templates/events/event.html:72 +#: shiftings/organizations/templates/organizations/organization_admin.html:371 +#: shiftings/organizations/templates/organizations/organization_shifts.html:112 msgid "ical Export" msgstr "" +#: shiftings/events/templates/events/event.html:86 +#: shiftings/organizations/templates/organizations/organization_admin.html:389 +#: shiftings/shifts/templates/shifts/list.html:7 +#: shiftings/shifts/templates/shifts/recurring/list.html:7 +#: shiftings/shifts/templates/shifts/template/shift.html:8 +#: shiftings/shifts/templates/shifts/template/template.html:7 msgid "Type" msgstr "" +#: shiftings/events/templates/events/event.html:87 +#: shiftings/mail/forms/mail.py:55 +#: shiftings/organizations/templates/organizations/organization_admin.html:241 +#: shiftings/organizations/templates/organizations/organization_admin.html:390 +#: shiftings/shifts/models/template_group.py:26 +#: shiftings/shifts/templates/shifts/shift.html:43 +#: shiftings/shifts/templates/shifts/template/group_list.html:9 +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:17 +#: shiftings/shifts/templates/shifts/template/template.html:13 msgid "Start Time" msgstr "" +#: shiftings/events/templates/events/event.html:88 +#: shiftings/mail/forms/mail.py:56 +#: shiftings/organizations/templates/organizations/organization_admin.html:391 +#: shiftings/shifts/templates/shifts/shift.html:45 +#: shiftings/shifts/templates/shifts/template/template.html:15 msgid "End Time" msgstr "" +#: shiftings/events/templates/events/event.html:89 +#: shiftings/organizations/templates/organizations/organization_admin.html:198 +#: shiftings/organizations/templates/organizations/organization_admin.html:240 +#: shiftings/organizations/templates/organizations/organization_admin.html:392 +#: shiftings/shifts/models/base.py:9 +#: shiftings/shifts/models/template_group.py:21 +#: shiftings/shifts/templates/shifts/list.html:8 +#: shiftings/shifts/templates/shifts/recurring/list.html:8 +#: shiftings/shifts/templates/shifts/shift.html:41 +#: shiftings/shifts/templates/shifts/template/group.html:41 +#: shiftings/shifts/templates/shifts/template/group_list.html:7 +#: shiftings/shifts/templates/shifts/template/group_template.html:21 +#: shiftings/shifts/templates/shifts/template/shift_card.html:12 +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:18 msgid "Place" msgstr "" +#: shiftings/events/templates/events/event.html:90 +#: shiftings/organizations/templates/organizations/organization_admin.html:393 msgid "Users/Required/Max" msgstr "" +#: shiftings/events/templates/events/event.html:108 +#: shiftings/organizations/templates/organizations/organization_admin.html:416 msgid "No current shifts" msgstr "" +#: shiftings/events/templates/events/list.html:5 +#: shiftings/events/templates/events/list.html:13 +#: shiftings/events/templates/events/list.html:22 msgid "All Events" msgstr "" +#: shiftings/events/templates/events/list.html:7 +#: shiftings/templates/top_nav.html:22 msgid "Current Events" msgstr "" +#: shiftings/events/templates/events/list.html:16 msgid "All upcoming Events" msgstr "" +#: shiftings/events/templates/events/list.html:20 msgid "Enter Name or Organization" msgstr "" +#: shiftings/events/templates/events/list.html:26 msgid "Future Events" msgstr "" +#: shiftings/events/templates/events/list.html:39 msgid "No Events found." msgstr "" +#: shiftings/events/templates/events/template/event.html:23 #, python-format msgid "" "\n" @@ -507,202 +720,276 @@ msgid "" " " msgstr "" +#: shiftings/events/templates/events/template/event.html:31 msgid "Open Shifts" msgstr "" +#: shiftings/events/templates/events/template/event.html:32 msgid "Required People" msgstr "" +#: shiftings/events/templates/events/template/event.html:33 msgid "Visibility" msgstr "" +#: shiftings/events/templates/events/template/event.html:33 +#: shiftings/organizations/templates/organizations/organization_admin.html:350 msgid "Public,Private,Unknown" msgstr "" +#: shiftings/events/templates/events/template/event_stats.html:2 msgid "Shifts that are below the required amount of users" msgstr "" +#: shiftings/events/templates/events/template/event_stats.html:3 msgid "Shifts missing users" msgstr "" +#: shiftings/events/templates/events/template/event_stats.html:6 msgid "Shifts that are below the required and maximum amount of users" msgstr "" +#: shiftings/events/templates/events/template/event_stats.html:7 msgid "Shifts with open slots" msgstr "" +#: shiftings/events/templates/events/template/event_stats.html:10 msgid "Number of Shift slots filled with users" msgstr "" +#: shiftings/events/templates/events/template/event_stats.html:11 msgid "Filled Slots" msgstr "" +#: shiftings/events/templates/events/template/event_stats.html:12 +#: shiftings/events/templates/events/template/event_stats.html:16 msgid "No Shifts available" msgstr "" +#: shiftings/events/templates/events/template/event_stats.html:14 msgid "Number of Shift slots that are still open" msgstr "" +#: shiftings/events/templates/events/template/event_stats.html:15 msgid "Open Slots" msgstr "" +#: shiftings/mail/forms/mail.py:13 msgid "Subject" msgstr "" +#: shiftings/mail/forms/mail.py:14 msgid "Text" msgstr "" +#: shiftings/mail/forms/mail.py:15 msgid "Attachments" msgstr "" +#: shiftings/mail/forms/mail.py:26 msgid "Each attachment must be smaller than 10 MB." msgstr "" +#: shiftings/mail/forms/mail.py:30 msgid "Total attachment size must be smaller than 25 MB." msgstr "" +#: shiftings/mail/forms/mail.py:38 msgid "" "Send the mail only to specific membership types. Or leave blank to send to " "all." msgstr "" +#: shiftings/mail/forms/mail.py:53 msgid "" "Send the mail only to specific shift types. Or leave blank to send to all." msgstr "" +#: shiftings/mail/forms/mail.py:71 msgid "Start time must be before end time." msgstr "" +#: shiftings/mail/templates/mail/mail.html:8 msgid "Send Mail" msgstr "" +#: shiftings/mail/views/mail.py:45 #, python-brace-format msgid "E-Mail sent to {count} user(s)." msgstr "" +#: shiftings/organizations/forms/membership.py:40 +#: shiftings/shifts/forms/participant.py:57 msgid "The user you entered could not be found." msgstr "" +#: shiftings/organizations/models/membership.py:11 +#: shiftings/organizations/templates/organizations/organization_admin.html:68 +#: shiftings/templates/top_nav.html:50 msgid "Admin" msgstr "" +#: shiftings/organizations/models/membership.py:13 msgid "Permissions" msgstr "" +#: shiftings/organizations/models/membership.py:19 msgid "edit organization details" msgstr "" +#: shiftings/organizations/models/membership.py:20 msgid "see members of the organization" msgstr "" +#: shiftings/organizations/models/membership.py:21 msgid "see shift participation statistics" msgstr "" +#: shiftings/organizations/models/membership.py:22 msgid "send emails to everyone in the organization" msgstr "" +#: shiftings/organizations/models/membership.py:24 msgid "create and update membership types for the organization" msgstr "" +#: shiftings/organizations/models/membership.py:25 msgid "add and remove members for the organization" msgstr "" +#: shiftings/organizations/models/membership.py:27 msgid "create and update events for the organization" msgstr "" +#: shiftings/organizations/models/membership.py:29 msgid "create and update recurring shifts for the organization" msgstr "" +#: shiftings/organizations/models/membership.py:30 msgid "create and update shifts templates for the organization" msgstr "" +#: shiftings/organizations/models/membership.py:31 msgid "create and update shifts for the organization" msgstr "" +#: shiftings/organizations/models/membership.py:32 msgid "delete uncompleted shifts for the organization" msgstr "" +#: shiftings/organizations/models/membership.py:34 msgid "remove others from shifts" msgstr "" +#: shiftings/organizations/models/membership.py:35 msgid "add other users that are not members of the organization to shifts" msgstr "" +#: shiftings/organizations/models/membership.py:36 msgid "add other organization members to shifts" msgstr "" +#: shiftings/organizations/models/membership.py:37 msgid "participate in shifts" msgstr "" +#: shiftings/organizations/models/membership.py:38 msgid "add self/others (depending on other permissions) to past shifts" msgstr "" +#: shiftings/organizations/models/membership.py:57 #, python-brace-format msgid "{name} (Admin)" msgstr "" +#: shiftings/organizations/models/membership.py:59 #, python-brace-format msgid "{name} (Default)" msgstr "" +#: shiftings/organizations/models/membership.py:65 msgid "Membership Type" msgstr "" +#: shiftings/organizations/models/membership.py:69 +#: shiftings/shifts/models/type.py:38 msgid "Group" msgstr "" +#: shiftings/organizations/models/membership.py:100 msgid "Membership can only be either user or group, not both." msgstr "" +#: shiftings/organizations/models/membership.py:102 msgid "Membership must consist of a user or a group." msgstr "" +#: shiftings/organizations/models/organization.py:30 msgid "Include Protocol i.E. https://example.com" msgstr "" +#: shiftings/organizations/models/organization.py:33 +#: shiftings/shifts/models/base.py:24 shiftings/shifts/models/recurring.py:56 +#: shiftings/shifts/models/recurring.py:63 shiftings/shifts/models/shift.py:32 +#: shiftings/shifts/models/template.py:33 #, python-brace-format msgid "A maximum of {amount} characters is allowed" msgstr "" +#: shiftings/organizations/models/organization.py:34 msgid "Confirm Participants" msgstr "" +#: shiftings/organizations/models/organization.py:35 msgid "Whether the participants can be confirmed or not. Default: False" msgstr "" +#: shiftings/organizations/models/organization.py:49 msgid "manage all organizations" msgstr "" +#: shiftings/organizations/models/user.py:10 msgid "Claimed by" msgstr "" +#: shiftings/organizations/templates/organizations/list.html:5 msgid "All Organizations" msgstr "" +#: shiftings/organizations/templates/organizations/list.html:7 +#: shiftings/templates/top_nav.html:18 msgid "My Organizations" msgstr "" +#: shiftings/organizations/templates/organizations/list.html:12 msgid "Enter Name" msgstr "" +#: shiftings/organizations/templates/organizations/list.html:14 msgid "Add new Organization" msgstr "" +#: shiftings/organizations/templates/organizations/list.html:25 msgid "No Organizations found." msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:6 msgid "Show membership Permissions" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:10 msgid "All Permissions" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:19 msgid "No permissions" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:26 msgid "Add member" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:41 #, python-format msgid "" "\n" @@ -710,129 +997,187 @@ msgid "" " " msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:48 +#: shiftings/organizations/templates/organizations/organization_shifts.html:8 msgid "Member Shift Summary" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:54 msgid "Add Membership Type" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:78 msgid "Show user permissions" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:81 msgid "Edit Membership Type" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:90 msgid "Add Member" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:100 msgid "No Members of this type!" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:106 msgid "Direct Members" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:150 msgid "Next Shift" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:154 msgid "No Shifts planned" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:179 +#: shiftings/shifts/templates/shifts/template/group.html:52 msgid "Recurring Shifts" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:184 msgid "Add recurring shift" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:196 msgid "Shift count" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:199 msgid "Status" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:210 msgid "Inactive,Active,Undefined" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:216 msgid "No recurring shifts" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:223 msgid "Shifts Templates" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:228 msgid "Add shifts template" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:255 +#: shiftings/organizations/templates/organizations/organization_admin.html:309 msgid "No shifts templates" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:262 msgid "Shifts Types" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:267 msgid "Add Shift Type" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:279 msgid "Color" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:280 +#: shiftings/organizations/templates/organizations/user/claim_users.html:15 msgid "Shift Count" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:281 +#: shiftings/organizations/templates/organizations/organization_settings.html:41 +#: shiftings/organizations/templates/organizations/user/claim_users.html:16 msgid "Action" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:290 msgid "Shift Type Background Color" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:317 msgid "Upcoming Events" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:321 +#: shiftings/organizations/templates/organizations/organization_shifts.html:50 msgid "Expired Events" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:326 +#: shiftings/organizations/templates/organizations/organization_shifts.html:55 msgid "Add Event" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:356 msgid "No upcoming Events planned" msgstr "" +#: shiftings/organizations/templates/organizations/organization_admin.html:367 msgid "Claim Legacy Shifts" msgstr "" +#: shiftings/organizations/templates/organizations/organization_settings.html:19 +#: shiftings/shifts/templates/shifts/edit_participation_permissions.html:36 +#: shiftings/shifts/templates/shifts/edit_templates.html:31 +#: shiftings/shifts/templates/shifts/recurring/form.html:25 +#: shiftings/templates/generic/create_or_update.html:20 +#: shiftings/templates/generic/formset.html:17 msgid "Save" msgstr "" +#: shiftings/organizations/templates/organizations/organization_settings.html:26 msgid "Shift Type Groups" msgstr "" +#: shiftings/organizations/templates/organizations/organization_settings.html:29 msgid "Create Type Group" msgstr "" +#: shiftings/organizations/templates/organizations/organization_settings.html:38 msgid "Order" msgstr "" +#: shiftings/organizations/templates/organizations/organization_settings.html:40 msgid "Types" msgstr "" +#: shiftings/organizations/templates/organizations/organization_settings.html:61 msgid "Edit Type Group" msgstr "" +#: shiftings/organizations/templates/organizations/organization_settings.html:72 +#: shiftings/organizations/templates/organizations/organization_settings.html:77 msgid "Move Up" msgstr "" +#: shiftings/organizations/templates/organizations/organization_settings.html:84 +#: shiftings/organizations/templates/organizations/organization_settings.html:89 msgid "Move Down" msgstr "" +#: shiftings/organizations/templates/organizations/organization_shifts.html:11 msgid "Full Summary" msgstr "" +#: shiftings/organizations/templates/organizations/organization_shifts.html:46 msgid "Upcoming Event" msgstr "" +#: shiftings/organizations/templates/organizations/organization_shifts.html:66 +#: shiftings/shifts/models/shift.py:21 msgid "Event" msgstr "" +#: shiftings/organizations/templates/organizations/organization_shifts.html:68 msgid "Go to Event" msgstr "" +#: shiftings/organizations/templates/organizations/organization_shifts.html:74 #, python-format msgid "" "\n" @@ -842,341 +1187,464 @@ msgid "" " " msgstr "" +#: shiftings/organizations/templates/organizations/organization_shifts.html:94 msgid "No Events planned" msgstr "" +#: shiftings/organizations/templates/organizations/organization_shifts.html:102 msgid "Events disabled" msgstr "" +#: shiftings/organizations/templates/organizations/organization_shifts.html:117 msgid "Create Shift from Template" msgstr "" +#: shiftings/organizations/templates/organizations/template/member_group.html:6 msgid "Click to expand members" msgstr "" +#: shiftings/organizations/templates/organizations/template/org_info.html:8 msgid "Organization Overview" msgstr "" +#: shiftings/organizations/templates/organizations/template/org_info.html:12 msgid "Administrate Organization" msgstr "" +#: shiftings/organizations/templates/organizations/template/org_info.html:14 msgid "Organization Admin View" msgstr "" +#: shiftings/organizations/templates/organizations/template/org_info.html:19 msgid "Organization Settings" msgstr "" +#: shiftings/organizations/templates/organizations/template/org_info.html:21 msgid "Organization Settings View" msgstr "" +#: shiftings/organizations/templates/organizations/template/org_info.html:35 msgid "Send Mail to shift participants" msgstr "" +#: shiftings/organizations/templates/organizations/template/org_info.html:41 msgid "Edit Organization" msgstr "" +#: shiftings/organizations/templates/organizations/template/org_info.html:47 msgid "Update Shift Permissions" msgstr "" +#: shiftings/organizations/templates/organizations/template/organization.html:12 msgid "No Image available" msgstr "" +#: shiftings/organizations/templates/organizations/user/claim_users.html:6 msgid "Imported Users" msgstr "" +#: shiftings/organizations/templates/organizations/user/claim_users.html:14 msgid "Claimed" msgstr "" +#: shiftings/organizations/templates/organizations/user/claim_users.html:36 msgid "Claim" msgstr "" +#: shiftings/organizations/templates/organizations/user/claim_users.html:43 msgid "Unclaim" msgstr "" +#: shiftings/organizations/views/membership.py:55 +#: shiftings/organizations/views/membership_type.py:57 msgid "Membership removed" msgstr "" +#: shiftings/organizations/views/organization.py:62 #, python-brace-format msgid "{org} Overview" msgstr "" +#: shiftings/organizations/views/organization.py:89 #, python-brace-format msgid "{org} Administration" msgstr "" +#: shiftings/organizations/views/organization.py:135 #, python-brace-format msgid "{org} Settings" msgstr "" +#: shiftings/organizations/views/user.py:36 msgid "You can't claim users that are already claimed." msgstr "" +#: shiftings/shifts/forms/filters.py:12 msgid "Shifts I participate in" msgstr "" +#: shiftings/shifts/forms/filters.py:17 shiftings/shifts/forms/filters.py:19 msgid "Date YYYY-MM-DD" msgstr "" +#: shiftings/shifts/forms/filters.py:18 shiftings/shifts/forms/filters.py:20 msgid "Time HH:MM" msgstr "" +#: shiftings/shifts/forms/participant.py:28 #, python-brace-format msgid "User {user} is already registered for this shift." msgstr "" +#: shiftings/shifts/forms/participant.py:32 msgid "Organization Users" msgstr "" +#: shiftings/shifts/forms/participant.py:33 msgid "Other Users" msgstr "" +#: shiftings/shifts/forms/participant.py:34 msgid "" "To add users that do not belong to your organization please enter their " "username." msgstr "" +#: shiftings/shifts/forms/participant.py:65 msgid "Only select one type of user!" msgstr "" +#: shiftings/shifts/forms/participant.py:75 msgid "One of the user fields is required!" msgstr "" +#: shiftings/shifts/forms/participant.py:80 #, python-brace-format msgid "Cannot add {user} multiple times to this shift" msgstr "" +#: shiftings/shifts/forms/permission.py:36 +#: shiftings/shifts/forms/permission.py:90 #, python-brace-format msgid "" "Permission would have no effect. Permission for all Users is more extensive: " "{permission}" msgstr "" +#: shiftings/shifts/forms/permission.py:47 #, python-brace-format msgid "" "Permission would have no effect. There is an inherited more extensive " "permission: {referred_object} ({permission})" msgstr "" +#: shiftings/shifts/forms/permission.py:56 #, python-brace-format msgid "" "Permission would have no effect. There is an inherited more extensive " "permission for all Users: {referred_object} ({permission})" msgstr "" +#: shiftings/shifts/forms/permission.py:78 #, python-brace-format msgid "Can only set one permission for organization \"{organization}\"" msgstr "" +#: shiftings/shifts/forms/permission.py:80 msgid "Can only set one permission for all Users" msgstr "" +#: shiftings/shifts/forms/recurring.py:13 msgid "Ordinal" msgstr "" +#: shiftings/shifts/forms/recurring.py:35 msgid "Weekday can't be empty with the chosen time frame type." msgstr "" +#: shiftings/shifts/forms/recurring.py:37 msgid "Month can't be empty with the chosen time frame type." msgstr "" +#: shiftings/shifts/forms/recurring.py:39 msgid "You need to add a warning for weekend handling." msgstr "" +#: shiftings/shifts/forms/recurring.py:41 msgid "You need to add a warning for holiday handling." msgstr "" +#: shiftings/shifts/forms/shift.py:39 msgid "End time must be after start time" msgstr "" +#: shiftings/shifts/forms/shift.py:44 shiftings/shifts/forms/template.py:66 #, python-brace-format msgid "Shift is too long, can at most be {max} long" msgstr "" +#: shiftings/shifts/forms/template.py:18 msgid "Date" msgstr "" +#: shiftings/shifts/forms/template.py:18 msgid "Date to create the template on" msgstr "" +#: shiftings/shifts/forms/template.py:38 shiftings/shifts/models/template.py:22 msgid "Start Delay" msgstr "" +#: shiftings/shifts/forms/template.py:40 shiftings/shifts/models/template.py:23 +#: shiftings/shifts/templates/shifts/recurring/list.html:11 msgid "Duration" msgstr "" +#: shiftings/shifts/forms/template.py:58 msgid "Start Delay was None please reload and use the slider." msgstr "" +#: shiftings/shifts/forms/template.py:64 msgid "Duration was None please reload and use the slider." msgstr "" +#: shiftings/shifts/forms/type.py:22 msgid "Can't name a shift type \"System\"." msgstr "" +#: shiftings/shifts/models/base.py:13 shiftings/shifts/models/template.py:19 +#: shiftings/shifts/templates/shifts/shift.html:39 +#: shiftings/shifts/templates/shifts/template/template_form.html:18 msgid "Shift Type" msgstr "" +#: shiftings/shifts/models/base.py:16 msgid "Required Users" msgstr "" +#: shiftings/shifts/models/base.py:18 shiftings/shifts/models/template.py:27 msgid "A maximum of 32 users can be required" msgstr "" +#: shiftings/shifts/models/base.py:19 msgid "Maximum Users" msgstr "" +#: shiftings/shifts/models/base.py:21 shiftings/shifts/models/template.py:30 msgid "A maximum of 64 users can be present" msgstr "" +#: shiftings/shifts/models/base.py:23 shiftings/shifts/models/template.py:32 +#: shiftings/shifts/templates/shifts/shift.html:79 +#: shiftings/shifts/templates/shifts/template/template.html:26 msgid "Additional Infos" msgstr "" +#: shiftings/shifts/models/participant.py:16 msgid "Display Name is optional, and will be shown instead of the username" msgstr "" +#: shiftings/shifts/models/participant.py:17 msgid "Participation confirmed" msgstr "" +#: shiftings/shifts/models/participant.py:18 msgid "" "Whether the participant has taken part in the shift or not. Default: False" msgstr "" +#: shiftings/shifts/models/permission.py:18 msgid "No Permission" msgstr "" +#: shiftings/shifts/models/permission.py:19 msgid "See Shift exists" msgstr "" +#: shiftings/shifts/models/permission.py:20 msgid "See Shift Details" msgstr "" +#: shiftings/shifts/models/permission.py:21 msgid "See Shift Participants" msgstr "" +#: shiftings/shifts/models/permission.py:22 msgid "Participate" msgstr "" +#: shiftings/shifts/models/permission.py:80 msgid "Permission Type" msgstr "" +#: shiftings/shifts/models/permission.py:82 msgid "Affected Organization" msgstr "" +#: shiftings/shifts/models/recurring.py:26 msgid "ignore" msgstr "" +#: shiftings/shifts/models/recurring.py:27 msgid "cancel" msgstr "" +#: shiftings/shifts/models/recurring.py:28 msgid "show warning" msgstr "" +#: shiftings/shifts/models/recurring.py:36 msgid "Timeframe Type" msgstr "" +#: shiftings/shifts/models/recurring.py:41 +#: shiftings/shifts/templates/shifts/recurring/list.html:10 +#: shiftings/shifts/templates/shifts/recurring/shift.html:53 msgid "First Occurrence" msgstr "" +#: shiftings/shifts/models/recurring.py:42 msgid "" "Choose a minimum day for first occurrence and the system will automatically " "choose the next applicable day." msgstr "" +#: shiftings/shifts/models/recurring.py:46 msgid "Auto create days" msgstr "" +#: shiftings/shifts/models/recurring.py:46 msgid "How many days in advance should the shifts be created?" msgstr "" +#: shiftings/shifts/models/recurring.py:48 msgid "Shift Template" msgstr "" +#: shiftings/shifts/models/recurring.py:52 msgid "Weekend problem handling" msgstr "" +#: shiftings/shifts/models/recurring.py:54 msgid "Warning text for weekend" msgstr "" +#: shiftings/shifts/models/recurring.py:59 msgid "Holidays problem handling" msgstr "" +#: shiftings/shifts/models/recurring.py:61 msgid "Warning text for holidays" msgstr "" +#: shiftings/shifts/models/recurring.py:67 msgid "Manually Disabled" msgstr "" +#: shiftings/shifts/models/recurring.py:88 msgid "Nth" msgstr "" +#: shiftings/shifts/models/recurring.py:89 msgid "[weekday]" msgstr "" +#: shiftings/shifts/models/recurring.py:90 msgid "[month]" msgstr "" +#: shiftings/shifts/models/shift.py:24 msgid "Start Date and Time" msgstr "" +#: shiftings/shifts/models/shift.py:25 msgid "End Date and Time" msgstr "" +#: shiftings/shifts/models/shift.py:27 +#: shiftings/shifts/templates/shifts/template/shift.html:13 +#: shiftings/shifts/templates/shifts/template/template_form.html:21 msgid "Users" msgstr "" +#: shiftings/shifts/models/shift.py:30 msgid "Locked for Participation" msgstr "" +#: shiftings/shifts/models/shift.py:31 +#: shiftings/shifts/templates/shifts/recurring/shift.html:58 +#: shiftings/shifts/templates/shifts/recurring/shift.html:64 msgid "Warning" msgstr "" +#: shiftings/shifts/models/shift.py:35 msgid "Created by Recurring Shift" msgstr "" +#: shiftings/shifts/models/shift.py:37 +#: shiftings/shifts/templates/shifts/shift.html:53 +msgid "Created" +msgstr "" + +#: shiftings/shifts/models/shift.py:38 +#: shiftings/shifts/templates/shifts/shift.html:55 msgid "Last Modified" msgstr "" +#: shiftings/shifts/models/shift.py:54 msgid "Organization and Event Organization must be identical." msgstr "" +#: shiftings/shifts/models/shift.py:57 #, python-brace-format msgid "Shift {name} on {time}" msgstr "" +#: shiftings/shifts/models/shift.py:65 #, python-brace-format msgid "{name} from {start} to {end} " msgstr "" +#: shiftings/shifts/models/shift.py:72 #, python-brace-format msgid "{start} to {end_time} on {end_date} " msgstr "" +#: shiftings/shifts/models/shift.py:76 #, python-brace-format msgid "{start} to {end_time}" msgstr "" +#: shiftings/shifts/models/summary.py:11 msgid "\"Other\" Shift Type Group Name" msgstr "" +#: shiftings/shifts/models/summary.py:14 msgid "Default time range for summary" msgstr "" +#: shiftings/shifts/models/summary.py:25 #, python-brace-format msgid "Organization summary settings of {organization}" msgstr "" +#: shiftings/shifts/models/template.py:16 msgid "Template Group" msgstr "" +#: shiftings/shifts/models/template.py:25 msgid "Required User" msgstr "" +#: shiftings/shifts/models/template.py:28 msgid "Maximum User" msgstr "" +#: shiftings/shifts/signals.py:26 msgid "Could not find a valid first occurrence." msgstr "" +#: shiftings/shifts/templates/shifts/create_shift.html:11 #, python-format msgid "" "\n" @@ -1184,6 +1652,7 @@ msgid "" " " msgstr "" +#: shiftings/shifts/templates/shifts/create_shift.html:15 #, python-format msgid "" "\n" @@ -1191,46 +1660,70 @@ msgid "" " " msgstr "" +#: shiftings/shifts/templates/shifts/create_shift.html:22 +#: shiftings/shifts/templates/shifts/create_shift.html:83 +#: shiftings/shifts/templates/shifts/recurring/form.html:23 +#: shiftings/shifts/templates/shifts/recurring/shift.html:19 +#: shiftings/templates/generic/create_or_update.html:18 +#: shiftings/templates/generic/form_card.html:8 msgid "Create" msgstr "" +#: shiftings/shifts/templates/shifts/create_shift.html:24 msgid "Update" msgstr "" +#: shiftings/shifts/templates/shifts/create_shift.html:26 +#: shiftings/shifts/templates/shifts/edit_participation_permissions.html:34 +#: shiftings/templates/generic/create_or_update.html:22 msgid "Back" msgstr "" +#: shiftings/shifts/templates/shifts/create_shift.html:47 msgid "Shift starting time" msgstr "" +#: shiftings/shifts/templates/shifts/create_shift.html:48 msgctxt "Shift time" msgid "Start Time" msgstr "" +#: shiftings/shifts/templates/shifts/create_shift.html:52 msgid "Shift end time" msgstr "" +#: shiftings/shifts/templates/shifts/create_shift.html:53 msgctxt "Shift time" msgid "End Time" msgstr "" +#: shiftings/shifts/templates/shifts/create_shift.html:59 +#: shiftings/shifts/templates/shifts/template/template_form.html:24 msgid "Required number of users to fill this shift" msgstr "" +#: shiftings/shifts/templates/shifts/create_shift.html:60 +#: shiftings/shifts/templates/shifts/template/template_form.html:25 msgctxt "Shift users" msgid "Required" msgstr "" +#: shiftings/shifts/templates/shifts/create_shift.html:64 +#: shiftings/shifts/templates/shifts/template/template_form.html:29 msgid "Maximum number of users allowed in this shift" msgstr "" +#: shiftings/shifts/templates/shifts/create_shift.html:65 +#: shiftings/shifts/templates/shifts/template/template_form.html:30 msgctxt "Shift users" msgid "Maximum" msgstr "" +#: shiftings/shifts/templates/shifts/create_shift.html:76 msgid "Create from Template" msgstr "" +#: shiftings/shifts/templates/shifts/edit_participation_permissions.html:17 #, python-format msgid "" "\n" @@ -1239,30 +1732,39 @@ msgid "" " " msgstr "" +#: shiftings/shifts/templates/shifts/edit_participation_permissions.html:26 msgid "Edit Shift Permissions for" msgstr "" +#: shiftings/shifts/templates/shifts/edit_participation_permissions.html:38 msgid "How does it work?" msgstr "" +#: shiftings/shifts/templates/shifts/edit_participation_permissions.html:53 msgid "Inherited Permissions" msgstr "" +#: shiftings/shifts/templates/shifts/edit_participation_permissions.html:65 msgid "All Users" msgstr "" +#: shiftings/shifts/templates/shifts/edit_templates.html:21 msgid "Edit Templates for" msgstr "" +#: shiftings/shifts/templates/shifts/edit_templates.html:29 msgid "Cancel" msgstr "" +#: shiftings/shifts/templates/shifts/recurring/form.html:33 msgid "Recurring Time Frame" msgstr "" +#: shiftings/shifts/templates/shifts/recurring/form.html:42 msgid "Shift Information" msgstr "" +#: shiftings/shifts/templates/shifts/recurring/shift.html:16 #, python-format msgid "" "\n" @@ -1270,9 +1772,11 @@ msgid "" " " msgstr "" +#: shiftings/shifts/templates/shifts/recurring/shift.html:37 msgid "Edit Recurring Shift" msgstr "" +#: shiftings/shifts/templates/shifts/recurring/shift.html:44 #, python-format msgid "" "\n" @@ -1281,6 +1785,7 @@ msgid "" " " msgstr "" +#: shiftings/shifts/templates/shifts/recurring/shift.html:48 #, python-format msgid "" "\n" @@ -1288,33 +1793,44 @@ msgid "" " " msgstr "" +#: shiftings/shifts/templates/shifts/recurring/shift.html:55 msgid "Weekend Handling" msgstr "" +#: shiftings/shifts/templates/shifts/recurring/shift.html:61 msgid "Holiday Handling" msgstr "" +#: shiftings/shifts/templates/shifts/recurring/shift.html:75 msgid "Upcoming recurring Shifts" msgstr "" +#: shiftings/shifts/templates/shifts/recurring/shift.html:86 msgid "No upcoming created Shifts" msgstr "" +#: shiftings/shifts/templates/shifts/recurring/shift.html:93 msgid "Passed recurring Shifts" msgstr "" +#: shiftings/shifts/templates/shifts/recurring/shift.html:104 msgid "No created Shifts have passed yet" msgstr "" +#: shiftings/shifts/templates/shifts/shift.html:16 +#: shiftings/shifts/views/shift.py:78 msgid "Edit Shift" msgstr "" +#: shiftings/shifts/templates/shifts/shift.html:22 msgid "Delete Shift" msgstr "" +#: shiftings/shifts/templates/shifts/shift.html:28 msgid "Edit Permissions" msgstr "" +#: shiftings/shifts/templates/shifts/shift.html:57 #, python-format msgid "" "\n" @@ -1322,163 +1838,219 @@ msgid "" " " msgstr "" +#: shiftings/shifts/templates/shifts/shift.html:66 +#: shiftings/shifts/templates/shifts/template/shift_card.html:13 msgid "Shift Participants" msgstr "" +#: shiftings/shifts/templates/shifts/shift.html:71 msgid "Add participant" msgstr "" +#: shiftings/shifts/templates/shifts/shift.html:84 msgid "Nothing to consider." msgstr "" +#: shiftings/shifts/templates/shifts/shift_participants.html:11 msgid "" "This shift is over, do you really want/need to add yourself as participant?" msgstr "" +#: shiftings/shifts/templates/shifts/shift_url_filters.html:8 msgid "Toggle Shift Filters" msgstr "" +#: shiftings/shifts/templates/shifts/summary/summary.html:6 msgid "Shift Summary" msgstr "" +#: shiftings/shifts/templates/shifts/template/group.html:17 msgid "Delete Template" msgstr "" +#: shiftings/shifts/templates/shifts/template/group.html:21 msgid "Edit Template" msgstr "" +#: shiftings/shifts/templates/shifts/template/group.html:25 +#: shiftings/shifts/templates/shifts/template/group_template.html:13 msgid "Edit Shifts" msgstr "" +#: shiftings/shifts/templates/shifts/template/group.html:31 msgid "Edit Template Permissions" msgstr "" +#: shiftings/shifts/templates/shifts/template/group.html:70 msgid "Create Shift Templates" msgstr "" +#: shiftings/shifts/templates/shifts/template/group_template.html:9 msgid "Edit Shifts Template" msgstr "" +#: shiftings/shifts/templates/shifts/template/member_shift_summary.html:3 msgid "Member" msgstr "" +#: shiftings/shifts/templates/shifts/template/member_shift_summary.html:10 msgid "Total" msgstr "" +#: shiftings/shifts/templates/shifts/template/participation_permission_form.html:9 +#: shiftings/shifts/templates/shifts/template/template_form.html:10 msgid "Remove Shift" msgstr "" +#: shiftings/shifts/templates/shifts/template/participation_permission_form.html:12 +#: shiftings/shifts/templates/shifts/template/template_form.html:13 msgid "Restore Shift" msgstr "" +#: shiftings/shifts/templates/shifts/template/select_org.html:3 msgid "Select Organization to create Shift for" msgstr "" +#: shiftings/shifts/templates/shifts/template/shift.html:5 msgid "Go to Shift" msgstr "" +#: shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:5 msgid "Filters" msgstr "" +#: shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:8 msgid "Reset Filter" msgstr "" +#: shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:12 msgid "Apply Filter" msgstr "" +#: shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:15 msgid "Parameters" msgstr "" +#: shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:29 msgid "Select Organizations" msgstr "" +#: shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:47 msgid "Shift starts after" msgstr "" +#: shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:52 msgid "Shift ends before" msgstr "" +#: shiftings/shifts/templates/shifts/template/shift_url_filter_form.html:65 msgid "Select Events" msgstr "" +#: shiftings/shifts/templates/shifts/template/slots_display.html:4 msgid "Required to carry out this Shift" msgstr "" +#: shiftings/shifts/templates/shifts/template/slots_display.html:6 msgid "Open Shift Slot" msgstr "" +#: shiftings/shifts/templates/shifts/template/slots_display.html:32 msgid "Free" msgstr "" +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:20 msgid "Required" msgstr "" +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:23 msgid "Confirmed" msgstr "" +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:29 msgid "Participating" msgstr "" +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:34 msgid "Full" msgstr "" +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:40 msgid "Additional Users required" msgstr "" +#: shiftings/shifts/templates/shifts/template/small_shift_display.html:42 msgid "Additional Slots available" msgstr "" +#: shiftings/shifts/templates/shifts/template/template.html:11 msgid "Calendar Background Color" msgstr "" +#: shiftings/shifts/templates/shifts/template/template.html:17 msgid "Required Users/Max Users" msgstr "" +#: shiftings/shifts/templates/shifts/template/template.html:21 msgid "Unlimited" msgstr "" +#: shiftings/shifts/templates/shifts/template/template_form.html:36 msgid "Delay to starting time" msgstr "" +#: shiftings/shifts/templates/shifts/template/template_form.html:37 msgctxt "Shift time" msgid "Start Delay" msgstr "" +#: shiftings/shifts/templates/shifts/template/template_form.html:41 msgid "Shift Duration" msgstr "" +#: shiftings/shifts/templates/shifts/template/template_form.html:42 msgctxt "Shift time" msgid "Duration" msgstr "" +#: shiftings/shifts/templates/shifts/type_group/list.html:8 msgid "Actions" msgstr "" +#: shiftings/shifts/templatetags/shifts.py:90 #, python-brace-format msgid "Days + {delta_days}" msgstr "" +#: shiftings/shifts/utils/time_frame.py:17 msgid "Nth [weekday] of each month" msgstr "" +#: shiftings/shifts/utils/time_frame.py:18 msgid "Nth day of each month" msgstr "" +#: shiftings/shifts/utils/time_frame.py:19 msgid "every Nth [weekday]" msgstr "" +#: shiftings/shifts/utils/time_frame.py:20 msgid "Nth workday of each month" msgstr "" +#: shiftings/shifts/utils/time_frame.py:21 msgid "Nth day of [month]" msgstr "" +#: shiftings/shifts/utils/time_frame.py:22 msgid "Nth workday of [month]" msgstr "" +#: shiftings/shifts/views/participant.py:42 msgid "This shift is over, do you really want/need to add a participant?" msgstr "" +#: shiftings/shifts/views/permission.py:50 #, python-brace-format msgid "" "

Any Permission present will be applied to all Shifts belonging to " @@ -1488,27 +2060,35 @@ msgid "" "organizations.

" msgstr "" +#: shiftings/shifts/views/recurring.py:85 msgid "Forbidden Method GET" msgstr "" +#: shiftings/shifts/views/recurring.py:98 msgid "Created Shifts on {}" msgstr "" +#: shiftings/shifts/views/recurring.py:102 msgid "Error while creating shifts. Invalid Date" msgstr "" +#: shiftings/shifts/views/shift.py:164 msgid "Unable to delete past shifts." msgstr "" +#: shiftings/templates/403.html:6 msgid "You don't have the permission to do that!" msgstr "" +#: shiftings/templates/404.html:6 msgid "The site you requested was not found." msgstr "" +#: shiftings/templates/500.html:6 msgid "A server error occured the admins have been notified" msgstr "" +#: shiftings/templates/generic/create_or_update.html:5 #, python-format msgid "" "\n" @@ -1516,6 +2096,7 @@ msgid "" " " msgstr "" +#: shiftings/templates/generic/create_or_update.html:9 #, python-format msgid "" "\n" @@ -1523,6 +2104,7 @@ msgid "" " " msgstr "" +#: shiftings/templates/generic/delete.html:6 #, python-format msgid "" "\n" @@ -1530,48 +2112,66 @@ msgid "" " " msgstr "" +#: shiftings/templates/generic/delete.html:9 msgid "Yes" msgstr "" +#: shiftings/templates/generic/delete.html:11 msgid "No" msgstr "" +#: shiftings/templates/generic/modular_search.html:4 msgid "Filter by Name" msgstr "" +#: shiftings/templates/generic/modular_search.html:6 msgid "submit search" msgstr "" +#: shiftings/templates/language.html:16 msgid "Language" msgstr "" +#: shiftings/templates/language.html:21 msgid "German" msgstr "" +#: shiftings/templates/language.html:24 msgid "English" msgstr "" +#: shiftings/templates/local/gdpr_template.sample.html:29 +#: shiftings/templates/template/remove_modal.html:39 +#: shiftings/templates/template/simple_display_modal.html:15 +#: shiftings/templates/template/simple_form_modal.html:22 msgid "Close" msgstr "" +#: shiftings/templates/month_view.html:2 msgid "M" msgstr "" +#: shiftings/templates/month_view.html:3 shiftings/templates/month_view.html:5 msgid "T" msgstr "" +#: shiftings/templates/month_view.html:4 msgid "W" msgstr "" +#: shiftings/templates/month_view.html:6 msgid "F" msgstr "" +#: shiftings/templates/month_view.html:7 shiftings/templates/month_view.html:8 msgid "S" msgstr "" +#: shiftings/templates/switch_user.html:5 msgid "Switch User" msgstr "" +#: shiftings/templates/template/remove_modal.html:12 #, python-format msgid "" "\n" @@ -1580,6 +2180,7 @@ msgid "" " " msgstr "" +#: shiftings/templates/template/remove_modal.html:16 msgid "" "\n" " Removing