forked from CGM_Public/pretix_original
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e394054ae3 | ||
|
|
dda2a18fdf | ||
|
|
68bd182f79 | ||
|
|
2ee6ea7692 | ||
|
|
a37305f8f4 | ||
|
|
bd4b049c16 | ||
|
|
cb852a8fa7 | ||
|
|
86dd5619e0 | ||
|
|
b1a1d66156 | ||
|
|
e229697d2a | ||
|
|
f9c7378da7 | ||
|
|
86152a182a | ||
|
|
76899600b0 | ||
|
|
04a0b009a6 | ||
|
|
4e9d60d238 | ||
|
|
fe0d0ceb2e | ||
|
|
8457603555 | ||
|
|
ae35af596f | ||
|
|
47c3493372 | ||
|
|
85d65d17b4 | ||
|
|
e50c845e09 | ||
|
|
c84d9061da | ||
|
|
25c9659655 | ||
|
|
b6bce961c3 | ||
|
|
1de0455ebc | ||
|
|
9fdafa57de | ||
|
|
50bcfc8c74 | ||
|
|
fa552fe7d1 | ||
|
|
cbfc24dd64 | ||
|
|
6e0c2d69a5 | ||
|
|
34ed175abe | ||
|
|
a9aaf8638e | ||
|
|
a613affa05 | ||
|
|
cd0ed78b76 | ||
|
|
4889abd75c | ||
|
|
0a73faa8bd | ||
|
|
def5042661 | ||
|
|
e6f8f178af | ||
|
|
5f5380e8b1 |
No files matched your search
@@ -1,42 +0,0 @@
|
||||
Führe den Upstream-Merge-Workflow für pretix_cgo durch.
|
||||
|
||||
## Normaler Ablauf
|
||||
|
||||
Das Script läuft im Terminal des Nutzers:
|
||||
|
||||
```bash
|
||||
bash /home/monsi/git_gemeinde/pretix_cgo/.claude/upstream-merge.sh
|
||||
```
|
||||
|
||||
Das Script ist weitgehend selbstständig:
|
||||
- Holt Upstream-Tags, erstellt Branch, mergt Master, pusht + gibt MR-Link aus
|
||||
- Prüft Gender-Muster → bei Befunden: öffnet automatisch eine Claude-Session zur Bereinigung
|
||||
- Hält mit `read -p` bei MR-Merge-Bestätigung und cgm72-Prüfung an
|
||||
- Pollt Build-Pipeline und Loginseiten selbst via `curl`
|
||||
|
||||
## Wenn ich von dem Script gerufen werde (Gender-Befunde)
|
||||
|
||||
Das Script hat gegenderte Sprache gefunden und startet mich mit den Befunden als Prompt.
|
||||
Ich bereinige die Dateien, committe, pushe – dann beende ich die Session.
|
||||
Das Script prüft danach nochmal und läuft automatisch weiter.
|
||||
|
||||
Bereinigungsregeln:
|
||||
- Binneni (`*`, `:`, `_`, `(in)`) → maskuline Grundform (`Teilnehmer*in` → `Teilnehmer`)
|
||||
- Partizip-Plural (`Teilnehmenden`, `Helfenden` …) → maskuline Grundform (`Teilnehmer`, `Helfer` …)
|
||||
- Immer den vollständigen `msgstr`-Block als Kontext lesen, mehrzeilige Strings beachten.
|
||||
|
||||
## Fehler-Exit-Codes
|
||||
|
||||
| Code | Bedeutung | Aktion |
|
||||
|------|--------------------------------------------|-----------------------------|
|
||||
| 1 | Gender-Befunde nach Claude-Fix noch offen | Manuell prüfen |
|
||||
| 2 | Build fehlgeschlagen oder Timeout | Nutzer informieren, stoppen |
|
||||
| 3 | Loginseite nach 5 Min. nicht erreichbar | Nutzer informieren, stoppen |
|
||||
|
||||
## Notfall-Resume
|
||||
|
||||
Falls das Script mitten im Lauf abgebrochen ist (nach dem Branch-Push):
|
||||
|
||||
```bash
|
||||
bash /home/monsi/git_gemeinde/pretix_cgo/.claude/upstream-merge.sh --resume
|
||||
```
|
||||
@@ -1,39 +0,0 @@
|
||||
# Bereinigungsregeln: Gegenderte Sprache in deutschen Übersetzungen
|
||||
|
||||
## Zu prüfende Dateien
|
||||
|
||||
- `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`
|
||||
|
||||
## Suchmuster
|
||||
|
||||
| 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` |
|
||||
|
||||
## Ersetzungsregeln
|
||||
|
||||
- Binneni → maskuline Grundform des Nomens:
|
||||
- `Teilnehmer*in` → `Teilnehmer`
|
||||
- `Käufer:innen` → `Käufer`
|
||||
- `Besucher_in` → `Besucher`
|
||||
- Partizip-Plural → maskuline Grundform:
|
||||
- `Teilnehmenden` → `Teilnehmer`
|
||||
- `Helfenden` → `Helfer`
|
||||
- `Organisierenden` → `Organisator` (Kontext beachten, ggf. `Veranstalter`)
|
||||
- `Bestellenden` → `Besteller`
|
||||
- `Buchenden` → `Bucher` (oder `Käufer`, je nach Kontext)
|
||||
- `Zahlenden` → `Zahler`
|
||||
|
||||
## Vorgehen
|
||||
|
||||
1. Immer den **vollständigen `msgstr`-Block** lesen (kann mehrzeilig sein, z.B. `msgstr[0]`/`msgstr[1]` für Pluralformen).
|
||||
2. Die zugehörige `msgid` für Kontext heranziehen.
|
||||
3. Nur `msgstr`-Zeilen ändern, niemals `msgid`.
|
||||
4. Bei Unsicherheit über die beste Ersetzung: konservativste Variante wählen und in der Commit-Message notieren.
|
||||
@@ -1,245 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Upstream-Merge-Workflow für pretix_cgo
|
||||
# Aufruf: ./upstream-merge.sh – vollständiger Lauf
|
||||
# ./upstream-merge.sh --resume – nach Gender-Bereinigung fortsetzen
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
GITOPS_DIR="$(cd "$REPO_DIR/../OrtlerstrasseGitOps" && pwd)"
|
||||
STATE_FILE="$SCRIPT_DIR/.upstream-merge-state"
|
||||
|
||||
GITEA_API="https://git.ortlerstrasse.de/api/v1"
|
||||
GITEA_OWNER="CGM_Public"
|
||||
GITEA_REPO="pretix_cgo"
|
||||
|
||||
# GITEA_TOKEN aus interaktiver Shell laden falls nicht gesetzt
|
||||
if [[ -z "${GITEA_TOKEN:-}" ]] && [[ -f ~/.bashrc ]]; then
|
||||
GITEA_TOKEN=$(bash -i -c 'echo $GITEA_TOKEN' 2>/dev/null) || GITEA_TOKEN=""
|
||||
fi
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# --- Ausgabe-Utilities ---
|
||||
green() { echo -e "\033[0;32m[✓]\033[0m $*"; }
|
||||
yellow() { echo -e "\033[1;33m[→]\033[0m $*"; }
|
||||
red() { echo -e "\033[0;31m[✗]\033[0m $*" >&2; }
|
||||
pause() { echo ""; yellow "$1"; read -rp " [Enter zum Fortfahren] "; echo ""; }
|
||||
|
||||
# --- State speichern/laden ---
|
||||
save_state() {
|
||||
cat > "$STATE_FILE" <<EOF
|
||||
UPSTREAM_TAG=$UPSTREAM_TAG
|
||||
VERSION=$VERSION
|
||||
BRANCH=$BRANCH
|
||||
NEW_TAG=$NEW_TAG
|
||||
EOF
|
||||
}
|
||||
|
||||
load_state() {
|
||||
if [[ ! -f "$STATE_FILE" ]]; then
|
||||
red "Kein State-File gefunden ($STATE_FILE). Bitte ohne --resume starten."
|
||||
exit 1
|
||||
fi
|
||||
# shellcheck source=/dev/null
|
||||
source "$STATE_FILE"
|
||||
green "State geladen: UPSTREAM_TAG=$UPSTREAM_TAG | BRANCH=$BRANCH | NEW_TAG=$NEW_TAG"
|
||||
}
|
||||
|
||||
# --- Build-Pipeline pollen ---
|
||||
poll_pipeline() {
|
||||
local tag_sha="$1"
|
||||
|
||||
if [[ -z "${GITEA_TOKEN:-}" ]]; then
|
||||
yellow "GITEA_TOKEN nicht gesetzt – Pipeline-Polling nicht möglich."
|
||||
pause "Build manuell auf Gitea prüfen, dann Enter drücken."
|
||||
return
|
||||
fi
|
||||
|
||||
yellow "Warte auf Pipeline-Run für SHA ${tag_sha:0:12}..."
|
||||
local run_id=""
|
||||
for i in $(seq 1 12); do
|
||||
sleep 10
|
||||
run_id=$(curl -sf -H "Authorization: token $GITEA_TOKEN" \
|
||||
"$GITEA_API/repos/$GITEA_OWNER/$GITEA_REPO/actions/runs?limit=10" \
|
||||
| jq -r --arg sha "$tag_sha" \
|
||||
'.workflow_runs[] | select(.head_sha == $sha) | .id' \
|
||||
| head -1 || true)
|
||||
[[ -n "$run_id" ]] && break
|
||||
echo " ... noch kein Run ($i/12, warte 10s)"
|
||||
done
|
||||
|
||||
if [[ -z "$run_id" ]]; then
|
||||
red "Pipeline-Run nicht gefunden nach 2 Minuten."
|
||||
pause "Build manuell prüfen, dann Enter drücken."
|
||||
return
|
||||
fi
|
||||
|
||||
green "Pipeline-Run #$run_id gefunden, überwache..."
|
||||
for i in $(seq 1 30); do
|
||||
sleep 20
|
||||
local result
|
||||
result=$(curl -sf -H "Authorization: token $GITEA_TOKEN" \
|
||||
"$GITEA_API/repos/$GITEA_OWNER/$GITEA_REPO/actions/runs/$run_id" \
|
||||
| jq -r '"\(.status)/\(.conclusion // "")"')
|
||||
echo " Status: $result"
|
||||
case "$result" in
|
||||
completed/success) green "Build erfolgreich!"; return ;;
|
||||
completed/*) red "Build fehlgeschlagen: $result"; exit 2 ;;
|
||||
esac
|
||||
[[ $i -eq 30 ]] && { red "Timeout: Build nach 10 Minuten nicht fertig."; exit 2; }
|
||||
done
|
||||
}
|
||||
|
||||
# --- URL pollen bis HTTP 200 ---
|
||||
poll_url() {
|
||||
local url="$1"
|
||||
local label="$2"
|
||||
yellow "Warte auf $label ($url)..."
|
||||
for i in $(seq 1 20); do
|
||||
sleep 15
|
||||
local http
|
||||
http=$(curl -sLo /dev/null -w "%{http_code}" "$url" 2>/dev/null || echo "000")
|
||||
echo " HTTP: $http"
|
||||
[[ "$http" == "200" ]] && { green "$label erreichbar (HTTP 200)."; return; }
|
||||
echo " ... warte ($i/20)"
|
||||
done
|
||||
red "$label nicht erreichbar nach 5 Minuten."
|
||||
exit 3
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# Hauptlogik
|
||||
# ============================================================
|
||||
|
||||
RESUME=false
|
||||
[[ "${1:-}" == "--resume" ]] && RESUME=true
|
||||
|
||||
if $RESUME; then
|
||||
load_state
|
||||
else
|
||||
# --- Phase 1: Git-Setup ---
|
||||
cd "$REPO_DIR"
|
||||
|
||||
green "Schritt 1: Master aktualisieren..."
|
||||
git checkout master
|
||||
git pull
|
||||
|
||||
green "Schritt 2: Upstream-Tags holen..."
|
||||
git fetch upstream --tags
|
||||
|
||||
UPSTREAM_TAG=$(git tag --sort=-version:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -1)
|
||||
VERSION="${UPSTREAM_TAG#v}"
|
||||
BRANCH="upstream/$VERSION"
|
||||
NEW_TAG="${VERSION}.0"
|
||||
|
||||
green "Upstream-Tag: $UPSTREAM_TAG | Branch: $BRANCH | Neuer Tag: $NEW_TAG"
|
||||
save_state
|
||||
|
||||
green "Schritt 3: Branch erstellen..."
|
||||
git checkout -b "$BRANCH" "tags/$UPSTREAM_TAG"
|
||||
|
||||
green "Schritt 4: Master mergen..."
|
||||
git merge master
|
||||
|
||||
green "Schritt 5: Branch pushen + MR anlegen..."
|
||||
PUSH_OUT=$(git push --set-upstream origin "$BRANCH" -o merge_request.create 2>&1 || true)
|
||||
echo "$PUSH_OUT"
|
||||
MR_URL=$(echo "$PUSH_OUT" | grep -oP 'https://\S+' | head -1 || true)
|
||||
[[ -n "$MR_URL" ]] && yellow "MR-Link: $MR_URL"
|
||||
|
||||
# --- Phase 2: Gender-Prüfung ---
|
||||
green "Schritt 6: Gender-Prüfung..."
|
||||
PO_FILES=(
|
||||
"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"
|
||||
)
|
||||
GENDER_PATTERN='([A-ZÄÖÜ][a-zäöü]+(\*|:|_)(in(nen)?)\b|[A-ZÄÖÜ][a-zäöü]+\((in|innen)\)|\b(Teilnehmenden|Helfenden|Organisierenden|Bestellenden|Buchenden|Zahlenden)\b)'
|
||||
GENDER_HITS=$(grep -n -E "$GENDER_PATTERN" "${PO_FILES[@]}" 2>/dev/null || true)
|
||||
|
||||
if [[ -n "$GENDER_HITS" ]]; then
|
||||
yellow "Gender-Befunde gefunden – öffne Claude zur Bereinigung..."
|
||||
echo ""
|
||||
RULES=$(cat "$SCRIPT_DIR/gender-cleanup-rules.md")
|
||||
claude "Beim Upstream-Merge auf Branch '$BRANCH' wurden gegenderte Ausdrücke in den deutschen Übersetzungsdateien gefunden. Bitte bereinige sie, committe und pushe anschließend.
|
||||
|
||||
Arbeitsverzeichnis: $REPO_DIR
|
||||
|
||||
Befunde:
|
||||
$GENDER_HITS
|
||||
|
||||
$RULES
|
||||
|
||||
Nach der Bereinigung:
|
||||
git -C $REPO_DIR add src/pretix/locale/de/ src/pretix/locale/de_Informal/
|
||||
git -C $REPO_DIR commit -m 'Remove gendered language from de/de_Informal translations'
|
||||
git -C $REPO_DIR push
|
||||
|
||||
Danach diese Session beenden – das Script läuft dann automatisch weiter."
|
||||
|
||||
# Nochmal prüfen ob alles bereinigt wurde
|
||||
GENDER_HITS2=$(grep -n -E "$GENDER_PATTERN" "${PO_FILES[@]}" 2>/dev/null || true)
|
||||
if [[ -n "$GENDER_HITS2" ]]; then
|
||||
red "Noch immer Gender-Befunde vorhanden – bitte manuell prüfen:"
|
||||
echo "$GENDER_HITS2"
|
||||
exit 1
|
||||
fi
|
||||
green "Gender-Bereinigung erfolgreich."
|
||||
else
|
||||
green "Gender-Prüfung: Keine Befunde."
|
||||
fi
|
||||
fi
|
||||
|
||||
# --- Phase 3: Warten auf MR-Merge ---
|
||||
pause "Schritt 7: MR auf Gitea mergen, dann Enter drücken."
|
||||
|
||||
# --- Phase 4: Tag setzen + Build ---
|
||||
cd "$REPO_DIR"
|
||||
green "Schritt 8: Master aktualisieren + Tag $NEW_TAG setzen..."
|
||||
git checkout master
|
||||
git pull
|
||||
TAG_SHA=$(git rev-parse HEAD)
|
||||
git tag "$NEW_TAG"
|
||||
git push origin "$NEW_TAG"
|
||||
green "Tag $NEW_TAG gepusht (SHA: ${TAG_SHA:0:12})."
|
||||
|
||||
green "Schritt 9: Build-Pipeline überwachen..."
|
||||
poll_pipeline "$TAG_SHA"
|
||||
|
||||
# --- Phase 5: cgm72 GitOps-Update ---
|
||||
green "Schritt 10: cgm72 GitOps-Update..."
|
||||
CGM72_YAML="$GITOPS_DIR/pretix-cgm72/pretix-deployment.yaml"
|
||||
OLD_TAG=$(grep -oP 'cr\.ortlerstrasse\.de/cgo/pretix:\K[0-9]\S+' "$CGM72_YAML")
|
||||
sed -i "s|cr.ortlerstrasse.de/cgo/pretix:${OLD_TAG}|cr.ortlerstrasse.de/cgo/pretix:${NEW_TAG}|" "$CGM72_YAML"
|
||||
git -C "$GITOPS_DIR" add pretix-cgm72/pretix-deployment.yaml
|
||||
git -C "$GITOPS_DIR" commit -m "Update pretix-cgm72 to $NEW_TAG"
|
||||
git -C "$GITOPS_DIR" push
|
||||
green "cgm72 YAML aktualisiert ($OLD_TAG → $NEW_TAG)."
|
||||
|
||||
green "Schritt 11: Warte auf cgm72..."
|
||||
poll_url "https://anmeldung.christliche-gemeinde.de/" "cgm72"
|
||||
|
||||
# --- Phase 6: Manuelle Bestätigung cgm72 ---
|
||||
pause "Schritt 12: cgm72 manuell prüfen (https://anmeldung.christliche-gemeinde.de/). OK? Enter drücken."
|
||||
|
||||
# --- Phase 7: sola GitOps-Update ---
|
||||
green "Schritt 13: sola GitOps-Update..."
|
||||
SOLA_YAML="$GITOPS_DIR/pretix-sola/pretix-deployment.yaml"
|
||||
OLD_TAG_SOLA=$(grep -oP 'cr\.ortlerstrasse\.de/cgo/pretix:\K[0-9]\S+' "$SOLA_YAML")
|
||||
sed -i "s|cr.ortlerstrasse.de/cgo/pretix:${OLD_TAG_SOLA}|cr.ortlerstrasse.de/cgo/pretix:${NEW_TAG}|" "$SOLA_YAML"
|
||||
git -C "$GITOPS_DIR" add pretix-sola/pretix-deployment.yaml
|
||||
git -C "$GITOPS_DIR" commit -m "Update pretix-sola to $NEW_TAG"
|
||||
git -C "$GITOPS_DIR" push
|
||||
green "sola YAML aktualisiert ($OLD_TAG_SOLA → $NEW_TAG)."
|
||||
|
||||
green "Schritt 14: Warte auf sola..."
|
||||
poll_url "https://anmeldung.sola-muenchen.de" "sola"
|
||||
|
||||
# Aufräumen
|
||||
rm -f "$STATE_FILE"
|
||||
|
||||
echo ""
|
||||
green "============================================"
|
||||
green " Upstream-Merge $NEW_TAG abgeschlossen ✓"
|
||||
green "============================================"
|
||||
@@ -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
@@ -61,8 +61,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 && \
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
sphinx==9.1.*
|
||||
sphinx==9.0.*
|
||||
sphinx-rtd-theme~=3.1.0
|
||||
sphinxcontrib-httpdomain~=2.1.0
|
||||
sphinxcontrib-images~=1.0.1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
-e ../
|
||||
sphinx==9.1.*
|
||||
sphinx==9.0.*
|
||||
sphinx-rtd-theme~=3.1.0
|
||||
sphinxcontrib-httpdomain~=2.1.0
|
||||
sphinxcontrib-images~=1.0.1
|
||||
|
||||
+13
-16
@@ -27,16 +27,16 @@ classifiers = [
|
||||
]
|
||||
|
||||
dependencies = [
|
||||
"arabic-reshaper==3.0.1", # Support for Arabic in reportlab
|
||||
"arabic-reshaper==3.1.0", # Support for Arabic in reportlab
|
||||
"babel",
|
||||
"BeautifulSoup4==4.15.*",
|
||||
"bleach==6.4.*",
|
||||
"celery==5.6.*",
|
||||
"chardet==5.2.*",
|
||||
"cryptography>=50.0.2",
|
||||
"css-inline==0.22.*",
|
||||
"css-inline==0.23.*",
|
||||
"defusedcsv>=3.0.0",
|
||||
"dnspython==2.*",
|
||||
"dnspython==2.9.*",
|
||||
"Django[argon2]==5.2.*,>=5.2.17",
|
||||
"django-bootstrap3==26.3",
|
||||
"django-compressor==4.6.0",
|
||||
@@ -46,7 +46,7 @@ dependencies = [
|
||||
"django-formtools==2.7",
|
||||
"django-hierarkey==2.0.*,>=2.0.2",
|
||||
"django-hijack==3.7.*",
|
||||
"django-i18nfield==1.11.*",
|
||||
"django-i18nfield==1.12.*",
|
||||
"django-libsass==0.9",
|
||||
"django-localflavor==5.1",
|
||||
"django-markup",
|
||||
@@ -58,17 +58,14 @@ dependencies = [
|
||||
"django-scopes==2.1.*",
|
||||
"django-statici18n==2.8.*",
|
||||
"djangorestframework>=3.18.3",
|
||||
"dnspython==2.8.*",
|
||||
"drf_ujson2==1.7.*",
|
||||
"geoip2==5.*",
|
||||
"importlib_metadata==9.*", # Polyfill, we can probably drop this once we require Python 3.10+
|
||||
"isoweek",
|
||||
"jsonschema",
|
||||
"kombu==5.6.*",
|
||||
"libsass==0.23.*",
|
||||
"lxml",
|
||||
"markdown==3.11.2", # 3.3.5 requires importlib-metadata>=4.4, but django-bootstrap3 requires importlib-metadata<3.
|
||||
# We can upgrade markdown again once django-bootstrap3 upgrades or once we drop Python 3.6 and 3.7
|
||||
"markdown==3.11.2",
|
||||
"mt-940==4.30.*",
|
||||
"oauthlib==3.3.*",
|
||||
"openpyxl==3.1.*",
|
||||
@@ -82,23 +79,23 @@ dependencies = [
|
||||
"protobuf==7.36.*",
|
||||
"psycopg2-binary",
|
||||
"pycountry",
|
||||
"pycparser==3.11",
|
||||
"pycparser==3.12",
|
||||
"pycryptodome==3.24.*",
|
||||
"pypdf==6.20.*",
|
||||
"python-bidi==0.6.*", # Support for Arabic in reportlab
|
||||
"python-dateutil==3.0.*",
|
||||
"python-dateutil==4.0.*",
|
||||
"pytz",
|
||||
"pytz-deprecation-shim==0.1.*",
|
||||
"pyuca",
|
||||
"qrcode==8.2",
|
||||
"redis==7.4.*",
|
||||
"reportlab==5.0.*",
|
||||
"reportlab==5.1.*",
|
||||
"requests==2.34.*",
|
||||
"sentry-sdk==2.71.*",
|
||||
"sepaxml==2.7.*",
|
||||
"stripe==7.9.*",
|
||||
"text-unidecode==1.*",
|
||||
"tlds>=2026093003",
|
||||
"tlds>=2026102900",
|
||||
"tqdm==4.*",
|
||||
"ua-parser==1.0.*",
|
||||
"vobject==0.9.*",
|
||||
@@ -112,17 +109,17 @@ dev = [
|
||||
"aiohttp==3.14.*",
|
||||
"coverage",
|
||||
"coveralls",
|
||||
"fakeredis==2.39.*",
|
||||
"flake8==7.4.*",
|
||||
"fakeredis==2.40.*",
|
||||
"flake8==7.5.*",
|
||||
"freezegun",
|
||||
"isort==9.0.*",
|
||||
"pep8-naming==0.15.*",
|
||||
"potypo",
|
||||
"pytest-asyncio>=1.4.0",
|
||||
"pytest-asyncio>=1.4.1.post1",
|
||||
"pytest-cache",
|
||||
"pytest-cov",
|
||||
"pytest-django==4.*",
|
||||
"pytest-mock==3.16.*",
|
||||
"pytest-mock==3.17.*",
|
||||
"pytest-sugar",
|
||||
"pytest-xdist==3.8.*",
|
||||
"pytest-playwright",
|
||||
|
||||
@@ -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.9.0"
|
||||
__version__ = "2026.10.0.dev0"
|
||||
@@ -264,6 +264,8 @@ def oidc_validate_authorization(provider, code, redirect_uri, pkce_code_verifier
|
||||
)
|
||||
)
|
||||
|
||||
profile['oidc_claims'] = userinfo
|
||||
|
||||
return profile
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -90,7 +90,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
@@ -131,6 +131,27 @@ class PeppolIdValidator:
|
||||
def __init__(self, validate_online=False):
|
||||
self.validate_online = validate_online
|
||||
|
||||
def _validate_peppol_id_online(self, value):
|
||||
base_hostnames = ['participant.sml.prod.tech.peppol.org', 'participant.sml.test.tech.peppol.org']
|
||||
smp_id = base64.b32encode(hashlib.sha256(value.lower().encode()).digest()).decode().rstrip("=")
|
||||
for base_hostname in base_hostnames:
|
||||
smp_domain = f'{smp_id}.iso6523-actorid-upis.{base_hostname}'
|
||||
resolver = dns.resolver.Resolver()
|
||||
try:
|
||||
answers = resolver.resolve(smp_domain, 'NAPTR', lifetime=1.0)
|
||||
if answers:
|
||||
return value
|
||||
except (dns.resolver.NXDOMAIN, dns.resolver.NoAnswer):
|
||||
# ID not registered, do not set found=True
|
||||
pass
|
||||
except Exception: # noqa
|
||||
# Error likely on our end or infrastructure is down, allow user to proceed
|
||||
return value
|
||||
|
||||
raise ValidationError(
|
||||
_("The Peppol participant ID is not registered on the Peppol network."),
|
||||
)
|
||||
|
||||
def __call__(self, value):
|
||||
if ":" not in value:
|
||||
raise ValidationError(_("A Peppol participant ID always starts with a prefix, followed by a colon (:)."))
|
||||
@@ -146,25 +167,7 @@ class PeppolIdValidator:
|
||||
params={"number": prefix})
|
||||
|
||||
if self.validate_online:
|
||||
base_hostnames = ['participant.sml.prod.tech.peppol.org', 'participant.sml.test.tech.peppol.org']
|
||||
smp_id = base64.b32encode(hashlib.sha256(value.lower().encode()).digest()).decode().rstrip("=")
|
||||
for base_hostname in base_hostnames:
|
||||
smp_domain = f'{smp_id}.iso6523-actorid-upis.{base_hostname}'
|
||||
resolver = dns.resolver.Resolver()
|
||||
try:
|
||||
answers = resolver.resolve(smp_domain, 'NAPTR', lifetime=1.0)
|
||||
if answers:
|
||||
return value
|
||||
except (dns.resolver.NXDOMAIN, dns.resolver.NoAnswer):
|
||||
# ID not registered, do not set found=True
|
||||
pass
|
||||
except Exception: # noqa
|
||||
# Error likely on our end or infrastructure is down, allow user to proceed
|
||||
return value
|
||||
|
||||
raise ValidationError(
|
||||
_("The Peppol participant ID is not registered on the Peppol network."),
|
||||
)
|
||||
value = self._validate_peppol_id_online(value)
|
||||
|
||||
return value
|
||||
|
||||
|
||||
@@ -151,12 +151,29 @@ class LoggingMixin:
|
||||
logentry = LogEntry(content_object=self, user=user, action_type=action, event=event,
|
||||
organizer_id=organizer_id, **kwargs)
|
||||
if isinstance(data, dict):
|
||||
sensitivekeys = ['password', 'secret', 'api_key']
|
||||
# sensitivekeys are matched whether contained, not exactly
|
||||
sensitivekeys = [
|
||||
'auth',
|
||||
'key',
|
||||
'token',
|
||||
'password',
|
||||
'Password',
|
||||
'_pass',
|
||||
'salt',
|
||||
'secret',
|
||||
]
|
||||
|
||||
for sensitivekey in sensitivekeys:
|
||||
for k, v in data.items():
|
||||
if (sensitivekey in k) and v:
|
||||
def clean_recursive(d):
|
||||
data = d
|
||||
data_iterator = d.items() if isinstance(d, dict) else enumerate(d)
|
||||
for k, v in data_iterator:
|
||||
if v and any([sensitivekey in str(k) for sensitivekey in sensitivekeys]):
|
||||
data[k] = "********"
|
||||
elif isinstance(v, (list, dict)):
|
||||
data[k] = clean_recursive(v)
|
||||
return data
|
||||
|
||||
data = clean_recursive(data)
|
||||
|
||||
logentry.data = json.dumps(data, cls=CustomJSONEncoder, sort_keys=True)
|
||||
elif data:
|
||||
|
||||
@@ -83,6 +83,8 @@ from .organizer import Organizer, Team
|
||||
if TYPE_CHECKING:
|
||||
from hierarkey.proxy import HierarkeyProxy
|
||||
|
||||
from .organizer import SalesChannel
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -336,12 +338,18 @@ class EventMixin:
|
||||
return safe_string(json.dumps(eventdict))
|
||||
|
||||
@classmethod
|
||||
def annotated(cls, qs, channel, voucher=None):
|
||||
def annotated(cls, qs, channel: "str | SalesChannel | list[SalesChannel]", voucher=None):
|
||||
# Channel can currently be a SalesChannel or a str, since we need that compatibility, but a SalesChannel
|
||||
# makes the query SIGNIFICANTLY faster
|
||||
from pretix.base.models import Item, ItemVariation, Quota, SalesChannel
|
||||
|
||||
assert isinstance(channel, (SalesChannel, str))
|
||||
assert isinstance(channel, (SalesChannel, str, list))
|
||||
|
||||
if isinstance(channel, SalesChannel):
|
||||
channel = [channel]
|
||||
|
||||
if isinstance(channel, list):
|
||||
assert all(isinstance(c, SalesChannel) for c in channel)
|
||||
|
||||
sq_active_item = Item.objects.using(settings.DATABASE_REPLICA).filter_available(channel=channel, voucher=voucher).filter(
|
||||
Q(variations__isnull=True)
|
||||
@@ -364,8 +372,8 @@ class EventMixin:
|
||||
q_variation &= Q(Q(all_sales_channels=True) | Q(limit_sales_channels__identifier=channel))
|
||||
q_variation &= Q(Q(item__all_sales_channels=True) | Q(item__limit_sales_channels__identifier=channel))
|
||||
else:
|
||||
q_variation &= Q(Q(all_sales_channels=True) | Q(limit_sales_channels=channel))
|
||||
q_variation &= Q(Q(item__all_sales_channels=True) | Q(item__limit_sales_channels=channel))
|
||||
q_variation &= Q(Q(all_sales_channels=True) | Q(limit_sales_channels__in=channel))
|
||||
q_variation &= Q(Q(item__all_sales_channels=True) | Q(item__limit_sales_channels__in=channel))
|
||||
|
||||
if voucher:
|
||||
if voucher.variation_id:
|
||||
@@ -1661,11 +1669,17 @@ class SubEvent(EventMixin, LoggedModel):
|
||||
return qs_annotated
|
||||
|
||||
@classmethod
|
||||
def annotated(cls, qs, channel, voucher=None):
|
||||
def annotated(cls, qs, channel: "str | SalesChannel | list[SalesChannel]", voucher=None):
|
||||
from .items import SubEventItem, SubEventItemVariation
|
||||
from .organizer import SalesChannel
|
||||
|
||||
assert isinstance(channel, (str, SalesChannel))
|
||||
assert isinstance(channel, (SalesChannel, str, list))
|
||||
|
||||
if isinstance(channel, SalesChannel):
|
||||
channel = [channel]
|
||||
|
||||
if isinstance(channel, list):
|
||||
assert all(isinstance(c, SalesChannel) for c in channel)
|
||||
|
||||
qs = super().annotated(qs, channel, voucher=voucher)
|
||||
qs = qs.annotate(
|
||||
|
||||
@@ -313,7 +313,14 @@ def filter_available(qs, channel='web', voucher=None, allow_addons=False, allow_
|
||||
# makes the query SIGNIFICANTLY faster
|
||||
from .organizer import SalesChannel
|
||||
|
||||
assert isinstance(channel, (SalesChannel, str))
|
||||
assert isinstance(channel, (SalesChannel, str, list))
|
||||
|
||||
if isinstance(channel, SalesChannel):
|
||||
channel = [channel]
|
||||
|
||||
if isinstance(channel, list):
|
||||
assert all(isinstance(c, SalesChannel) for c in channel)
|
||||
|
||||
q = (
|
||||
# IMPORTANT: If this is updated, also update the ItemVariation query
|
||||
# in models/event.py: EventMixin.annotated()
|
||||
@@ -325,7 +332,7 @@ def filter_available(qs, channel='web', voucher=None, allow_addons=False, allow_
|
||||
if isinstance(channel, str):
|
||||
q &= Q(Q(all_sales_channels=True) | Q(limit_sales_channels__identifier=channel))
|
||||
else:
|
||||
q &= Q(Q(all_sales_channels=True) | Q(limit_sales_channels=channel))
|
||||
q &= Q(Q(all_sales_channels=True) | Q(limit_sales_channels__in=channel))
|
||||
|
||||
if not allow_addons:
|
||||
q &= Q(Q(category__isnull=True) | Q(category__is_addon=False))
|
||||
|
||||
@@ -330,5 +330,6 @@ def register_default_organizer_permissions(sender, **kwargs):
|
||||
PermissionOption(actions=tuple(), label=pgettext_lazy("permission_level", "No access")),
|
||||
PermissionOption(actions=("read",), label=pgettext_lazy("permission_level", "View")),
|
||||
],
|
||||
help_text=_("View access includes the option to e.g. abort pending emails or retry failed emails."),
|
||||
),
|
||||
]
|
||||
@@ -22,9 +22,9 @@
|
||||
import os
|
||||
import sys
|
||||
from enum import Enum
|
||||
from importlib import metadata
|
||||
from typing import List
|
||||
|
||||
import importlib_metadata as metadata
|
||||
from django.apps import AppConfig, apps
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
|
||||
@@ -2176,7 +2176,8 @@ class OrderChangeManager:
|
||||
subevent=a.subevent,
|
||||
voucher=None,
|
||||
base_qs=Item.objects.filter(pk=a.item.pk),
|
||||
allow_addons=True
|
||||
allow_addons=True,
|
||||
ignore_hide_sold_out_for_item_ids={a.item.pk}
|
||||
)
|
||||
if (not items) or items[0].current_unavailability_reason:
|
||||
return False
|
||||
|
||||
@@ -126,10 +126,10 @@ def generate_seats(event, subevent, plan, mapping, blocked_guids=None):
|
||||
for s in current_seats.values():
|
||||
if s.has_op:
|
||||
raise SeatProtected(_('You can not change the plan since seat "%s" is not present in the new plan and is '
|
||||
'already sold.', s.name))
|
||||
'already sold.'), s.name)
|
||||
if s.has_v:
|
||||
raise SeatProtected(_('You can not change the plan since seat "%s" is not present in the new plan and is '
|
||||
'already used in a voucher.', s.name))
|
||||
'already used in a voucher.'), s.name)
|
||||
|
||||
Seat.objects.bulk_create(create_seats)
|
||||
CartPosition.objects.filter(addon_to__seat__in=[s.pk for s in current_seats.values()]).delete()
|
||||
|
||||
@@ -1199,11 +1199,14 @@ The ``sender`` keyword argument will contain the organizer.
|
||||
|
||||
customer_signed_in = OrganizerPluginSignal(allow_legacy_plugins=True)
|
||||
"""
|
||||
Arguments: ``customer``
|
||||
Arguments: ``customer``, ``profile``
|
||||
|
||||
This signal is sent out every time a customer signs in. The ``customer`` object
|
||||
is given as the first argument.
|
||||
|
||||
In case of SSO login, the full claims will be passed in the ``profile`` argument,
|
||||
e.g. as ``oidc_claims`` for OIDC. Otherwise, ``profile`` will be ``None``.
|
||||
|
||||
The ``sender`` keyword argument will contain the organizer.
|
||||
"""
|
||||
|
||||
|
||||
@@ -23,10 +23,10 @@ import json
|
||||
import logging
|
||||
import pathlib
|
||||
import re
|
||||
from importlib import metadata
|
||||
from urllib.parse import urljoin
|
||||
from urllib.request import urlopen
|
||||
|
||||
import importlib_metadata as metadata
|
||||
from django import template
|
||||
from django.conf import settings
|
||||
from django.utils.safestring import mark_safe
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
<link rel="stylesheet" type="text/x-scss" href="{% static "pretixcontrol/scss/main.scss" %}" />
|
||||
<link rel="stylesheet" type="text/x-scss" href="{% static "lightbox/css/lightbox.scss" %}" />
|
||||
{% endcompress %}
|
||||
{% vite_importmap %}
|
||||
{% if DEBUG %}
|
||||
<script type="text/javascript" src="{% url 'javascript-catalog' lang=request.LANGUAGE_CODE %}"></script>
|
||||
{% else %}
|
||||
@@ -87,7 +88,6 @@
|
||||
<meta name="theme-color" content="#3b1c4a">
|
||||
<meta name="referrer" content="origin">
|
||||
|
||||
{% vite_importmap %}
|
||||
{% block custom_header %}{% endblock %}
|
||||
</head>
|
||||
<body data-datetimeformat="{{ js_datetime_format }}" data-timeformat="{{ js_time_format }}"
|
||||
|
||||
@@ -225,6 +225,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3" id="editor-toolbox-area">
|
||||
{% if checkin_qr_warning %}
|
||||
<div class="alert alert-warning" id="nocheckin-notice">
|
||||
{% blocktrans trimmed %}
|
||||
This layout does not contain a QR code that can be used to scan tickets at check-in.
|
||||
{% endblocktrans %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="panel panel-default" id="toolbox">
|
||||
<div class="panel-heading">
|
||||
<span id="toolbox-heading">
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
# Unless required by applicable law or agreed to in writing, software distributed under the Apache License 2.0 is
|
||||
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations under the License.
|
||||
import importlib_metadata as metadata
|
||||
from importlib import metadata as metadata
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.db import transaction
|
||||
|
||||
@@ -65,6 +65,7 @@ class BaseEditorView(EventPermissionRequiredMixin, TemplateView):
|
||||
)
|
||||
maxfilesize = settings.FILE_UPLOAD_MAX_SIZE_IMAGE
|
||||
minfilesize = 10
|
||||
checkin_qr_warning = False
|
||||
title = None
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
@@ -292,6 +293,7 @@ class BaseEditorView(EventPermissionRequiredMixin, TemplateView):
|
||||
ctx['title'] = self.title
|
||||
ctx['locales'] = [p for p in settings.LANGUAGES if p[0] in self.request.event.settings.locales]
|
||||
ctx['maxfilesize'] = self.maxfilesize
|
||||
ctx['checkin_qr_warning'] = self.checkin_qr_warning
|
||||
return ctx
|
||||
|
||||
|
||||
|
||||
@@ -4,16 +4,16 @@ msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
|
||||
"PO-Revision-Date: 2026-07-31 18:00+0000\n"
|
||||
"Last-Translator: Nikolai <nikolai@lengefeldt.de>\n"
|
||||
"Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix/da/"
|
||||
">\n"
|
||||
"PO-Revision-Date: 2026-10-29 17:00+0000\n"
|
||||
"Last-Translator: Mie Frydensbjerg <mif@aarhus.dk>\n"
|
||||
"Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"da/>\n"
|
||||
"Language: da\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 2026.7.1\n"
|
||||
"X-Generator: Weblate 2026.10.1\n"
|
||||
|
||||
#: pretix/_base_settings.py
|
||||
msgid "English"
|
||||
@@ -34962,7 +34962,7 @@ msgstr ""
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_quota_left.html
|
||||
#, python-format
|
||||
msgid "%(num)s currently available"
|
||||
msgstr "%(num)s pt. tilgængelig"
|
||||
msgstr "%(num)s pt. ledig"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar.html
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar_week.html
|
||||
|
||||
@@ -852,7 +852,7 @@ msgstr "Details der Bestellposition"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py
|
||||
msgid "Attendee details"
|
||||
msgstr "Details Teilnehmer"
|
||||
msgstr "Details Teilnehmer*in"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py pretix/base/exporters/answers.py
|
||||
#: pretix/base/models/items.py pretix/control/navigation.py
|
||||
@@ -899,11 +899,11 @@ msgstr "Veranstaltungs- oder Termininformationen"
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_membership.html
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html
|
||||
msgid "Attendee name"
|
||||
msgstr "Name"
|
||||
msgstr "Name Teilnehmer*in"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py
|
||||
msgid "Attendee"
|
||||
msgstr "Teilnehmer"
|
||||
msgstr "Teilnehmer*in"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py pretix/base/exporters/orderlist.py
|
||||
#: pretix/base/forms/questions.py pretix/base/models/customers.py
|
||||
@@ -911,11 +911,11 @@ msgstr "Teilnehmer"
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html
|
||||
msgid "Attendee email"
|
||||
msgstr "E-Mail Teilnehmer"
|
||||
msgstr "E-Mail Teilnehmer*in"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py
|
||||
msgid "Attendee or order email"
|
||||
msgstr "E-Mail Teilnehmer oder Bestellung"
|
||||
msgstr "E-Mail Teilnehmer*in oder Bestellung"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py pretix/base/exporters/orderlist.py
|
||||
#: pretix/base/pdf.py pretix/control/templates/pretixcontrol/order/index.html
|
||||
@@ -923,23 +923,23 @@ msgstr "E-Mail Teilnehmer oder Bestellung"
|
||||
#: pretix/plugins/ticketoutputpdf/exporters.py
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html
|
||||
msgid "Attendee company"
|
||||
msgstr "Teilnehmer-Firma"
|
||||
msgstr "Teilnehmer*innen-Firma"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py
|
||||
msgid "Attendee address street"
|
||||
msgstr "Teilnehmer-Adresse: Straße"
|
||||
msgstr "Teilnehmer*innen-Adresse: Straße"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py
|
||||
msgid "Attendee address ZIP code"
|
||||
msgstr "Teilnehmer-Adresse: PLZ"
|
||||
msgstr "Teilnehmer*innen-Adresse: PLZ"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py
|
||||
msgid "Attendee address city"
|
||||
msgstr "Teilnehmer-Adresse: Stadt"
|
||||
msgstr "Teilnehmer*innen-Adresse: Stadt"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py
|
||||
msgid "Attendee address country"
|
||||
msgstr "Teilnehmer-Adresse: Land"
|
||||
msgstr "Teilnehmer*innen-Adresse: Land"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py pretix/base/exporters/orderlist.py
|
||||
#: pretix/base/pdf.py
|
||||
@@ -1173,7 +1173,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 pretix/base/exporters/orderlist.py
|
||||
@@ -2034,11 +2034,7 @@ 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
|
||||
#: pretix/base/exporters/json.py
|
||||
msgid ""
|
||||
"Download a structured JSON representation of all orders. This might be "
|
||||
"useful for the import in third-party systems."
|
||||
@@ -2055,8 +2051,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 pretix/plugins/reports/exporters.py
|
||||
msgid "Filter by status"
|
||||
@@ -2073,30 +2069,15 @@ 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
|
||||
#: pretix/control/templates/pretixcontrol/orders/index.html:8
|
||||
#: pretix/control/templates/pretixcontrol/orders/index.html:10
|
||||
#: pretix/control/templates/pretixcontrol/organizers/customer.html:205
|
||||
#: pretix/control/templates/pretixcontrol/subevents/detail.html:203
|
||||
#: pretix/plugins/reports/accountingreport.py:673
|
||||
#: pretix/plugins/reports/accountingreport.py:873
|
||||
#: pretix/plugins/reports/exporters.py:673 pretix/plugins/statistics/apps.py:39
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_orders.html:13
|
||||
#: pretix/presale/views/customer.py:364
|
||||
#: pretix/base/exporters/orderlist.py pretix/base/models/orders.py
|
||||
#: pretix/base/permissions.py pretix/control/navigation.py
|
||||
#: pretix/control/templates/pretixcontrol/orders/index.html
|
||||
#: pretix/control/templates/pretixcontrol/organizers/customer.html
|
||||
#: pretix/control/templates/pretixcontrol/subevents/detail.html
|
||||
#: pretix/plugins/reports/accountingreport.py
|
||||
#: pretix/plugins/reports/exporters.py pretix/plugins/statistics/apps.py
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_orders.html
|
||||
#: pretix/presale/views/customer.py
|
||||
msgid "Orders"
|
||||
msgstr "Bestellungen"
|
||||
|
||||
@@ -3880,13 +3861,13 @@ msgstr "Bitte wählen Sie einen gültigen Staat aus."
|
||||
|
||||
#: pretix/base/modelimport_orders.py pretix/control/forms/filter.py
|
||||
msgid "Attendee email address"
|
||||
msgstr "Teilnehmer-E-Mail-Adresse"
|
||||
msgstr "Teilnehmer*innen-E-Mail-Adresse"
|
||||
|
||||
#: pretix/base/modelimport_orders.py pretix/control/forms/filter.py
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html
|
||||
msgid "Attendee address"
|
||||
msgstr "Teilnehmer-Adresse"
|
||||
msgstr "Teilnehmer*innen-Adresse"
|
||||
|
||||
#: pretix/base/modelimport_orders.py
|
||||
msgid "Calculate from product"
|
||||
@@ -5394,8 +5375,8 @@ msgid ""
|
||||
"needs to be checked."
|
||||
msgstr ""
|
||||
"Wenn diese Option gesetzt ist, wird die Check-in-Anwendung melden, dass "
|
||||
"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studenten "
|
||||
"nützlich, deren Studentenausweis noch geprüft werden soll."
|
||||
"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studierende "
|
||||
"nützlich, deren Studierendenausweis noch geprüft werden soll."
|
||||
|
||||
#: pretix/base/models/items.py
|
||||
msgid ""
|
||||
@@ -6287,8 +6268,8 @@ msgid ""
|
||||
"cases."
|
||||
msgstr ""
|
||||
"Wenn diese Option gesetzt ist, wird die Check-in-Anwendung melden, dass "
|
||||
"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studenten "
|
||||
"nützlich, deren Studentenausweis noch geprüft werden soll."
|
||||
"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studierende "
|
||||
"nützlich, deren Studierendenausweis noch geprüft werden soll."
|
||||
|
||||
#: pretix/base/models/orders.py
|
||||
msgid ""
|
||||
@@ -7764,7 +7745,7 @@ msgstr "Musterfirma GmbH"
|
||||
|
||||
#: pretix/base/pdf.py
|
||||
msgid "Full attendee address"
|
||||
msgstr "Volle Teilnehmer-Adresse"
|
||||
msgstr "Volle Teilnehmer*innen-Adresse"
|
||||
|
||||
#: pretix/base/pdf.py
|
||||
msgid ""
|
||||
@@ -7782,23 +7763,23 @@ msgstr ""
|
||||
|
||||
#: pretix/base/pdf.py
|
||||
msgid "Attendee street"
|
||||
msgstr "Teilnehmer-Straße"
|
||||
msgstr "Teilnehmer*innen-Straße"
|
||||
|
||||
#: pretix/base/pdf.py
|
||||
msgid "Attendee ZIP code"
|
||||
msgstr "Teilnehmer-PLZ"
|
||||
msgstr "Teilnehmer*innen-PLZ"
|
||||
|
||||
#: pretix/base/pdf.py
|
||||
msgid "Attendee city"
|
||||
msgstr "Teilnehmer-Stadt"
|
||||
msgstr "Teilnehmer*innen-Stadt"
|
||||
|
||||
#: pretix/base/pdf.py
|
||||
msgid "Attendee state"
|
||||
msgstr "Teilnehmer-Bundesstaat"
|
||||
msgstr "Teilnehmer*innen-Bundesstaat"
|
||||
|
||||
#: pretix/base/pdf.py
|
||||
msgid "Attendee country"
|
||||
msgstr "Teilnehmer-Land"
|
||||
msgstr "Teilnehmer*innen-Land"
|
||||
|
||||
#: pretix/base/pdf.py
|
||||
msgid "Pseudonymization ID (lead scanning)"
|
||||
@@ -8093,7 +8074,7 @@ msgstr "Herr Mustermann"
|
||||
#: pretix/plugins/ticketoutputpdf/exporters.py
|
||||
#, python-brace-format
|
||||
msgid "Attendee name: {part}"
|
||||
msgstr "Teilnehmername: {part}"
|
||||
msgstr "Teilnehmer*innenname: {part}"
|
||||
|
||||
#: pretix/base/pdf.py
|
||||
msgid "Invoice address name for salutation"
|
||||
@@ -9023,7 +9004,7 @@ msgstr "Veranstaltungsort: {location}"
|
||||
#, python-brace-format
|
||||
msgctxt "invoice"
|
||||
msgid "Attendee: {name}"
|
||||
msgstr "Teilnehmer: {name}"
|
||||
msgstr "Teilnehmer*in: {name}"
|
||||
|
||||
#: pretix/base/services/invoices.py pretix/plugins/reports/exporters.py
|
||||
#, python-brace-format
|
||||
@@ -9980,7 +9961,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py
|
||||
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
|
||||
msgid ""
|
||||
@@ -9990,13 +9971,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
|
||||
msgid "Ask for attendee names"
|
||||
msgstr "Namen der Teilnehmer erfragen"
|
||||
msgstr "Namen der Teilnehmer*innen erfragen"
|
||||
|
||||
#: pretix/base/settings.py
|
||||
msgid "Ask for a name for all personalized tickets."
|
||||
@@ -10005,11 +9986,11 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py
|
||||
msgid "Require attendee names"
|
||||
msgstr "Namen der Teilnehmer erfordern"
|
||||
msgstr "Namen der Teilnehmer*innen erfordern"
|
||||
|
||||
#: pretix/base/settings.py
|
||||
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
|
||||
msgid "Ask for email addresses per ticket"
|
||||
@@ -10563,8 +10544,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
|
||||
@@ -11075,7 +11056,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py
|
||||
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
|
||||
msgid ""
|
||||
@@ -11086,12 +11067,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
|
||||
msgid "Allow users to download tickets"
|
||||
@@ -11264,7 +11245,7 @@ msgstr ""
|
||||
#: pretix/base/settings.py
|
||||
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
|
||||
msgid "Allow customers to modify their information"
|
||||
@@ -11372,7 +11353,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py
|
||||
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
|
||||
msgid ""
|
||||
@@ -11384,7 +11365,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."
|
||||
@@ -11693,7 +11674,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 "
|
||||
@@ -11929,8 +11910,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 "
|
||||
@@ -15234,7 +15215,7 @@ msgstr "Check-in-Status"
|
||||
|
||||
#: pretix/control/forms/filter.py pretix/plugins/checkinlists/exporters.py
|
||||
msgid "All attendees"
|
||||
msgstr "Alle Teilnehmer"
|
||||
msgstr "Alle Teilnehmer*innen"
|
||||
|
||||
#: pretix/control/forms/filter.py
|
||||
#: pretix/control/templates/pretixcontrol/checkin/index.html
|
||||
@@ -15837,7 +15818,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."
|
||||
|
||||
@@ -16148,7 +16129,7 @@ msgstr ""
|
||||
|
||||
#: pretix/control/forms/orders.py
|
||||
msgid "Notify customer by email"
|
||||
msgstr "Kunde per E-Mail benachrichtigen"
|
||||
msgstr "Kund*in per E-Mail benachrichtigen"
|
||||
|
||||
#: pretix/control/forms/orders.py
|
||||
msgid "Keep a cancellation fee of"
|
||||
@@ -17767,7 +17748,7 @@ msgstr "Eine individuelle E-Mail wurde verschickt."
|
||||
|
||||
#: pretix/control/logdisplay.py
|
||||
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
|
||||
msgid ""
|
||||
@@ -19572,7 +19553,7 @@ msgstr "Terminal-ID"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html
|
||||
msgid "Card holder"
|
||||
msgstr "Karteninhaber"
|
||||
msgstr "Karteninhaber*in"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html
|
||||
msgid "Card expiration"
|
||||
@@ -19776,7 +19757,7 @@ msgstr "CSV"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/checkin/index.html
|
||||
msgid "No attendee record was found."
|
||||
msgstr "Keine passenden Teilnehmer gefunden."
|
||||
msgstr "Keine passenden Teilnehmer*innen gefunden."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/checkin/index.html
|
||||
#: pretix/control/templates/pretixcontrol/datasync/failed_jobs.html
|
||||
@@ -22537,7 +22518,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
|
||||
@@ -22616,7 +22597,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."
|
||||
|
||||
@@ -24921,7 +24902,7 @@ msgstr "Sonstige Datenexporte"
|
||||
#: pretix/control/templates/pretixcontrol/orders/export.html
|
||||
#: pretix/control/templates/pretixcontrol/organizers/export.html
|
||||
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
|
||||
#: pretix/control/templates/pretixcontrol/organizers/export.html
|
||||
@@ -25863,7 +25844,7 @@ msgstr "Domains"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html
|
||||
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
|
||||
msgid ""
|
||||
@@ -28313,7 +28294,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
|
||||
@@ -28633,11 +28614,11 @@ msgstr "Das ausgewählte List wurde gelöscht."
|
||||
|
||||
#: pretix/control/views/dashboards.py
|
||||
msgid "Attendees (ordered)"
|
||||
msgstr "Teilnehmer (bestellt)"
|
||||
msgstr "Teilnehmende (bestellt)"
|
||||
|
||||
#: pretix/control/views/dashboards.py
|
||||
msgid "Attendees (paid)"
|
||||
msgstr "Teilnehmer (bezahlt)"
|
||||
msgstr "Teilnehmende (bezahlt)"
|
||||
|
||||
#: pretix/control/views/dashboards.py
|
||||
#, python-brace-format
|
||||
@@ -30703,7 +30684,7 @@ msgstr "PDF-Sammlungen"
|
||||
|
||||
#: pretix/plugins/badges/exporters.py
|
||||
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
|
||||
#: pretix/plugins/ticketoutputpdf/exporters.py
|
||||
@@ -30954,7 +30935,7 @@ msgstr "Anderes Bankkonto"
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py
|
||||
msgid "Name of account holder"
|
||||
msgstr "Kontoinhaber"
|
||||
msgstr "Kontoinhaber*in"
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py
|
||||
msgid ""
|
||||
@@ -31090,7 +31071,7 @@ msgstr "Bitte überweisen Sie den vollen Betrag auf das folgende Bankkonto:"
|
||||
#: pretix/plugins/banktransfer/views.py pretix/plugins/stripe/payment.py
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html
|
||||
msgid "Account holder"
|
||||
msgstr "Kontoinhaber"
|
||||
msgstr "Kontoinhaber*in"
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html
|
||||
@@ -31667,7 +31648,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
|
||||
@@ -32798,7 +32779,7 @@ msgstr "Geplante E-Mails"
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py
|
||||
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
|
||||
msgid "Mass email was sent to waiting list entries."
|
||||
@@ -32830,7 +32811,7 @@ msgstr "Eine automatisierte E-Mail wurde an den Besteller verschickt"
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py
|
||||
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
|
||||
msgid "An email rule was deleted"
|
||||
@@ -32863,7 +32844,7 @@ msgstr "Alle nicht eingecheckten Kunden"
|
||||
|
||||
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html
|
||||
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
|
||||
msgid "All contact addresses"
|
||||
@@ -33015,14 +32996,14 @@ msgstr ""
|
||||
|
||||
#: pretix/plugins/sendmail/views.py
|
||||
msgid "Orders or attendees"
|
||||
msgstr "Bestellungen oder Teilnehmer"
|
||||
msgstr "Bestellungen oder Teilnehmer*innen"
|
||||
|
||||
#: pretix/plugins/sendmail/views.py
|
||||
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
|
||||
@@ -33589,23 +33570,23 @@ msgstr "SEPA-Lastschrift"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py
|
||||
msgid "Account Holder Name"
|
||||
msgstr "Kontoinhaber"
|
||||
msgstr "Kontoinhaber*in"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py
|
||||
msgid "Account Holder Street"
|
||||
msgstr "Straße (Kontoinhaber)"
|
||||
msgstr "Straße (Kontoinhaber*in)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py
|
||||
msgid "Account Holder Postal Code"
|
||||
msgstr "PLZ (Kontoinhaber)"
|
||||
msgstr "PLZ (Kontoinhaber*in)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py
|
||||
msgid "Account Holder City"
|
||||
msgstr "Stadt (Kontoinhaber)"
|
||||
msgstr "Stadt (Kontoinhaber*in)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py
|
||||
msgid "Account Holder Country"
|
||||
msgstr "Land (Kontoinhaber)"
|
||||
msgstr "Land (Kontoinhaber*in)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py
|
||||
msgid "Affirm via Stripe"
|
||||
@@ -34045,7 +34026,7 @@ msgstr "MOTO"
|
||||
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html
|
||||
msgid "Payer name"
|
||||
msgstr "Name des Zahlers"
|
||||
msgstr "Name des Zahlenden"
|
||||
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html
|
||||
msgid "Payment receipt"
|
||||
@@ -35355,7 +35336,7 @@ msgstr[1] "Das Ticket wurde %(count)s-mal eingelöst."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html
|
||||
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
|
||||
msgid "The price of this product was reduced because of an automatic discount."
|
||||
@@ -37122,12 +37103,12 @@ msgstr ""
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html
|
||||
#: pretix/presale/views/customer.py
|
||||
msgid "Attendee profiles"
|
||||
msgstr "Teilnehmer-Profile"
|
||||
msgstr "Teilnehmer*innen-Profile"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html
|
||||
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
|
||||
msgid "Registration"
|
||||
@@ -38939,7 +38920,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"
|
||||
|
||||
@@ -153,11 +153,11 @@ msgstr "Bezahlte Bestellungen"
|
||||
|
||||
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js
|
||||
msgid "Attendees (ordered)"
|
||||
msgstr "Teilnehmer (bestellt)"
|
||||
msgstr "Teilnehmende (bestellt)"
|
||||
|
||||
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js
|
||||
msgid "Attendees (paid)"
|
||||
msgstr "Teilnehmer (bezahlt)"
|
||||
msgstr "Teilnehmende (bezahlt)"
|
||||
|
||||
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js
|
||||
msgid "Total revenue"
|
||||
|
||||
@@ -854,7 +854,7 @@ msgstr "Details der Bestellposition"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py
|
||||
msgid "Attendee details"
|
||||
msgstr "Details Teilnehmer"
|
||||
msgstr "Details Teilnehmer*in"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py pretix/base/exporters/answers.py
|
||||
#: pretix/base/models/items.py pretix/control/navigation.py
|
||||
@@ -901,11 +901,11 @@ msgstr "Veranstaltungs- oder Termininformationen"
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_membership.html
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html
|
||||
msgid "Attendee name"
|
||||
msgstr "Name"
|
||||
msgstr "Name Teilnehmer*in"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py
|
||||
msgid "Attendee"
|
||||
msgstr "Teilnehmer"
|
||||
msgstr "Teilnehmer*in"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py pretix/base/exporters/orderlist.py
|
||||
#: pretix/base/forms/questions.py pretix/base/models/customers.py
|
||||
@@ -913,11 +913,11 @@ msgstr "Teilnehmer"
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html
|
||||
msgid "Attendee email"
|
||||
msgstr "E-Mail Teilnehmer"
|
||||
msgstr "E-Mail Teilnehmer*in"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py
|
||||
msgid "Attendee or order email"
|
||||
msgstr "E-Mail Teilnehmer oder Bestellung"
|
||||
msgstr "E-Mail Teilnehmer*in oder Bestellung"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py pretix/base/exporters/orderlist.py
|
||||
#: pretix/base/pdf.py pretix/control/templates/pretixcontrol/order/index.html
|
||||
@@ -925,23 +925,23 @@ msgstr "E-Mail Teilnehmer oder Bestellung"
|
||||
#: pretix/plugins/ticketoutputpdf/exporters.py
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html
|
||||
msgid "Attendee company"
|
||||
msgstr "Teilnehmer-Firma"
|
||||
msgstr "Teilnehmer*innen-Firma"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py
|
||||
msgid "Attendee address street"
|
||||
msgstr "Teilnehmer-Adresse: Straße"
|
||||
msgstr "Teilnehmer*innen-Adresse: Straße"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py
|
||||
msgid "Attendee address ZIP code"
|
||||
msgstr "Teilnehmer-Adresse: PLZ"
|
||||
msgstr "Teilnehmer*innen-Adresse: PLZ"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py
|
||||
msgid "Attendee address city"
|
||||
msgstr "Teilnehmer-Adresse: Stadt"
|
||||
msgstr "Teilnehmer*innen-Adresse: Stadt"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py
|
||||
msgid "Attendee address country"
|
||||
msgstr "Teilnehmer-Adresse: Land"
|
||||
msgstr "Teilnehmer*innen-Adresse: Land"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py pretix/base/exporters/orderlist.py
|
||||
#: pretix/base/pdf.py
|
||||
@@ -1175,7 +1175,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 pretix/base/exporters/orderlist.py
|
||||
@@ -2053,8 +2053,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 pretix/plugins/reports/exporters.py
|
||||
msgid "Filter by status"
|
||||
@@ -3861,13 +3861,13 @@ msgstr "Bitte wähle einen gültigen Staat aus."
|
||||
|
||||
#: pretix/base/modelimport_orders.py pretix/control/forms/filter.py
|
||||
msgid "Attendee email address"
|
||||
msgstr "Teilnehmer-E-Mail-Adresse"
|
||||
msgstr "Teilnehmer*innen-E-Mail-Adresse"
|
||||
|
||||
#: pretix/base/modelimport_orders.py pretix/control/forms/filter.py
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html
|
||||
msgid "Attendee address"
|
||||
msgstr "Teilnehmer-Adresse"
|
||||
msgstr "Teilnehmer*innen-Adresse"
|
||||
|
||||
#: pretix/base/modelimport_orders.py
|
||||
msgid "Calculate from product"
|
||||
@@ -5370,8 +5370,8 @@ msgid ""
|
||||
"needs to be checked."
|
||||
msgstr ""
|
||||
"Wenn diese Option gesetzt ist, wird die Check-in-Anwendung melden, dass "
|
||||
"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studenten "
|
||||
"nützlich, deren Studentenausweis noch geprüft werden soll."
|
||||
"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studierende "
|
||||
"nützlich, deren Studierendenausweis noch geprüft werden soll."
|
||||
|
||||
#: pretix/base/models/items.py
|
||||
msgid ""
|
||||
@@ -6263,8 +6263,8 @@ msgid ""
|
||||
"cases."
|
||||
msgstr ""
|
||||
"Wenn diese Option gesetzt ist, wird die Check-in-Anwendung melden, dass "
|
||||
"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studenten "
|
||||
"nützlich, deren Studentenausweis noch geprüft werden soll."
|
||||
"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studierende "
|
||||
"nützlich, deren Studierendenausweis noch geprüft werden soll."
|
||||
|
||||
#: pretix/base/models/orders.py
|
||||
msgid ""
|
||||
@@ -7736,7 +7736,7 @@ msgstr "Musterfirma"
|
||||
|
||||
#: pretix/base/pdf.py
|
||||
msgid "Full attendee address"
|
||||
msgstr "Volle Teilnehmer-Adresse"
|
||||
msgstr "Volle Teilnehmer*innen-Adresse"
|
||||
|
||||
#: pretix/base/pdf.py
|
||||
msgid ""
|
||||
@@ -7754,23 +7754,23 @@ msgstr ""
|
||||
|
||||
#: pretix/base/pdf.py
|
||||
msgid "Attendee street"
|
||||
msgstr "Teilnehmer-Straße"
|
||||
msgstr "Teilnehmer*innen-Straße"
|
||||
|
||||
#: pretix/base/pdf.py
|
||||
msgid "Attendee ZIP code"
|
||||
msgstr "Teilnehmer-PLZ"
|
||||
msgstr "Teilnehmer*innen-PLZ"
|
||||
|
||||
#: pretix/base/pdf.py
|
||||
msgid "Attendee city"
|
||||
msgstr "Teilnehmer-Stadt"
|
||||
msgstr "Teilnehmer*innen-Stadt"
|
||||
|
||||
#: pretix/base/pdf.py
|
||||
msgid "Attendee state"
|
||||
msgstr "Teilnehmer-Bundesstaat"
|
||||
msgstr "Teilnehmer*innen-Bundesstaat"
|
||||
|
||||
#: pretix/base/pdf.py
|
||||
msgid "Attendee country"
|
||||
msgstr "Teilnehmer-Land"
|
||||
msgstr "Teilnehmer*innen-Land"
|
||||
|
||||
#: pretix/base/pdf.py
|
||||
msgid "Pseudonymization ID (lead scanning)"
|
||||
@@ -8065,7 +8065,7 @@ msgstr "Herr Mustermann"
|
||||
#: pretix/plugins/ticketoutputpdf/exporters.py
|
||||
#, python-brace-format
|
||||
msgid "Attendee name: {part}"
|
||||
msgstr "Teilnehmer: {part}"
|
||||
msgstr "Teilnehmer*innenname: {part}"
|
||||
|
||||
#: pretix/base/pdf.py
|
||||
msgid "Invoice address name for salutation"
|
||||
@@ -8992,7 +8992,7 @@ msgstr "Veranstaltungsort: {location}"
|
||||
#, python-brace-format
|
||||
msgctxt "invoice"
|
||||
msgid "Attendee: {name}"
|
||||
msgstr "Teilnehmer: {name}"
|
||||
msgstr "Teilnehmer*in: {name}"
|
||||
|
||||
#: pretix/base/services/invoices.py pretix/plugins/reports/exporters.py
|
||||
#, python-brace-format
|
||||
@@ -9948,7 +9948,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py
|
||||
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
|
||||
msgid ""
|
||||
@@ -9958,13 +9958,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
|
||||
msgid "Ask for attendee names"
|
||||
msgstr "Namen der Teilnehmer erfragen"
|
||||
msgstr "Namen der Teilnehmer*innen erfragen"
|
||||
|
||||
#: pretix/base/settings.py
|
||||
msgid "Ask for a name for all personalized tickets."
|
||||
@@ -9973,11 +9973,11 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py
|
||||
msgid "Require attendee names"
|
||||
msgstr "Namen der Teilnehmer erfordern"
|
||||
msgstr "Namen der Teilnehmer*innen erfordern"
|
||||
|
||||
#: pretix/base/settings.py
|
||||
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
|
||||
msgid "Ask for email addresses per ticket"
|
||||
@@ -9999,7 +9999,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."
|
||||
|
||||
@@ -10530,8 +10530,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
|
||||
@@ -11042,7 +11042,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py
|
||||
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
|
||||
msgid ""
|
||||
@@ -11053,12 +11053,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
|
||||
msgid "Allow users to download tickets"
|
||||
@@ -11231,7 +11231,7 @@ msgstr ""
|
||||
#: pretix/base/settings.py
|
||||
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
|
||||
msgid "Allow customers to modify their information"
|
||||
@@ -11339,7 +11339,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py
|
||||
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
|
||||
msgid ""
|
||||
@@ -11351,7 +11351,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."
|
||||
@@ -11534,7 +11534,7 @@ msgstr "Kontakt-E-Mail"
|
||||
#: pretix/base/settings.py pretix/control/forms/event.py
|
||||
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
|
||||
@@ -11659,7 +11659,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 "
|
||||
@@ -11894,8 +11894,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 "
|
||||
@@ -13138,7 +13138,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
|
||||
@@ -14827,11 +14827,11 @@ msgstr "Ticket-Downloads"
|
||||
#: pretix/control/forms/event.py
|
||||
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
|
||||
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
|
||||
msgid ""
|
||||
@@ -14867,7 +14867,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."
|
||||
|
||||
@@ -15190,7 +15190,7 @@ msgstr "Check-in-Status"
|
||||
|
||||
#: pretix/control/forms/filter.py pretix/plugins/checkinlists/exporters.py
|
||||
msgid "All attendees"
|
||||
msgstr "Alle Teilnehmer"
|
||||
msgstr "Alle Teilnehmer*innen"
|
||||
|
||||
#: pretix/control/forms/filter.py
|
||||
#: pretix/control/templates/pretixcontrol/checkin/index.html
|
||||
@@ -15793,7 +15793,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."
|
||||
|
||||
@@ -17723,7 +17723,7 @@ msgstr "Eine individuelle E-Mail wurde verschickt."
|
||||
|
||||
#: pretix/control/logdisplay.py
|
||||
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
|
||||
msgid ""
|
||||
@@ -19526,7 +19526,7 @@ msgstr "Terminal-ID"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html
|
||||
msgid "Card holder"
|
||||
msgstr "Karteninhaber"
|
||||
msgstr "Karteninhaber*in"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html
|
||||
msgid "Card expiration"
|
||||
@@ -19730,7 +19730,7 @@ msgstr "CSV"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/checkin/index.html
|
||||
msgid "No attendee record was found."
|
||||
msgstr "Keine passenden Teilnehmer gefunden."
|
||||
msgstr "Keine passenden Teilnehmer*innen gefunden."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/checkin/index.html
|
||||
#: pretix/control/templates/pretixcontrol/datasync/failed_jobs.html
|
||||
@@ -21510,7 +21510,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
|
||||
msgid "Basics"
|
||||
@@ -22487,7 +22487,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
|
||||
@@ -22566,7 +22566,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."
|
||||
|
||||
@@ -23237,9 +23237,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
|
||||
msgid "Create a new per-ticket question"
|
||||
@@ -23445,7 +23445,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."
|
||||
@@ -24868,7 +24868,7 @@ msgstr "Sonstige Datenexporte"
|
||||
#: pretix/control/templates/pretixcontrol/orders/export.html
|
||||
#: pretix/control/templates/pretixcontrol/organizers/export.html
|
||||
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
|
||||
#: pretix/control/templates/pretixcontrol/organizers/export.html
|
||||
@@ -25809,7 +25809,7 @@ msgstr "Domains"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html
|
||||
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
|
||||
msgid ""
|
||||
@@ -28254,7 +28254,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
|
||||
@@ -28573,11 +28573,11 @@ msgstr "Das ausgewählte List wurde gelöscht."
|
||||
|
||||
#: pretix/control/views/dashboards.py
|
||||
msgid "Attendees (ordered)"
|
||||
msgstr "Teilnehmer (bestellt)"
|
||||
msgstr "Teilnehmende (bestellt)"
|
||||
|
||||
#: pretix/control/views/dashboards.py
|
||||
msgid "Attendees (paid)"
|
||||
msgstr "Teilnehmer (bezahlt)"
|
||||
msgstr "Teilnehmende (bezahlt)"
|
||||
|
||||
#: pretix/control/views/dashboards.py
|
||||
#, python-brace-format
|
||||
@@ -30638,7 +30638,7 @@ msgstr "PDF-Sammlungen"
|
||||
|
||||
#: pretix/plugins/badges/exporters.py
|
||||
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
|
||||
#: pretix/plugins/ticketoutputpdf/exporters.py
|
||||
@@ -30888,7 +30888,7 @@ msgstr "Anderes Bankkonto"
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py
|
||||
msgid "Name of account holder"
|
||||
msgstr "Kontoinhaber"
|
||||
msgstr "Kontoinhaber*in"
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py
|
||||
msgid ""
|
||||
@@ -31024,7 +31024,7 @@ msgstr "Bitte überweise den vollen Betrag auf das folgende Bankkonto:"
|
||||
#: pretix/plugins/banktransfer/views.py pretix/plugins/stripe/payment.py
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_confirm.html
|
||||
msgid "Account holder"
|
||||
msgstr "Kontoinhaber"
|
||||
msgstr "Kontoinhaber*in"
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html
|
||||
@@ -31602,7 +31602,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
|
||||
@@ -32729,7 +32729,7 @@ msgstr "Geplante E-Mails"
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py
|
||||
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
|
||||
msgid "Mass email was sent to waiting list entries."
|
||||
@@ -32761,7 +32761,7 @@ msgstr "Eine automatisierte E-Mail wurde an den Besteller verschickt"
|
||||
|
||||
#: pretix/plugins/sendmail/signals.py
|
||||
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
|
||||
msgid "An email rule was deleted"
|
||||
@@ -32794,7 +32794,7 @@ msgstr "Alle nicht eingecheckten Kunden"
|
||||
|
||||
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html
|
||||
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
|
||||
msgid "All contact addresses"
|
||||
@@ -32948,14 +32948,14 @@ msgstr ""
|
||||
|
||||
#: pretix/plugins/sendmail/views.py
|
||||
msgid "Orders or attendees"
|
||||
msgstr "Bestellungen oder Teilnehmer"
|
||||
msgstr "Bestellungen oder Teilnehmer*innen"
|
||||
|
||||
#: pretix/plugins/sendmail/views.py
|
||||
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
|
||||
@@ -33520,23 +33520,23 @@ msgstr "SEPA-Lastschrift"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py
|
||||
msgid "Account Holder Name"
|
||||
msgstr "Kontoinhaber"
|
||||
msgstr "Kontoinhaber*in"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py
|
||||
msgid "Account Holder Street"
|
||||
msgstr "Straße (Kontoinhaber)"
|
||||
msgstr "Straße (Kontoinhaber*in)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py
|
||||
msgid "Account Holder Postal Code"
|
||||
msgstr "PLZ (Kontoinhaber)"
|
||||
msgstr "PLZ (Kontoinhaber*in)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py
|
||||
msgid "Account Holder City"
|
||||
msgstr "Stadt (Kontoinhaber)"
|
||||
msgstr "Stadt (Kontoinhaber*in)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py
|
||||
msgid "Account Holder Country"
|
||||
msgstr "Land (Kontoinhaber)"
|
||||
msgstr "Land (Kontoinhaber*in)"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py
|
||||
msgid "Affirm via Stripe"
|
||||
@@ -33974,7 +33974,7 @@ msgstr "MOTO"
|
||||
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html
|
||||
msgid "Payer name"
|
||||
msgstr "Name des Zahlers"
|
||||
msgstr "Name des Zahlenden"
|
||||
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html
|
||||
msgid "Payment receipt"
|
||||
@@ -35279,7 +35279,7 @@ msgstr[1] "Das Ticket wurde %(count)s-mal eingelöst."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html
|
||||
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
|
||||
msgid "The price of this product was reduced because of an automatic discount."
|
||||
@@ -37044,12 +37044,12 @@ msgstr "Möchtest das folgende Profil wirklich aus deinem Kundenkonto löschen?"
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html
|
||||
#: pretix/presale/views/customer.py
|
||||
msgid "Attendee profiles"
|
||||
msgstr "Teilnehmer-Adresse"
|
||||
msgstr "Teilnehmer*innen-Adresse"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html
|
||||
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
|
||||
msgid "Registration"
|
||||
@@ -38806,7 +38806,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"
|
||||
@@ -39380,7 +39380,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"
|
||||
@@ -39657,7 +39657,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"
|
||||
|
||||
@@ -153,11 +153,11 @@ msgstr "Bezahlte Bestellungen"
|
||||
|
||||
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js
|
||||
msgid "Attendees (ordered)"
|
||||
msgstr "Teilnehmer (bestellt)"
|
||||
msgstr "Teilnehmende (bestellt)"
|
||||
|
||||
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js
|
||||
msgid "Attendees (paid)"
|
||||
msgstr "Teilnehmer (bezahlt)"
|
||||
msgstr "Teilnehmende (bezahlt)"
|
||||
|
||||
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js
|
||||
msgid "Total revenue"
|
||||
|
||||
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
|
||||
"PO-Revision-Date: 2026-10-26 23:00+0000\n"
|
||||
"Last-Translator: Tim <plicnetwork@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-10-29 17:00+0000\n"
|
||||
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
|
||||
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"es/>\n"
|
||||
"Language: es\n"
|
||||
@@ -7656,17 +7656,14 @@ msgid "This gift card was used in the meantime. Please try again."
|
||||
msgstr "Mientras tanto, esta tarjeta de regalo se utilizó. Inténtalo de nuevo."
|
||||
|
||||
#: pretix/base/payment.py
|
||||
#, fuzzy
|
||||
#| msgid "Gift card code"
|
||||
msgid "Gift card not found."
|
||||
msgstr "Código de la tarjeta de regalo"
|
||||
msgstr "No se ha encontrado la tarjeta regalo."
|
||||
|
||||
#: pretix/base/payment.py
|
||||
#, fuzzy
|
||||
#| msgid "Only test gift cards can be used in test mode."
|
||||
msgid "Only test gift card can be used in test mode and vice versa."
|
||||
msgstr ""
|
||||
"En el modo de prueba solo se pueden utilizar tarjetas regalo de prueba."
|
||||
"En el modo de prueba solo se pueden utilizar tarjetas regalo de prueba, y "
|
||||
"viceversa."
|
||||
|
||||
#: pretix/base/payment.py
|
||||
msgid ""
|
||||
@@ -16689,12 +16686,9 @@ msgid "Phone"
|
||||
msgstr "Teléfono"
|
||||
|
||||
#: pretix/control/forms/organizer.py
|
||||
#, fuzzy
|
||||
#| msgctxt "sso_oidc"
|
||||
#| msgid "Base URL"
|
||||
msgctxt "sso_oidc"
|
||||
msgid "Base URL / issuer"
|
||||
msgstr "URL de base"
|
||||
msgstr "URL base / emisor"
|
||||
|
||||
#: pretix/control/forms/organizer.py
|
||||
msgctxt "sso_oidc"
|
||||
@@ -16767,21 +16761,16 @@ msgstr ""
|
||||
"endpoint de autorización. Introducir como: {example}"
|
||||
|
||||
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
|
||||
#, fuzzy
|
||||
#| msgctxt "sso_oidc"
|
||||
#| msgid "Base URL"
|
||||
msgid "Base URL / issuer"
|
||||
msgstr "URL de base"
|
||||
msgstr "URL base / emisor"
|
||||
|
||||
#: pretix/control/forms/organizer.py
|
||||
msgid "Invalidate old client secret and generate a new one"
|
||||
msgstr "Invalidar el antiguo secreto del cliente y generar uno nuevo"
|
||||
|
||||
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
|
||||
#, fuzzy
|
||||
#| msgid "will be retried"
|
||||
msgid "(will be generated)"
|
||||
msgstr "se volverá a intentar"
|
||||
msgstr "(se generará)"
|
||||
|
||||
#: pretix/control/forms/organizer.py
|
||||
msgid "Organizer short name"
|
||||
@@ -26404,16 +26393,16 @@ msgstr "Cliente SSO:"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
|
||||
#, fuzzy
|
||||
#| msgid "Create a new SSO client"
|
||||
msgid "Create credentials for a new SSO client"
|
||||
msgstr "Crear un nuevo cliente SSO"
|
||||
msgstr "Crear credenciales para un nuevo cliente de SSO"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
|
||||
msgid ""
|
||||
"After submitting this form, client credentials for your SSO client will be "
|
||||
"generated."
|
||||
msgstr ""
|
||||
"Una vez enviado este formulario, se generarán las credenciales de cliente "
|
||||
"para tu cliente SSO."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
|
||||
@@ -26423,6 +26412,9 @@ msgid ""
|
||||
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
|
||||
"a>."
|
||||
msgstr ""
|
||||
"Para obtener más información, consulta nuestra documentación en <a href=\"%"
|
||||
"(url)s\">Uso de Pretix como proveedor de SSO con clientes de SSO externos</a>"
|
||||
"."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
|
||||
msgid ""
|
||||
@@ -26430,6 +26422,9 @@ msgid ""
|
||||
" \t\"Login with pretix\" in external systems\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" \t«Iniciar sesión con pretix» en sistemas externos\n"
|
||||
" "
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
|
||||
msgid ""
|
||||
@@ -26454,17 +26449,13 @@ msgid "This SSO provider cannot be deleted since it has already been used."
|
||||
msgstr "Este proveedor de SSO no se puede eliminar porque ya se ha utilizado."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
|
||||
#, fuzzy
|
||||
#| msgid "Delete SSO provider:"
|
||||
msgid "External SSO provider:"
|
||||
msgstr "Eliminar proveedor de SSO:"
|
||||
msgstr "Proveedor externo de SSO:"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
|
||||
#, fuzzy
|
||||
#| msgid "Create a new SSO provider"
|
||||
msgid "Connect to an external SSO provider"
|
||||
msgstr "Agregar un nuevo proveedor SSO"
|
||||
msgstr "Conectarse a un proveedor externo de SSO"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
|
||||
@@ -26473,6 +26464,8 @@ msgid ""
|
||||
"For more information, refer to our documentation on <a href=\"%(url)s\" "
|
||||
"target=\"_blank\">Using pretix as an SSO client</a>."
|
||||
msgstr ""
|
||||
"Para obtener más información, consulta nuestra documentación sobre <a "
|
||||
"href=\"%(url)s\" target=\"_blank\">El uso de pretix como cliente de SSO</a>."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
|
||||
msgctxt "sso"
|
||||
@@ -26485,6 +26478,9 @@ msgid ""
|
||||
" \tConnect to an external login provider\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" \tConectarse a un proveedor de inicio de sesión externo\n"
|
||||
" "
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
|
||||
msgid ""
|
||||
@@ -30025,15 +30021,10 @@ msgid "The provider has been created."
|
||||
msgstr "Se ha creado el proveedor."
|
||||
|
||||
#: pretix/control/views/organizer.py
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Your changes have been saved. Please note down the following client "
|
||||
#| "secret, it will never be shown again: {secret}"
|
||||
msgid ""
|
||||
"Please note down the following client secret, it will never be shown again."
|
||||
msgstr ""
|
||||
"Se han guardado los cambios. Anote el siguiente secreto de cliente; no se "
|
||||
"volverá a mostrar nunca más: {secret}"
|
||||
"Anota el siguiente secreto de cliente; no volverá a mostrarse nunca más."
|
||||
|
||||
#: pretix/control/views/organizer.py
|
||||
msgid ""
|
||||
@@ -32586,6 +32577,12 @@ msgid ""
|
||||
"one of those get linked to their own separate order page restricted to only "
|
||||
"that product."
|
||||
msgstr ""
|
||||
"Es posible que se envíen varios correos electrónicos a la misma dirección de "
|
||||
"correo si un pedido contiene varios productos para asistentes y se restringe "
|
||||
"el acceso a los productos y, al mismo tiempo, se limita el envío de correos "
|
||||
"únicamente a los asistentes. Esto es intencionado, ya que cada uno de ellos "
|
||||
"se vincula a su propia página de pedido independiente, restringida "
|
||||
"exclusivamente a ese producto."
|
||||
|
||||
#: pretix/plugins/sendmail/forms.py
|
||||
msgid "Filter check-in status"
|
||||
@@ -33498,7 +33495,7 @@ msgstr "MobilePay"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py
|
||||
msgid "Wero"
|
||||
msgstr ""
|
||||
msgstr "Wero"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py
|
||||
msgid "Destination"
|
||||
|
||||
@@ -4,10 +4,10 @@ msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
|
||||
"PO-Revision-Date: 2026-10-27 17:00+0000\n"
|
||||
"PO-Revision-Date: 2026-10-29 17:00+0000\n"
|
||||
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
|
||||
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix/fr/"
|
||||
">\n"
|
||||
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"fr/>\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -7707,16 +7707,14 @@ msgid "This gift card was used in the meantime. Please try again."
|
||||
msgstr "Cette carte-cadeau a été utilisée entre-temps. Veuillez réessayer."
|
||||
|
||||
#: pretix/base/payment.py
|
||||
#, fuzzy
|
||||
#| msgid "Gift card code"
|
||||
msgid "Gift card not found."
|
||||
msgstr "Code carte-cadeau"
|
||||
msgstr "Carte cadeau introuvable."
|
||||
|
||||
#: pretix/base/payment.py
|
||||
#, fuzzy
|
||||
#| msgid "Only test gift cards can be used in test mode."
|
||||
msgid "Only test gift card can be used in test mode and vice versa."
|
||||
msgstr "Seules les cartes-cadeaux de test peuvent être utilisées en mode test."
|
||||
msgstr ""
|
||||
"Seule la carte cadeau de test peut être utilisée en mode test, et "
|
||||
"inversement."
|
||||
|
||||
#: pretix/base/payment.py
|
||||
msgid ""
|
||||
@@ -16850,12 +16848,9 @@ msgid "Phone"
|
||||
msgstr "Téléphone"
|
||||
|
||||
#: pretix/control/forms/organizer.py
|
||||
#, fuzzy
|
||||
#| msgctxt "sso_oidc"
|
||||
#| msgid "Base URL"
|
||||
msgctxt "sso_oidc"
|
||||
msgid "Base URL / issuer"
|
||||
msgstr "URL de base"
|
||||
msgstr "URL de base / émetteur"
|
||||
|
||||
#: pretix/control/forms/organizer.py
|
||||
msgctxt "sso_oidc"
|
||||
@@ -16928,21 +16923,16 @@ msgstr ""
|
||||
"Saisissez-les sous la forme suivante : {example}"
|
||||
|
||||
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
|
||||
#, fuzzy
|
||||
#| msgctxt "sso_oidc"
|
||||
#| msgid "Base URL"
|
||||
msgid "Base URL / issuer"
|
||||
msgstr "URL de base"
|
||||
msgstr "URL de base / émetteur"
|
||||
|
||||
#: pretix/control/forms/organizer.py
|
||||
msgid "Invalidate old client secret and generate a new one"
|
||||
msgstr "Invalider l’ancienne clé secrète client et en générer une nouvelle"
|
||||
|
||||
#: pretix/control/forms/organizer.py pretix/control/views/organizer.py
|
||||
#, fuzzy
|
||||
#| msgid "will be retried"
|
||||
msgid "(will be generated)"
|
||||
msgstr "sera réessayé"
|
||||
msgstr "(sera généré)"
|
||||
|
||||
#: pretix/control/forms/organizer.py
|
||||
msgid "Organizer short name"
|
||||
@@ -26606,16 +26596,16 @@ msgstr "Client SSO :"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
|
||||
#, fuzzy
|
||||
#| msgid "Create a new SSO client"
|
||||
msgid "Create credentials for a new SSO client"
|
||||
msgstr "Créer un nouveau client SSO"
|
||||
msgstr "Créer des identifiants pour un nouveau client SSO"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
|
||||
msgid ""
|
||||
"After submitting this form, client credentials for your SSO client will be "
|
||||
"generated."
|
||||
msgstr ""
|
||||
"Une fois ce formulaire envoyé, les identifiants de votre client SSO seront "
|
||||
"générés."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoclient_edit.html
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
|
||||
@@ -26625,6 +26615,9 @@ msgid ""
|
||||
"href=\"%(url)s\">Using pretix as an SSO provider with external SSO clients</"
|
||||
"a>."
|
||||
msgstr ""
|
||||
"Pour plus d'informations, consultez notre documentation sur <a href=\"%(url)"
|
||||
"s\">L'utilisation de Pretix en tant que fournisseur SSO avec des clients SSO "
|
||||
"externes</a>."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
|
||||
msgid ""
|
||||
@@ -26632,6 +26625,9 @@ msgid ""
|
||||
" \t\"Login with pretix\" in external systems\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" \t« Se connecter avec pretix » dans les systèmes externes\n"
|
||||
" "
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoclients.html
|
||||
msgid ""
|
||||
@@ -26659,17 +26655,13 @@ msgstr ""
|
||||
"Ce fournisseur SSO ne peut pas être supprimé car il a déjà été utilisé."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
|
||||
#, fuzzy
|
||||
#| msgid "Delete SSO provider:"
|
||||
msgid "External SSO provider:"
|
||||
msgstr "Supprimer le fournisseur SSO :"
|
||||
msgstr "Fournisseur SSO externe :"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
|
||||
#, fuzzy
|
||||
#| msgid "Create a new SSO provider"
|
||||
msgid "Connect to an external SSO provider"
|
||||
msgstr "Créer un nouveau fournisseur SSO"
|
||||
msgstr "Se connecter à un fournisseur SSO externe"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
|
||||
@@ -26678,6 +26670,8 @@ msgid ""
|
||||
"For more information, refer to our documentation on <a href=\"%(url)s\" "
|
||||
"target=\"_blank\">Using pretix as an SSO client</a>."
|
||||
msgstr ""
|
||||
"Pour plus d'informations, consultez notre documentation sur <a href=\"%(url)"
|
||||
"s\" target=\"_blank\">L'utilisation de pretix en tant que client SSO</a>."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoprovider_edit.html
|
||||
msgctxt "sso"
|
||||
@@ -26690,6 +26684,9 @@ msgid ""
|
||||
" \tConnect to an external login provider\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" \tSe connecter à un fournisseur d'authentification externe\n"
|
||||
" "
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/ssoproviders.html
|
||||
msgid ""
|
||||
@@ -30269,15 +30266,10 @@ msgid "The provider has been created."
|
||||
msgstr "Le fournisseur a été créé."
|
||||
|
||||
#: pretix/control/views/organizer.py
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Your changes have been saved. Please note down the following client "
|
||||
#| "secret, it will never be shown again: {secret}"
|
||||
msgid ""
|
||||
"Please note down the following client secret, it will never be shown again."
|
||||
msgstr ""
|
||||
"Vos modifications ont été enregistrées. Veuillez noter la clé secrète client "
|
||||
"suivante, elle ne sera plus jamais affichée : {secret}"
|
||||
"Veuillez noter le secret client suivant ; il ne s'affichera plus jamais."
|
||||
|
||||
#: pretix/control/views/organizer.py
|
||||
msgid ""
|
||||
@@ -32862,6 +32854,12 @@ msgid ""
|
||||
"one of those get linked to their own separate order page restricted to only "
|
||||
"that product."
|
||||
msgstr ""
|
||||
"Il se peut que plusieurs e-mails soient envoyés à la même adresse e-mail si "
|
||||
"une commande comprend plusieurs produits destinés à des participants, "
|
||||
"lorsque vous limitez l'accès aux produits tout en restreignant les e-mails "
|
||||
"aux seuls participants. Ce comportement est normal, car chacun de ces "
|
||||
"produits est associé à sa propre page de commande, dont l'accès est limité à "
|
||||
"ce produit uniquement."
|
||||
|
||||
#: pretix/plugins/sendmail/forms.py
|
||||
msgid "Filter check-in status"
|
||||
@@ -33777,7 +33775,7 @@ msgstr "MobilePay"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py
|
||||
msgid "Wero"
|
||||
msgstr ""
|
||||
msgstr "Wero"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py
|
||||
msgid "Destination"
|
||||
|
||||
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
|
||||
"PO-Revision-Date: 2026-04-21 11:05+0000\n"
|
||||
"Last-Translator: Sandra Rial Pérez <sandrarial@gestiontickets.online>\n"
|
||||
"PO-Revision-Date: 2026-11-02 11:32+0000\n"
|
||||
"Last-Translator: Isaac Raño <isaac@ovixia.com>\n"
|
||||
"Language-Team: Galician <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"gl/>\n"
|
||||
"Language: gl\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.17\n"
|
||||
"X-Generator: Weblate 2026.10.1\n"
|
||||
|
||||
#: pretix/_base_settings.py
|
||||
msgid "English"
|
||||
@@ -93,7 +93,7 @@ msgstr "Hebreo"
|
||||
|
||||
#: pretix/_base_settings.py
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
msgstr "Húngaro"
|
||||
|
||||
#: pretix/_base_settings.py
|
||||
msgid "Indonesian"
|
||||
@@ -153,7 +153,7 @@ msgstr "Español (América Latina)"
|
||||
|
||||
#: pretix/_base_settings.py
|
||||
msgid "Thai"
|
||||
msgstr ""
|
||||
msgstr "Tailandés"
|
||||
|
||||
#: pretix/_base_settings.py
|
||||
msgid "Turkish"
|
||||
@@ -409,7 +409,7 @@ msgstr ""
|
||||
#: pretix/api/serializers/organizer.py pretix/control/views/organizer.py
|
||||
#, python-format
|
||||
msgid "You've been invited to join %(organizer)s"
|
||||
msgstr ""
|
||||
msgstr "Convidáronte a unirte a %(organizer)s"
|
||||
|
||||
#: pretix/api/serializers/organizer.py pretix/control/views/organizer.py
|
||||
msgid "This user already has been invited for this team."
|
||||
@@ -429,9 +429,8 @@ msgid "Medium connected to other event"
|
||||
msgstr "O medio conectou a outro acontecemento"
|
||||
|
||||
#: pretix/api/views/checkin.py
|
||||
#, fuzzy
|
||||
msgid "You cannot exchange a medium for a medium."
|
||||
msgstr "No puede cancelar este pedido."
|
||||
msgstr "Non se pode trocar un medio por outro."
|
||||
|
||||
#: pretix/api/views/checkin.py
|
||||
#, fuzzy
|
||||
|
||||
@@ -7,16 +7,16 @@ msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
|
||||
"PO-Revision-Date: 2026-10-19 02:00+0000\n"
|
||||
"PO-Revision-Date: 2026-11-03 08:12+0000\n"
|
||||
"Last-Translator: Christiaan de Die le Clercq <contact@techwolf12.nl>\n"
|
||||
"Language-Team: Dutch <https://translate.pretix.eu/projects/pretix/pretix/nl/"
|
||||
">\n"
|
||||
"Language-Team: Dutch <https://translate.pretix.eu/projects/pretix/pretix/nl/>"
|
||||
"\n"
|
||||
"Language: nl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 2026.10.1\n"
|
||||
"X-Generator: Weblate 2026.11\n"
|
||||
|
||||
#: pretix/_base_settings.py
|
||||
msgid "English"
|
||||
@@ -8379,12 +8379,12 @@ msgstr "Niet ingesteld"
|
||||
#: pretix/base/reldate.py
|
||||
#, python-brace-format
|
||||
msgid "A relative date cannot be expressed as \"before\" for \"{}\""
|
||||
msgstr ""
|
||||
msgstr "Een relatieve datum kan niet worden uitgedrukt als \"voor\" voor \"{}\""
|
||||
|
||||
#: pretix/base/reldate.py
|
||||
#, python-brace-format
|
||||
msgid "A relative date cannot be expressed as \"after\" for \"{}\""
|
||||
msgstr ""
|
||||
msgstr "Een relatieve datum kan niet worden uitgedrukt als \"na\" voor \"{}\""
|
||||
|
||||
#: pretix/base/reldate.py
|
||||
#, python-brace-format
|
||||
@@ -8415,7 +8415,7 @@ msgstr "Evenement geannuleerd"
|
||||
|
||||
#: pretix/base/services/cancelevent.py
|
||||
msgid "Confirm event cancellation and bulk refund"
|
||||
msgstr ""
|
||||
msgstr "Evenementannulering en bulkterugbetaling bevestigen"
|
||||
|
||||
#: pretix/base/services/cart.py pretix/base/services/modelimport.py
|
||||
#: pretix/base/services/orders.py
|
||||
@@ -9355,6 +9355,7 @@ msgstr "Een voucher kan niet worden aangemaakt zonder code."
|
||||
msgid ""
|
||||
"Voucher codes must be unique. Code \"{code}\" already exists in this import."
|
||||
msgstr ""
|
||||
"Vouchercodes moeten uniek zijn. Code \"{code}\" bestaat al in deze import."
|
||||
|
||||
#: pretix/base/services/modelimport.py
|
||||
#, python-brace-format
|
||||
@@ -9363,13 +9364,18 @@ msgid ""
|
||||
msgid_plural ""
|
||||
"Voucher codes must be unique. Import contains existing voucher codes {code}."
|
||||
msgstr[0] ""
|
||||
"Vouchercodes moeten uniek zijn. Import bevat al bestaande vouchercode {code}."
|
||||
msgstr[1] ""
|
||||
"Vouchercodes moeten uniek zijn. Import bevat al bestaande vouchercodes {code}"
|
||||
"."
|
||||
|
||||
#: pretix/base/services/modelimport.py
|
||||
msgid ""
|
||||
"Vouchers could not be imported, probably due to a voucher code already being "
|
||||
"in use."
|
||||
msgstr ""
|
||||
"Vouchers konden niet worden geïmporteerd, waarschijnlijk omdat een "
|
||||
"vouchercode al in gebruik is."
|
||||
|
||||
#: pretix/base/services/orders.py
|
||||
msgid ""
|
||||
@@ -10431,7 +10437,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py
|
||||
msgid "No dates match your criteria."
|
||||
msgstr ""
|
||||
msgstr "Geen data voldoen aan je zoekcriteria."
|
||||
|
||||
#: pretix/base/settings.py
|
||||
msgctxt "subevents"
|
||||
@@ -10632,6 +10638,10 @@ msgid ""
|
||||
"their order without selecting a payment method. This is useful whenever "
|
||||
"orders are not created by the same person who is making the payment."
|
||||
msgstr ""
|
||||
"Als uitgestelde betaling is toegestaan op een verkoopkanaal, kunnen klanten "
|
||||
"hun bestelling afronden zonder een betaalmethode te kiezen. Dit is handig "
|
||||
"wanneer bestellingen niet worden geplaatst door dezelfde persoon als degene "
|
||||
"die de betaling uitvoert."
|
||||
|
||||
#: pretix/base/settings.py
|
||||
msgid "Show start date"
|
||||
@@ -11603,6 +11613,10 @@ msgid ""
|
||||
"the email address above. Please note that you still need to add a contact "
|
||||
"email address that will be shared with all emails you send."
|
||||
msgstr ""
|
||||
"Als je dit instelt, verwijst de contactlink in de voettekst hiernaartoe in "
|
||||
"plaats van naar het bovenstaande e-mailadres. Let op dat je nog steeds een "
|
||||
"contact-e-mailadres moet toevoegen dat wordt meegestuurd met alle e-mails "
|
||||
"die je verzendt."
|
||||
|
||||
#: pretix/base/settings.py pretix/control/forms/event.py
|
||||
msgid "Imprint URL"
|
||||
@@ -13494,6 +13508,8 @@ msgid ""
|
||||
"Don't share this code with anyone. The %(instance)s team will never ask you "
|
||||
"for it."
|
||||
msgstr ""
|
||||
"Deel deze code met niemand. Het %(instance)s-team zal je hier nooit om "
|
||||
"vragen."
|
||||
|
||||
#: pretix/base/templates/pretixbase/email/cancel_confirm.txt
|
||||
#: pretix/base/templates/pretixbase/email/export_failed.txt
|
||||
@@ -13502,6 +13518,8 @@ msgid ""
|
||||
"Thanks, \n"
|
||||
"The %(instance)s Team"
|
||||
msgstr ""
|
||||
"Bedankt, \n"
|
||||
"Het %(instance)s-team"
|
||||
|
||||
#: pretix/base/templates/pretixbase/email/email_footer.html
|
||||
#, python-format
|
||||
@@ -13698,11 +13716,14 @@ msgstr "Ga verder in een nieuw tabblad"
|
||||
#: pretix/base/templates/pretixbase/framebreak.html
|
||||
msgid "For security reasons, the following step is only possible in a new tab."
|
||||
msgstr ""
|
||||
"Om veiligheidsredenen is de volgende stap alleen mogelijk in een nieuw "
|
||||
"tabblad."
|
||||
|
||||
#: pretix/base/templates/pretixbase/framebreak.html
|
||||
msgid ""
|
||||
"If the new tab did not open automatically, please click the following button:"
|
||||
msgstr ""
|
||||
"Als het nieuwe tabblad niet automatisch opent, klik dan op de volgende knop:"
|
||||
|
||||
#: pretix/base/templates/pretixbase/framebreak.html
|
||||
#: pretix/presale/templates/pretixpresale/event/cookies.html
|
||||
@@ -37134,6 +37155,10 @@ msgid ""
|
||||
"before retrying can help. As a last step, try using a different browser or "
|
||||
"another device (for example, a desktop or laptop computer)."
|
||||
msgstr ""
|
||||
"Als het probleem zich blijft voordoen, kan het helpen om alle "
|
||||
"browservensters te sluiten en cookies te verwijderen voordat je het opnieuw "
|
||||
"probeert. Als laatste stap kun je proberen een andere browser of een ander "
|
||||
"apparaat (bijvoorbeeld een desktop of laptop) te gebruiken."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_membership.html
|
||||
msgid "Your membership"
|
||||
|
||||
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-10-28 10:48+0000\n"
|
||||
"PO-Revision-Date: 2026-09-02 08:35+0000\n"
|
||||
"Last-Translator: Renne Rocha <renne@rocha.dev.br>\n"
|
||||
"PO-Revision-Date: 2026-10-30 03:00+0000\n"
|
||||
"Last-Translator: vihumelo <victordimelo@gmail.com>\n"
|
||||
"Language-Team: Portuguese (Brazil) <https://translate.pretix.eu/projects/"
|
||||
"pretix/pretix/pt_BR/>\n"
|
||||
"Language: pt_BR\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 2026.8.1\n"
|
||||
"X-Generator: Weblate 2026.10.1\n"
|
||||
|
||||
#: pretix/_base_settings.py
|
||||
msgid "English"
|
||||
@@ -411,7 +411,7 @@ msgstr ""
|
||||
#: pretix/api/serializers/organizer.py pretix/control/views/organizer.py
|
||||
#, python-format
|
||||
msgid "You've been invited to join %(organizer)s"
|
||||
msgstr ""
|
||||
msgstr "Você recebeu um convite para integrar %(organizer)s"
|
||||
|
||||
#: pretix/api/serializers/organizer.py pretix/control/views/organizer.py
|
||||
msgid "This user already has been invited for this team."
|
||||
@@ -607,6 +607,9 @@ msgid ""
|
||||
"This includes related events like creation, deletion, opening or closing of "
|
||||
"quotas. No webhook is sent for changes to the resulting availability."
|
||||
msgstr ""
|
||||
"Isso inclui eventos relacionados, como a criação, exclusão, abertura ou "
|
||||
"fechamento de cotas. Nenhum webhook é enviado em decorrência de alterações "
|
||||
"na disponibilidade."
|
||||
|
||||
#: pretix/api/webhooks.py
|
||||
msgid "Shop taken live"
|
||||
@@ -1678,7 +1681,7 @@ msgstr "Endereço"
|
||||
#: pretix/base/settings.py pretix/control/forms/filter.py
|
||||
#: pretix/plugins/checkinlists/exporters.py pretix/plugins/reports/exporters.py
|
||||
msgid "ZIP code"
|
||||
msgstr "Código Postal"
|
||||
msgstr "CEP"
|
||||
|
||||
#: pretix/base/exporters/invoices.py pretix/base/exporters/orderlist.py
|
||||
#: pretix/base/forms/questions.py pretix/base/modelimport_orders.py
|
||||
@@ -3622,6 +3625,9 @@ msgid ""
|
||||
"The Peppol participant ID prefix %(number)s is not known to our system. "
|
||||
"Please reach out to us if you are sure this ID is correct."
|
||||
msgstr ""
|
||||
"Nosso sistema não reconhece o prefixo %(number)s do identificador de "
|
||||
"participante da Peppol. Se você tem certeza de que esse identificador está "
|
||||
"correto, entre em contato conosco."
|
||||
|
||||
#: pretix/base/invoicing/peppol.py
|
||||
#, python-format
|
||||
@@ -5600,6 +5606,9 @@ msgid ""
|
||||
"prior to their usage. Therefore, the selected media policy does not make "
|
||||
"sense for this media type."
|
||||
msgstr ""
|
||||
"O tipo de mídia selecionado exige que todas as mídias sejam cadastradas no "
|
||||
"sistema antes de serem utilizadas. Portanto, a política de mídia selecionada "
|
||||
"não é adequada para esse tipo de mídia."
|
||||
|
||||
#: pretix/base/models/items.py
|
||||
msgid ""
|
||||
@@ -5821,7 +5830,7 @@ msgstr "Código do país (ISO 3166-1 alfa-2)"
|
||||
|
||||
#: pretix/base/models/items.py
|
||||
msgid "Asked on"
|
||||
msgstr ""
|
||||
msgstr "Pergunta feita em"
|
||||
|
||||
#: pretix/base/models/items.py pretix/base/models/organizer.py
|
||||
msgid ""
|
||||
@@ -6171,12 +6180,12 @@ msgstr "retornou"
|
||||
#: pretix/base/models/media.py
|
||||
msgctxt "reusable_medium"
|
||||
msgid "Claim token"
|
||||
msgstr ""
|
||||
msgstr "Token de vinculação"
|
||||
|
||||
#: pretix/base/models/media.py
|
||||
msgctxt "reusable_medium"
|
||||
msgid "Label"
|
||||
msgstr ""
|
||||
msgstr "Rótulo"
|
||||
|
||||
#: pretix/base/models/media.py
|
||||
#, fuzzy
|
||||
@@ -6190,6 +6199,9 @@ msgid ""
|
||||
"validity. If multiple tickets are valid at once, this will lead to failed "
|
||||
"check-ins."
|
||||
msgstr ""
|
||||
"Se você vincular mais de um ingresso, certifique-se de que os períodos de "
|
||||
"validade não se sobreponham. Se vários ingressos estiverem válidos ao mesmo "
|
||||
"tempo, poderão ocorrer falhas no check-in."
|
||||
|
||||
#: pretix/base/models/memberships.py
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html
|
||||
@@ -8119,6 +8131,8 @@ msgstr "Apenas API"
|
||||
msgid ""
|
||||
"Menu item will only show up if the user has permission for general settings."
|
||||
msgstr ""
|
||||
"Esta opção só será exibida no menu se o usuário tiver permissão para acessar "
|
||||
"as configurações gerais."
|
||||
|
||||
#: pretix/base/permissions.py
|
||||
msgctxt "permission_level"
|
||||
@@ -8136,6 +8150,8 @@ msgid ""
|
||||
"This includes access to all settings not listed explicitly below, including "
|
||||
"plugin settings."
|
||||
msgstr ""
|
||||
"Isso inclui o acesso a todas as configurações que não estão explicitamente "
|
||||
"listadas abaixo, incluindo as configurações dos plugins."
|
||||
|
||||
#: pretix/base/permissions.py
|
||||
#: pretix/control/templates/pretixcontrol/event/payment.html
|
||||
@@ -8165,7 +8181,7 @@ msgstr "Produtos, cotas e perguntas"
|
||||
|
||||
#: pretix/base/permissions.py
|
||||
msgid "Also includes related objects like categories or discounts."
|
||||
msgstr ""
|
||||
msgstr "Também inclui elementos relacionados, como categorias ou descontos."
|
||||
|
||||
#: pretix/base/permissions.py
|
||||
msgctxt "permission_level"
|
||||
@@ -8219,12 +8235,14 @@ msgstr "Acessar eventos existentes"
|
||||
#: pretix/base/permissions.py
|
||||
msgctxt "permission_level"
|
||||
msgid "Access existing and create new events"
|
||||
msgstr ""
|
||||
msgstr "Acessar eventos existentes e criar novos eventos"
|
||||
|
||||
#: pretix/base/permissions.py
|
||||
msgid ""
|
||||
"The level of access to events is determined in detail by the settings below."
|
||||
msgstr ""
|
||||
"O nível de acesso aos eventos é definido detalhadamente pelas configurações "
|
||||
"abaixo."
|
||||
|
||||
#: pretix/base/permissions.py pretix/control/navigation.py
|
||||
#: pretix/control/templates/pretixcontrol/event/invoicing.html
|
||||
@@ -8241,12 +8259,17 @@ msgid ""
|
||||
"This includes access to all organizer-level functionality not listed "
|
||||
"explicitly below, including plugin settings."
|
||||
msgstr ""
|
||||
"Isso inclui o acesso a todas as funcionalidades disponíveis no nível do "
|
||||
"organizador que não estejam explicitamente listadas abaixo, incluindo as "
|
||||
"configurações dos plugins."
|
||||
|
||||
#: pretix/base/permissions.py
|
||||
msgid ""
|
||||
"Includes the ability to give someone (including oneself) additional "
|
||||
"permissions."
|
||||
msgstr ""
|
||||
"Inclui a possibilidade de conceder permissões adicionais a alguém (inclusive "
|
||||
"a si mesmo)."
|
||||
|
||||
#: pretix/base/permissions.py pretix/control/navigation.py
|
||||
msgid "Devices"
|
||||
@@ -8257,6 +8280,8 @@ msgid ""
|
||||
"Includes the ability to give access to events and data oneself does not have "
|
||||
"access to."
|
||||
msgstr ""
|
||||
"Inclui a possibilidade de conceder acesso a eventos e dados aos quais você "
|
||||
"mesmo não tem acesso."
|
||||
|
||||
#: pretix/base/permissions.py
|
||||
#, fuzzy
|
||||
@@ -8349,22 +8374,22 @@ msgstr "Não definido"
|
||||
#: pretix/base/reldate.py
|
||||
#, python-brace-format
|
||||
msgid "A relative date cannot be expressed as \"before\" for \"{}\""
|
||||
msgstr ""
|
||||
msgstr "Uma data relativa não pode ser expressa como \"antes de\" para \"{}\""
|
||||
|
||||
#: pretix/base/reldate.py
|
||||
#, python-brace-format
|
||||
msgid "A relative date cannot be expressed as \"after\" for \"{}\""
|
||||
msgstr ""
|
||||
msgstr "Uma data relativa não pode ser expressa como \"depois de\" para \"{}\""
|
||||
|
||||
#: pretix/base/reldate.py
|
||||
#, python-brace-format
|
||||
msgid "A relative time cannot be expressed as \"before\" for \"{}\""
|
||||
msgstr ""
|
||||
msgstr "Um tempo relativo não pode ser expresso como \"antes de\" para \"{}\""
|
||||
|
||||
#: pretix/base/reldate.py
|
||||
#, python-brace-format
|
||||
msgid "A relative time cannot be expressed as \"after\" for \"{}\""
|
||||
msgstr ""
|
||||
msgstr "Um tempo relativo não pode ser expresso como \"depois de\" para \"{}\""
|
||||
|
||||
#: pretix/base/secrets.py
|
||||
msgid "Random (default, works with all pretix apps)"
|
||||
@@ -8385,7 +8410,7 @@ msgstr "Evento cancelado"
|
||||
|
||||
#: pretix/base/services/cancelevent.py
|
||||
msgid "Confirm event cancellation and bulk refund"
|
||||
msgstr ""
|
||||
msgstr "Confirmar o cancelamento do evento e o reembolso em massa"
|
||||
|
||||
#: pretix/base/services/cart.py pretix/base/services/modelimport.py
|
||||
#: pretix/base/services/orders.py
|
||||
@@ -8933,13 +8958,15 @@ msgstr "Você precisa responder a perguntas para concluir este check-in."
|
||||
|
||||
#: pretix/base/services/checkin.py
|
||||
msgid "Ticket needs to be exchanged to a suitable medium."
|
||||
msgstr ""
|
||||
msgstr "O ingresso precisa ser trocado por um meio adequado."
|
||||
|
||||
#: pretix/base/services/checkin.py
|
||||
msgid ""
|
||||
"This ticket has already been exchanged for a reusable medium that now needs "
|
||||
"to be used instead."
|
||||
msgstr ""
|
||||
"Este ingresso já foi trocado por uma mídia reutilizável, que agora deve ser "
|
||||
"utilizado em seu lugar."
|
||||
|
||||
#: pretix/base/services/checkin.py
|
||||
msgid "This ticket has already been redeemed."
|
||||
@@ -9105,62 +9132,44 @@ msgid "You are receiving this email because you placed an order for {event}."
|
||||
msgstr "Você está recebendo este email porque fez um pedido para {event}."
|
||||
|
||||
#: pretix/base/services/media.py
|
||||
#, fuzzy
|
||||
#| msgid "Invalid input type."
|
||||
msgid "Invalid medium type."
|
||||
msgstr "Tipo de entrada inválido."
|
||||
msgstr "Tipo de mídia inválido."
|
||||
|
||||
#: pretix/base/services/media.py
|
||||
#, fuzzy
|
||||
#| msgid "The selected media type is not enabled in your organizer settings."
|
||||
msgid "Medium type is not enabled for organizer."
|
||||
msgstr ""
|
||||
"O tipo de mídia selecionado não está habilitado nas configurações do "
|
||||
"organizador."
|
||||
msgstr "O tipo de mídia não está habilitado para o organizador."
|
||||
|
||||
#: pretix/base/services/media.py
|
||||
msgid "Incorrect medium type for product."
|
||||
msgstr ""
|
||||
msgstr "Tipo de mídia incorreto para o produto."
|
||||
|
||||
#: pretix/base/services/media.py
|
||||
#, fuzzy
|
||||
#| msgid "This ticket has already been redeemed."
|
||||
msgid "Ticket is already exchanged for reusable medium."
|
||||
msgstr "Este ingresso já foi resgatado."
|
||||
msgstr "Este ingresso já foi trocado por uma mídia reutilizável."
|
||||
|
||||
#: pretix/base/services/media.py
|
||||
#, fuzzy
|
||||
#| msgid "Reusable Medium ID"
|
||||
msgid "Reusable medium not found."
|
||||
msgstr "ID de mídia reutilizável"
|
||||
msgstr "Mídia reutilizável não encontrada."
|
||||
|
||||
#: pretix/base/services/media.py
|
||||
#, fuzzy
|
||||
#| msgid "The reusable medium has been created."
|
||||
msgid "Reusable medium is inactive or expired."
|
||||
msgstr "A mídia reutilizável foi criada."
|
||||
msgstr "A mídia reutilizável está inativa ou expirada."
|
||||
|
||||
#: pretix/base/services/media.py
|
||||
#, fuzzy
|
||||
#| msgid "The reusable medium has been created."
|
||||
msgid "Reusable medium not found and could not be created."
|
||||
msgstr "A mídia reutilizável foi criada."
|
||||
msgstr "A mídia reutilizável não foi encontrada e não pôde ser criada."
|
||||
|
||||
#: pretix/base/services/media.py
|
||||
#, fuzzy
|
||||
#| msgid "Reusable media type"
|
||||
msgid "Reusable medium already exists."
|
||||
msgstr "Tipo de mídia reutilizável"
|
||||
msgstr "A mídia reutilizável já existe."
|
||||
|
||||
#: pretix/base/services/media.py
|
||||
#, fuzzy
|
||||
#| msgid "The reusable medium has been created."
|
||||
msgid "Reusable medium could not be created."
|
||||
msgstr "A mídia reutilizável foi criada."
|
||||
msgstr "Não foi possível criar a mídia reutilizável."
|
||||
|
||||
#: pretix/base/services/media.py
|
||||
msgid "Product does not support medium exchange."
|
||||
msgstr ""
|
||||
msgstr "O produto não permite a troca por mídia."
|
||||
|
||||
#: pretix/base/services/memberships.py
|
||||
#, python-brace-format
|
||||
@@ -9325,6 +9334,8 @@ msgstr "Um cupom não pode ser criado sem um código."
|
||||
msgid ""
|
||||
"Voucher codes must be unique. Code \"{code}\" already exists in this import."
|
||||
msgstr ""
|
||||
"Os códigos dos cupons devem ser únicos. O código \"{code}\" já existe nesta "
|
||||
"importação."
|
||||
|
||||
#: pretix/base/services/modelimport.py
|
||||
#, python-brace-format
|
||||
@@ -9333,13 +9344,19 @@ msgid ""
|
||||
msgid_plural ""
|
||||
"Voucher codes must be unique. Import contains existing voucher codes {code}."
|
||||
msgstr[0] ""
|
||||
"Os códigos dos cupons devem ser únicos. A importação contém um código de "
|
||||
"cupom já existente: {code}."
|
||||
msgstr[1] ""
|
||||
"Os códigos dos cupons devem ser únicos. A importação contém códigos de "
|
||||
"cupons já existentes: {code}."
|
||||
|
||||
#: pretix/base/services/modelimport.py
|
||||
msgid ""
|
||||
"Vouchers could not be imported, probably due to a voucher code already being "
|
||||
"in use."
|
||||
msgstr ""
|
||||
"Não foi possível importar os cupons, provavelmente porque um dos códigos já "
|
||||
"está em uso."
|
||||
|
||||
#: pretix/base/services/orders.py
|
||||
msgid ""
|
||||
@@ -9917,7 +9934,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py
|
||||
msgid "Enforce the usage of issued reusable media for check-in"
|
||||
msgstr ""
|
||||
msgstr "Exigir o uso de mídias reutilizáveis emitidas para realizar o check-in"
|
||||
|
||||
#: pretix/base/settings.py
|
||||
msgid ""
|
||||
@@ -9925,6 +9942,10 @@ msgid ""
|
||||
"medium has been created and linked to a ticket. Keeping this option turned "
|
||||
"off will treat the reusable medium and ticket as equals."
|
||||
msgstr ""
|
||||
"Se esta opção estiver ativada, o código de barras do ingresso não será mais "
|
||||
"aceito caso uma mídia reutilizável tenha sido criada e vinculada a ele. Se a "
|
||||
"opção permanecer desativada, a mídia reutilizável e o ingresso serão "
|
||||
"considerados equivalentes."
|
||||
|
||||
#: pretix/base/settings.py
|
||||
msgid "Length of barcodes"
|
||||
@@ -10392,12 +10413,12 @@ msgstr ""
|
||||
|
||||
#: pretix/base/settings.py
|
||||
msgid "No dates match your criteria."
|
||||
msgstr ""
|
||||
msgstr "Nenhuma data corresponde aos seus critérios."
|
||||
|
||||
#: pretix/base/settings.py
|
||||
msgctxt "subevents"
|
||||
msgid "Text for empty date results"
|
||||
msgstr ""
|
||||
msgstr "Texto exibido quando a data não retorna resultados"
|
||||
|
||||
#: pretix/base/settings.py
|
||||
msgctxt "subevents"
|
||||
@@ -10408,6 +10429,11 @@ msgid ""
|
||||
"touch with you to arrange further dates. We do not recommend more than one "
|
||||
"or two sentences."
|
||||
msgstr ""
|
||||
"Este texto será exibido quando o calendário ou a lista de datas estiver "
|
||||
"vazio, por exemplo, quando não houver datas disponíveis em determinado mês "
|
||||
"ou quando um filtro selecionado pelo usuário não retornar resultados. Você "
|
||||
"pode usar esse espaço para informar como entrar em contato com você para "
|
||||
"combinar novas datas. Recomendamos usar apenas uma ou duas frases."
|
||||
|
||||
#: pretix/base/settings.py
|
||||
msgid "Guidance text"
|
||||
@@ -10593,6 +10619,9 @@ msgid ""
|
||||
"their order without selecting a payment method. This is useful whenever "
|
||||
"orders are not created by the same person who is making the payment."
|
||||
msgstr ""
|
||||
"Se o pagamento posterior for permitido em um canal de vendas, os clientes "
|
||||
"poderão concluir seus pedidos sem selecionar uma forma de pagamento. Isso é "
|
||||
"útil quando a pessoa que faz o pedido não é a mesma que realiza o pagamento."
|
||||
|
||||
#: pretix/base/settings.py
|
||||
msgid "Show start date"
|
||||
@@ -11561,6 +11590,10 @@ msgid ""
|
||||
"the email address above. Please note that you still need to add a contact "
|
||||
"email address that will be shared with all emails you send."
|
||||
msgstr ""
|
||||
"Se você configurar esta opção, o link de contato no rodapé direcionará para "
|
||||
"o endereço informado aqui, em vez de utilizar o endereço de e-mail acima. "
|
||||
"Observe que ainda será necessário informar um endereço de e-mail de contato, "
|
||||
"que será incluído em todos os e-mails enviados."
|
||||
|
||||
#: pretix/base/settings.py pretix/control/forms/event.py
|
||||
msgid "Imprint URL"
|
||||
@@ -13156,7 +13189,7 @@ msgstr ""
|
||||
#: pretix/base/settings.py
|
||||
#, python-brace-format
|
||||
msgid "VAT-ID is not supported for \"{}\"."
|
||||
msgstr ""
|
||||
msgstr "O VAT-ID não é compatível para \"{}\"."
|
||||
|
||||
#: pretix/base/settings.py
|
||||
msgid "The last payment date cannot be before the end of presale."
|
||||
@@ -13451,6 +13484,8 @@ msgid ""
|
||||
"Don't share this code with anyone. The %(instance)s team will never ask you "
|
||||
"for it."
|
||||
msgstr ""
|
||||
"Não compartilhe este código com ninguém. A equipe do %(instance)s nunca "
|
||||
"solicitará esse código."
|
||||
|
||||
#: pretix/base/templates/pretixbase/email/cancel_confirm.txt
|
||||
#: pretix/base/templates/pretixbase/email/export_failed.txt
|
||||
@@ -13459,6 +13494,8 @@ msgid ""
|
||||
"Thanks, \n"
|
||||
"The %(instance)s Team"
|
||||
msgstr ""
|
||||
"Obrigado,\n"
|
||||
"Time %(instance)s"
|
||||
|
||||
#: pretix/base/templates/pretixbase/email/email_footer.html
|
||||
#, python-format
|
||||
@@ -14021,6 +14058,8 @@ msgid ""
|
||||
"You entered an URL, which is not allowed. Please remove %(match)s from your "
|
||||
"input."
|
||||
msgstr ""
|
||||
"Você inseriu uma URL, o que não é permitido. Remova %(match)s do texto "
|
||||
"informado."
|
||||
|
||||
#: pretix/base/views/errors.py
|
||||
msgid ""
|
||||
@@ -14281,6 +14320,8 @@ msgid ""
|
||||
"You cannot choose a team that would give you more access than you have on "
|
||||
"the event you are copying."
|
||||
msgstr ""
|
||||
"Você não pode escolher um time que lhe conceda um nível de acesso superior "
|
||||
"ao que você possui no evento que está copiando."
|
||||
|
||||
#: pretix/control/forms/event.py
|
||||
msgid "Copy configuration from"
|
||||
@@ -14295,6 +14336,8 @@ msgid ""
|
||||
"You cannot choose an event on which you have less access than the team you "
|
||||
"selected in the previous step."
|
||||
msgstr ""
|
||||
"Você não pode escolher um evento no qual tenha um nível de acesso inferior "
|
||||
"ao do time selecionado na etapa anterior."
|
||||
|
||||
#: pretix/control/forms/event.py pretix/control/forms/item.py
|
||||
#: pretix/control/forms/subevents.py
|
||||
@@ -14397,7 +14440,7 @@ msgstr "Data de pagamento"
|
||||
|
||||
#: pretix/control/forms/event.py
|
||||
msgid "same as above"
|
||||
msgstr ""
|
||||
msgstr "o mesmo que acima"
|
||||
|
||||
#: pretix/control/forms/event.py
|
||||
#, fuzzy
|
||||
@@ -14479,6 +14522,13 @@ msgid ""
|
||||
"configured whenever possible. Gross prices may still change if they are "
|
||||
"impossible to derive from a rounded net price."
|
||||
msgstr ""
|
||||
"Recomendado para a emissão de faturas eletrônicas quando você vende "
|
||||
"principalmente para consumidores finais. Os preços brutos ou líquidos de "
|
||||
"alguns produtos podem ser ajustados automaticamente para garantir o "
|
||||
"arredondamento correto do total do pedido. O sistema procura manter os "
|
||||
"preços brutos conforme configurados sempre que possível. No entanto, esses "
|
||||
"preços ainda podem sofrer alterações quando não for possível calculá-los a "
|
||||
"partir de um preço líquido arredondado."
|
||||
|
||||
#: pretix/control/forms/event.py
|
||||
msgid "Generate invoices for Sales channels"
|
||||
@@ -16648,7 +16698,7 @@ msgstr "Você pode definir apenas um domínio de organizador."
|
||||
|
||||
#: pretix/control/forms/organizer.py
|
||||
msgid "Provided by a plugin"
|
||||
msgstr ""
|
||||
msgstr "Fornecido por um plugin"
|
||||
|
||||
#: pretix/control/forms/organizer.py
|
||||
msgid ""
|
||||
@@ -16906,7 +16956,7 @@ msgstr "terceiro"
|
||||
#: pretix/control/forms/rrule.py
|
||||
msgctxt "rrule"
|
||||
msgid "fourth"
|
||||
msgstr ""
|
||||
msgstr "quarto"
|
||||
|
||||
#: pretix/control/forms/rrule.py
|
||||
msgctxt "rrule"
|
||||
@@ -16925,7 +16975,7 @@ msgstr "Dia do fim de semana"
|
||||
#: pretix/control/forms/subevents.py
|
||||
msgctxt "subevent"
|
||||
msgid "Skip dates that overlap with any existing date"
|
||||
msgstr ""
|
||||
msgstr "Ignorar datas que se sobreponham a qualquer data existente"
|
||||
|
||||
#: pretix/control/forms/subevents.py
|
||||
msgctxt "subevent"
|
||||
@@ -16935,6 +16985,10 @@ msgid ""
|
||||
"This respects even inactive dates and works best if all dates have both a "
|
||||
"start and end time."
|
||||
msgstr ""
|
||||
"Isso pode ser útil se todas as datas ocorrerem no mesmo local e você quiser "
|
||||
"evitar a criação de datas recorrentes que entrem em conflito com eventos "
|
||||
"especiais já existentes. Essa opção também considera as datas inativas e "
|
||||
"funciona melhor quando todas as datas têm horários de início e término."
|
||||
|
||||
#: pretix/control/forms/subevents.py
|
||||
msgid "Keep the current values"
|
||||
@@ -16984,6 +17038,9 @@ msgid ""
|
||||
"because at least one of the selected vouchers has already been redeemed "
|
||||
"%(max_redeemed)s times."
|
||||
msgstr ""
|
||||
"Você não pode reduzir o número máximo de resgates para %(max_usages)s, pois "
|
||||
"pelo menos um dos cupons selecionados já foi resgatato %(max_redeemed)s "
|
||||
"vezes."
|
||||
|
||||
#: pretix/control/forms/vouchers.py
|
||||
#, fuzzy
|
||||
@@ -17017,6 +17074,8 @@ msgid ""
|
||||
"Changing the maximum number of usages in bulk is not supported if any of the "
|
||||
"selected vouchers is assigned a seat."
|
||||
msgstr ""
|
||||
"Não é possível alterar em massa o número máximo de utilizações se algum dos "
|
||||
"cupons selecionados estiver vinculado a um assento."
|
||||
|
||||
#: pretix/control/forms/vouchers.py
|
||||
msgctxt "subevent"
|
||||
@@ -17024,18 +17083,24 @@ msgid ""
|
||||
"Changing the date in bulk is not supported if any of the selected vouchers "
|
||||
"is assigned a seat."
|
||||
msgstr ""
|
||||
"Não é possível alterar a data em massa se algum dos cupons selecionados "
|
||||
"estiver vinculado a um assento."
|
||||
|
||||
#: pretix/control/forms/vouchers.py
|
||||
msgid ""
|
||||
"Changing the product to a quota is not supported if any of the selected "
|
||||
"vouchers is assigned a seat."
|
||||
msgstr ""
|
||||
"Não é possível alterar o produto para uma cota se algum dos cupons "
|
||||
"selecionados estiver vinculado a um assento."
|
||||
|
||||
#: pretix/control/forms/vouchers.py
|
||||
msgid ""
|
||||
"This change cannot be completed because not all assigned seats of the "
|
||||
"vouchers are still available"
|
||||
msgstr ""
|
||||
"Esta alteração não pode ser concluída porque nem todos os assentos "
|
||||
"vinculados aos cupons ainda estão disponíveis"
|
||||
|
||||
#: pretix/control/forms/vouchers.py
|
||||
msgid "Codes"
|
||||
@@ -18198,6 +18263,8 @@ msgid ""
|
||||
"The ticket #{positionid} was exchanged for reusable medium "
|
||||
"{medium_identifier}."
|
||||
msgstr ""
|
||||
"O ingresso #{positionid} foi trocado pela mídia reutilizável "
|
||||
"{medium_identifier}."
|
||||
|
||||
#: pretix/control/logdisplay.py
|
||||
msgid "The medium has been connected to a new gift card."
|
||||
@@ -18255,6 +18322,8 @@ msgstr "Um código de emergência de dois fatores foi gerado."
|
||||
#: pretix/control/logdisplay.py
|
||||
msgid "Drift and throttle values for two-factor devices have been reset."
|
||||
msgstr ""
|
||||
"Os dados de sincronização e de controle de tentativas dos dispositivos de "
|
||||
"autenticação de dois fatores foram redefinidos."
|
||||
|
||||
#: pretix/control/logdisplay.py
|
||||
#, python-brace-format
|
||||
@@ -20067,6 +20136,8 @@ msgid ""
|
||||
"This ticket needs to be exchanged into a <strong>%(media_type)s</strong> "
|
||||
"reusable medium. <strong>%(media_policy)s</strong>."
|
||||
msgstr ""
|
||||
"Este ingresso precisa ser trocado por uma mídia reutilizável do tipo <strong>"
|
||||
"%(media_type)s</strong>. <strong>%(media_policy)s</strong>."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/checkin/simulator.html
|
||||
msgid "Special attention required"
|
||||
@@ -20322,6 +20393,18 @@ msgid ""
|
||||
"Thanks, \n"
|
||||
"The %(instance)s Team\n"
|
||||
msgstr ""
|
||||
"Olá,\n"
|
||||
"\n"
|
||||
"Recebemos uma solicitação para redefinir a senha da sua conta %(instance)s. "
|
||||
"Para definir uma nova senha, acesse o link abaixo:\n"
|
||||
"\n"
|
||||
"%(url)s\n"
|
||||
"\n"
|
||||
"Se você não fez essa solicitação, pode ignorar este e-mail com segurança — "
|
||||
"sua senha não será alterada.\n"
|
||||
"\n"
|
||||
"Obrigado,\n"
|
||||
"Equipe %(instance)s\n"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/email/invitation.txt
|
||||
#, fuzzy, python-format
|
||||
@@ -20385,14 +20468,17 @@ msgid ""
|
||||
"\n"
|
||||
"We noticed a new sign-in to your %(instance)s account:\n"
|
||||
msgstr ""
|
||||
"Olá,\n"
|
||||
"\n"
|
||||
"Identificamos um novo acesso à sua conta %(instance)s:\n"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/email/login_notice.txt
|
||||
msgid "Browser"
|
||||
msgstr ""
|
||||
msgstr "Navegador"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/email/login_notice.txt
|
||||
msgid "Operating system"
|
||||
msgstr ""
|
||||
msgstr "Sistema operacional"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/email/login_notice.txt
|
||||
#, python-format
|
||||
@@ -20407,6 +20493,14 @@ msgid ""
|
||||
"Thanks, \n"
|
||||
"The %(instance)s Team\n"
|
||||
msgstr ""
|
||||
"Se foi você, nenhuma ação é necessária.\n"
|
||||
"\n"
|
||||
"Se você não reconhece este acesso, altere sua senha imediatamente:\n"
|
||||
"\n"
|
||||
"%(url)s\n"
|
||||
"\n"
|
||||
"Obrigado,\n"
|
||||
"Equipe %(instance)s\n"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/email/security_notice.txt
|
||||
#, fuzzy, python-format
|
||||
@@ -22387,6 +22481,9 @@ msgid ""
|
||||
"debugging problems in your pretix installation, and verifying that your "
|
||||
"usage of pretix is in compliance with the Enterprise license you purchased."
|
||||
msgstr ""
|
||||
"Isso tem duas finalidades: coletar informações úteis que possam ajudar a "
|
||||
"diagnosticar problemas na sua instalação do pretix e verificar se o uso do "
|
||||
"pretix está em conformidade com a licença Enterprise que você adquiriu."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/global_sysreport.html
|
||||
msgid "First month of license term:"
|
||||
|
||||
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
|
||||
"PO-Revision-Date: 2026-03-25 08:00+0000\n"
|
||||
"Last-Translator: Renne Rocha <renne@rocha.dev.br>\n"
|
||||
"PO-Revision-Date: 2026-10-30 03:00+0000\n"
|
||||
"Last-Translator: vihumelo <victordimelo@gmail.com>\n"
|
||||
"Language-Team: Portuguese (Brazil) <https://translate.pretix.eu/projects/"
|
||||
"pretix/pretix-js/pt_BR/>\n"
|
||||
"Language: pt_BR\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 5.16.2\n"
|
||||
"X-Generator: Weblate 2026.10.1\n"
|
||||
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js
|
||||
msgid "Marked as paid"
|
||||
@@ -430,7 +430,7 @@ msgstr "Pressione Ctrl+C para copiar!"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
msgstr "Editar"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue
|
||||
msgid "Visualize"
|
||||
|
||||
@@ -239,7 +239,7 @@ class ActionView(View):
|
||||
})
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
u = request.GET.get('query', '')
|
||||
u = request.GET.get('query', '').strip()
|
||||
if len(u) < 2:
|
||||
return JsonResponse({'results': []})
|
||||
|
||||
|
||||
@@ -98,13 +98,25 @@ class TicketLayoutSerializer(I18nAwareModelSerializer):
|
||||
return d
|
||||
|
||||
def validate(self, attrs):
|
||||
if attrs.get('default') and self.context['event'].ticket_layouts.filter(default=True).exists:
|
||||
if attrs.get('default') and self.context['event'].ticket_layouts.filter(default=True).exists():
|
||||
raise ValidationError('You cannot have two layouts with default = True')
|
||||
return attrs
|
||||
|
||||
def create(self, validated_data):
|
||||
validated_data["event"] = self.context["event"]
|
||||
return super().create(validated_data)
|
||||
background = validated_data.pop("background", None)
|
||||
instance = super().create(validated_data)
|
||||
if background:
|
||||
instance.background.save('background.pdf', background)
|
||||
return instance
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
background = validated_data.pop("background", None)
|
||||
if background:
|
||||
if instance.background and TicketLayout.objects.filter(background=instance.background).count() == 1:
|
||||
instance.background.delete()
|
||||
instance.background.save('background.pdf', background)
|
||||
return super().update(instance, validated_data)
|
||||
|
||||
|
||||
class TicketLayoutViewSet(viewsets.ModelViewSet):
|
||||
|
||||
@@ -235,6 +235,7 @@ class LayoutGetDefault(EventPermissionRequiredMixin, View):
|
||||
|
||||
|
||||
class LayoutEditorView(BaseEditorView):
|
||||
checkin_qr_warning = True
|
||||
|
||||
@cached_property
|
||||
def layout(self):
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
# <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
import sys
|
||||
from collections import Counter
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
@@ -472,3 +473,11 @@ def _item_num_options(item):
|
||||
|
||||
def get_item_option_count(items):
|
||||
return sum(_item_num_options(item) for item in items)
|
||||
|
||||
|
||||
def get_item_var_sums(positions, subevent):
|
||||
itemvarsums = Counter()
|
||||
for pos in positions:
|
||||
if pos.subevent == subevent:
|
||||
itemvarsums[pos.variation or pos.item] += 1
|
||||
return itemvarsums
|
||||
@@ -125,10 +125,10 @@
|
||||
<div class="col-md-8 col-sm-6 col-xs-12">
|
||||
<h{{ headline_level|default:3|add:2 }} class="h5" id="{{ form_prefix }}item-{{ item.pk }}-{{ var.pk }}-legend">
|
||||
{{ var }}
|
||||
{% if cart.itemvarsums|getitem:var %}
|
||||
{% if itemvarsums|getitem:var %}
|
||||
<span class="textbubble-success">
|
||||
{% icon "shopping-cart" %}
|
||||
{% blocktrans trimmed count amount=cart.itemvarsums|getitem:var %}
|
||||
{% blocktrans trimmed count amount=itemvarsums|getitem:var %}
|
||||
{{ amount }}× in your cart
|
||||
{% plural %}
|
||||
{{ amount }}× in your cart
|
||||
@@ -299,10 +299,10 @@
|
||||
<div class="product-description {% if item.picture %}with-picture{% endif %}">
|
||||
<h{{ headline_level|default:3|add:1 }} class="h4" id="{{ form_prefix }}item-{{ item.pk }}-legend">
|
||||
{{ item.name }}
|
||||
{% if cart.itemvarsums|getitem:item %}
|
||||
{% if itemvarsums|getitem:item %}
|
||||
<span class="textbubble-success">
|
||||
{% icon "shopping-cart" %}
|
||||
{% blocktrans trimmed count amount=cart.itemvarsums|getitem:item %}
|
||||
{% blocktrans trimmed count amount=itemvarsums|getitem:item %}
|
||||
{{ amount }}× in your cart
|
||||
{% plural %}
|
||||
{{ amount }}× in your cart
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
# License for the specific language governing permissions and limitations under the License.
|
||||
import copy
|
||||
import warnings
|
||||
from collections import Counter, defaultdict
|
||||
from collections import defaultdict
|
||||
from datetime import datetime, timedelta
|
||||
from decimal import Decimal
|
||||
from functools import wraps
|
||||
@@ -266,10 +266,6 @@ class CartMixin:
|
||||
minutes_left = None
|
||||
seconds_left = None
|
||||
|
||||
itemvarsums = Counter()
|
||||
for p in cartpos:
|
||||
itemvarsums[p.variation or p.item] += 1
|
||||
|
||||
return {
|
||||
'positions': positions,
|
||||
'invoice_address': self.invoice_address,
|
||||
@@ -291,7 +287,6 @@ class CartMixin:
|
||||
not self.request.event.settings.display_net_prices and
|
||||
sum(c.price_includes_rounding_correction for c in positions) + sum(f.price_includes_rounding_correction for f in fees)
|
||||
),
|
||||
'itemvarsums': itemvarsums,
|
||||
'current_selected_payments': [
|
||||
p for p in self.current_selected_payments(lcp, fees, self.invoice_address)
|
||||
if p.get('multi_use_supported')
|
||||
|
||||
@@ -70,7 +70,8 @@ from pretix.helpers.http import redirect_to_url
|
||||
from pretix.helpers.safedownload import check_token
|
||||
from pretix.multidomain.urlreverse import eventreverse
|
||||
from pretix.presale.productlist import (
|
||||
get_item_option_count, item_group_by_category, prepare_item_list_for_shop,
|
||||
get_item_option_count, get_item_var_sums, item_group_by_category,
|
||||
prepare_item_list_for_shop,
|
||||
)
|
||||
from pretix.presale.views import (
|
||||
CartMixin, EventViewMixin, allow_cors_if_namespaced,
|
||||
@@ -701,6 +702,7 @@ class RedeemView(NoSearchIndexViewMixin, EventViewMixin, CartMixin, TemplateView
|
||||
)
|
||||
|
||||
context['cart'] = self.get_cart()
|
||||
context['itemvarsums'] = get_item_var_sums(context['cart'].get('raw', []), self.subevent)
|
||||
context['show_cart'] = context['cart']['positions']
|
||||
|
||||
# Regroup those by category
|
||||
|
||||
@@ -156,7 +156,7 @@ class LoginView(RedirectBackMixin, FormView):
|
||||
"""Security check complete. Log the user in."""
|
||||
customer = form.get_customer()
|
||||
customer_login(self.request, customer)
|
||||
customer_signed_in.send(customer.organizer, customer=customer)
|
||||
customer_signed_in.send(customer.organizer, customer=customer, profile=None)
|
||||
return HttpResponseRedirect(self.get_success_url())
|
||||
|
||||
|
||||
@@ -901,7 +901,7 @@ class SSOLoginReturnView(RedirectBackMixin, View):
|
||||
popup_origin
|
||||
)
|
||||
|
||||
customer_signed_in.send(customer.organizer, customer=customer)
|
||||
customer_signed_in.send(customer.organizer, customer=customer, profile=profile)
|
||||
|
||||
if popup_origin:
|
||||
return render(self.request, 'pretixpresale/postmessage.html', {
|
||||
|
||||
@@ -72,7 +72,8 @@ from pretix.helpers.http import redirect_to_url
|
||||
from pretix.multidomain.urlreverse import eventreverse
|
||||
from pretix.presale.ical import get_public_ical
|
||||
from pretix.presale.productlist import (
|
||||
get_item_option_count, item_group_by_category, prepare_item_list_for_shop,
|
||||
get_item_option_count, get_item_var_sums, item_group_by_category,
|
||||
prepare_item_list_for_shop,
|
||||
)
|
||||
from pretix.presale.signals import seatingframe_html_head
|
||||
from pretix.presale.views.organizer import (
|
||||
@@ -244,6 +245,7 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView):
|
||||
context['display_add_to_cart'] = display_add_to_cart
|
||||
|
||||
context['cart'] = self.get_cart()
|
||||
context['itemvarsums'] = get_item_var_sums(context['cart'].get('raw', []), self.subevent)
|
||||
context['has_addon_choices'] = any(cp.has_addon_choices for cp in get_cart(self.request))
|
||||
|
||||
templating_context = PlaceholderContext(event_or_subevent=self.subevent or self.request.event, event=self.request.event)
|
||||
|
||||
@@ -35,6 +35,7 @@ import calendar
|
||||
import hashlib
|
||||
import math
|
||||
import operator
|
||||
import re
|
||||
from collections import defaultdict
|
||||
from datetime import date, datetime, time, timedelta
|
||||
from functools import reduce
|
||||
@@ -381,7 +382,11 @@ class EventListMixin:
|
||||
def _set_week_year(self):
|
||||
if 'date' in self.request.GET:
|
||||
try:
|
||||
iso = dateutil.parser.isoparse(self.request.GET.get('date')).isocalendar()
|
||||
input = self.request.GET.get('date')
|
||||
# Our parameters for the single-digit weeks of the year are 2027-W2, as emitted by Django's "W" format code,
|
||||
# but dateutil 4.0 is strict about ISO and only accepts 2027-W02 as valid.
|
||||
input = re.sub('-W([0-9])$', '-W0\\1', input)
|
||||
iso = dateutil.parser.isoparse(input).isocalendar()
|
||||
except ValueError:
|
||||
iso = time_machine_now().isocalendar()
|
||||
self.year = iso[0]
|
||||
|
||||
+35
-1
@@ -19,12 +19,18 @@
|
||||
# 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 re
|
||||
import typing
|
||||
import weakref
|
||||
|
||||
from celery.exceptions import Retry
|
||||
from sentry_sdk import Hub
|
||||
from sentry_sdk.integrations import django as djangosentry
|
||||
from sentry_sdk.utils import capture_internal_exceptions
|
||||
from sentry_sdk.scrubber import EventScrubber
|
||||
from sentry_sdk.utils import AnnotatedValue, capture_internal_exceptions
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
from sentry_sdk._types import Event
|
||||
|
||||
|
||||
def _make_event_processor(weak_request, integration):
|
||||
@@ -96,3 +102,31 @@ def setup_custom_filters():
|
||||
hub = Hub.current
|
||||
with hub.configure_scope() as scope:
|
||||
scope.add_event_processor(ignore_retry)
|
||||
|
||||
|
||||
class PretixEventScrubber(EventScrubber):
|
||||
secret_re = re.compile(
|
||||
'.*(pretixsecret|ramiiosecret|PRIVATE KEY|://[^/@:]*:[^/@:]+@).*',
|
||||
re.IGNORECASE
|
||||
)
|
||||
|
||||
def scrub_dict(self, d: object) -> None:
|
||||
if not isinstance(d, dict):
|
||||
return
|
||||
|
||||
super().scrub_dict(d)
|
||||
self._scrub_dict_for_known_secrets(d)
|
||||
|
||||
def _scrub_dict_for_known_secrets(self, d: dict):
|
||||
for k, v in d.items():
|
||||
if isinstance(v, str) and self.secret_re.match(v):
|
||||
d[k] = AnnotatedValue.substituted_because_contains_sensitive_data()
|
||||
|
||||
def scrub_exception(self, event: "Event") -> None:
|
||||
with capture_internal_exceptions():
|
||||
if "exception" in event:
|
||||
self.scrub_dict(event["exception"])
|
||||
|
||||
def scrub_event(self, event: "Event") -> None:
|
||||
super().scrub_event(event)
|
||||
self.scrub_exception(event)
|
||||
@@ -41,7 +41,7 @@ from json import loads
|
||||
from pathlib import Path
|
||||
from urllib.parse import urlparse
|
||||
|
||||
import importlib_metadata as metadata
|
||||
from importlib import metadata
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.utils.crypto import get_random_string
|
||||
from kombu import Queue
|
||||
@@ -721,9 +721,9 @@ if config.has_option('sentry', 'dsn') and not any(c in sys.argv for c in ('shell
|
||||
from sentry_sdk.integrations.logging import (
|
||||
LoggingIntegration, ignore_logger,
|
||||
)
|
||||
from sentry_sdk.scrubber import DEFAULT_DENYLIST, EventScrubber
|
||||
from sentry_sdk.scrubber import DEFAULT_DENYLIST
|
||||
|
||||
from .sentry import PretixSentryIntegration, setup_custom_filters
|
||||
from .sentry import PretixSentryIntegration, PretixEventScrubber, setup_custom_filters
|
||||
|
||||
SENTRY_TOKEN = config.get('sentry', 'traces_sample_token', fallback='')
|
||||
SENTRY_ENABLE_LOGS = config.getboolean('sentry', 'enable_logs', fallback=False)
|
||||
@@ -759,7 +759,7 @@ if config.has_option('sentry', 'dsn') and not any(c in sys.argv for c in ('shell
|
||||
traces_sampler=traces_sampler,
|
||||
environment=urlparse(SITE_URL).netloc,
|
||||
release=__version__,
|
||||
event_scrubber=EventScrubber(denylist=pretix_denylist, recursive=True),
|
||||
event_scrubber=PretixEventScrubber(denylist=pretix_denylist, recursive=True),
|
||||
send_default_pii=False,
|
||||
propagate_traces=False, # see https://github.com/getsentry/sentry-python/issues/1717
|
||||
)
|
||||
|
||||
@@ -618,18 +618,21 @@ var editor = {
|
||||
$('#loading-initial').remove()
|
||||
})
|
||||
}
|
||||
editor._update_version_notice()
|
||||
editor._update_notices()
|
||||
},
|
||||
|
||||
_update_version_notice: function () {
|
||||
_update_notices: function () {
|
||||
$('#version-notice').toggle(
|
||||
editor._other_page_objects.some((o) => o.type === 'textcontainer')
|
||||
|| editor.fabric.getObjects().some((o) => o.type === 'textcontainer')
|
||||
)
|
||||
$('#nocheckin-notice').toggle(
|
||||
!editor.fabric.getObjects().some((o) => o.type === 'barcodearea' && (!o.content || o.content === 'secret'))
|
||||
)
|
||||
},
|
||||
|
||||
_update_toolbox_values: function () {
|
||||
editor._update_version_notice()
|
||||
editor._update_notices()
|
||||
let o = editor.fabric.getActiveObject()
|
||||
if (!o) {
|
||||
return
|
||||
@@ -898,6 +901,7 @@ var editor = {
|
||||
|
||||
o.setCoords()
|
||||
editor.fabric.renderAll()
|
||||
editor._update_notices()
|
||||
},
|
||||
|
||||
_update_toolbox: function () {
|
||||
|
||||
@@ -103,3 +103,6 @@ body {
|
||||
.panel-pdf-editor .panel-heading form > .btn-group {
|
||||
margin-right: 1em;
|
||||
}
|
||||
#nocheckin-notice {
|
||||
display: none;
|
||||
}
|
||||
@@ -25,8 +25,10 @@ import tempfile
|
||||
|
||||
tmpdir = tempfile.TemporaryDirectory()
|
||||
os.environ.setdefault('DATA_DIR', tmpdir.name)
|
||||
if os.path.exists('test/sqlite.cfg'):
|
||||
os.environ.setdefault('PRETIX_CONFIG_FILE', 'test/sqlite.cfg')
|
||||
if os.path.exists('tests/ci_sqlite.cfg'):
|
||||
os.environ.setdefault('PRETIX_CONFIG_FILE', 'tests/ci_sqlite.cfg')
|
||||
else:
|
||||
os.environ.setdefault("PRETIX_CONFIG_FILE", "")
|
||||
|
||||
from pretix.settings import * # NOQA
|
||||
|
||||
@@ -100,3 +102,4 @@ class DisableMigrations(object):
|
||||
|
||||
if not os.environ.get("GITHUB_WORKFLOW", ""):
|
||||
MIGRATION_MODULES = DisableMigrations()
|
||||
VITE_DEV_MODE = True
|
||||
@@ -26,6 +26,7 @@ from unittest import mock
|
||||
|
||||
import pytest
|
||||
from django.core import mail as djmail
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.core.files.base import ContentFile
|
||||
from django.utils.timezone import now
|
||||
from django_countries.fields import Country
|
||||
@@ -248,7 +249,14 @@ def test_order_update_state_validation(token_client, organizer, event, order):
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_order_update_transmission_validation(token_client, organizer, event, order):
|
||||
def test_order_update_transmission_validation(token_client, organizer, event, order, monkeypatch):
|
||||
def mock_validate(self, value):
|
||||
if value == "9930:DE111111111":
|
||||
return value
|
||||
raise ValidationError("Invalid")
|
||||
|
||||
monkeypatch.setattr("pretix.base.invoicing.peppol.PeppolIdValidator._validate_peppol_id_online", mock_validate)
|
||||
|
||||
resp = token_client.patch(
|
||||
'/api/v1/organizers/{}/events/{}/orders/{}/'.format(
|
||||
organizer.slug, event.slug, order.code
|
||||
@@ -374,7 +382,7 @@ def test_order_update_transmission_validation(token_client, organizer, event, or
|
||||
"vat_id": "",
|
||||
"transmission_type": "peppol",
|
||||
"transmission_info": {
|
||||
"transmission_peppol_participant_id": "9930:DE811569869",
|
||||
"transmission_peppol_participant_id": "9930:DE111111111",
|
||||
"ignored": "parameter",
|
||||
},
|
||||
}
|
||||
@@ -384,7 +392,7 @@ def test_order_update_transmission_validation(token_client, organizer, event, or
|
||||
order.invoice_address.refresh_from_db()
|
||||
assert order.invoice_address.transmission_type == "peppol"
|
||||
assert order.invoice_address.transmission_info == {
|
||||
"transmission_peppol_participant_id": "9930:DE811569869",
|
||||
"transmission_peppol_participant_id": "9930:DE111111111",
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -94,6 +94,83 @@ def question(event, item):
|
||||
return q
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_log_action_filter(event, order):
|
||||
sensitivekeys = [
|
||||
'auth',
|
||||
'key',
|
||||
'token',
|
||||
'password',
|
||||
'Password',
|
||||
'_pass',
|
||||
'salt',
|
||||
'secret',
|
||||
]
|
||||
log_data = log_data_filtered = {
|
||||
'foo': 'bar',
|
||||
}
|
||||
for d in (log_data, log_data_filtered):
|
||||
value = '********' if d == log_data_filtered else '__sensitive_info__'
|
||||
for k in sensitivekeys:
|
||||
d[k] = d['prefix' + k] = d['prefix' + k + 'suffix'] = d[k + 'suffix'] = value
|
||||
|
||||
d['recursive_dict'] = {
|
||||
'test': 'dummy',
|
||||
'test_token': value,
|
||||
'd': {
|
||||
'baz': 'foo',
|
||||
'mypassword': value,
|
||||
'l': [
|
||||
'foo',
|
||||
'bar',
|
||||
{
|
||||
'baz': True,
|
||||
'superkey': value,
|
||||
},
|
||||
],
|
||||
},
|
||||
'l': [
|
||||
'okay',
|
||||
{
|
||||
'salt_to_secret': value,
|
||||
'name': 'okay'
|
||||
},
|
||||
'element',
|
||||
[
|
||||
'another',
|
||||
{
|
||||
'api_password': value,
|
||||
},
|
||||
'list'
|
||||
]
|
||||
]
|
||||
}
|
||||
d['recursive_list'] = [
|
||||
'foo',
|
||||
'bar',
|
||||
[
|
||||
'foo',
|
||||
'bar',
|
||||
{
|
||||
'foo': 'bar',
|
||||
'api_token': value,
|
||||
},
|
||||
'baz',
|
||||
],
|
||||
{
|
||||
'foo': 'bar',
|
||||
'MyPassword': value,
|
||||
}
|
||||
]
|
||||
l1 = order.log_action(
|
||||
'dummy.log',
|
||||
data=log_data,
|
||||
)
|
||||
|
||||
l1.refresh_from_db()
|
||||
assert json.loads(l1.data) == log_data_filtered
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_email_shredder(event, order):
|
||||
l1 = order.log_action(
|
||||
|
||||
@@ -147,6 +147,7 @@ def test_api_create(env, token_client):
|
||||
assert resp.status_code == 201
|
||||
tl = env[0].ticket_layouts.get(pk=resp.data["id"])
|
||||
assert tl.background
|
||||
assert "cachedfile" not in tl.background.name
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -163,6 +164,21 @@ def test_api_create_validate_default(env, token_client):
|
||||
assert resp.status_code == 400
|
||||
assert resp.data == {"non_field_errors": ["You cannot have two layouts with default = True"]}
|
||||
|
||||
env[0].ticket_layouts.filter(default=True).update(default=False)
|
||||
|
||||
resp = token_client.post(
|
||||
'/api/v1/organizers/{}/events/{}/ticketlayouts/'.format(env[0].slug, env[0].slug),
|
||||
{
|
||||
'name': 'Foo',
|
||||
'default': True,
|
||||
'layout': [],
|
||||
},
|
||||
format='json'
|
||||
)
|
||||
assert resp.status_code == 201
|
||||
tl = env[0].ticket_layouts.get(pk=resp.data["id"])
|
||||
assert tl.default
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_api_create_validate_layout(env, token_client):
|
||||
@@ -215,6 +231,7 @@ def test_api_update(env, token_client):
|
||||
assert json.loads(env[1].layout) == [
|
||||
{"type": "barcodearea", "left": "7.00", "bottom": "11.15", "size": "45.00", "content": "secret"}
|
||||
]
|
||||
assert "cachedfile" not in env[1].background.name
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -230,6 +247,18 @@ def test_api_update_validate_default(env, token_client):
|
||||
assert resp.status_code == 400
|
||||
assert resp.data == {"non_field_errors": ["You cannot have two layouts with default = True"]}
|
||||
|
||||
env[0].ticket_layouts.filter(default=True).update(default=False)
|
||||
resp = token_client.patch(
|
||||
'/api/v1/organizers/{}/events/{}/ticketlayouts/{}/'.format(env[0].slug, env[0].slug, tl2.pk),
|
||||
{
|
||||
"default": True,
|
||||
},
|
||||
format='json'
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
tl2.refresh_from_db()
|
||||
assert tl2.default
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_api_delete(env, token_client):
|
||||
|
||||
@@ -193,7 +193,7 @@ def test_org_login_logout(env, client, mocker):
|
||||
})
|
||||
assert r.status_code == 302
|
||||
|
||||
customer_signed_in.send.assert_called_once_with(customer.organizer, customer=customer)
|
||||
customer_signed_in.send.assert_called_once_with(customer.organizer, customer=customer, profile=None)
|
||||
|
||||
r = client.get('/bigevents/account/')
|
||||
assert r.status_code == 200
|
||||
@@ -349,7 +349,10 @@ def test_org_sso_login_new_customer(env, client, provider, mocker):
|
||||
c = Customer.objects.get(provider=provider)
|
||||
assert c.external_identifier == "abcdf"
|
||||
customer_created.send.assert_called_once_with(c.organizer, customer=c)
|
||||
customer_signed_in.send.assert_called_once_with(c.organizer, customer=c)
|
||||
customer_signed_in.send.assert_called_once_with(c.organizer, customer=c, profile={
|
||||
'uid': 'abcdf', 'email': 'test@example.org',
|
||||
'oidc_claims': {'sub': 'abcdf', 'email': 'test@example.org'},
|
||||
})
|
||||
|
||||
r = client.get('/bigevents/account/')
|
||||
assert r.status_code == 200
|
||||
@@ -401,7 +404,10 @@ def test_org_sso_login_returning_customer_new_email(env, client, provider, mocke
|
||||
_sso_login(client, provider)
|
||||
with scopes_disabled():
|
||||
c = Customer.objects.get(provider=provider)
|
||||
customer_signed_in.send.assert_called_once_with(c.organizer, customer=c)
|
||||
customer_signed_in.send.assert_called_once_with(c.organizer, customer=c, profile={
|
||||
'uid': 'abcdf', 'email': 'test@example.org',
|
||||
'oidc_claims': {'sub': 'abcdf', 'email': 'test@example.org'},
|
||||
})
|
||||
customer_signed_in.send.reset_mock()
|
||||
|
||||
r = client.get('/bigevents/account/logout')
|
||||
@@ -410,7 +416,10 @@ def test_org_sso_login_returning_customer_new_email(env, client, provider, mocke
|
||||
_sso_login(client, provider, 'new@example.net')
|
||||
c.refresh_from_db()
|
||||
assert c.email == "new@example.net"
|
||||
customer_signed_in.send.assert_called_once_with(c.organizer, customer=c)
|
||||
customer_signed_in.send.assert_called_once_with(c.organizer, customer=c, profile={
|
||||
'uid': 'abcdf', 'email': 'new@example.net',
|
||||
'oidc_claims': {'sub': 'abcdf', 'email': 'new@example.net'},
|
||||
})
|
||||
|
||||
|
||||
@pytest.mark.django_db(transaction=True)
|
||||
|
||||
@@ -1393,6 +1393,61 @@ class OrderChangeAddonsTest(BaseOrdersTest):
|
||||
assert a.item == self.workshop2
|
||||
assert a.variation == self.workshop2a
|
||||
|
||||
def test_quota_sold_out_change_hide_sold_out(self):
|
||||
self.event.settings.hide_sold_out = True
|
||||
self.workshopquota.size = 1
|
||||
self.workshopquota.items.remove(self.workshop2)
|
||||
self.workshopquota.variations.remove(self.workshop2a)
|
||||
self.workshopquota.variations.remove(self.workshop2b)
|
||||
self.workshopquota.save()
|
||||
self.workshopquota2 = Quota.objects.create(event=self.event, name='Workshop 2', size=5)
|
||||
self.workshopquota2.items.add(self.workshop2)
|
||||
self.workshopquota2.variations.add(self.workshop2a)
|
||||
self.workshopquota2.variations.add(self.workshop2b)
|
||||
|
||||
with scopes_disabled():
|
||||
OrderPosition.objects.create(
|
||||
order=self.order,
|
||||
item=self.workshop1,
|
||||
variation=None,
|
||||
price=Decimal("12"),
|
||||
addon_to=self.ticket_pos,
|
||||
attendee_name_parts={'full_name': "Peter"}
|
||||
)
|
||||
self.order.total += Decimal("12")
|
||||
self.order.save()
|
||||
|
||||
response = self.client.get(
|
||||
'/%s/%s/order/%s/%s/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret)
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert 'Workshop 1' in response.content.decode()
|
||||
|
||||
doc = BeautifulSoup(response.content.decode(), "lxml")
|
||||
assert doc.select(f'input[name=cp_{self.ticket_pos.pk}_item_{self.workshop1.pk}]')[0].attrs['checked']
|
||||
|
||||
response = self.client.post(
|
||||
'/%s/%s/order/%s/%s/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
{
|
||||
f'cp_{self.ticket_pos.pk}_variation_{self.workshop2.pk}_{self.workshop2a.pk}': '1'
|
||||
},
|
||||
follow=True
|
||||
)
|
||||
doc = BeautifulSoup(response.content.decode(), "lxml")
|
||||
assert 'alert-danger' not in response.content.decode()
|
||||
|
||||
form_data = extract_form_fields(doc.select('.main-box form')[0])
|
||||
form_data['confirm'] = 'true'
|
||||
response = self.client.post(
|
||||
'/%s/%s/order/%s/%s/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret), form_data, follow=True
|
||||
)
|
||||
assert 'alert-success' in response.content.decode()
|
||||
|
||||
with scopes_disabled():
|
||||
a = self.ticket_pos.addons.get(canceled=False)
|
||||
assert a.item == self.workshop2
|
||||
assert a.variation == self.workshop2a
|
||||
|
||||
def _assert_ws2a_not_allowed(self):
|
||||
response = self.client.get(
|
||||
'/%s/%s/order/%s/%s/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret)
|
||||
|
||||
Reference in new issue
Block a user