forked from CGM_Public/pretix_original
Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d6d400b5c4 | ||
|
|
ad0b5776b6 | ||
|
|
15bfa2b2ce | ||
|
|
43b7e0afe0 | ||
|
|
6fa7d4289b | ||
|
|
3730b5473b |
@@ -1,202 +0,0 @@
|
||||
Führe den vollständigen Upstream-Merge-Workflow für pretix_cgo durch. Gehe dabei strikt Schritt für Schritt vor und warte an den markierten Stellen auf Bestätigung.
|
||||
|
||||
---
|
||||
|
||||
## Schritt 1 – Master aktualisieren
|
||||
|
||||
```bash
|
||||
git checkout master
|
||||
git pull
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Schritt 2 – Upstream-Tags holen & neuesten Tag ermitteln
|
||||
|
||||
```bash
|
||||
git fetch upstream --tags
|
||||
```
|
||||
|
||||
Bestimme danach den neuesten upstream-Tag (Format `vYYYY.M.P`, **ohne** das `.0`-Suffix unserer eigenen Tags):
|
||||
|
||||
```bash
|
||||
git tag --sort=-version:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -1
|
||||
```
|
||||
|
||||
Merke dir diesen Tag als `UPSTREAM_TAG` (z.B. `v2026.5.0`) und leite daraus den Branch-Namen ab: `upstream/2026.5.0` (ohne führendes `v`).
|
||||
|
||||
---
|
||||
|
||||
## Schritt 3 – Branch erstellen
|
||||
|
||||
```bash
|
||||
git checkout -b upstream/<VERSION> tags/<UPSTREAM_TAG>
|
||||
# Beispiel: git checkout -b upstream/2026.5.0 tags/v2026.5.0
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Schritt 4 – Master mergen (immer, nicht optional)
|
||||
|
||||
```bash
|
||||
git merge master
|
||||
```
|
||||
|
||||
Bei Merge-Konflikten: Konflikte anzeigen und gemeinsam mit dem Nutzer lösen, bevor es weitergeht.
|
||||
|
||||
---
|
||||
|
||||
## Schritt 5 – Branch pushen & MR anlegen
|
||||
|
||||
Push mit Push Option, damit Gitea direkt einen MR anlegt:
|
||||
|
||||
```bash
|
||||
git push --set-upstream origin upstream/<VERSION> -o merge_request.create
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Schritt 6 – Gender-Prüfung in den deutschen Übersetzungen
|
||||
|
||||
**Erst nach dem Merge mit master** die folgenden vier Dateien auf gegenderte Sprache prüfen:
|
||||
|
||||
- `src/pretix/locale/de/LC_MESSAGES/django.po`
|
||||
- `src/pretix/locale/de/LC_MESSAGES/djangojs.po`
|
||||
- `src/pretix/locale/de_Informal/LC_MESSAGES/django.po`
|
||||
- `src/pretix/locale/de_Informal/LC_MESSAGES/djangojs.po`
|
||||
|
||||
Suche in den `msgstr`-Zeilen (und den zugehörigen `msgid`-Zeilen für Kontext) nach folgenden Mustern:
|
||||
|
||||
| Muster | Beispiele |
|
||||
|--------|-----------|
|
||||
| Binneni mit `*` | `Teilnehmer*in`, `Käufer*innen` |
|
||||
| Binneni mit `:` | `Teilnehmer:in`, `Käufer:innen` |
|
||||
| Binneni mit `_` | `Teilnehmer_in`, `Käufer_innen` |
|
||||
| Binneni mit `(in)` | `Teilnehmer(in)`, `Käufer(innen)` |
|
||||
| Partizip-Plural auf `-enden` | `Teilnehmenden`, `Helfenden`, `Organisierenden`, `Bestellenden`, `Buchenden`, `Zahlenden` |
|
||||
|
||||
**Ausgabe der Befunde:** Zeige für jeden Treffer:
|
||||
1. Datei + Zeilennummer
|
||||
2. Den vollständigen `msgstr`-Block (mehrzeilig wenn nötig) als Kontext
|
||||
3. Den konkreten Vorschlag für die Ersetzung (z.B. `Teilnehmer*in` → `Teilnehmer`, `Teilnehmenden` → `Teilnehmer`)
|
||||
|
||||
Warte dann auf Freigabe durch den Nutzer, bevor Änderungen vorgenommen werden.
|
||||
|
||||
Nach Freigabe: Korrekturen direkt in den Dateien vornehmen und committen:
|
||||
|
||||
```bash
|
||||
git add src/pretix/locale/de/ src/pretix/locale/de_Informal/
|
||||
git commit -m "Remove gendered language from de/de_Informal translations"
|
||||
git push
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Schritt 7 – Warten auf Merge-Bestätigung
|
||||
|
||||
**Hier pausieren.** Den Nutzer auffordern zu bestätigen, sobald der MR auf Gitea gemergt wurde.
|
||||
|
||||
---
|
||||
|
||||
## Schritt 8 – Master aktualisieren und neuen Tag vergeben
|
||||
|
||||
Nach Bestätigung:
|
||||
|
||||
```bash
|
||||
git checkout master
|
||||
git pull
|
||||
```
|
||||
|
||||
Den neuen Tag ableiten: `<UPSTREAM_TAG>.0` **ohne führendes `v`** (z.B. `v2026.5.0` → `2026.5.0.0`):
|
||||
|
||||
```bash
|
||||
git tag <VERSION>.0
|
||||
# Beispiel: git tag 2026.5.0.0
|
||||
git push origin <VERSION>.0
|
||||
```
|
||||
|
||||
Ausgabe: Bestätigung mit dem neuen Tag und kurzem Status.
|
||||
|
||||
---
|
||||
|
||||
## Schritt 9 – Warten auf Build-Pipeline
|
||||
|
||||
Nutze den Gitea MCP Server, um den Pipeline-Lauf für den soeben gepushten Tag zu überwachen:
|
||||
|
||||
- **Repo:** `CGM_Public` / `pretix_cgo`
|
||||
- **Methode:** `mcp__gitea__actions_run_read` mit `method: list_runs`
|
||||
- Warte, bis ein Run mit dem passenden Ref (`refs/tags/<NEUER_TAG>`) den Status `success` erreicht.
|
||||
- Prüfe alle ~30 Sekunden erneut und zeige dem Nutzer den aktuellen Status (running / success / failure).
|
||||
- Bei `failure`: sofort stoppen und dem Nutzer melden.
|
||||
|
||||
Erst wenn der Build erfolgreich (`success`) abgeschlossen ist, weitermachen.
|
||||
|
||||
---
|
||||
|
||||
## Schritt 10 – cgm72 GitOps-Update
|
||||
|
||||
Im GitOps-Repo unter `../OrtlerstrasseGitOps/` (liegt immer neben dem pretix_cgo-Repo):
|
||||
|
||||
1. In `pretix-cgm72/pretix-deployment.yaml` den Image-Tag aktualisieren:
|
||||
- Suche: `cr.ortlerstrasse.de/cgo/pretix:<ALTER_TAG>`
|
||||
- Ersetze mit: `cr.ortlerstrasse.de/cgo/pretix:<NEUER_TAG>` (= der in Schritt 8 gesetzte Git-Tag, z.B. `2026.5.0.0`)
|
||||
|
||||
2. Committen und pushen (im OrtlerstrasseGitOps-Verzeichnis):
|
||||
|
||||
```bash
|
||||
git -C ../OrtlerstrasseGitOps add pretix-cgm72/pretix-deployment.yaml
|
||||
git -C ../OrtlerstrasseGitOps commit -m "Update pretix-cgm72 to <NEUER_TAG>"
|
||||
git -C ../OrtlerstrasseGitOps push
|
||||
```
|
||||
|
||||
Der GitOps-Operator wendet das YAML automatisch via `kubectl apply` an und rollt den Container neu aus.
|
||||
|
||||
---
|
||||
|
||||
## Schritt 11 – cgm72: Container-Neustart abwarten und Loginseite prüfen
|
||||
|
||||
Warte, bis der Container neu gestartet ist, und prüfe dann die Loginseite:
|
||||
|
||||
- **URL:** `https://anmeldung.christliche-gemeinde.de/`
|
||||
- **Prüfung:** HTTP 200 und die Seite enthält typische Pretix-Inhalte (z.B. Stichwort „pretix" oder ein Login-Formular im Body)
|
||||
|
||||
Methode: Nutze `mcp__claude_ai_Simon_Fetch__fetch_page` (oder `curl -sI`), um die URL alle ~30 Sekunden abzurufen. Erwarte einen kurzen Ausfall während des Neustarts – warte danach auf eine erfolgreiche Antwort.
|
||||
|
||||
Zeige dem Nutzer das Ergebnis (Status-Code + kurzen Seitenausschnitt als Bestätigung).
|
||||
|
||||
---
|
||||
|
||||
## Schritt 12 – Manuelle Bestätigung für cgm72
|
||||
|
||||
**Hier pausieren.** Den Nutzer auffordern zu bestätigen, dass cgm72 korrekt funktioniert (`https://anmeldung.christliche-gemeinde.de/`), bevor mit sola fortgefahren wird.
|
||||
|
||||
---
|
||||
|
||||
## Schritt 13 – sola GitOps-Update
|
||||
|
||||
Im GitOps-Repo unter `../OrtlerstrasseGitOps/` (liegt immer neben dem pretix_cgo-Repo):
|
||||
|
||||
1. In `pretix-sola/pretix-deployment.yaml` den Image-Tag aktualisieren:
|
||||
- Suche: `cr.ortlerstrasse.de/cgo/pretix:<ALTER_TAG>`
|
||||
- Ersetze mit: `cr.ortlerstrasse.de/cgo/pretix:<NEUER_TAG>`
|
||||
|
||||
2. Committen und pushen:
|
||||
|
||||
```bash
|
||||
git -C ../OrtlerstrasseGitOps add pretix-sola/pretix-deployment.yaml
|
||||
git -C ../OrtlerstrasseGitOps commit -m "Update pretix-sola to <NEUER_TAG>"
|
||||
git -C ../OrtlerstrasseGitOps push
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Schritt 14 – sola: Container-Neustart abwarten und Loginseite prüfen
|
||||
|
||||
Warte, bis der Container neu gestartet ist, und prüfe dann die Loginseite:
|
||||
|
||||
- **URL:** `https://anmeldung.sola-muenchen.de`
|
||||
- **Prüfung:** HTTP 200 und die Seite enthält typische Pretix-Inhalte
|
||||
|
||||
Methode: wie in Schritt 11.
|
||||
|
||||
Ausgabe: Bestätigung mit kurzem Abschluss-Status des gesamten Workflows.
|
||||
@@ -1,31 +0,0 @@
|
||||
name: Build Deploy email notification tool
|
||||
run-name: ${{ gitea.actor }} building new version of the email notification tool
|
||||
on:
|
||||
push: # Baut bei jedem Push (Branches + Tags)
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
Apply-Kubernetes-Resources:
|
||||
runs-on: podman
|
||||
steps:
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Login to Docker Registry
|
||||
run: podman login -u ${{ secrets.REGISTRY_USERNAME }} -p ${{ secrets.REGISTRY_TOKEN }} cr.ortlerstrasse.de
|
||||
|
||||
- name: Set Docker Image Tag
|
||||
run: |
|
||||
if [[ "${{ gitea.ref }}" == refs/tags/* ]]; then
|
||||
echo "TAG_NAME=${{ gitea.ref_name }}" >> $GITHUB_ENV
|
||||
else
|
||||
echo "TAG_NAME=latest" >> $GITHUB_ENV
|
||||
fi
|
||||
|
||||
- name: Build Docker image
|
||||
run: podman build -t cr.ortlerstrasse.de/cgo/pretix:${{ env.TAG_NAME }} .
|
||||
|
||||
- name: Push Docker image
|
||||
run: |
|
||||
podman push cr.ortlerstrasse.de/cgo/pretix:${{ env.TAG_NAME }}
|
||||
echo "Image pushed successfully: cr.ortlerstrasse.de/cgo/pretix:${{ env.TAG_NAME }}"
|
||||
+1
-2
@@ -62,8 +62,7 @@ RUN pip3 install -U \
|
||||
cd /pretix && \
|
||||
PRETIX_DOCKER_BUILD=TRUE pip3 install \
|
||||
-e ".[memcached]" \
|
||||
gunicorn django-extensions ipython \
|
||||
pretix-oidc && \
|
||||
gunicorn django-extensions ipython && \
|
||||
rm -rf ~/.cache/pip
|
||||
|
||||
RUN chmod +x /usr/local/bin/pretix && \
|
||||
|
||||
@@ -19,4 +19,4 @@
|
||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||
# <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
__version__ = "2026.5.2"
|
||||
__version__ = "2026.5.4"
|
||||
|
||||
@@ -28,6 +28,5 @@ from .items import * # noqa
|
||||
from .json import * # noqa
|
||||
from .mail import * # noqa
|
||||
from .orderlist import * # noqa
|
||||
from .relevant_orderlist import * # noqa
|
||||
from .reusablemedia import * # noqa
|
||||
from .waitinglist import * # noqa
|
||||
|
||||
@@ -89,7 +89,7 @@ class OrderListExporter(MultiSheetListExporter):
|
||||
description = gettext_lazy('Download a spreadsheet of all orders. The spreadsheet will include three sheets, one '
|
||||
'with a line for every order, one with a line for every order position, and one with '
|
||||
'a line for every additional fee charged in an order.')
|
||||
featured = False
|
||||
featured = True
|
||||
repeatable_read = False
|
||||
|
||||
@cached_property
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,28 @@
|
||||
{% extends "error.html" %}
|
||||
{% load i18n %}
|
||||
{% load eventurl %}
|
||||
{% load urlreplace %}
|
||||
{% load static %}
|
||||
|
||||
{% block content %}
|
||||
<h1>{% trans "Please continue in a new tab" %}</h1>
|
||||
<p class="larger">
|
||||
{% blocktrans trimmed %}
|
||||
For security reasons, the following step is only possible in a new tab.
|
||||
{% endblocktrans %}
|
||||
</p>
|
||||
<p class="larger">
|
||||
{% blocktrans trimmed %}
|
||||
If the new tab did not open automatically, please click the following button:
|
||||
{% endblocktrans %}
|
||||
</p>
|
||||
<div class="text-center">
|
||||
<a href="{{ url }}"
|
||||
class="btn btn-primary btn-lg" target="_blank">
|
||||
<span class="fa fa-external-link-square"></span>
|
||||
{% trans "Continue in new tab" %}
|
||||
</a>
|
||||
{{ url|json_script:"framebreak-url" }}
|
||||
<script type="text/javascript" src="{% static "pretixbase/js/framebreak.js" %}"></script>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -54,6 +54,7 @@ from markdown.postprocessors import Postprocessor
|
||||
from markdown.treeprocessors import UnescapeTreeprocessor
|
||||
from tlds import tld_set
|
||||
|
||||
from pretix.base.views.redirect import safelink
|
||||
from pretix.helpers.format import SafeFormatter, format_map
|
||||
|
||||
register = template.Library()
|
||||
@@ -158,8 +159,7 @@ def safelink_callback(attrs, new=False):
|
||||
"""
|
||||
url = html.unescape(attrs.get((None, 'href'), '/'))
|
||||
if not url_has_allowed_host_and_scheme(url, allowed_hosts=None) and not url.startswith('mailto:') and not url.startswith('tel:'):
|
||||
signer = signing.Signer(salt='safe-redirect')
|
||||
attrs[None, 'href'] = reverse('redirect') + '?url=' + urllib.parse.quote(signer.sign(url))
|
||||
attrs[None, 'href'] = safelink(url)
|
||||
attrs[None, 'target'] = '_blank'
|
||||
attrs[None, 'rel'] = 'noopener'
|
||||
return attrs
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||
# <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
import logging
|
||||
import urllib.parse
|
||||
|
||||
from django.core import signing
|
||||
@@ -26,6 +27,8 @@ from django.http import HttpResponseBadRequest, HttpResponseRedirect
|
||||
from django.shortcuts import render
|
||||
from django.urls import reverse
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def _is_samesite_referer(request):
|
||||
referer = request.headers.get('referer')
|
||||
@@ -42,11 +45,16 @@ def _is_samesite_referer(request):
|
||||
|
||||
|
||||
def redir_view(request):
|
||||
signer = signing.Signer(salt='safe-redirect')
|
||||
framebreak = "framebreak" in request.GET
|
||||
salt = 'framebreak-safelink-url' if framebreak else 'safelink-url'
|
||||
try:
|
||||
url = signer.unsign(request.GET.get('url', ''))
|
||||
url = signing.Signer(salt=salt).unsign(request.GET.get('url', ''))
|
||||
except signing.BadSignature:
|
||||
return HttpResponseBadRequest('Invalid parameter')
|
||||
try:
|
||||
# Backwards-compatibility for a change in 2026-06, remove after a while
|
||||
url = signing.Signer(salt='safe-redirect').unsign(request.GET.get('url', ''))
|
||||
except signing.BadSignature:
|
||||
return HttpResponseBadRequest('Invalid parameter')
|
||||
|
||||
if not _is_samesite_referer(request):
|
||||
u = urllib.parse.urlparse(url)
|
||||
@@ -55,11 +63,26 @@ def redir_view(request):
|
||||
'url': url,
|
||||
})
|
||||
|
||||
if framebreak:
|
||||
r = render(request, 'pretixbase/framebreak.html', {
|
||||
'url': url,
|
||||
})
|
||||
r.xframe_options_exempt = True
|
||||
return r
|
||||
|
||||
r = HttpResponseRedirect(url)
|
||||
r['X-Robots-Tag'] = 'noindex'
|
||||
return r
|
||||
|
||||
|
||||
def safelink(url):
|
||||
signer = signing.Signer(salt='safe-redirect')
|
||||
return reverse('redirect') + '?url=' + urllib.parse.quote(signer.sign(url))
|
||||
def safelink(url, framebreak=False):
|
||||
url = str(url)
|
||||
if not (url.startswith('https://') or url.startswith('http://') or url.startswith("/")):
|
||||
logger.warning('Invalid URL passed to safelink: %r', url)
|
||||
return '#invalid-url'
|
||||
salt = 'framebreak-safelink-url' if framebreak else 'safelink-url'
|
||||
signer = signing.Signer(salt=salt)
|
||||
u = reverse('redirect') + '?url=' + urllib.parse.quote(signer.sign(url))
|
||||
if framebreak:
|
||||
u += "&framebreak=true"
|
||||
return u
|
||||
|
||||
@@ -212,7 +212,7 @@ class AuditLogMiddleware:
|
||||
if request.path.startswith(get_script_prefix() + 'control') and request.user.is_authenticated:
|
||||
if getattr(request.user, "is_hijacked", False):
|
||||
hijack_history = request.session.get('hijack_history', False)
|
||||
hijacker = get_object_or_404(User, pk=hijack_history[0])
|
||||
hijacker = get_object_or_404(User, pk=hijack_history[0]["user"])
|
||||
ss = hijacker.get_active_staff_session(request.session.get('hijacker_session'))
|
||||
if ss:
|
||||
ss.logs.create(
|
||||
|
||||
@@ -1554,7 +1554,7 @@ class WidgetSettings(EventSettingsViewMixin, EventPermissionRequiredMixin, FormV
|
||||
return ctx
|
||||
|
||||
|
||||
class QuickSetupView(FormView):
|
||||
class QuickSetupView(EventPermissionRequiredMixin, FormView):
|
||||
template_name = 'pretixcontrol/event/quick_setup.html'
|
||||
permission = 'event.settings.general:write'
|
||||
form_class = QuickSetupForm
|
||||
|
||||
@@ -19,19 +19,22 @@
|
||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||
# <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
import hmac
|
||||
import json
|
||||
from contextlib import contextmanager
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth import (
|
||||
BACKEND_SESSION_KEY, get_user_model, load_backend, login,
|
||||
BACKEND_SESSION_KEY, HASH_SESSION_KEY, get_user_model, load_backend, login,
|
||||
logout,
|
||||
)
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.contrib.auth.views import redirect_to_login
|
||||
from django.db import transaction
|
||||
from django.shortcuts import get_object_or_404, redirect
|
||||
from django.urls import reverse
|
||||
from django.utils.crypto import get_random_string
|
||||
from django.utils.crypto import get_random_string, salted_hmac
|
||||
from django.utils.functional import cached_property
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.views import View
|
||||
@@ -230,7 +233,15 @@ class UserImpersonateView(AdministratorPermissionRequiredMixin, RecentAuthentica
|
||||
hijacked = self.object
|
||||
|
||||
hijack_history = request.session.get("hijack_history", [])
|
||||
hijack_history.append(request.user._meta.pk.value_to_string(hijacker))
|
||||
hijack_history.append({
|
||||
"user": request.user.pk,
|
||||
# We include the auth_hash, because it is unguessable. So should an attacker gain an attack vector to
|
||||
# modify hijack_history, they can't just insert or change a user that shouldn't be there. We HMAC it
|
||||
# again, though, since we also do not want the auth_hash of the admin user to be in the session of an
|
||||
# unprivileged user to contain the risk if there is some leak of session data.
|
||||
"auth_hash": salted_hmac(key_salt=b"hijack-history-hash", value=request.session[HASH_SESSION_KEY],
|
||||
algorithm="sha256", secret=settings.SECRET_KEY).hexdigest(),
|
||||
})
|
||||
|
||||
backend = get_used_backend(request)
|
||||
backend = f"{backend.__module__}.{backend.__class__.__name__}"
|
||||
@@ -259,8 +270,21 @@ class UserImpersonateStopView(LoginRequiredMixin, View):
|
||||
hijs = request.session['hijacker_session']
|
||||
hijack_history = request.session.get("hijack_history", [])
|
||||
hijacked = request.user
|
||||
user_pk = hijack_history.pop()
|
||||
hijacker = get_object_or_404(get_user_model(), pk=user_pk)
|
||||
prev_session = hijack_history.pop()
|
||||
hijacker = get_object_or_404(get_user_model(), pk=prev_session["user"])
|
||||
|
||||
expected_hash = salted_hmac(
|
||||
key_salt=b"hijack-history-hash",
|
||||
value=hijacker.get_session_auth_hash(),
|
||||
algorithm="sha256",
|
||||
secret=settings.SECRET_KEY
|
||||
).hexdigest()
|
||||
if not hmac.compare_digest(expected_hash, prev_session["auth_hash"]):
|
||||
# Could be an attacker-controlled hijack history, but could also be e.g. a password change of the admin user
|
||||
# that happened during the hijack session
|
||||
logout(request)
|
||||
return redirect_to_login(request.get_full_path())
|
||||
|
||||
backend = get_used_backend(request)
|
||||
backend = f"{backend.__module__}.{backend.__class__.__name__}"
|
||||
with signals.no_update_last_login(), keep_session_age(request.session):
|
||||
|
||||
@@ -891,7 +891,7 @@ msgstr "Details der Bestellposition"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:129
|
||||
msgid "Attendee details"
|
||||
msgstr "Details Teilnehmer"
|
||||
msgstr "Details Teilnehmer*in"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:130 pretix/base/exporters/answers.py:66
|
||||
#: pretix/base/models/items.py:1767 pretix/control/navigation.py:185
|
||||
@@ -953,13 +953,13 @@ msgstr "Veranstaltungs- oder Termininformationen"
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:50
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:36
|
||||
msgid "Attendee name"
|
||||
msgstr "Name Teilnehmer"
|
||||
msgstr "Name Teilnehmer*in"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:187
|
||||
#: pretix/base/datasync/sourcefields.py:604
|
||||
#: pretix/base/datasync/sourcefields.py:628
|
||||
msgid "Attendee"
|
||||
msgstr "Teilnehmer"
|
||||
msgstr "Teilnehmer*in"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:207
|
||||
#: pretix/base/exporters/orderlist.py:648 pretix/base/forms/questions.py:713
|
||||
@@ -970,11 +970,11 @@ msgstr "Teilnehmer"
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:172
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:175
|
||||
msgid "Attendee email"
|
||||
msgstr "E-Mail Teilnehmer"
|
||||
msgstr "E-Mail Teilnehmer*in"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:219
|
||||
msgid "Attendee or order email"
|
||||
msgstr "E-Mail Teilnehmer oder Bestellung"
|
||||
msgstr "E-Mail Teilnehmer*in oder Bestellung"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:232
|
||||
#: pretix/base/exporters/orderlist.py:649 pretix/base/pdf.py:188
|
||||
@@ -984,23 +984,23 @@ msgstr "E-Mail Teilnehmer oder Bestellung"
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:182
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:185
|
||||
msgid "Attendee company"
|
||||
msgstr "Teilnehmer-Firma"
|
||||
msgstr "Teilnehmer*innen-Firma"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:241
|
||||
msgid "Attendee address street"
|
||||
msgstr "Teilnehmer-Adresse: Straße"
|
||||
msgstr "Teilnehmer*innen-Adresse: Straße"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:250
|
||||
msgid "Attendee address ZIP code"
|
||||
msgstr "Teilnehmer-Adresse: PLZ"
|
||||
msgstr "Teilnehmer*innen-Adresse: PLZ"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:259
|
||||
msgid "Attendee address city"
|
||||
msgstr "Teilnehmer-Adresse: Stadt"
|
||||
msgstr "Teilnehmer*innen-Adresse: Stadt"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:268
|
||||
msgid "Attendee address country"
|
||||
msgstr "Teilnehmer-Adresse: Land"
|
||||
msgstr "Teilnehmer*innen-Adresse: Land"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:279
|
||||
#: pretix/base/exporters/orderlist.py:691 pretix/base/pdf.py:346
|
||||
@@ -1278,7 +1278,7 @@ msgid ""
|
||||
"Download a ZIP file including all files that have been uploaded by your "
|
||||
"customers while creating an order."
|
||||
msgstr ""
|
||||
"ZIP-Datei mit allen Dateien, die von Kunden im Bestellprozess als "
|
||||
"ZIP-Datei mit allen Dateien, die von Kund*innen im Bestellprozess als "
|
||||
"Antwort auf eine Frage hochgeladen wurden."
|
||||
|
||||
#: pretix/base/exporters/answers.py:76 pretix/base/exporters/orderlist.py:629
|
||||
@@ -2239,10 +2239,6 @@ msgstr "Ohne gültige Mitgliedschaft verstecken"
|
||||
msgid "Order data"
|
||||
msgstr "Bestelldaten"
|
||||
|
||||
#: pretix/base/exporters/relevant_orderlist.py:86
|
||||
msgid "Order data (sorted by relevance)"
|
||||
msgstr "Bestelldaten (nach Relevanz sortiert)"
|
||||
|
||||
#: pretix/base/exporters/json.py:53
|
||||
msgid ""
|
||||
"Download a structured JSON representation of all orders. This might be "
|
||||
@@ -2260,8 +2256,8 @@ msgid ""
|
||||
"Download a text file with all email addresses collected either from buyers "
|
||||
"or from ticket holders."
|
||||
msgstr ""
|
||||
"Textdatei mit allen E-Mail-Adressen, die von Käufern und "
|
||||
"Ticketinhaber eingesammelt wurden."
|
||||
"Textdatei mit allen E-Mail-Adressen, die von Käufer*innen und "
|
||||
"Ticketinhaber*innen eingesammelt wurden."
|
||||
|
||||
#: pretix/base/exporters/mail.py:76 pretix/plugins/reports/exporters.py:502
|
||||
#: pretix/plugins/reports/exporters.py:685
|
||||
@@ -2279,18 +2275,6 @@ msgstr ""
|
||||
"Bestellposition und das dritte eine Zeile für jede zusätzlich erhobene "
|
||||
"Gebühr."
|
||||
|
||||
#: pretix/base/exporters/relevant_orderlist.py:88
|
||||
msgid ""
|
||||
"Download a spreadsheet of all orders. The spreadsheet will include three "
|
||||
"sheets, one with a line for every order, one with a line for every order "
|
||||
"position, and one with a line for every additional fee charged in an "
|
||||
"order. The most relevant data is in the first columns of the tables."
|
||||
msgstr ""
|
||||
"Tabelle (Excel oder CSV) mit allen Bestellungen. Das erste Tabellenblatt "
|
||||
"enthält eine Zeile für jede Bestellung, das zweite eine Zeile für jede "
|
||||
"Bestellposition und das dritte eine Zeile für jede zusätzlich erhobene "
|
||||
"Gebühr. Die relevantesten Daten sind in den ersten Spalten der Tabellen."
|
||||
|
||||
#: pretix/base/exporters/orderlist.py:102 pretix/base/models/orders.py:336
|
||||
#: pretix/base/permissions.py:228 pretix/control/navigation.py:267
|
||||
#: pretix/control/navigation.py:387
|
||||
@@ -4254,7 +4238,7 @@ msgstr "Bitte wählen Sie einen gültigen Staat aus."
|
||||
|
||||
#: pretix/base/modelimport_orders.py:359 pretix/control/forms/filter.py:688
|
||||
msgid "Attendee email address"
|
||||
msgstr "Teilnehmer-E-Mail-Adresse"
|
||||
msgstr "Teilnehmer*innen-E-Mail-Adresse"
|
||||
|
||||
#: pretix/base/modelimport_orders.py:375 pretix/base/modelimport_orders.py:386
|
||||
#: pretix/base/modelimport_orders.py:397 pretix/base/modelimport_orders.py:408
|
||||
@@ -4266,7 +4250,7 @@ msgstr "Teilnehmer-E-Mail-Adresse"
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:193
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:196
|
||||
msgid "Attendee address"
|
||||
msgstr "Teilnehmer-Adresse"
|
||||
msgstr "Teilnehmer*innen-Adresse"
|
||||
|
||||
#: pretix/base/modelimport_orders.py:468
|
||||
msgid "Calculate from product"
|
||||
@@ -8125,7 +8109,7 @@ msgstr "Musterfirma GmbH"
|
||||
|
||||
#: pretix/base/pdf.py:193
|
||||
msgid "Full attendee address"
|
||||
msgstr "Volle Teilnehmer-Adresse"
|
||||
msgstr "Volle Teilnehmer*innen-Adresse"
|
||||
|
||||
#: pretix/base/pdf.py:194
|
||||
msgid ""
|
||||
@@ -8143,23 +8127,23 @@ msgstr ""
|
||||
|
||||
#: pretix/base/pdf.py:198
|
||||
msgid "Attendee street"
|
||||
msgstr "Teilnehmer-Straße"
|
||||
msgstr "Teilnehmer*innen-Straße"
|
||||
|
||||
#: pretix/base/pdf.py:203
|
||||
msgid "Attendee ZIP code"
|
||||
msgstr "Teilnehmer-PLZ"
|
||||
msgstr "Teilnehmer*innen-PLZ"
|
||||
|
||||
#: pretix/base/pdf.py:208
|
||||
msgid "Attendee city"
|
||||
msgstr "Teilnehmer-Stadt"
|
||||
msgstr "Teilnehmer*innen-Stadt"
|
||||
|
||||
#: pretix/base/pdf.py:213
|
||||
msgid "Attendee state"
|
||||
msgstr "Teilnehmer-Bundesstaat"
|
||||
msgstr "Teilnehmer*innen-Bundesstaat"
|
||||
|
||||
#: pretix/base/pdf.py:218
|
||||
msgid "Attendee country"
|
||||
msgstr "Teilnehmer-Land"
|
||||
msgstr "Teilnehmer*innen-Land"
|
||||
|
||||
#: pretix/base/pdf.py:230
|
||||
msgid "Pseudonymization ID (lead scanning)"
|
||||
@@ -8457,7 +8441,7 @@ msgstr "Herr Mustermann"
|
||||
#: pretix/plugins/ticketoutputpdf/exporters.py:99
|
||||
#, python-brace-format
|
||||
msgid "Attendee name: {part}"
|
||||
msgstr "Teilnehmername: {part}"
|
||||
msgstr "Teilnehmer*innenname: {part}"
|
||||
|
||||
#: pretix/base/pdf.py:695
|
||||
msgid "Invoice address name for salutation"
|
||||
@@ -9371,7 +9355,7 @@ msgstr "Veranstaltungsort: {location}"
|
||||
#, python-brace-format
|
||||
msgctxt "invoice"
|
||||
msgid "Attendee: {name}"
|
||||
msgstr "Teilnehmer: {name}"
|
||||
msgstr "Teilnehmer*in: {name}"
|
||||
|
||||
#: pretix/base/services/invoices.py:293 pretix/plugins/reports/exporters.py:308
|
||||
#, python-brace-format
|
||||
@@ -10242,7 +10226,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py:362
|
||||
msgid "Hide prices on attendee ticket page"
|
||||
msgstr "Preise auf Teilnehmer-Ticket-Seite verstecken"
|
||||
msgstr "Preise auf Teilnehmer*innen-Ticket-Seite verstecken"
|
||||
|
||||
#: pretix/base/settings.py:363
|
||||
msgid ""
|
||||
@@ -10252,13 +10236,13 @@ msgid ""
|
||||
"price."
|
||||
msgstr ""
|
||||
"Wenn eine Person mehrere Tickets erwirbt und E-Mails an alle "
|
||||
"Teilnehmer verschickt werden, wird mit dieser Option der Ticketpreis "
|
||||
"auf der Ticket-Seite der einzelnen Teilnehmer versteckt. Nur die "
|
||||
"Teilnehmer*innen verschickt werden, wird mit dieser Option der Ticketpreis "
|
||||
"auf der Ticket-Seite der einzelnen Teilnehmer*innen versteckt. Nur die "
|
||||
"Person, welche die Tickets kauft, sieht den Preis."
|
||||
|
||||
#: pretix/base/settings.py:381
|
||||
msgid "Ask for attendee names"
|
||||
msgstr "Namen der Teilnehmer erfragen"
|
||||
msgstr "Namen der Teilnehmer*innen erfragen"
|
||||
|
||||
#: pretix/base/settings.py:382
|
||||
msgid "Ask for a name for all personalized tickets."
|
||||
@@ -10267,11 +10251,11 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py:391
|
||||
msgid "Require attendee names"
|
||||
msgstr "Namen der Teilnehmer erfordern"
|
||||
msgstr "Namen der Teilnehmer*innen erfordern"
|
||||
|
||||
#: pretix/base/settings.py:392
|
||||
msgid "Require customers to fill in the names of all attendees."
|
||||
msgstr "Erfordere die Eingabe aller Teilnehmer-Namen."
|
||||
msgstr "Erfordere die Eingabe aller Teilnehmer*innen-Namen."
|
||||
|
||||
#: pretix/base/settings.py:402
|
||||
msgid "Ask for email addresses per ticket"
|
||||
@@ -10802,8 +10786,8 @@ msgid ""
|
||||
"but no indication of missing payment will be visible on the ticket pages of "
|
||||
"attendees who did not buy the ticket themselves."
|
||||
msgstr ""
|
||||
"Die Box mit Zahlungsinstruktionen wird Ticketkäufern weiter angezeigt, "
|
||||
"aber Teilnehmern, die ihr Ticket nicht selbst gekauft haben, werden "
|
||||
"Die Box mit Zahlungsinstruktionen wird Ticketkäufer*innen weiter angezeigt, "
|
||||
"aber Teilnehmer*innen, die ihr Ticket nicht selbst gekauft haben, werden "
|
||||
"keine Anzeichen des fehlenden Zahlungseingangs sehen."
|
||||
|
||||
#: pretix/base/settings.py:1107
|
||||
@@ -11301,7 +11285,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py:1750
|
||||
msgid "Show number of check-ins to customer"
|
||||
msgstr "Zeige Anzahl der Check-ins für Kunden an"
|
||||
msgstr "Zeige Anzahl der Check-ins für Kund*innen an"
|
||||
|
||||
#: pretix/base/settings.py:1751
|
||||
msgid ""
|
||||
@@ -11312,12 +11296,12 @@ msgid ""
|
||||
"failed scans will not be counted, and the user will not see the different "
|
||||
"check-in lists."
|
||||
msgstr ""
|
||||
"Wenn diese Option aktiv ist, können Kunden selbst sehen, wie oft sie die "
|
||||
"Wenn diese Option aktiv ist, können Kund*innen selbst sehen, wie oft sie die "
|
||||
"Veranstaltung betreten haben. Das ist normalerweise nicht nötig, aber kann "
|
||||
"nützlich sein, wenn es Tickets gibt, die eine bestimmte Anzahl an Eintritten "
|
||||
"erlauben, sodass Kunden die bisherige Nutzung des Tickets einsehen "
|
||||
"erlauben, sodass Kund*innen die bisherige Nutzung des Tickets einsehen "
|
||||
"können. Ausgänge oder fehlgeschlagene Scans werden nicht angezeigt und die "
|
||||
"Kunden sehen keine Aufschlüsselung verschiedener Check-in-Listen."
|
||||
"Kund*innen sehen keine Aufschlüsselung verschiedener Check-in-Listen."
|
||||
|
||||
#: pretix/base/settings.py:1764
|
||||
msgid "Allow users to download tickets"
|
||||
@@ -11498,7 +11482,7 @@ msgstr ""
|
||||
#: pretix/base/settings.py:1927 pretix/base/settings.py:1936
|
||||
msgid "Both the attendee and the person who ordered can make changes"
|
||||
msgstr ""
|
||||
"Sowohl Besteller als auch Teilnehmer können Änderungen vornehmen"
|
||||
"Sowohl Besteller*in als auch Teilnehmer*innen können Änderungen vornehmen"
|
||||
|
||||
#: pretix/base/settings.py:1931
|
||||
msgid "Allow customers to modify their information"
|
||||
@@ -11606,7 +11590,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py:2037
|
||||
msgid "Allow individual attendees to change their ticket"
|
||||
msgstr "Erlaubt einzelnen Teilnehmern ihr Ticket zu ändern"
|
||||
msgstr "Erlaubt einzelnen Teilnehmer*innen ihr Ticket zu ändern"
|
||||
|
||||
#: pretix/base/settings.py:2038
|
||||
msgid ""
|
||||
@@ -11618,7 +11602,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Standardmäßig kann nur die Person, welche die Tickets gekauft hat, "
|
||||
"Änderungen an der Bestellung vornehmen. Wenn diese Option aktiv ist, können "
|
||||
"auch einzelne Teilnehmer Änderungen vornehmen. Teilnehmer können "
|
||||
"auch einzelne Teilnehmer*innen Änderungen vornehmen. Teilnehmer*innen können "
|
||||
"jedoch immer nur Änderungen vornehmen, welche die Gesamtkosten der "
|
||||
"Bestellung nicht verändern. Solche Änderungen können nur vom Ticketkäufer "
|
||||
"vorgenommen werden."
|
||||
@@ -11915,7 +11899,7 @@ msgid ""
|
||||
"people."
|
||||
msgstr ""
|
||||
"Sie können dieses Feld benutzen, um zusätzliche Informationen mit Ihren "
|
||||
"Teilnehmer zu teilen, wie z.B. Anreise-Informationen oder den Link zu "
|
||||
"Teilnehmer*innen zu teilen, wie z.B. Anreise-Informationen oder den Link zu "
|
||||
"einer digitalen Veranstaltung. Wenn das Feld leer ist, fügen wir automatisch "
|
||||
"einen Link zum Ticketshop, die Einlass-Uhrzeit und den Veranstalter hier "
|
||||
"ein. Es sind keine Platzhalter mit sensiblen personenbezogenen Daten "
|
||||
@@ -12156,8 +12140,8 @@ msgstr ""
|
||||
"Diese Datei wird an die erste E-Mail angehängt, die wir beim Eingang einer "
|
||||
"neuen Bestellung verschicken. Sie kann daher mit den Textvorlagen "
|
||||
"\"Getätigte Bestellung\", \"Kostenlose Bestellung\" oder \"Erhaltene "
|
||||
"Bestellung\" von oben auftreten. Sie wird ggf. sowohl an Besteller als "
|
||||
"auch Teilnehmer verschickt. Nicht geeignet zum Versand nicht-"
|
||||
"Bestellung\" von oben auftreten. Sie wird ggf. sowohl an Besteller*innen als "
|
||||
"auch Teilnehmer*innen verschickt. Nicht geeignet zum Versand nicht-"
|
||||
"öffentlicher Informationen, da die Datei unabhängig davon verschickt wird, "
|
||||
"ob die Bestellung bezahlt oder freigegeben ist. Um zu vermeiden, dass diese "
|
||||
"wichtige E-Mail nicht ankommt, können nur PDF-Dateien mit maximal {size} MB "
|
||||
@@ -15492,7 +15476,7 @@ msgstr "Check-in-Status"
|
||||
#: pretix/control/forms/filter.py:2168
|
||||
#: pretix/plugins/checkinlists/exporters.py:109
|
||||
msgid "All attendees"
|
||||
msgstr "Alle Teilnehmer"
|
||||
msgstr "Alle Teilnehmer*innen"
|
||||
|
||||
#: pretix/control/forms/filter.py:2169
|
||||
#: pretix/control/templates/pretixcontrol/checkin/index.html:183
|
||||
@@ -16076,7 +16060,7 @@ msgid ""
|
||||
"people over 65. This ticket includes access to all parts of the event, "
|
||||
"except the VIP area."
|
||||
msgstr ""
|
||||
"z.B. Dieses reduzierte Ticket ist erhältlich für Vollzeitstudent, "
|
||||
"z.B. Dieses reduzierte Ticket ist erhältlich für Vollzeitstudent*innen, "
|
||||
"Arbeitslose und Menschen über 65. Das Ticket enthält Zugang zu allen Teilen "
|
||||
"der Veranstaltung außer des VIP-Bereiches."
|
||||
|
||||
@@ -16390,7 +16374,7 @@ msgstr ""
|
||||
#: pretix/control/forms/orders.py:167 pretix/control/forms/orders.py:226
|
||||
#: pretix/control/forms/orders.py:240
|
||||
msgid "Notify customer by email"
|
||||
msgstr "Kunde per E-Mail benachrichtigen"
|
||||
msgstr "Kund*in per E-Mail benachrichtigen"
|
||||
|
||||
#: pretix/control/forms/orders.py:174
|
||||
msgid "Keep a cancellation fee of"
|
||||
@@ -17949,7 +17933,7 @@ msgstr "Eine individuelle E-Mail wurde verschickt."
|
||||
|
||||
#: pretix/control/logdisplay.py:554
|
||||
msgid "A custom email has been sent to an attendee."
|
||||
msgstr "Eine individuelle E-Mail wurde an einen Teilnehmer verschickt."
|
||||
msgstr "Eine individuelle E-Mail wurde an eine Teilnehmer*in verschickt."
|
||||
|
||||
#: pretix/control/logdisplay.py:555
|
||||
msgid ""
|
||||
@@ -19667,7 +19651,7 @@ msgstr "Terminal-ID"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:104
|
||||
msgid "Card holder"
|
||||
msgstr "Karteninhaber"
|
||||
msgstr "Karteninhaber*in"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:108
|
||||
msgid "Card expiration"
|
||||
@@ -19976,7 +19960,7 @@ msgstr "CSV"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/checkin/index.html:73
|
||||
msgid "No attendee record was found."
|
||||
msgstr "Keine passenden Teilnehmer gefunden."
|
||||
msgstr "Keine passenden Teilnehmer*innen gefunden."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/checkin/index.html:91
|
||||
#: pretix/control/templates/pretixcontrol/datasync/failed_jobs.html:19
|
||||
@@ -22769,7 +22753,7 @@ msgid ""
|
||||
"Only purchases of such products will be considered \"attendees\" for most "
|
||||
"statistical purposes or within some plugins."
|
||||
msgstr ""
|
||||
"Nur Käufe eines solchen Produkts werden als \"Teilnehmer\" gewertet, "
|
||||
"Nur Käufe eines solchen Produkts werden als \"Teilnehmer*innen\" gewertet, "
|
||||
"z.B. in Statistiken oder in Funktionen von Erweiterungen."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/item/create.html:39
|
||||
@@ -22848,7 +22832,7 @@ msgid ""
|
||||
"The system will not ask for a name or other attendee details. This only "
|
||||
"affects system-provided fields, you can still add your own questions."
|
||||
msgstr ""
|
||||
"Das System wird nicht nach einem Namen oder anderen Teilnehmer-Daten "
|
||||
"Das System wird nicht nach einem Namen oder anderen Teilnehmer*innen-Daten "
|
||||
"fragen. Dies betrifft nur vom System bereitgestellte Felder, eigene Fragen "
|
||||
"können trotzdem hinzugefügt werden."
|
||||
|
||||
@@ -25185,7 +25169,7 @@ msgstr "Sonstige Datenexporte"
|
||||
#: pretix/control/templates/pretixcontrol/orders/export.html:107
|
||||
#: pretix/control/templates/pretixcontrol/organizers/export.html:107
|
||||
msgid "Recommended for new users"
|
||||
msgstr "Empfohlen für neue Benutzer"
|
||||
msgstr "Empfohlen für neue Benutzer*innen"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/orders/export.html:120
|
||||
#: pretix/control/templates/pretixcontrol/organizers/export.html:120
|
||||
@@ -26143,7 +26127,7 @@ msgstr "Domains"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:320
|
||||
msgid "This dialog is intended for advanced users."
|
||||
msgstr "Dieser Dialog ist für fortgeschrittene Anwender gedacht."
|
||||
msgstr "Dieser Dialog ist für fortgeschrittene Anwender*innen gedacht."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:321
|
||||
msgid ""
|
||||
@@ -28542,7 +28526,7 @@ msgid ""
|
||||
"customers. This way, customers will not be able to discover the waiting list."
|
||||
msgstr ""
|
||||
"Entsprechend Ihrer Veranstaltungseinstellungen werden ausverkaufte Produkte "
|
||||
"nicht angezeigt. Dies führt dazu, dass Kunden die Warteliste nicht "
|
||||
"nicht angezeigt. Dies führt dazu, dass Kund*innen die Warteliste nicht "
|
||||
"finden können."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/waitinglist/index.html:38
|
||||
@@ -28853,11 +28837,11 @@ msgstr "Das ausgewählte List wurde gelöscht."
|
||||
|
||||
#: pretix/control/views/dashboards.py:115
|
||||
msgid "Attendees (ordered)"
|
||||
msgstr "Teilnehmer (bestellt)"
|
||||
msgstr "Teilnehmende (bestellt)"
|
||||
|
||||
#: pretix/control/views/dashboards.py:125
|
||||
msgid "Attendees (paid)"
|
||||
msgstr "Teilnehmer (bezahlt)"
|
||||
msgstr "Teilnehmende (bezahlt)"
|
||||
|
||||
#: pretix/control/views/dashboards.py:137
|
||||
#, python-brace-format
|
||||
@@ -30936,7 +30920,7 @@ msgstr "PDF-Sammlungen"
|
||||
|
||||
#: pretix/plugins/badges/exporters.py:431
|
||||
msgid "Download all attendee badges as one large PDF for printing."
|
||||
msgstr "Alle Teilnehmer-Badges in einer großen PDF-Datei für den Druck."
|
||||
msgstr "Alle Teilnehmer*innen-Badges in einer großen PDF-Datei für den Druck."
|
||||
|
||||
#: pretix/plugins/badges/exporters.py:452
|
||||
#: pretix/plugins/ticketoutputpdf/exporters.py:80
|
||||
@@ -31216,7 +31200,7 @@ msgstr "Anderes Bankkonto"
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py:85
|
||||
msgid "Name of account holder"
|
||||
msgstr "Kontoinhaber"
|
||||
msgstr "Kontoinhaber*in"
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py:87
|
||||
msgid ""
|
||||
@@ -31358,7 +31342,7 @@ msgstr "Bitte überweisen Sie den vollen Betrag auf das folgende Bankkonto:"
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:32
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:35
|
||||
msgid "Account holder"
|
||||
msgstr "Kontoinhaber"
|
||||
msgstr "Kontoinhaber*in"
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py:304
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:20
|
||||
@@ -31953,7 +31937,7 @@ msgid ""
|
||||
"Download a spreadsheet with all attendees that are included in a check-in "
|
||||
"list."
|
||||
msgstr ""
|
||||
"Tabelle (Excel oder CSV) mit allen Teilnehmer, die in einer Check-in-"
|
||||
"Tabelle (Excel oder CSV) mit allen Teilnehmer*innen, die in einer Check-in-"
|
||||
"Liste zutrittsberechtigt sind."
|
||||
|
||||
#: pretix/plugins/checkinlists/exporters.py:500
|
||||
@@ -33132,7 +33116,7 @@ msgstr "Geplante E-Mails"
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py:122
|
||||
msgid "Mass email was sent to customers or attendees."
|
||||
msgstr "Rundmail wurde an Kunden oder Teilnehmer verschickt."
|
||||
msgstr "Rundmail wurde an Kunden oder Teilnehmer*innen verschickt."
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py:123
|
||||
msgid "Mass email was sent to waiting list entries."
|
||||
@@ -33164,7 +33148,7 @@ msgstr "Eine automatisierte E-Mail wurde an den Besteller verschickt"
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py:142
|
||||
msgid "A scheduled email was sent to a ticket holder"
|
||||
msgstr "Eine automatisierte E-Mail wurde an eine Teilnehmer verschickt."
|
||||
msgstr "Eine automatisierte E-Mail wurde an eine Teilnehmer*in verschickt."
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py:143
|
||||
msgid "An email rule was deleted"
|
||||
@@ -33197,7 +33181,7 @@ msgstr "Alle nicht eingecheckten Kunden"
|
||||
|
||||
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html:23
|
||||
msgid "Attendee contact addresses"
|
||||
msgstr "Teilnehmer-E-Mail-Adressen"
|
||||
msgstr "Teilnehmer*innen-E-Mail-Adressen"
|
||||
|
||||
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html:25
|
||||
msgid "All contact addresses"
|
||||
@@ -33356,14 +33340,14 @@ msgstr ""
|
||||
|
||||
#: pretix/plugins/sendmail/views.py:250
|
||||
msgid "Orders or attendees"
|
||||
msgstr "Bestellungen oder Teilnehmer"
|
||||
msgstr "Bestellungen oder Teilnehmer*innen"
|
||||
|
||||
#: pretix/plugins/sendmail/views.py:251
|
||||
msgid ""
|
||||
"Send an email to every customer, or to every person a ticket has been "
|
||||
"purchased for, or a combination of both."
|
||||
msgstr ""
|
||||
"Senden Sie eine E-Mail an alle Ticketkäufer, alle Ticketinhaber "
|
||||
"Senden Sie eine E-Mail an alle Ticketkäufer*innen, alle Ticketinhaber*innen "
|
||||
"oder eine Kombination aus beiden Gruppen."
|
||||
|
||||
#: pretix/plugins/sendmail/views.py:417
|
||||
@@ -33937,23 +33921,23 @@ msgstr "SEPA-Lastschrift"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1277
|
||||
msgid "Account Holder Name"
|
||||
msgstr "Kontoinhaber"
|
||||
msgstr "Kontoinhaber*in"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1282
|
||||
msgid "Account Holder Street"
|
||||
msgstr "Straße (Kontoinhaber)"
|
||||
msgstr "Straße (Kontoinhaber*in)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1294
|
||||
msgid "Account Holder Postal Code"
|
||||
msgstr "PLZ (Kontoinhaber)"
|
||||
msgstr "PLZ (Kontoinhaber*in)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1306
|
||||
msgid "Account Holder City"
|
||||
msgstr "Stadt (Kontoinhaber)"
|
||||
msgstr "Stadt (Kontoinhaber*in)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1318
|
||||
msgid "Account Holder Country"
|
||||
msgstr "Land (Kontoinhaber)"
|
||||
msgstr "Land (Kontoinhaber*in)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1362
|
||||
msgid "Affirm via Stripe"
|
||||
@@ -34404,7 +34388,7 @@ msgstr "MOTO"
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:64
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:67
|
||||
msgid "Payer name"
|
||||
msgstr "Name des Zahlers"
|
||||
msgstr "Name des Zahlenden"
|
||||
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:91
|
||||
msgid "Payment receipt"
|
||||
@@ -35799,7 +35783,7 @@ msgstr[1] "Das Ticket wurde %(count)s-mal eingelöst."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:166
|
||||
msgid "No attendee name provided"
|
||||
msgstr "Name des Teilnehmenrs nicht angegeben"
|
||||
msgstr "Name der teilnehmenden Person nicht angegeben"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:219
|
||||
msgid "The image you previously uploaded"
|
||||
@@ -37561,12 +37545,12 @@ msgstr ""
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:11
|
||||
#: pretix/presale/views/customer.py:386
|
||||
msgid "Attendee profiles"
|
||||
msgstr "Teilnehmer-Profile"
|
||||
msgstr "Teilnehmer*innen-Profile"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:37
|
||||
msgid "You don’t have any attendee profiles in your account yet."
|
||||
msgstr ""
|
||||
"In Ihrem Kundenkonto sind noch keine Teilnehmer-Profile gespeichert."
|
||||
"In Ihrem Kundenkonto sind noch keine Teilnehmer*innen-Profile gespeichert."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_registration.html:7
|
||||
msgid "Registration"
|
||||
@@ -39199,7 +39183,7 @@ msgstr "Kosovo"
|
||||
#~ "This plugin allows you to generate badges or name tags for your attendees."
|
||||
#~ msgstr ""
|
||||
#~ "Diese Erweiterung erlaubt, Namensschilder oder Badges für die "
|
||||
#~ "Teilnehmer zu erstellen."
|
||||
#~ "Teilnehmer*innen zu erstellen."
|
||||
|
||||
#~ msgid "This plugin allows you to receive payments via PayPal"
|
||||
#~ msgstr "Dieses Plugin erlaubt, Zahlungen über PayPal anzunehmen"
|
||||
|
||||
@@ -161,12 +161,12 @@ msgstr "Bezahlte Bestellungen"
|
||||
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:27
|
||||
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39
|
||||
msgid "Attendees (ordered)"
|
||||
msgstr "Teilnehmer (bestellt)"
|
||||
msgstr "Teilnehmende (bestellt)"
|
||||
|
||||
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:27
|
||||
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39
|
||||
msgid "Attendees (paid)"
|
||||
msgstr "Teilnehmer (bezahlt)"
|
||||
msgstr "Teilnehmende (bezahlt)"
|
||||
|
||||
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:51
|
||||
msgid "Total revenue"
|
||||
|
||||
@@ -893,7 +893,7 @@ msgstr "Details der Bestellposition"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:129
|
||||
msgid "Attendee details"
|
||||
msgstr "Details Teilnehmer"
|
||||
msgstr "Details Teilnehmer*in"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:130 pretix/base/exporters/answers.py:66
|
||||
#: pretix/base/models/items.py:1767 pretix/control/navigation.py:185
|
||||
@@ -955,13 +955,13 @@ msgstr "Veranstaltungs- oder Termininformationen"
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:50
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:36
|
||||
msgid "Attendee name"
|
||||
msgstr "Name Teilnehmer"
|
||||
msgstr "Name Teilnehmer*in"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:187
|
||||
#: pretix/base/datasync/sourcefields.py:604
|
||||
#: pretix/base/datasync/sourcefields.py:628
|
||||
msgid "Attendee"
|
||||
msgstr "Teilnehmer"
|
||||
msgstr "Teilnehmer*in"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:207
|
||||
#: pretix/base/exporters/orderlist.py:648 pretix/base/forms/questions.py:713
|
||||
@@ -972,11 +972,11 @@ msgstr "Teilnehmer"
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:172
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:175
|
||||
msgid "Attendee email"
|
||||
msgstr "E-Mail Teilnehmer"
|
||||
msgstr "E-Mail Teilnehmer*in"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:219
|
||||
msgid "Attendee or order email"
|
||||
msgstr "E-Mail Teilnehmer oder Bestellung"
|
||||
msgstr "E-Mail Teilnehmer*in oder Bestellung"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:232
|
||||
#: pretix/base/exporters/orderlist.py:649 pretix/base/pdf.py:188
|
||||
@@ -986,23 +986,23 @@ msgstr "E-Mail Teilnehmer oder Bestellung"
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:182
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:185
|
||||
msgid "Attendee company"
|
||||
msgstr "Teilnehmer-Firma"
|
||||
msgstr "Teilnehmer*innen-Firma"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:241
|
||||
msgid "Attendee address street"
|
||||
msgstr "Teilnehmer-Adresse: Straße"
|
||||
msgstr "Teilnehmer*innen-Adresse: Straße"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:250
|
||||
msgid "Attendee address ZIP code"
|
||||
msgstr "Teilnehmer-Adresse: PLZ"
|
||||
msgstr "Teilnehmer*innen-Adresse: PLZ"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:259
|
||||
msgid "Attendee address city"
|
||||
msgstr "Teilnehmer-Adresse: Stadt"
|
||||
msgstr "Teilnehmer*innen-Adresse: Stadt"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:268
|
||||
msgid "Attendee address country"
|
||||
msgstr "Teilnehmer-Adresse: Land"
|
||||
msgstr "Teilnehmer*innen-Adresse: Land"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:279
|
||||
#: pretix/base/exporters/orderlist.py:691 pretix/base/pdf.py:346
|
||||
@@ -1280,7 +1280,7 @@ msgid ""
|
||||
"Download a ZIP file including all files that have been uploaded by your "
|
||||
"customers while creating an order."
|
||||
msgstr ""
|
||||
"ZIP-Datei mit allen Dateien, die von Kunden im Bestellprozess als "
|
||||
"ZIP-Datei mit allen Dateien, die von Kund*innen im Bestellprozess als "
|
||||
"Antwort auf eine Frage hochgeladen wurden."
|
||||
|
||||
#: pretix/base/exporters/answers.py:76 pretix/base/exporters/orderlist.py:629
|
||||
@@ -2258,8 +2258,8 @@ msgid ""
|
||||
"Download a text file with all email addresses collected either from buyers "
|
||||
"or from ticket holders."
|
||||
msgstr ""
|
||||
"Textdatei mit allen E-Mail-Adressen, die von Käufer und "
|
||||
"Ticketinhaber eingesammelt wurden."
|
||||
"Textdatei mit allen E-Mail-Adressen, die von Käufer*innen und "
|
||||
"Ticketinhaber*innen eingesammelt wurden."
|
||||
|
||||
#: pretix/base/exporters/mail.py:76 pretix/plugins/reports/exporters.py:502
|
||||
#: pretix/plugins/reports/exporters.py:685
|
||||
@@ -4240,7 +4240,7 @@ msgstr "Bitte wähle einen gültigen Staat aus."
|
||||
|
||||
#: pretix/base/modelimport_orders.py:359 pretix/control/forms/filter.py:688
|
||||
msgid "Attendee email address"
|
||||
msgstr "Teilnehmer-E-Mail-Adresse"
|
||||
msgstr "Teilnehmer*innen-E-Mail-Adresse"
|
||||
|
||||
#: pretix/base/modelimport_orders.py:375 pretix/base/modelimport_orders.py:386
|
||||
#: pretix/base/modelimport_orders.py:397 pretix/base/modelimport_orders.py:408
|
||||
@@ -4252,7 +4252,7 @@ msgstr "Teilnehmer-E-Mail-Adresse"
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:193
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:196
|
||||
msgid "Attendee address"
|
||||
msgstr "Teilnehmer-Adresse"
|
||||
msgstr "Teilnehmer*innen-Adresse"
|
||||
|
||||
#: pretix/base/modelimport_orders.py:468
|
||||
msgid "Calculate from product"
|
||||
@@ -8102,7 +8102,7 @@ msgstr "Musterfirma"
|
||||
|
||||
#: pretix/base/pdf.py:193
|
||||
msgid "Full attendee address"
|
||||
msgstr "Volle Teilnehmer-Adresse"
|
||||
msgstr "Volle Teilnehmer*innen-Adresse"
|
||||
|
||||
#: pretix/base/pdf.py:194
|
||||
msgid ""
|
||||
@@ -8120,23 +8120,23 @@ msgstr ""
|
||||
|
||||
#: pretix/base/pdf.py:198
|
||||
msgid "Attendee street"
|
||||
msgstr "Teilnehmer-Straße"
|
||||
msgstr "Teilnehmer*innen-Straße"
|
||||
|
||||
#: pretix/base/pdf.py:203
|
||||
msgid "Attendee ZIP code"
|
||||
msgstr "Teilnehmer-PLZ"
|
||||
msgstr "Teilnehmer*innen-PLZ"
|
||||
|
||||
#: pretix/base/pdf.py:208
|
||||
msgid "Attendee city"
|
||||
msgstr "Teilnehmer-Stadt"
|
||||
msgstr "Teilnehmer*innen-Stadt"
|
||||
|
||||
#: pretix/base/pdf.py:213
|
||||
msgid "Attendee state"
|
||||
msgstr "Teilnehmer-Bundesstaat"
|
||||
msgstr "Teilnehmer*innen-Bundesstaat"
|
||||
|
||||
#: pretix/base/pdf.py:218
|
||||
msgid "Attendee country"
|
||||
msgstr "Teilnehmer-Land"
|
||||
msgstr "Teilnehmer*innen-Land"
|
||||
|
||||
#: pretix/base/pdf.py:230
|
||||
msgid "Pseudonymization ID (lead scanning)"
|
||||
@@ -8434,7 +8434,7 @@ msgstr "Herr Mustermann"
|
||||
#: pretix/plugins/ticketoutputpdf/exporters.py:99
|
||||
#, python-brace-format
|
||||
msgid "Attendee name: {part}"
|
||||
msgstr "Teilnehmer: {part}"
|
||||
msgstr "Teilnehmer*innenname: {part}"
|
||||
|
||||
#: pretix/base/pdf.py:695
|
||||
msgid "Invoice address name for salutation"
|
||||
@@ -9345,7 +9345,7 @@ msgstr "Veranstaltungsort: {location}"
|
||||
#, python-brace-format
|
||||
msgctxt "invoice"
|
||||
msgid "Attendee: {name}"
|
||||
msgstr "Teilnehmer: {name}"
|
||||
msgstr "Teilnehmer*in: {name}"
|
||||
|
||||
#: pretix/base/services/invoices.py:293 pretix/plugins/reports/exporters.py:308
|
||||
#, python-brace-format
|
||||
@@ -10214,7 +10214,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py:362
|
||||
msgid "Hide prices on attendee ticket page"
|
||||
msgstr "Preise auf Teilnehmer-Ticket-Seite verstecken"
|
||||
msgstr "Preise auf Teilnehmer*innen-Ticket-Seite verstecken"
|
||||
|
||||
#: pretix/base/settings.py:363
|
||||
msgid ""
|
||||
@@ -10224,13 +10224,13 @@ msgid ""
|
||||
"price."
|
||||
msgstr ""
|
||||
"Wenn eine Person mehrere Tickets erwirbt und E-Mails an alle "
|
||||
"Teilnehmer verschickt werden, wird mit dieser Option der Ticketpreis "
|
||||
"auf der Ticket-Seite der einzelnen Teilnehmer versteckt. Nur die "
|
||||
"Teilnehmer*innen verschickt werden, wird mit dieser Option der Ticketpreis "
|
||||
"auf der Ticket-Seite der einzelnen Teilnehmer*innen versteckt. Nur die "
|
||||
"Person, welche die Tickets kauft, sieht den Preis."
|
||||
|
||||
#: pretix/base/settings.py:381
|
||||
msgid "Ask for attendee names"
|
||||
msgstr "Namen der Teilnehmer erfragen"
|
||||
msgstr "Namen der Teilnehmer*innen erfragen"
|
||||
|
||||
#: pretix/base/settings.py:382
|
||||
msgid "Ask for a name for all personalized tickets."
|
||||
@@ -10239,11 +10239,11 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py:391
|
||||
msgid "Require attendee names"
|
||||
msgstr "Namen der Teilnehmer erfordern"
|
||||
msgstr "Namen der Teilnehmer*innen erfordern"
|
||||
|
||||
#: pretix/base/settings.py:392
|
||||
msgid "Require customers to fill in the names of all attendees."
|
||||
msgstr "Erfordere die Eingabe aller Teilnehmer-Namen."
|
||||
msgstr "Erfordere die Eingabe aller Teilnehmer*innen-Namen."
|
||||
|
||||
#: pretix/base/settings.py:402
|
||||
msgid "Ask for email addresses per ticket"
|
||||
@@ -10265,7 +10265,7 @@ msgstr ""
|
||||
"aktivierst, fragt das System zusätzlich nach einzelnen E-Mail-Adressen für "
|
||||
"jedes personalisierte Ticket in der Bestellung. Dies könnte z.B. nützlich "
|
||||
"sein, wenn du auch im Falle von Gruppenbestellungen individuelle Adressen "
|
||||
"von jedem Teilnehmer benötigst. pretix sendet die Bestellbestätigung "
|
||||
"von jeder Teilnehmer*in benötigst. pretix sendet die Bestellbestätigung "
|
||||
"standardmäßig nach wie vor nur an die primäre Adresse, dies kann jedoch in "
|
||||
"den E-Mail-Einstellungen angepasst werden."
|
||||
|
||||
@@ -10773,8 +10773,8 @@ msgid ""
|
||||
"but no indication of missing payment will be visible on the ticket pages of "
|
||||
"attendees who did not buy the ticket themselves."
|
||||
msgstr ""
|
||||
"Die Box mit Zahlungsinstruktionen wird Ticketkäufern weiter angezeigt, "
|
||||
"aber Teilnehmer, die ihr Ticket nicht selbst gekauft haben, werden "
|
||||
"Die Box mit Zahlungsinstruktionen wird Ticketkäufer*innen weiter angezeigt, "
|
||||
"aber Teilnehmer*innen, die ihr Ticket nicht selbst gekauft haben, werden "
|
||||
"keine Anzeichen des fehlenden Zahlungseingangs sehen."
|
||||
|
||||
#: pretix/base/settings.py:1107
|
||||
@@ -11272,7 +11272,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py:1750
|
||||
msgid "Show number of check-ins to customer"
|
||||
msgstr "Zeige Anzahl der Check-ins für Kunden an"
|
||||
msgstr "Zeige Anzahl der Check-ins für Kund*innen an"
|
||||
|
||||
#: pretix/base/settings.py:1751
|
||||
msgid ""
|
||||
@@ -11283,12 +11283,12 @@ msgid ""
|
||||
"failed scans will not be counted, and the user will not see the different "
|
||||
"check-in lists."
|
||||
msgstr ""
|
||||
"Wenn diese Option aktiv ist, können Kunden selbst sehen, wie oft sie die "
|
||||
"Wenn diese Option aktiv ist, können Kund*innen selbst sehen, wie oft sie die "
|
||||
"Veranstaltung betreten haben. Das ist normalerweise nicht nötig, aber kann "
|
||||
"nützlich sein, wenn es Tickets gibt, die eine bestimmte Anzahl an Eintritten "
|
||||
"erlauben, sodass Kunden die bisherige Nutzung des Tickets einsehen "
|
||||
"erlauben, sodass Kund*innen die bisherige Nutzung des Tickets einsehen "
|
||||
"können. Ausgänge oder fehlgeschlagene Scans werden nicht angezeigt und die "
|
||||
"Kunden sehen keine Aufschlüsselung verschiedener Check-in-Listen."
|
||||
"Kund*innen sehen keine Aufschlüsselung verschiedener Check-in-Listen."
|
||||
|
||||
#: pretix/base/settings.py:1764
|
||||
msgid "Allow users to download tickets"
|
||||
@@ -11469,7 +11469,7 @@ msgstr ""
|
||||
#: pretix/base/settings.py:1927 pretix/base/settings.py:1936
|
||||
msgid "Both the attendee and the person who ordered can make changes"
|
||||
msgstr ""
|
||||
"Sowohl Besteller als auch Teilnehmer können Änderungen vornehmen"
|
||||
"Sowohl Besteller*in als auch Teilnehmer*innen können Änderungen vornehmen"
|
||||
|
||||
#: pretix/base/settings.py:1931
|
||||
msgid "Allow customers to modify their information"
|
||||
@@ -11577,7 +11577,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py:2037
|
||||
msgid "Allow individual attendees to change their ticket"
|
||||
msgstr "Erlaubt einzelnen Teilnehmer ihr Ticket zu ändern"
|
||||
msgstr "Erlaubt einzelnen Teilnehmer*innen ihr Ticket zu ändern"
|
||||
|
||||
#: pretix/base/settings.py:2038
|
||||
msgid ""
|
||||
@@ -11589,7 +11589,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Standardmäßig kann nur die Person, welche die Tickets gekauft hat, "
|
||||
"Änderungen an der Bestellung vornehmen. Wenn diese Option aktiv ist, können "
|
||||
"auch einzelne Teilnehmer Änderungen vornehmen. Teilnehmer können "
|
||||
"auch einzelne Teilnehmer*innen Änderungen vornehmen. Teilnehmer*innen können "
|
||||
"jedoch immer nur Änderungen vornehmen, welche die Gesamtkosten der "
|
||||
"Bestellung nicht verändern. Solche Änderungen können nur vom Ticketkäufer "
|
||||
"vorgenommen werden."
|
||||
@@ -11773,7 +11773,7 @@ msgstr "Kontakt-E-Mail"
|
||||
#: pretix/base/settings.py:2273 pretix/control/forms/event.py:1900
|
||||
msgid "We'll show this publicly to allow attendees to contact you."
|
||||
msgstr ""
|
||||
"Wir werden diese Adresse veröffentlichen um Teilnehmern zu ermöglichen, "
|
||||
"Wir werden diese Adresse veröffentlichen um Teilnehmer*innen zu ermöglichen, "
|
||||
"dich zu kontaktieren."
|
||||
|
||||
#: pretix/base/settings.py:2281 pretix/control/forms/event.py:1892
|
||||
@@ -11885,7 +11885,7 @@ msgid ""
|
||||
"people."
|
||||
msgstr ""
|
||||
"Du kannst dieses Feld benutzen um zusätzliche Informationen mit deinen "
|
||||
"Teilnehmer zu teilen, wie z.B. Anreise-Informationen oder den Link zu "
|
||||
"Teilnehmer*innen zu teilen, wie z.B. Anreise-Informationen oder den Link zu "
|
||||
"einer digitalen Veranstaltung. Wenn das Feld leer ist, fügen wir automatisch "
|
||||
"einen Link zum Ticketshop, die Einlass-Uhrzeit und den Veranstalter hier "
|
||||
"ein. Es sind keine Platzhalter mit sensiblen personenbezogenen Daten "
|
||||
@@ -12125,8 +12125,8 @@ msgstr ""
|
||||
"Diese Datei wird an die erste E-Mail angehängt, die wir beim Eingang einer "
|
||||
"neuen Bestellung verschicken. Sie kann daher mit den Textvorlagen "
|
||||
"\"Getätigte Bestellung\", \"Kostenlose Bestellung\" oder \"Erhaltene "
|
||||
"Bestellung\" von oben auftreten. Sie wird ggf. sowohl an Besteller als "
|
||||
"auch Teilnehmer verschickt. Nicht geeignet zum Versand nicht-"
|
||||
"Bestellung\" von oben auftreten. Sie wird ggf. sowohl an Besteller*innen als "
|
||||
"auch Teilnehmer*innen verschickt. Nicht geeignet zum Versand nicht-"
|
||||
"öffentlicher Informationen, da die Datei unabhängig davon verschickt wird, "
|
||||
"ob die Bestellung bezahlt oder freigegeben ist. Um zu vermeiden, dass diese "
|
||||
"wichtige E-Mail nicht ankommt, können nur PDF-Dateien mit maximal {size} MB "
|
||||
@@ -13389,7 +13389,7 @@ msgstr ""
|
||||
msgid ""
|
||||
"You cannot require specifying attendee names if you do not ask for them."
|
||||
msgstr ""
|
||||
"Du kannst die Angabe von Teilnehmernamen nur erfordern, wenn auch nach "
|
||||
"Du kannst die Angabe von Teilnehmer*innennamen nur erfordern, wenn auch nach "
|
||||
"Namen gefragt wird."
|
||||
|
||||
#: pretix/base/settings.py:4133
|
||||
@@ -15063,11 +15063,11 @@ msgstr "Ticket-Downloads"
|
||||
#: pretix/control/forms/event.py:1882
|
||||
msgid "Your customers will be able to download their tickets in PDF format."
|
||||
msgstr ""
|
||||
"Die Teilnehmer werden ihre Tickets im PDF-Format herunterladen können."
|
||||
"Die Teilnehmer*innen werden ihre Tickets im PDF-Format herunterladen können."
|
||||
|
||||
#: pretix/control/forms/event.py:1886
|
||||
msgid "Require all attendees to fill in their names"
|
||||
msgstr "Erfordere, dass alle Teilnehmer ihre Namen ausfüllen"
|
||||
msgstr "Erfordere, dass alle Teilnehmer*innen ihre Namen ausfüllen"
|
||||
|
||||
#: pretix/control/forms/event.py:1887
|
||||
msgid ""
|
||||
@@ -15103,7 +15103,7 @@ msgid ""
|
||||
"then import your bank statements to process the payments within pretix, or "
|
||||
"mark them as paid manually."
|
||||
msgstr ""
|
||||
"Deine Teilnehmer werden angewiesen, das Geld direkt auf dein Bankkonto "
|
||||
"Deine Teilnehmer*innen werden angewiesen, das Geld direkt auf dein Bankkonto "
|
||||
"zu überweisen. Du kannst dann deinen Kontoauszug in pretix importieren, um "
|
||||
"Zahlungen zuzuweisen, oder die Bestellungen manuell als bezahlt markieren."
|
||||
|
||||
@@ -15452,7 +15452,7 @@ msgstr "Check-in-Status"
|
||||
#: pretix/control/forms/filter.py:2168
|
||||
#: pretix/plugins/checkinlists/exporters.py:109
|
||||
msgid "All attendees"
|
||||
msgstr "Alle Teilnehmer"
|
||||
msgstr "Alle Teilnehmer*innen"
|
||||
|
||||
#: pretix/control/forms/filter.py:2169
|
||||
#: pretix/control/templates/pretixcontrol/checkin/index.html:183
|
||||
@@ -16036,7 +16036,7 @@ msgid ""
|
||||
"people over 65. This ticket includes access to all parts of the event, "
|
||||
"except the VIP area."
|
||||
msgstr ""
|
||||
"z.B. Dieses reduzierte Ticket ist erhältlich für Vollzeitstudenten, "
|
||||
"z.B. Dieses reduzierte Ticket ist erhältlich für Vollzeitstudent*innen, "
|
||||
"Arbeitslose und Menschen über 65. Das Ticket enthält Zugang zu allen Teilen "
|
||||
"der Veranstaltung außer des VIP-Bereiches."
|
||||
|
||||
@@ -17909,7 +17909,7 @@ msgstr "Eine individuelle E-Mail wurde verschickt."
|
||||
|
||||
#: pretix/control/logdisplay.py:554
|
||||
msgid "A custom email has been sent to an attendee."
|
||||
msgstr "Eine individuelle E-Mail wurde an eine Teilnehmer verschickt."
|
||||
msgstr "Eine individuelle E-Mail wurde an eine Teilnehmer*in verschickt."
|
||||
|
||||
#: pretix/control/logdisplay.py:555
|
||||
msgid ""
|
||||
@@ -19625,7 +19625,7 @@ msgstr "Terminal-ID"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:104
|
||||
msgid "Card holder"
|
||||
msgstr "Karteninhaber"
|
||||
msgstr "Karteninhaber*in"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:108
|
||||
msgid "Card expiration"
|
||||
@@ -19934,7 +19934,7 @@ msgstr "CSV"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/checkin/index.html:73
|
||||
msgid "No attendee record was found."
|
||||
msgstr "Keine passenden Teilnehmer gefunden."
|
||||
msgstr "Keine passenden Teilnehmer*innen gefunden."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/checkin/index.html:91
|
||||
#: pretix/control/templates/pretixcontrol/datasync/failed_jobs.html:19
|
||||
@@ -21744,7 +21744,7 @@ msgid ""
|
||||
"provide ways for your attendees to contact you:"
|
||||
msgstr ""
|
||||
"Wenn irgendetwas schiefgeht oder unklar ist, empfehlen wir, dass du deinen "
|
||||
"Teilnehmer die Möglichkeit gibst, dich zu benachrichtigen:"
|
||||
"Teilnehmer*innen die Möglichkeit gibst, dich zu benachrichtigen:"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/event/settings.html:21
|
||||
msgid "Basics"
|
||||
@@ -22720,7 +22720,7 @@ msgid ""
|
||||
"Only purchases of such products will be considered \"attendees\" for most "
|
||||
"statistical purposes or within some plugins."
|
||||
msgstr ""
|
||||
"Nur Käufe eines solchen Produkts werden als \"Teilnehmer\" gewertet, "
|
||||
"Nur Käufe eines solchen Produkts werden als \"Teilnehmer*innen\" gewertet, "
|
||||
"z.B. in Statistiken oder in Funktionen von Erweiterungen."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/item/create.html:39
|
||||
@@ -22799,7 +22799,7 @@ msgid ""
|
||||
"The system will not ask for a name or other attendee details. This only "
|
||||
"affects system-provided fields, you can still add your own questions."
|
||||
msgstr ""
|
||||
"Das System wird nicht nach einem Namen oder anderen Teilnehmer-Daten "
|
||||
"Das System wird nicht nach einem Namen oder anderen Teilnehmer*innen-Daten "
|
||||
"fragen. Dies betrifft nur vom System bereitgestellte Felder, eigene Fragen "
|
||||
"können trotzdem hinzugefügt werden."
|
||||
|
||||
@@ -23496,9 +23496,9 @@ msgid ""
|
||||
"ticket. If you provide food, one example might be to ask your users about "
|
||||
"dietary requirements."
|
||||
msgstr ""
|
||||
"Fragen erlauben deinen Besucher, zusätzliche Informationen zu ihrem "
|
||||
"Fragen erlauben deinen Besucher*innen, zusätzliche Informationen zu ihrem "
|
||||
"Ticket auszufüllen. Wenn deine Veranstaltung Verpflegung beinhaltet, "
|
||||
"könntest du z.B. nach Allergien deiner Teilnehmer fragen."
|
||||
"könntest du z.B. nach Allergien deiner Teilnehmer*innen fragen."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/questions.html:15
|
||||
msgid "Create a new question"
|
||||
@@ -23663,7 +23663,7 @@ msgstr ""
|
||||
"Um deine Produkte verfügbar zu machen, musst du Kontingente anlegen. "
|
||||
"Kontingente definieren, wie oft ein Produkt verkauft werden darf. Auf diese "
|
||||
"Art kannst du konfigurieren, ob deine Veranstaltung unbegrenzt viele "
|
||||
"Teilnehmer aufnehmen kann oder ob die Anzahl begrenzt ist. Du kannst "
|
||||
"Teilnehmer*innen aufnehmen kann oder ob die Anzahl begrenzt ist. Du kannst "
|
||||
"ein Produkt zu mehreren Kontingenten hinzufügen, um komplexere Anforderungen "
|
||||
"abzubilden, z.B. wenn du die Gesamtzahl der Tickets begrenzen willst, aber "
|
||||
"einen speziellen Ticket-Typ noch stärker begrenzen willst."
|
||||
@@ -25133,7 +25133,7 @@ msgstr "Sonstige Datenexporte"
|
||||
#: pretix/control/templates/pretixcontrol/orders/export.html:107
|
||||
#: pretix/control/templates/pretixcontrol/organizers/export.html:107
|
||||
msgid "Recommended for new users"
|
||||
msgstr "Empfohlen für neue Benutzer"
|
||||
msgstr "Empfohlen für neue Benutzer*innen"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/orders/export.html:120
|
||||
#: pretix/control/templates/pretixcontrol/organizers/export.html:120
|
||||
@@ -26090,7 +26090,7 @@ msgstr "Domains"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:320
|
||||
msgid "This dialog is intended for advanced users."
|
||||
msgstr "Dieser Dialog ist für fortgeschrittene Anwender gedacht."
|
||||
msgstr "Dieser Dialog ist für fortgeschrittene Anwender*innen gedacht."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:321
|
||||
msgid ""
|
||||
@@ -28484,7 +28484,7 @@ msgid ""
|
||||
"customers. This way, customers will not be able to discover the waiting list."
|
||||
msgstr ""
|
||||
"Entsprechend deiner Veranstaltungseinstellungen werden ausverkaufte Produkte "
|
||||
"nicht angezeigt. Dies führt dazu, dass Kunden die Warteliste nicht "
|
||||
"nicht angezeigt. Dies führt dazu, dass Kund*innen die Warteliste nicht "
|
||||
"finden können."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/waitinglist/index.html:38
|
||||
@@ -28794,11 +28794,11 @@ msgstr "Das ausgewählte List wurde gelöscht."
|
||||
|
||||
#: pretix/control/views/dashboards.py:115
|
||||
msgid "Attendees (ordered)"
|
||||
msgstr "Teilnehmer (bestellt)"
|
||||
msgstr "Teilnehmende (bestellt)"
|
||||
|
||||
#: pretix/control/views/dashboards.py:125
|
||||
msgid "Attendees (paid)"
|
||||
msgstr "Teilnehmer (bezahlt)"
|
||||
msgstr "Teilnehmende (bezahlt)"
|
||||
|
||||
#: pretix/control/views/dashboards.py:137
|
||||
#, python-brace-format
|
||||
@@ -30873,7 +30873,7 @@ msgstr "PDF-Sammlungen"
|
||||
|
||||
#: pretix/plugins/badges/exporters.py:431
|
||||
msgid "Download all attendee badges as one large PDF for printing."
|
||||
msgstr "Alle Teilnehmer-Badges in einer großen PDF-Datei für den Druck."
|
||||
msgstr "Alle Teilnehmer*innen-Badges in einer großen PDF-Datei für den Druck."
|
||||
|
||||
#: pretix/plugins/badges/exporters.py:452
|
||||
#: pretix/plugins/ticketoutputpdf/exporters.py:80
|
||||
@@ -31152,7 +31152,7 @@ msgstr "Anderes Bankkonto"
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py:85
|
||||
msgid "Name of account holder"
|
||||
msgstr "Kontoinhaber"
|
||||
msgstr "Kontoinhaber*in"
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py:87
|
||||
msgid ""
|
||||
@@ -31294,7 +31294,7 @@ msgstr "Bitte überweise den vollen Betrag auf das folgende Bankkonto:"
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:32
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html:35
|
||||
msgid "Account holder"
|
||||
msgstr "Kontoinhaber"
|
||||
msgstr "Kontoinhaber*in"
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py:304
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:20
|
||||
@@ -31890,7 +31890,7 @@ msgid ""
|
||||
"Download a spreadsheet with all attendees that are included in a check-in "
|
||||
"list."
|
||||
msgstr ""
|
||||
"Tabelle (Excel oder CSV) mit allen Teilnehmer, die in einer Check-in-"
|
||||
"Tabelle (Excel oder CSV) mit allen Teilnehmer*innen, die in einer Check-in-"
|
||||
"Liste zutrittsberechtigt sind."
|
||||
|
||||
#: pretix/plugins/checkinlists/exporters.py:500
|
||||
@@ -33066,7 +33066,7 @@ msgstr "Geplante E-Mails"
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py:122
|
||||
msgid "Mass email was sent to customers or attendees."
|
||||
msgstr "Rundmail wurde an Kunden oder Teilnehmer verschickt."
|
||||
msgstr "Rundmail wurde an Kunden oder Teilnehmer*innen verschickt."
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py:123
|
||||
msgid "Mass email was sent to waiting list entries."
|
||||
@@ -33098,7 +33098,7 @@ msgstr "Eine automatisierte E-Mail wurde an den Besteller verschickt"
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py:142
|
||||
msgid "A scheduled email was sent to a ticket holder"
|
||||
msgstr "Eine automatisierte E-Mail wurde an einen Teilnehmer verschickt."
|
||||
msgstr "Eine automatisierte E-Mail wurde an eine Teilnehmer*in verschickt."
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py:143
|
||||
msgid "An email rule was deleted"
|
||||
@@ -33131,7 +33131,7 @@ msgstr "Alle nicht eingecheckten Kunden"
|
||||
|
||||
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html:23
|
||||
msgid "Attendee contact addresses"
|
||||
msgstr "Teilnehmer-E-Mail-Adressen"
|
||||
msgstr "Teilnehmer*innen-E-Mail-Adressen"
|
||||
|
||||
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html:25
|
||||
msgid "All contact addresses"
|
||||
@@ -33292,14 +33292,14 @@ msgstr ""
|
||||
|
||||
#: pretix/plugins/sendmail/views.py:250
|
||||
msgid "Orders or attendees"
|
||||
msgstr "Bestellungen oder Teilnehmer"
|
||||
msgstr "Bestellungen oder Teilnehmer*innen"
|
||||
|
||||
#: pretix/plugins/sendmail/views.py:251
|
||||
msgid ""
|
||||
"Send an email to every customer, or to every person a ticket has been "
|
||||
"purchased for, or a combination of both."
|
||||
msgstr ""
|
||||
"Sende eine E-Mail an alle Ticketkäufer, alle Ticketinhaber oder "
|
||||
"Sende eine E-Mail an alle Ticketkäufer*innen, alle Ticketinhaber*innen oder "
|
||||
"eine Kombination aus beiden Gruppen."
|
||||
|
||||
#: pretix/plugins/sendmail/views.py:417
|
||||
@@ -33871,23 +33871,23 @@ msgstr "SEPA-Lastschrift"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1277
|
||||
msgid "Account Holder Name"
|
||||
msgstr "Kontoinhaber"
|
||||
msgstr "Kontoinhaber*in"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1282
|
||||
msgid "Account Holder Street"
|
||||
msgstr "Straße (Kontoinhaber)"
|
||||
msgstr "Straße (Kontoinhaber*in)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1294
|
||||
msgid "Account Holder Postal Code"
|
||||
msgstr "PLZ (Kontoinhaber)"
|
||||
msgstr "PLZ (Kontoinhaber*in)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1306
|
||||
msgid "Account Holder City"
|
||||
msgstr "Stadt (Kontoinhaber)"
|
||||
msgstr "Stadt (Kontoinhaber*in)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1318
|
||||
msgid "Account Holder Country"
|
||||
msgstr "Land (Kontoinhaber)"
|
||||
msgstr "Land (Kontoinhaber*in)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1362
|
||||
msgid "Affirm via Stripe"
|
||||
@@ -34336,7 +34336,7 @@ msgstr "MOTO"
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:64
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:67
|
||||
msgid "Payer name"
|
||||
msgstr "Name des Zahlers"
|
||||
msgstr "Name des Zahlenden"
|
||||
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:91
|
||||
msgid "Payment receipt"
|
||||
@@ -35726,7 +35726,7 @@ msgstr[1] "Das Ticket wurde %(count)s-mal eingelöst."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:166
|
||||
msgid "No attendee name provided"
|
||||
msgstr "Name des Teilnehmenrs nicht angegeben"
|
||||
msgstr "Name der teilnehmenden Person nicht angegeben"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:219
|
||||
msgid "The image you previously uploaded"
|
||||
@@ -37486,12 +37486,12 @@ msgstr "Möchtest das folgende Profil wirklich aus deinem Kundenkonto löschen?"
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:11
|
||||
#: pretix/presale/views/customer.py:386
|
||||
msgid "Attendee profiles"
|
||||
msgstr "Teilnehmer-Adresse"
|
||||
msgstr "Teilnehmer*innen-Adresse"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:37
|
||||
msgid "You don’t have any attendee profiles in your account yet."
|
||||
msgstr ""
|
||||
"In deinem Kundenkonto sind noch keine Teilnehmer-Profile gespeichert."
|
||||
"In deinem Kundenkonto sind noch keine Teilnehmer*innen-Profile gespeichert."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_registration.html:7
|
||||
msgid "Registration"
|
||||
@@ -39069,7 +39069,7 @@ msgstr "Kosovo"
|
||||
#~ "This plugin allows you to generate badges or name tags for your attendees."
|
||||
#~ msgstr ""
|
||||
#~ "Diese Erweiterung erlaubt, Namensschilder oder Badges für die "
|
||||
#~ "Teilnehmer zu erstellen."
|
||||
#~ "Teilnehmer*innen zu erstellen."
|
||||
|
||||
#~ msgid "This plugin allows you to receive payments via PayPal"
|
||||
#~ msgstr "Dieses Plugin erlaubt, Zahlungen über PayPal anzunehmen"
|
||||
@@ -39647,7 +39647,7 @@ msgstr "Kosovo"
|
||||
#~ msgstr "Biete Ticket-Download bereits vor Bezahlung einer Bestellung an"
|
||||
|
||||
#~ msgid "Attendee names"
|
||||
#~ msgstr "Teilnehmername"
|
||||
#~ msgstr "Teilnehmer*innennamen"
|
||||
|
||||
#~ msgid "Enable output"
|
||||
#~ msgstr "Aktivieren"
|
||||
@@ -39924,7 +39924,7 @@ msgstr "Kosovo"
|
||||
#~ "If checked, users can cancel orders by themselves as long as they are not "
|
||||
#~ "yet paid."
|
||||
#~ msgstr ""
|
||||
#~ "Wenn diese Option aktiviert ist, können Teilnehmer selbstständig "
|
||||
#~ "Wenn diese Option aktiviert ist, können Teilnehmer*innen selbstständig "
|
||||
#~ "Bestellungen stornieren solange sie nicht bezahlt wurden."
|
||||
|
||||
#~ msgid "Sales overview"
|
||||
|
||||
@@ -161,12 +161,12 @@ msgstr "Bezahlte Bestellungen"
|
||||
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:27
|
||||
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39
|
||||
msgid "Attendees (ordered)"
|
||||
msgstr "Teilnehmer (bestellt)"
|
||||
msgstr "Teilnehmende (bestellt)"
|
||||
|
||||
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:27
|
||||
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39
|
||||
msgid "Attendees (paid)"
|
||||
msgstr "Teilnehmer (bezahlt)"
|
||||
msgstr "Teilnehmende (bezahlt)"
|
||||
|
||||
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:51
|
||||
msgid "Total revenue"
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
|
||||
import json
|
||||
import logging
|
||||
import urllib.parse
|
||||
from collections import OrderedDict
|
||||
from decimal import Decimal
|
||||
|
||||
@@ -42,7 +41,6 @@ import paypalrestsdk
|
||||
import paypalrestsdk.exceptions
|
||||
from django import forms
|
||||
from django.contrib import messages
|
||||
from django.core import signing
|
||||
from django.http import HttpRequest
|
||||
from django.template.loader import get_template
|
||||
from django.urls import reverse
|
||||
@@ -58,6 +56,7 @@ from pretix.base.forms import SecretKeySettingsField
|
||||
from pretix.base.models import Event, Order, OrderPayment, OrderRefund, Quota
|
||||
from pretix.base.payment import BasePaymentProvider, PaymentException
|
||||
from pretix.base.settings import SettingsSandbox
|
||||
from pretix.base.views.redirect import safelink
|
||||
from pretix.multidomain.urlreverse import build_absolute_uri
|
||||
from pretix.plugins.paypal.api import Api
|
||||
from pretix.plugins.paypal.models import ReferencedPayPalObject
|
||||
@@ -349,11 +348,7 @@ class Paypal(BasePaymentProvider):
|
||||
for link in payment.links:
|
||||
if link.method == "REDIRECT" and link.rel == "approval_url":
|
||||
if request.session.get('iframe_session', False):
|
||||
signer = signing.Signer(salt='safe-redirect')
|
||||
return (
|
||||
build_absolute_uri(request.event, 'plugins:paypal:redirect') + '?url=' +
|
||||
urllib.parse.quote(signer.sign(link.href))
|
||||
)
|
||||
return safelink(link.href, framebreak=True)
|
||||
else:
|
||||
return str(link.href)
|
||||
else:
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
{% load compress %}
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>{{ settings.PRETIX_INSTANCE_NAME }}</title>
|
||||
{% compress css %}
|
||||
<link rel="stylesheet" type="text/x-scss" href="{% static "pretixbase/scss/cachedfiles.scss" %}"/>
|
||||
{% endcompress %}
|
||||
{% compress js %}
|
||||
<script type="text/javascript" src="{% static "jquery/js/jquery-3.6.4.min.js" %}"></script>
|
||||
{% endcompress %}
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>{% trans "The payment process has started in a new window." %}</h1>
|
||||
|
||||
<p>
|
||||
{% trans "The window to enter your payment data was not opened or was closed?" %}
|
||||
</p>
|
||||
<p>
|
||||
<a href="{{ url }}" target="_blank" class="btn btn-default btn-lg">
|
||||
<span class="fa fa-external-link-square"></span>
|
||||
{% trans "Click here in order to open the window." %}
|
||||
</a>
|
||||
</p>
|
||||
<script>
|
||||
window.open('{{ url|escapejs }}');
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -21,13 +21,12 @@
|
||||
#
|
||||
from django.urls import include, re_path
|
||||
|
||||
from .views import abort, oauth_disconnect, redirect_view, success
|
||||
from .views import abort, oauth_disconnect, success
|
||||
|
||||
event_patterns = [
|
||||
re_path(r'^paypal/', include([
|
||||
re_path(r'^abort/$', abort, name='abort'),
|
||||
re_path(r'^return/$', success, name='return'),
|
||||
re_path(r'^redirect/$', redirect_view, name='redirect'),
|
||||
|
||||
re_path(r'w/(?P<cart_namespace>[a-zA-Z0-9]{16})/abort/', abort, name='abort'),
|
||||
re_path(r'w/(?P<cart_namespace>[a-zA-Z0-9]{16})/return/', success, name='return'),
|
||||
|
||||
@@ -39,13 +39,10 @@ from decimal import Decimal
|
||||
import paypalrestsdk
|
||||
import paypalrestsdk.exceptions
|
||||
from django.contrib import messages
|
||||
from django.core import signing
|
||||
from django.db.models import Sum
|
||||
from django.http import HttpResponse, HttpResponseBadRequest
|
||||
from django.shortcuts import render
|
||||
from django.http import HttpResponse
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.views.decorators.clickjacking import xframe_options_exempt
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.views.decorators.http import require_POST
|
||||
from django_scopes import scopes_disabled
|
||||
@@ -61,21 +58,6 @@ from pretix.plugins.paypal.payment import Paypal
|
||||
logger = logging.getLogger('pretix.plugins.paypal')
|
||||
|
||||
|
||||
@xframe_options_exempt
|
||||
def redirect_view(request, *args, **kwargs):
|
||||
signer = signing.Signer(salt='safe-redirect')
|
||||
try:
|
||||
url = signer.unsign(request.GET.get('url', ''))
|
||||
except signing.BadSignature:
|
||||
return HttpResponseBadRequest('Invalid parameter')
|
||||
|
||||
r = render(request, 'pretixplugins/paypal/redirect.html', {
|
||||
'url': url,
|
||||
})
|
||||
r._csp_ignore = True
|
||||
return r
|
||||
|
||||
|
||||
def success(request, *args, **kwargs):
|
||||
pid = request.GET.get('paymentId')
|
||||
token = request.GET.get('token')
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
{% load compress %}
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>{{ settings.PRETIX_INSTANCE_NAME }}</title>
|
||||
{% compress css %}
|
||||
<link rel="stylesheet" type="text/x-scss" href="{% static "pretixbase/scss/cachedfiles.scss" %}"/>
|
||||
{% endcompress %}
|
||||
{% compress js %}
|
||||
<script type="text/javascript" src="{% static "jquery/js/jquery-3.6.4.min.js" %}"></script>
|
||||
{% endcompress %}
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>{% trans "The payment process has started in a new window." %}</h1>
|
||||
|
||||
<p>
|
||||
{% trans "The window to enter your payment data was not opened or was closed?" %}
|
||||
</p>
|
||||
<p>
|
||||
<a href="{{ url }}" target="_blank" class="btn btn-default btn-lg">
|
||||
<span class="fa fa-external-link-square"></span>
|
||||
{% trans "Click here in order to open the window." %}
|
||||
</a>
|
||||
</p>
|
||||
<script>
|
||||
window.open('{{ url|escapejs }}');
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -22,15 +22,13 @@
|
||||
from django.urls import include, re_path
|
||||
|
||||
from .views import (
|
||||
PayView, XHRView, abort, isu_disconnect, isu_return, redirect_view,
|
||||
success, webhook,
|
||||
PayView, XHRView, abort, isu_disconnect, isu_return, success, webhook,
|
||||
)
|
||||
|
||||
event_patterns = [
|
||||
re_path(r'^paypal2/', include([
|
||||
re_path(r'^abort/$', abort, name='abort'),
|
||||
re_path(r'^return/$', success, name='return'),
|
||||
re_path(r'^redirect/$', redirect_view, name='redirect'),
|
||||
re_path(r'^xhr/$', XHRView.as_view(), name='xhr'),
|
||||
re_path(r'^pay/(?P<order>[^/]+)/(?P<hash>[^/]+)/(?P<payment>[^/]+)/$', PayView.as_view(), name='pay'),
|
||||
re_path(r'^(?P<order>[^/][^w]+)/(?P<secret>[A-Za-z0-9]+)/xhr/$', XHRView.as_view(), name='xhr'),
|
||||
|
||||
@@ -36,13 +36,10 @@ import logging
|
||||
from decimal import Decimal
|
||||
|
||||
from django.contrib import messages
|
||||
from django.core import signing
|
||||
from django.core.cache import cache
|
||||
from django.db import transaction
|
||||
from django.db.models import Sum
|
||||
from django.http import (
|
||||
Http404, HttpResponse, HttpResponseBadRequest, JsonResponse,
|
||||
)
|
||||
from django.http import Http404, HttpResponse, JsonResponse
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.urls import reverse
|
||||
from django.utils.decorators import method_decorator
|
||||
@@ -104,21 +101,6 @@ class PaypalOrderView:
|
||||
}) + ('?paid=yes' if self.order.status == Order.STATUS_PAID else ''))
|
||||
|
||||
|
||||
@xframe_options_exempt
|
||||
def redirect_view(request, *args, **kwargs):
|
||||
signer = signing.Signer(salt='safe-redirect')
|
||||
try:
|
||||
url = signer.unsign(request.GET.get('url', ''))
|
||||
except signing.BadSignature:
|
||||
return HttpResponseBadRequest('Invalid parameter')
|
||||
|
||||
r = render(request, 'pretixplugins/paypal2/redirect.html', {
|
||||
'url': url,
|
||||
})
|
||||
r._csp_ignore = True
|
||||
return r
|
||||
|
||||
|
||||
@method_decorator(csrf_exempt, name='dispatch')
|
||||
@method_decorator(xframe_options_exempt, 'dispatch')
|
||||
class XHRView(View):
|
||||
|
||||
@@ -46,7 +46,6 @@ import stripe
|
||||
from django import forms
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.core import signing
|
||||
from django.db import transaction
|
||||
from django.http import HttpRequest
|
||||
from django.template.loader import get_template
|
||||
@@ -72,6 +71,7 @@ from pretix.base.payment import (
|
||||
)
|
||||
from pretix.base.plugins import get_all_plugins
|
||||
from pretix.base.settings import SettingsSandbox
|
||||
from pretix.base.views.redirect import safelink
|
||||
from pretix.helpers import OF_SELF
|
||||
from pretix.helpers.countries import CachedCountries
|
||||
from pretix.helpers.http import get_client_ip
|
||||
@@ -745,15 +745,7 @@ class StripeMethod(BasePaymentProvider):
|
||||
|
||||
def redirect(self, request, url):
|
||||
if request.session.get('iframe_session', False):
|
||||
return (
|
||||
build_absolute_uri(request.event, 'plugins:stripe:redirect') +
|
||||
'?data=' + signing.dumps({
|
||||
'url': url,
|
||||
'session': {
|
||||
'payment_stripe_order_secret': request.session['payment_stripe_order_secret'],
|
||||
},
|
||||
}, salt='safe-redirect')
|
||||
)
|
||||
return safelink(url, framebreak=True)
|
||||
else:
|
||||
return str(url)
|
||||
|
||||
@@ -1053,11 +1045,7 @@ class StripeMethod(BasePaymentProvider):
|
||||
'hash': payment.order.tagged_secret('plugins:stripe'),
|
||||
})
|
||||
if not self.redirect_in_widget_allowed and request.session.get('iframe_session', False):
|
||||
return build_absolute_uri(self.event, 'plugins:stripe:redirect') + '?data=' + signing.dumps({
|
||||
'url': url,
|
||||
'session': {},
|
||||
}, salt='safe-redirect')
|
||||
|
||||
return safelink(url, framebreak=True)
|
||||
return url
|
||||
|
||||
def _confirm_payment_intent(self, request, payment):
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
{% load compress %}
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>{{ settings.PRETIX_INSTANCE_NAME }}</title>
|
||||
{% compress css %}
|
||||
<link rel="stylesheet" type="text/x-scss" href="{% static "pretixbase/scss/cachedfiles.scss" %}"/>
|
||||
{% endcompress %}
|
||||
{% compress js %}
|
||||
<script type="text/javascript" src="{% static "jquery/js/jquery-3.6.4.min.js" %}"></script>
|
||||
{% endcompress %}
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>{% trans "The payment process has started in a new window." %}</h1>
|
||||
|
||||
<p>
|
||||
{% trans "The window to enter your payment data was not opened or was closed?" %}
|
||||
</p>
|
||||
<p>
|
||||
<a href="{{ url }}" target="_blank" class="btn btn-default btn-lg">
|
||||
<span class="fa fa-external-link-square"></span>
|
||||
{% trans "Click here in order to open the window." %}
|
||||
</a>
|
||||
</p>
|
||||
<script>
|
||||
window.open('{{ url|escapejs }}');
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -25,13 +25,12 @@ from pretix.multidomain import event_url
|
||||
|
||||
from .views import (
|
||||
OrganizerSettingsFormView, ReturnView, ScaReturnView, ScaView,
|
||||
oauth_disconnect, oauth_return, redirect_view, webhook,
|
||||
oauth_disconnect, oauth_return, webhook,
|
||||
)
|
||||
|
||||
event_patterns = [
|
||||
re_path(r'^stripe/', include([
|
||||
event_url(r'^webhook/$', webhook, name='webhook', require_live=False),
|
||||
re_path(r'^redirect/$', redirect_view, name='redirect'),
|
||||
re_path(r'^return/(?P<order>[^/]+)/(?P<hash>[^/]+)/(?P<payment>[0-9]+)/$', ReturnView.as_view(), name='return'),
|
||||
re_path(r'^sca/(?P<order>[^/]+)/(?P<hash>[^/]+)/(?P<payment>[0-9]+)/$', ScaView.as_view(), name='sca'),
|
||||
re_path(r'^sca/(?P<order>[^/]+)/(?P<hash>[^/]+)/(?P<payment>[0-9]+)/return/$',
|
||||
|
||||
@@ -34,13 +34,11 @@
|
||||
|
||||
import json
|
||||
import logging
|
||||
import urllib.parse
|
||||
|
||||
import requests
|
||||
from django.contrib import messages
|
||||
from django.core import signing
|
||||
from django.db import transaction
|
||||
from django.http import Http404, HttpResponse, HttpResponseBadRequest
|
||||
from django.http import Http404, HttpResponse
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.urls import reverse
|
||||
from django.utils.decorators import method_decorator
|
||||
@@ -64,7 +62,7 @@ from pretix.control.views.event import DecoupleMixin
|
||||
from pretix.control.views.organizer import OrganizerDetailViewMixin
|
||||
from pretix.helpers import OF_SELF
|
||||
from pretix.helpers.http import redirect_to_url
|
||||
from pretix.multidomain.urlreverse import build_absolute_uri, eventreverse
|
||||
from pretix.multidomain.urlreverse import eventreverse
|
||||
from pretix.plugins.stripe.forms import OrganizerStripeSettingsForm
|
||||
from pretix.plugins.stripe.models import ReferencedStripeObject
|
||||
from pretix.plugins.stripe.tasks import (
|
||||
@@ -74,28 +72,6 @@ from pretix.plugins.stripe.tasks import (
|
||||
logger = logging.getLogger('pretix.plugins.stripe')
|
||||
|
||||
|
||||
@xframe_options_exempt
|
||||
def redirect_view(request, *args, **kwargs):
|
||||
try:
|
||||
data = signing.loads(request.GET.get('data', ''), salt='safe-redirect')
|
||||
except signing.BadSignature:
|
||||
return HttpResponseBadRequest('Invalid parameter')
|
||||
|
||||
if 'go' in request.GET:
|
||||
if 'session' in data:
|
||||
for k, v in data['session'].items():
|
||||
request.session[k] = v
|
||||
return redirect(data['url'])
|
||||
else:
|
||||
params = request.GET.copy()
|
||||
params['go'] = '1'
|
||||
r = render(request, 'pretixplugins/stripe/redirect.html', {
|
||||
'url': build_absolute_uri(request.event, 'plugins:stripe:redirect') + '?' + urllib.parse.urlencode(params),
|
||||
})
|
||||
r._csp_ignore = True
|
||||
return r
|
||||
|
||||
|
||||
@scopes_disabled()
|
||||
def oauth_return(request, *args, **kwargs):
|
||||
import stripe
|
||||
@@ -514,11 +490,6 @@ class StripeOrderView:
|
||||
return self.request.event.get_payment_providers()[self.payment.provider]
|
||||
|
||||
def _redirect_to_order(self):
|
||||
if self.request.session.get('payment_stripe_order_secret') != self.order.secret and not self.payment.provider.startswith('stripe'):
|
||||
messages.error(self.request, _('Sorry, there was an error in the payment process. Please check the link '
|
||||
'in your emails to continue.'))
|
||||
return redirect_to_url(eventreverse(self.request.event, 'presale:event.index'))
|
||||
|
||||
return redirect_to_url(eventreverse(self.request.event, 'presale:event.order', kwargs={
|
||||
'order': self.order.code,
|
||||
'secret': self.order.secret
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
{% load i18n %}
|
||||
{% load eventurl %}
|
||||
{% load urlreplace %}
|
||||
{% load static %}
|
||||
|
||||
{% block content %}
|
||||
{% if cart_namespace %}
|
||||
@@ -23,9 +24,8 @@
|
||||
class="btn btn-primary btn-lg" target="_blank">
|
||||
{% trans "Continue in new tab" %}
|
||||
</a>
|
||||
<script>
|
||||
window.open('{{ url|escapejs }}');
|
||||
</script>
|
||||
{{ url|json_script:"framebreak-url" }}
|
||||
<script type="text/javascript" src="{% static "pretixbase/js/framebreak.js" %}"></script>
|
||||
</div>
|
||||
{% else %}
|
||||
<h1>{% trans "Cookies not supported" %}</h1>
|
||||
|
||||
@@ -536,7 +536,6 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView):
|
||||
**pass_through_url_params,
|
||||
})
|
||||
})
|
||||
r._csp_ignore = True
|
||||
return r
|
||||
|
||||
if not request.event.all_sales_channels and request.sales_channel.identifier not in (s.identifier for s in request.event.limit_sales_channels.all()):
|
||||
|
||||
@@ -125,7 +125,6 @@ class WaitingView(EventViewMixin, FormView):
|
||||
request.event, "presale:event.waitinglist", kwargs={'cart_namespace': kwargs.get('cart_namespace')}
|
||||
) + '?' + url_replace(request, 'require_cookie', '', 'iframe', '', 'locale', request.GET.get('locale', get_language_without_region()))
|
||||
})
|
||||
r._csp_ignore = True
|
||||
return r
|
||||
|
||||
if not self.itemvars:
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
// Attempt to auto-open page in new tab. Will be ignored by most browser's popup blockers anyways, though.
|
||||
var url = JSON.parse(document.getElementById('framebreak-url').innerText)
|
||||
window.open(url)
|
||||
@@ -119,7 +119,7 @@ def test_linkify_abs(link):
|
||||
assert markdown_compile_email(input) == f"<p>{output}</p>"
|
||||
|
||||
|
||||
signer = signing.Signer(salt='safe-redirect')
|
||||
signer = signing.Signer(salt='safelink-url')
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
|
||||
@@ -90,6 +90,7 @@ event_urls = [
|
||||
"delete/",
|
||||
"dangerzone/",
|
||||
"cancel/",
|
||||
"quickstart/",
|
||||
"settings/",
|
||||
"settings/plugins",
|
||||
"settings/payment",
|
||||
@@ -310,6 +311,7 @@ event_permission_urls = [
|
||||
("event.settings.general:write", "live/", 200, HTTP_GET),
|
||||
("event.settings.general:write", "delete/", 200, HTTP_GET),
|
||||
("event.settings.general:write", "dangerzone/", 200, HTTP_GET),
|
||||
("event.settings.general:write", "quickstart/", 200, HTTP_GET),
|
||||
("event.settings.general:write", "settings/", 200, HTTP_GET),
|
||||
# ("event.settings.payment:write", "settings/payment", 200, HTTP_GET), GET allowed also with other permissions
|
||||
("event.settings.payment:write", "settings/payment", 200, HTTP_POST),
|
||||
|
||||
Reference in New Issue
Block a user