Compare commits

..
Author SHA1 Message Date
TechuserUpdatechecker 29893f94e6 Update Translation 2026-10-04 23:02:54 +02:00
TechuserUpdatecheckerandClaude Sonnet 4.6 5950a79afe upstream-merge: extract gender cleanup rules to separate file
Rules are now maintained in gender-cleanup-rules.md and loaded
into the Claude prompt at runtime, so they can be updated without
touching the script.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-03 22:39:18 +02:00
TechuserUpdatecheckerandClaude Sonnet 4.6 69f1a1b660 upstream-merge: auto-invoke Claude for gender fixes, no resume needed
Script now calls `claude "..."` on gender findings instead of exiting.
After the Claude session ends, the script re-checks and continues
automatically. --resume is kept as a crash-recovery fallback only.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-03 22:37:01 +02:00
TechuserUpdatecheckerandClaude Sonnet 4.6 1e3a3ec3af Add upstream-merge.sh script, simplify skill
The shell script handles all automatable workflow steps:
- git fetch, branch creation, master merge, push + MR link
- Gender grep with exit 1 on findings (Claude intervenes)
- Waits for MR merge (read prompt)
- Tag, build pipeline polling via Gitea API (GITEA_TOKEN)
- GitOps YAML updates for cgm72 and sola
- URL polling for both deployments
- Resume mode (--resume) to continue after gender fix

The skill now just starts the script and handles exit-code 1.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-03 22:28:13 +02:00
simon 35655a4036 Merge pull request 'Upstream/2026.8.0' (#22) from upstream/2026.8.0 into master
Reviewed-on: CGM_Public/pretix_cgo#22
2026-10-03 20:10:43 +00:00
TechuserUpdatechecker fdde93c8d3 Merge branch 'master' into upstream/2026.8.0 2026-10-03 22:07:51 +02:00
simon e9926b9c5a Merge pull request 'upstream/2026.7.0' (#21) from upstream/2026.7.0 into master
Reviewed-on: CGM_Public/pretix_cgo#21
2026-08-01 15:33:25 +00:00
TechuserUpdatechecker 45173e6b3a Merge branch 'master' into upstream/2026.7.0
# Conflicts:
#	src/pretix/locale/de/LC_MESSAGES/django.po
2026-08-01 17:25:41 +02:00
simon 22158bdd59 Merge pull request 'upstream/2026.6.0' (#20) from upstream/2026.6.0 into master
Reviewed-on: CGM_Public/pretix_cgo#20
2026-07-02 18:40:30 +00:00
TechuserUpdatechecker 91bc46c3db Remove gendered language from de/de_Informal translations 2026-07-02 20:37:43 +02:00
TechuserUpdatechecker 8d94ac74f8 Merge branch 'master' into upstream/2026.6.0
# Conflicts:
#	src/pretix/__init__.py
#	src/pretix/base/exporters/reusablemedia.py
#	src/pretix/plugins/reports/accountingreport.py
2026-07-02 20:28:38 +02:00
simon 60af7e5984 Merge pull request 'upstream/2026.5.2' (#19) from upstream/2026.5.2 into master
Reviewed-on: CGM_Public/pretix_cgo#19
2026-07-01 19:27:12 +00:00
TechuserUpdatechecker ce2704f6fd Remove gendered language from de/de_Informal translations 2026-07-01 21:26:32 +02:00
TechuserUpdatechecker 04cecedffb Merge branch 'master' into upstream/2026.5.2 2026-07-01 21:21:43 +02:00
Raphael Michel 7faf6cfd80 Bump to 2026.5.2 2026-06-25 16:40:44 +02:00
Raphael Michel cdeb3609f3 [SECURITY] Properly escape HTML tags in PDF generation (CVE-2026-57535) 2026-06-25 16:40:28 +02:00
Raphael Michel 53d8aa5679 [SECURITY] Prevent reading of any local files in reportlab (CVE-2026-57535) 2026-06-25 16:40:00 +02:00
Raphael Michel 80601cc013 [SECURITY] Disable outbound and file access for reportlab (CVE-2026-57535) 2026-06-25 16:40:00 +02:00
Mira Weller e2661f304d [SECURITY] Fix reflected XSS in redirection page (CVE-2026-57533) 2026-06-25 16:40:00 +02:00
Mira Weller 71f6ade5d6 [SECURITY] Fix stored XSS in ticket confirmation page (CVE-2026-13225) 2026-06-25 16:40:00 +02:00
Mira Weller e087dd39b8 [SECURITY] Hardening: Don't use |safe on confirm_messages 2026-06-25 16:40:00 +02:00
Mira Weller f3a8ce39f1 [SECURITY] Fix XSS in ticket layout JSON (CVE-2026-57532) 2026-06-25 16:40:00 +02:00
TechuserUpdatechecker 54479f8f32 Update pretix domain 2026-06-20 21:33:05 +02:00
simon 8142cc8b18 Merge pull request 'upstream/2026.5.1' (#18) from upstream/2026.5.1 into master
Reviewed-on: CGM_Public/pretix_cgo#18
2026-06-20 19:21:33 +00:00
TechuserUpdatechecker 87c1232a38 Merge branch 'master' into upstream/2026.5.1 2026-06-20 21:00:06 +02:00
TechuserUpdatechecker f838e29400 Add claude skill 2026-06-20 20:59:23 +02:00
simon bd1e583266 Merge branch 'feature/pretix-oidc-plugin' into master
Adds pretix-oidc plugin to Dockerfile for Keycloak SSO integration.
Plugin is only active when configured (currently cgm72 only).
2026-06-20 20:35:55 +02:00
simonandClaude Sonnet 4.6 7a9640ddca Add pretix-oidc plugin for Keycloak SSO integration
Enables OIDC authentication against Keycloak and automatic team assignment
via claim-based rules (pretix_scanner, pretix_shop, pretix_admin).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 22:10:45 +02:00
Raphael Michel a6c417eb2f Bump version to 2026.5.1 2026-06-09 13:22:17 +02:00
Richard Schreiber 5d449ea313 [SECURITY] Reusable media export: Respect giftcard permissions (CVE-2026-11764) (#6261) 2026-06-09 13:21:41 +02:00
simon f700b57d57 Merge pull request 'upstream/2026.5.0' (#17) from upstream/2026.5.0 into master
Reviewed-on: CGM_Public/pretix_cgo#17
2026-05-31 18:34:40 +00:00
TechuserUpdatecheckerandClaude Sonnet 4.6 9e2ae90b1e Merge master into upstream/2026.5.0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 20:32:21 +02:00
simon 3ccd0f7cd5 Merge pull request 'upstream/2026.4.1' (#16) from upstream/2026.4.1 into master
Reviewed-on: CGM_Public/pretix_cgo#16
2026-05-16 19:58:34 +00:00
TechuserUpdatecheckerandClaude Sonnet 4.6 51cdb437db Remove gendered language from de/de_Informal translations
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-16 21:56:20 +02:00
TechuserUpdatechecker 215dc8b48b Merge branch 'master' into upstream/2026.4.1 2026-05-16 21:54:40 +02:00
Raphael Michel f88a560d5f Bump to 2026.4.1 2026-05-04 11:24:26 +02:00
Thomas Göttgens 4019f956a8 Fix Dockerfile syntax for chmod command (#6145) 2026-05-04 11:24:04 +02:00
Raphael Michel c75c847393 Settings: Fix typo in class path to mail backend (#6144) 2026-05-04 11:24:04 +02:00
luelista 4e3d3b1f22 Fix permissions of /pretix in docker container (#6133) 2026-05-04 11:24:04 +02:00
TechuserUpdatecheckerandClaude Sonnet 4.6 e2bf94ff9f Dockerfile: Fix /pretix permissions for nginx on Debian Trixie
Debian Trixie changed the default home directory mode from 0755 to 0700,
causing nginx (www-data) to get 403 Forbidden on all static files.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-03 21:41:06 +02:00
simon a37e6c8270 Merge pull request 'upstream/2026.4.0' (#15) from upstream/2026.4.0 into master
Reviewed-on: CGM_Public/pretix_cgo#15
2026-05-03 19:11:35 +00:00
TechuserUpdatechecker dfe94e09cc Merge with Master 2026-05-03 21:08:58 +02:00
simon d87f7b0072 Merge pull request 'upstream/2026.3.1' (#14) from upstream/2026.3.1 into master
Reviewed-on: CGM_Public/pretix_cgo#14
2026-04-13 09:11:15 +00:00
TechuserUpdatechecker 393cd0235e Update Teilnehmer 2026-04-13 11:07:57 +02:00
TechuserUpdatechecker 7fdc7f3405 Merge with master 2026-04-13 11:05:15 +02:00
Raphael Michel 21d62c5078 Bump version to 2026.3.1 2026-04-08 13:58:36 +02:00
Raphael Michel 988dc112ac [SECURITY] API: Add missing event filter for check-ins 2026-04-08 13:58:23 +02:00
simon 2da8d250c8 Merge pull request 'upstream/2026.2.0' (#13) from upstream/2026.2.0 into master
Reviewed-on: CGM_Public/pretix_cgo#13
2026-03-23 20:25:57 +00:00
TechuserUpdatechecker 02e0fed4a0 Merge branch 'master' into upstream/2026.2.0 2026-03-23 21:19:51 +01:00
simon 932b646fcc Merge pull request 'upstream/v2026.1.0' (#12) from upstream/v2026.1.0 into master
Reviewed-on: CGM_Public/pretix_cgo#12
2026-02-03 21:56:31 +00:00
TechuserUpdatechecker edf1bd08f8 Merge branch 'master' into upstream/v2026.1.0
# Conflicts:
#	src/pretix/__init__.py
2026-02-03 22:56:14 +01:00
simon 09aff627bb Merge pull request 'upstream/2025.10.1' (#11) from upstream/2025.10.1 into master
Reviewed-on: CGM_Public/pretix_cgo#11
2025-12-26 19:38:03 +00:00
TechuserUpdatechecker da87c64ea0 Merge branch 'master' into upstream/2025.10.1 2025-12-26 20:35:13 +01:00
Raphael Michel 5d87f9a26f Bump to 2025.10.1 2025-12-19 13:06:58 +01:00
Raphael Michel 4b5651862c [SECURITY] Prevent access to arbitrary cached files by UUID (CVE-2025-14881) 2025-12-19 13:06:48 +01:00
simon 26f3a92d09 Merge pull request 'upstream/2025.10.0' (#10) from upstream/2025.10.0 into master
Reviewed-on: CGM_Public/pretix_cgo#10
2025-12-18 22:18:53 +00:00
TechuserUpdatechecker d468e0a2b3 Merge master 2025-12-18 23:18:30 +01:00
simon 8de80d5867 Merge pull request 'upstream/2025.9.0.1' (#9) from upstream/2025.9.0.1 into master
Reviewed-on: CGM_Public/pretix_cgo#9
2025-11-09 19:16:53 +00:00
TechuserUpdatechecker ec3272dd7c merge with master 2025-11-09 20:13:46 +01:00
TechuserUpdatechecker 72b14e04c0 Merge with 2025.8.0 2025-10-05 20:58:06 +02:00
philipp 93cb51c7de Merge pull request 'upstream/2025.7.1' (#7) from upstream/2025.7.1 into master
Reviewed-on: simon/pretix_cgo#7
2025-09-16 17:03:57 +00:00
philipp 64b56afe44 Fix language file bug 2025-09-16 19:00:58 +02:00
philipp 8e16c18060 Merge branch 'master' into upstream/2025.7.1 2025-09-16 18:36:21 +02:00
Raphael Michel 2d42c1f166 Bump to 2025.7.1 2025-08-23 10:15:29 +02:00
Raphael Michel e4b8c5da25 Bump hierarkey to 2.0.1 2025-08-23 09:14:06 +02:00
luelista c85b496187 Organizer plugins: Do not show plugins as active if they are inactive on org-level (#5396) 2025-08-23 09:13:56 +02:00
simon b632fa620e Merge pull request 'upstream/2025.6.0' (#6) from upstream/2025.6.0 into master
Reviewed-on: simon/pretix_cgo#6
2025-07-04 20:24:59 +00:00
philipp 04684ed93f Merge pull request 'upstream/2025.5.0' (#5) from upstream/2025.5.0 into master
Reviewed-on: simon/pretix_cgo#5
2025-06-03 16:12:49 +00:00
philipp 466bf49941 Merge branch 'master' into upstream/2025.5.0 2025-06-03 17:51:30 +02:00
philipp e03ec73490 Merge pull request 'upstream/2025.4.0' (#4) from upstream/2025.4.0 into master
Reviewed-on: simon/pretix_cgo#4
2025-05-08 22:05:43 +00:00
philipp 3fda118234 Merge branch 'master' into upstream/2025.4.0 2025-05-08 23:44:59 +02:00
simon 1cb98d0837 Merge pull request 'upstream/2025.3.0' (#3) from upstream/2025.3.0 into master
Reviewed-on: simon/pretix_cgo#3
2025-03-30 20:07:31 +00:00
simon 713e3a40aa Merge pull request 'upstream/2025.2.0' (#2) from upstream/2025.2.0 into master
Reviewed-on: simon/pretix_cgo#2
2025-03-07 22:45:05 +00:00
TechuserUpdatechecker be234edc0f Merge from master 2025-03-07 23:10:21 +01:00
philipp 34efc2d953 Add relevant_orderlist exporter (including bugfixes)
This Exporter has the most useful information in the first rows of the
exported document. Specifically the product and the custom questions.
Other fields are also resorted somewhat to place very useless columns at
the end of the table. See code for details :)
- register relevant_orderlist as separate data_exporter
- sort it with the other order data exporters.
2025-02-12 13:17:21 +01:00
UpdateBot 82366dd6c9 Add debugging Information 2025-02-11 20:48:27 +01:00
UpdateBot 38abad0bf6 Update dockerbuild, use Tag if a tag was pushed, latest otherwise 2025-02-11 20:44:55 +01:00
simon 41817fe080 Merge pull request 'Furhter text udpates' (#1) from release/2025.1.0 into master
Reviewed-on: simon/pretix_cgo#1
2025-02-10 14:49:03 +00:00
simon 6cee467dbd Merge branch 'master' into release/2025.1.0 2025-02-10 14:48:25 +00:00
UpdateBot 931ba73f1d Furhter text udpates 2025-02-10 15:47:21 +01:00
UpdateBot 9179621e72 Use latest tag in master branch 2025-02-05 22:02:20 +01:00
UpdateBot 65c978558e Merge branch 'release/2025.1.0' 2025-02-05 22:01:24 +01:00
UpdateBot f4f090506b Update Texts 2025-02-04 22:11:52 +01:00
42 changed files with 4180 additions and 3025 deletions
+42
View File
@@ -0,0 +1,42 @@
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
```
+39
View File
@@ -0,0 +1,39 @@
# 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.
+245
View File
@@ -0,0 +1,245 @@
#!/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 "============================================"
+31
View File
@@ -0,0 +1,31 @@
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 }}"
+2 -1
View File
@@ -61,7 +61,8 @@ RUN pip3 install -U \
cd /pretix && \
PRETIX_DOCKER_BUILD=TRUE pip3 install \
-e ".[memcached]" \
gunicorn django-extensions ipython && \
gunicorn django-extensions ipython \
pretix-oidc && \
rm -rf ~/.cache/pip
RUN chmod +x /usr/local/bin/pretix && \
+1 -1
View File
@@ -173,7 +173,7 @@ Datetime String in ISO 8601 format ``"2017-12-27T10:00:00Z"``
with timezone (normally UTC) ``"2017-12-27T10:00:00.596934Z"``,
``"2017-12-27T10:00:00+02:00"``
Date String in ISO 8601 format ``2017-12-27``
Multi-lingual string Object of strings ``{"en": "red", "de": "rot", "de-informal": "rot"}``
Multi-lingual string Object of strings ``{"en": "red", "de": "rot", "de_Informal": "rot"}``
Money String with decimal number ``"23.42"``
Currency String with ISO 4217 code ``"EUR"``, ``"USD"``
Relative datetime *either* String in ISO 8601 ``"2017-12-27T10:00:00.596934Z"``,
+108 -106
View File
@@ -40,30 +40,30 @@
"license": "MIT"
},
"node_modules/@babel/helper-string-parser": {
"version": "7.29.7",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
"integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.29.7",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
"integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
"version": "7.28.5",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
"integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
"version": "7.29.9",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz",
"integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==",
"version": "7.29.0",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
"integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
"license": "MIT",
"dependencies": {
"@babel/types": "^7.29.8"
"@babel/types": "^7.29.0"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -73,13 +73,13 @@
}
},
"node_modules/@babel/types": {
"version": "7.29.8",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
"integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
"version": "7.29.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
"integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.29.7",
"@babel/helper-validator-identifier": "^7.29.7"
"@babel/helper-string-parser": "^7.27.1",
"@babel/helper-validator-identifier": "^7.28.5"
},
"engines": {
"node": ">=6.9.0"
@@ -194,16 +194,16 @@
}
},
"node_modules/@eslint/config-array/node_modules/brace-expansion": {
"version": "5.0.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz",
"integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==",
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
"integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^4.0.2"
},
"engines": {
"node": "20 || >=22"
"node": "18 || 20 || >=22"
}
},
"node_modules/@eslint/config-array/node_modules/minimatch": {
@@ -378,9 +378,9 @@
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz",
"integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==",
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"license": "MIT"
},
"node_modules/@napi-rs/wasm-runtime": {
@@ -1339,16 +1339,16 @@
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
"version": "5.0.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz",
"integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==",
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
"integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^4.0.2"
},
"engines": {
"node": "20 || >=22"
"node": "18 || 20 || >=22"
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
@@ -1447,53 +1447,53 @@
"license": "MIT"
},
"node_modules/@vue/compiler-core": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.43.tgz",
"integrity": "sha512-zdiLhnbe1QQqgDT8xZMpNmyqZ3qlI+/Q/FHQco57Kwl/b05HhCzN6eVGN9QU9rbga4CrS0H5SYY8VGHZCt/1Hg==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.30.tgz",
"integrity": "sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.29.8",
"@vue/shared": "3.5.43",
"@babel/parser": "^7.29.0",
"@vue/shared": "3.5.30",
"entities": "^7.0.1",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-dom": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.43.tgz",
"integrity": "sha512-PEZoAk3NQmsn/ejMzSOCyTYqwGqczrWm70PuhBKjjv1+TCoQAaO/zOqNwjV+honlNstT5ILxtc+8r8UUfj+iEQ==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.30.tgz",
"integrity": "sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==",
"license": "MIT",
"dependencies": {
"@vue/compiler-core": "3.5.43",
"@vue/shared": "3.5.43"
"@vue/compiler-core": "3.5.30",
"@vue/shared": "3.5.30"
}
},
"node_modules/@vue/compiler-sfc": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.43.tgz",
"integrity": "sha512-FCbrG3XNCRl+js3huuKx4IVHBLTvMkJhVepjbxSPu1gn4yWLaYtGNQdjJGZaMytXB6qb76qQDDmDSLy/vkmleQ==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.30.tgz",
"integrity": "sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.29.8",
"@vue/compiler-core": "3.5.43",
"@vue/compiler-dom": "3.5.43",
"@vue/compiler-ssr": "3.5.43",
"@vue/shared": "3.5.43",
"@babel/parser": "^7.29.0",
"@vue/compiler-core": "3.5.30",
"@vue/compiler-dom": "3.5.30",
"@vue/compiler-ssr": "3.5.30",
"@vue/shared": "3.5.30",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.21",
"postcss": "^8.5.28",
"postcss": "^8.5.8",
"source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-ssr": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.43.tgz",
"integrity": "sha512-GF62orf7KiJX9RqrHNGrYBudsQGD0OhJ5nDs90O8UiDuS40+YMYomiXu6w6EuvtXuRDc3MSNis3EaaSKAVSWpg==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.30.tgz",
"integrity": "sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==",
"license": "MIT",
"dependencies": {
"@vue/compiler-dom": "3.5.43",
"@vue/shared": "3.5.43"
"@vue/compiler-dom": "3.5.30",
"@vue/shared": "3.5.30"
}
},
"node_modules/@vue/eslint-config-typescript": {
@@ -1537,51 +1537,53 @@
}
},
"node_modules/@vue/reactivity": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.43.tgz",
"integrity": "sha512-G/c9GyOZNI2jVaaS6OX1EF1SSFSv7H0ERqNTl4+DTFMlZmB5eVAB53aLQNam/7NL2NPtaDD7RdVrzf8uJzMuOA==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.30.tgz",
"integrity": "sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q==",
"license": "MIT",
"dependencies": {
"@vue/shared": "3.5.43"
"@vue/shared": "3.5.30"
}
},
"node_modules/@vue/runtime-core": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.43.tgz",
"integrity": "sha512-hU6U6VnVhBGQDpvlnnDlIB8ZGJBiOcgk2lh/0InltHiz3D8oSkluvuvY+do1G2H3+udeKFsmaBlgVYP7gXQzEw==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.30.tgz",
"integrity": "sha512-e0Z+8PQsUTdwV8TtEsLzUM7SzC7lQwYKePydb7K2ZnmS6jjND+WJXkmmfh/swYzRyfP1EY3fpdesyYoymCzYfg==",
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.5.43",
"@vue/shared": "3.5.43"
"@vue/reactivity": "3.5.30",
"@vue/shared": "3.5.30"
}
},
"node_modules/@vue/runtime-dom": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.43.tgz",
"integrity": "sha512-Bb2Jc0YjjJdMt1SJmb9b2L/IWd3I8lIT9x9eS/xvvP9CiVgna0ffua74xKRmt4/uSJ+0r4iN8ex1jrqkhQGWQw==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.30.tgz",
"integrity": "sha512-2UIGakjU4WSQ0T4iwDEW0W7vQj6n7AFn7taqZ9Cvm0Q/RA2FFOziLESrDL4GmtI1wV3jXg5nMoJSYO66egDUBw==",
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.5.43",
"@vue/runtime-core": "3.5.43",
"@vue/shared": "3.5.43",
"@vue/reactivity": "3.5.30",
"@vue/runtime-core": "3.5.30",
"@vue/shared": "3.5.30",
"csstype": "^3.2.3"
}
},
"node_modules/@vue/server-renderer": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.43.tgz",
"integrity": "sha512-l2Ygjv9NehV94PSBxNWsAHC0j/eIIKbn92mBuWXAPGLnn6HfJ6MH5ubsd+Nk0YoZ5FRuxWI1P2VSoh+dbPQhCQ==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.30.tgz",
"integrity": "sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ==",
"license": "MIT",
"dependencies": {
"@vue/compiler-ssr": "3.5.43",
"@vue/runtime-dom": "3.5.43",
"@vue/shared": "3.5.43"
"@vue/compiler-ssr": "3.5.30",
"@vue/shared": "3.5.30"
},
"peerDependencies": {
"vue": "3.5.30"
}
},
"node_modules/@vue/shared": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.43.tgz",
"integrity": "sha512-uksS7YGMR5NZyr4JNq0Rp+QyLns0ueaz20KwzIPW9R0LH1Vnt4E+XUM29PNseEbf1www2gOuhuDi5AKOIXag9Q==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.30.tgz",
"integrity": "sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==",
"license": "MIT"
},
"node_modules/acorn": {
@@ -1695,9 +1697,9 @@
"license": "ISC"
},
"node_modules/brace-expansion": {
"version": "2.1.7",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.7.tgz",
"integrity": "sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==",
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2120,16 +2122,16 @@
}
},
"node_modules/eslint/node_modules/brace-expansion": {
"version": "5.0.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz",
"integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==",
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
"integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^4.0.2"
},
"engines": {
"node": "20 || >=22"
"node": "18 || 20 || >=22"
}
},
"node_modules/eslint/node_modules/eslint-visitor-keys": {
@@ -3188,9 +3190,9 @@
"license": "MIT"
},
"node_modules/nanoid": {
"version": "3.3.20",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz",
"integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==",
"version": "3.3.16",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz",
"integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==",
"funding": [
{
"type": "github",
@@ -3364,9 +3366,9 @@
}
},
"node_modules/postcss": {
"version": "8.5.29",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.29.tgz",
"integrity": "sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==",
"version": "8.5.23",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.23.tgz",
"integrity": "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==",
"funding": [
{
"type": "opencollective",
@@ -3383,18 +3385,18 @@
],
"license": "MIT",
"dependencies": {
"nanoid": "^3.3.19",
"nanoid": "^3.3.16",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.2"
"source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/postcss-selector-parser": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.6.tgz",
"integrity": "sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw==",
"version": "7.1.5",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.5.tgz",
"integrity": "sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4160,9 +4162,9 @@
}
},
"node_modules/smol-toml": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.9.0.tgz",
"integrity": "sha512-hpd+HLON7HdZXqYchMM/+LaTTbdK0AU3NngIJ4KVyWbY9bfQqdL9cD+4yf6dUoU2Ap4VsU0JkQi6FxAI1B2mXQ==",
"version": "1.7.1",
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.1.tgz",
"integrity": "sha512-PPlsspAZ4jbMBu5DMFhfUGDQLu/vrL4SyBROVS37x8ynnVmFIs1VPBz1Co8Xks3TvpIaZXmU85y4DrQ+UyVFoQ==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
@@ -4183,9 +4185,9 @@
}
},
"node_modules/source-map-js": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz",
"integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==",
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
@@ -4590,16 +4592,16 @@
"license": "MIT"
},
"node_modules/vue": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.43.tgz",
"integrity": "sha512-o5qZoksdnjIKvW1srZ3ab7pcDNYAerBjRe54D0LBLfRdCYFrSgBHVXokMas35czQc0//lmx4/tuY4ZNQ+Rf2Ng==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.30.tgz",
"integrity": "sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg==",
"license": "MIT",
"dependencies": {
"@vue/compiler-dom": "3.5.43",
"@vue/compiler-sfc": "3.5.43",
"@vue/runtime-dom": "3.5.43",
"@vue/server-renderer": "3.5.43",
"@vue/shared": "3.5.43"
"@vue/compiler-dom": "3.5.30",
"@vue/compiler-sfc": "3.5.30",
"@vue/runtime-dom": "3.5.30",
"@vue/server-renderer": "3.5.30",
"@vue/shared": "3.5.30"
},
"peerDependencies": {
"typescript": "*"
+4 -4
View File
@@ -33,7 +33,7 @@ dependencies = [
"bleach==6.4.*",
"celery==5.6.*",
"chardet==5.2.*",
"cryptography>=50.0.2",
"cryptography>=50.0.1",
"css-inline==0.21.*",
"defusedcsv>=3.0.0",
"dnspython==2.*",
@@ -41,7 +41,7 @@ dependencies = [
"django-bootstrap3==26.2",
"django-compressor==4.6.0",
"django-countries==9.1.*",
"django-filter==26.2",
"django-filter==26.1",
"django-formset-js-improved==0.5.0.5",
"django-formtools==2.7",
"django-hierarkey==2.0.*,>=2.0.2",
@@ -94,11 +94,11 @@ dependencies = [
"redis==7.4.*",
"reportlab==5.0.*",
"requests==2.34.*",
"sentry-sdk==2.71.*",
"sentry-sdk==2.70.*",
"sepaxml==2.7.*",
"stripe==7.9.*",
"text-unidecode==1.*",
"tlds>=2026093003",
"tlds>=2026072401",
"tqdm==4.*",
"ua-parser==1.0.*",
"vobject==0.9.*",
+1 -1
View File
@@ -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.dev0"
__version__ = "2026.8.0"
+1 -3
View File
@@ -261,9 +261,7 @@ class ItemAddOnSerializer(serializers.ModelSerializer):
def validate(self, data):
data = super().validate(data)
full_data = self.to_internal_value(self.to_representation(self.instance)) if self.instance else {}
full_data.update(data)
ItemAddOn.clean_max_min_count(full_data.get('max_count'), full_data.get('min_count'))
ItemAddOn.clean_max_min_count(data.get('max_count'), data.get('min_count'))
return data
+1
View File
@@ -28,5 +28,6 @@ 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
+1 -1
View File
@@ -89,7 +89,7 @@ class OrderListExporter(MultiSheetListExporter):
description = gettext_lazy('Download a spreadsheet of all orders. The spreadsheet will include three sheets, one '
'with a line for every order, one with a line for every order position, and one with '
'a line for every additional fee charged in an order.')
featured = True
featured = False
repeatable_read = False
@cached_property
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -71,8 +71,8 @@ class EmailTransmissionType(TransmissionType):
def transmission_info_to_form_data(self, transmission_info: dict) -> dict:
return {
"transmission_email_other": bool((transmission_info or {}).get("transmission_email_address")),
"transmission_email_address": (transmission_info or {}).get("transmission_email_address"),
"transmission_email_other": bool(transmission_info.get("transmission_email_address")),
"transmission_email_address": transmission_info.get("transmission_email_address"),
}
def form_data_to_transmission_info(self, form_data: dict) -> dict:
+1 -1
View File
@@ -66,7 +66,7 @@ class ProcessForm(forms.Form):
widget=forms.Select(
attrs={'data-static': 'true'}
),
help_text=conditional_escape(c.help_text or ""),
help_text=conditional_escape(c.help_text),
)
def get_columns(self):
+2 -2
View File
@@ -364,7 +364,7 @@ class TeamForm(forms.ModelForm):
for opt in pg.options
],
label=pg.label,
help_text=conditional_escape(pg.help_text or ""),
help_text=conditional_escape(pg.help_text),
initial=initial,
widget=forms.RadioSelect,
)
@@ -389,7 +389,7 @@ class TeamForm(forms.ModelForm):
for opt in pg.options
],
label=pg.label,
help_text=conditional_escape(pg.help_text or ""),
help_text=conditional_escape(pg.help_text),
initial=initial,
widget=forms.RadioSelect,
)
+106 -87
View File
@@ -851,7 +851,7 @@ msgstr "Details der Bestellposition"
#: pretix/base/datasync/sourcefields.py
msgid "Attendee details"
msgstr "Details Teilnehmer*in"
msgstr "Details Teilnehmer"
#: pretix/base/datasync/sourcefields.py pretix/base/exporters/answers.py
#: pretix/base/models/items.py pretix/control/navigation.py
@@ -898,11 +898,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 Teilnehmer*in"
msgstr "Name"
#: pretix/base/datasync/sourcefields.py
msgid "Attendee"
msgstr "Teilnehmer*in"
msgstr "Teilnehmer"
#: pretix/base/datasync/sourcefields.py pretix/base/exporters/orderlist.py
#: pretix/base/forms/questions.py pretix/base/models/customers.py
@@ -910,11 +910,11 @@ msgstr "Teilnehmer*in"
#: pretix/control/templates/pretixcontrol/order/index.html
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html
msgid "Attendee email"
msgstr "E-Mail Teilnehmer*in"
msgstr "E-Mail Teilnehmer"
#: pretix/base/datasync/sourcefields.py
msgid "Attendee or order email"
msgstr "E-Mail Teilnehmer*in oder Bestellung"
msgstr "E-Mail Teilnehmer oder Bestellung"
#: pretix/base/datasync/sourcefields.py pretix/base/exporters/orderlist.py
#: pretix/base/pdf.py pretix/control/templates/pretixcontrol/order/index.html
@@ -922,23 +922,23 @@ msgstr "E-Mail Teilnehmer*in oder Bestellung"
#: pretix/plugins/ticketoutputpdf/exporters.py
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html
msgid "Attendee company"
msgstr "Teilnehmer*innen-Firma"
msgstr "Teilnehmer-Firma"
#: pretix/base/datasync/sourcefields.py
msgid "Attendee address street"
msgstr "Teilnehmer*innen-Adresse: Straße"
msgstr "Teilnehmer-Adresse: Straße"
#: pretix/base/datasync/sourcefields.py
msgid "Attendee address ZIP code"
msgstr "Teilnehmer*innen-Adresse: PLZ"
msgstr "Teilnehmer-Adresse: PLZ"
#: pretix/base/datasync/sourcefields.py
msgid "Attendee address city"
msgstr "Teilnehmer*innen-Adresse: Stadt"
msgstr "Teilnehmer-Adresse: Stadt"
#: pretix/base/datasync/sourcefields.py
msgid "Attendee address country"
msgstr "Teilnehmer*innen-Adresse: Land"
msgstr "Teilnehmer-Adresse: Land"
#: pretix/base/datasync/sourcefields.py pretix/base/exporters/orderlist.py
#: pretix/base/pdf.py
@@ -1172,7 +1172,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 Kund*innen im Bestellprozess als "
"ZIP-Datei mit allen Dateien, die von Kunden im Bestellprozess als "
"Antwort auf eine Frage hochgeladen wurden."
#: pretix/base/exporters/answers.py pretix/base/exporters/orderlist.py
@@ -2033,7 +2033,11 @@ msgstr "Ohne gültige Mitgliedschaft verstecken"
msgid "Order data"
msgstr "Bestelldaten"
#: pretix/base/exporters/json.py
#: pretix/base/exporters/relevant_orderlist.py:86
msgid "Order data (sorted by relevance)"
msgstr "Bestelldaten (nach Relevanz sortiert)"
#: pretix/base/exporters/json.py:53
msgid ""
"Download a structured JSON representation of all orders. This might be "
"useful for the import in third-party systems."
@@ -2050,8 +2054,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*innen und "
"Ticketinhaber*innen eingesammelt wurden."
"Textdatei mit allen E-Mail-Adressen, die von Käufern und "
"Ticketinhaber eingesammelt wurden."
#: pretix/base/exporters/mail.py pretix/plugins/reports/exporters.py
msgid "Filter by status"
@@ -2068,15 +2072,30 @@ msgstr ""
"Bestellposition und das dritte eine Zeile für jede zusätzlich erhobene "
"Gebühr."
#: 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
#: 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
msgid "Orders"
msgstr "Bestellungen"
@@ -3859,13 +3878,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*innen-E-Mail-Adresse"
msgstr "Teilnehmer-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*innen-Adresse"
msgstr "Teilnehmer-Adresse"
#: pretix/base/modelimport_orders.py
msgid "Calculate from product"
@@ -5373,8 +5392,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 Studierende "
"nützlich, deren Studierendenausweis noch geprüft werden soll."
"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studenten "
"nützlich, deren Studentenausweis noch geprüft werden soll."
#: pretix/base/models/items.py
msgid ""
@@ -6266,8 +6285,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 Studierende "
"nützlich, deren Studierendenausweis noch geprüft werden soll."
"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studenten "
"nützlich, deren Studentenausweis noch geprüft werden soll."
#: pretix/base/models/orders.py
msgid ""
@@ -7735,7 +7754,7 @@ msgstr "Musterfirma GmbH"
#: pretix/base/pdf.py
msgid "Full attendee address"
msgstr "Volle Teilnehmer*innen-Adresse"
msgstr "Volle Teilnehmer-Adresse"
#: pretix/base/pdf.py
msgid ""
@@ -7753,23 +7772,23 @@ msgstr ""
#: pretix/base/pdf.py
msgid "Attendee street"
msgstr "Teilnehmer*innen-Straße"
msgstr "Teilnehmer-Straße"
#: pretix/base/pdf.py
msgid "Attendee ZIP code"
msgstr "Teilnehmer*innen-PLZ"
msgstr "Teilnehmer-PLZ"
#: pretix/base/pdf.py
msgid "Attendee city"
msgstr "Teilnehmer*innen-Stadt"
msgstr "Teilnehmer-Stadt"
#: pretix/base/pdf.py
msgid "Attendee state"
msgstr "Teilnehmer*innen-Bundesstaat"
msgstr "Teilnehmer-Bundesstaat"
#: pretix/base/pdf.py
msgid "Attendee country"
msgstr "Teilnehmer*innen-Land"
msgstr "Teilnehmer-Land"
#: pretix/base/pdf.py
msgid "Pseudonymization ID (lead scanning)"
@@ -8064,7 +8083,7 @@ msgstr "Herr Mustermann"
#: pretix/plugins/ticketoutputpdf/exporters.py
#, python-brace-format
msgid "Attendee name: {part}"
msgstr "Teilnehmer*innenname: {part}"
msgstr "Teilnehmername: {part}"
#: pretix/base/pdf.py
msgid "Invoice address name for salutation"
@@ -8994,7 +9013,7 @@ msgstr "Veranstaltungsort: {location}"
#, python-brace-format
msgctxt "invoice"
msgid "Attendee: {name}"
msgstr "Teilnehmer*in: {name}"
msgstr "Teilnehmer: {name}"
#: pretix/base/services/invoices.py pretix/plugins/reports/exporters.py
#, python-brace-format
@@ -9951,7 +9970,7 @@ msgstr ""
#: pretix/base/settings.py
msgid "Hide prices on attendee ticket page"
msgstr "Preise auf Teilnehmer*innen-Ticket-Seite verstecken"
msgstr "Preise auf Teilnehmer-Ticket-Seite verstecken"
#: pretix/base/settings.py
msgid ""
@@ -9961,13 +9980,13 @@ msgid ""
"price."
msgstr ""
"Wenn eine Person mehrere Tickets erwirbt und E-Mails an alle "
"Teilnehmer*innen verschickt werden, wird mit dieser Option der Ticketpreis "
"auf der Ticket-Seite der einzelnen Teilnehmer*innen versteckt. Nur die "
"Teilnehmer verschickt werden, wird mit dieser Option der Ticketpreis "
"auf der Ticket-Seite der einzelnen Teilnehmer versteckt. Nur die "
"Person, welche die Tickets kauft, sieht den Preis."
#: pretix/base/settings.py
msgid "Ask for attendee names"
msgstr "Namen der Teilnehmer*innen erfragen"
msgstr "Namen der Teilnehmer erfragen"
#: pretix/base/settings.py
msgid "Ask for a name for all personalized tickets."
@@ -9976,11 +9995,11 @@ msgstr ""
#: pretix/base/settings.py
msgid "Require attendee names"
msgstr "Namen der Teilnehmer*innen erfordern"
msgstr "Namen der Teilnehmer erfordern"
#: pretix/base/settings.py
msgid "Require customers to fill in the names of all attendees."
msgstr "Erfordere die Eingabe aller Teilnehmer*innen-Namen."
msgstr "Erfordere die Eingabe aller Teilnehmer-Namen."
#: pretix/base/settings.py
msgid "Ask for email addresses per ticket"
@@ -10534,8 +10553,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äufer*innen weiter angezeigt, "
"aber Teilnehmer*innen, die ihr Ticket nicht selbst gekauft haben, werden "
"Die Box mit Zahlungsinstruktionen wird Ticketkäufern weiter angezeigt, "
"aber Teilnehmern, die ihr Ticket nicht selbst gekauft haben, werden "
"keine Anzeichen des fehlenden Zahlungseingangs sehen."
#: pretix/base/settings.py
@@ -11046,7 +11065,7 @@ msgstr ""
#: pretix/base/settings.py
msgid "Show number of check-ins to customer"
msgstr "Zeige Anzahl der Check-ins für Kund*innen an"
msgstr "Zeige Anzahl der Check-ins für Kunden an"
#: pretix/base/settings.py
msgid ""
@@ -11057,12 +11076,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 Kund*innen selbst sehen, wie oft sie die "
"Wenn diese Option aktiv ist, können Kunden 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 Kund*innen die bisherige Nutzung des Tickets einsehen "
"erlauben, sodass Kunden die bisherige Nutzung des Tickets einsehen "
"können. Ausgänge oder fehlgeschlagene Scans werden nicht angezeigt und die "
"Kund*innen sehen keine Aufschlüsselung verschiedener Check-in-Listen."
"Kunden sehen keine Aufschlüsselung verschiedener Check-in-Listen."
#: pretix/base/settings.py
msgid "Allow users to download tickets"
@@ -11235,7 +11254,7 @@ msgstr ""
#: pretix/base/settings.py
msgid "Both the attendee and the person who ordered can make changes"
msgstr ""
"Sowohl Besteller*in als auch Teilnehmer*innen können Änderungen vornehmen"
"Sowohl Besteller als auch Teilnehmer können Änderungen vornehmen"
#: pretix/base/settings.py
msgid "Allow customers to modify their information"
@@ -11343,7 +11362,7 @@ msgstr ""
#: pretix/base/settings.py
msgid "Allow individual attendees to change their ticket"
msgstr "Erlaubt einzelnen Teilnehmer*innen ihr Ticket zu ändern"
msgstr "Erlaubt einzelnen Teilnehmern ihr Ticket zu ändern"
#: pretix/base/settings.py
msgid ""
@@ -11355,7 +11374,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*innen Änderungen vornehmen. Teilnehmer*innen können "
"auch einzelne Teilnehmer Änderungen vornehmen. Teilnehmer 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."
@@ -11664,7 +11683,7 @@ msgid ""
"people."
msgstr ""
"Sie können dieses Feld benutzen, um zusätzliche Informationen mit Ihren "
"Teilnehmer*innen zu teilen, wie z.B. Anreise-Informationen oder den Link zu "
"Teilnehmer 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 "
@@ -11900,8 +11919,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*innen als "
"auch Teilnehmer*innen verschickt. Nicht geeignet zum Versand nicht-"
"Bestellung\" von oben auftreten. Sie wird ggf. sowohl an Besteller als "
"auch Teilnehmer 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 "
@@ -15205,7 +15224,7 @@ msgstr "Check-in-Status"
#: pretix/control/forms/filter.py pretix/plugins/checkinlists/exporters.py
msgid "All attendees"
msgstr "Alle Teilnehmer*innen"
msgstr "Alle Teilnehmer"
#: pretix/control/forms/filter.py
#: pretix/control/templates/pretixcontrol/checkin/index.html
@@ -15808,7 +15827,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*innen, "
"z.B. Dieses reduzierte Ticket ist erhältlich für Vollzeitstudent, "
"Arbeitslose und Menschen über 65. Das Ticket enthält Zugang zu allen Teilen "
"der Veranstaltung außer des VIP-Bereiches."
@@ -16119,7 +16138,7 @@ msgstr ""
#: pretix/control/forms/orders.py
msgid "Notify customer by email"
msgstr "Kund*in per E-Mail benachrichtigen"
msgstr "Kunde per E-Mail benachrichtigen"
#: pretix/control/forms/orders.py
msgid "Keep a cancellation fee of"
@@ -17730,7 +17749,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*in verschickt."
msgstr "Eine individuelle E-Mail wurde an einen Teilnehmer verschickt."
#: pretix/control/logdisplay.py
msgid ""
@@ -19535,7 +19554,7 @@ msgstr "Terminal-ID"
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html
msgid "Card holder"
msgstr "Karteninhaber*in"
msgstr "Karteninhaber"
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html
msgid "Card expiration"
@@ -19739,7 +19758,7 @@ msgstr "CSV"
#: pretix/control/templates/pretixcontrol/checkin/index.html
msgid "No attendee record was found."
msgstr "Keine passenden Teilnehmer*innen gefunden."
msgstr "Keine passenden Teilnehmer gefunden."
#: pretix/control/templates/pretixcontrol/checkin/index.html
#: pretix/control/templates/pretixcontrol/datasync/failed_jobs.html
@@ -22500,7 +22519,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*innen\" gewertet, "
"Nur Käufe eines solchen Produkts werden als \"Teilnehmer\" gewertet, "
"z.B. in Statistiken oder in Funktionen von Erweiterungen."
#: pretix/control/templates/pretixcontrol/item/create.html
@@ -22579,7 +22598,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*innen-Daten "
"Das System wird nicht nach einem Namen oder anderen Teilnehmer-Daten "
"fragen. Dies betrifft nur vom System bereitgestellte Felder, eigene Fragen "
"können trotzdem hinzugefügt werden."
@@ -24884,7 +24903,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*innen"
msgstr "Empfohlen für neue Benutzer"
#: pretix/control/templates/pretixcontrol/orders/export.html
#: pretix/control/templates/pretixcontrol/organizers/export.html
@@ -25826,7 +25845,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*innen gedacht."
msgstr "Dieser Dialog ist für fortgeschrittene Anwender gedacht."
#: pretix/control/templates/pretixcontrol/organizers/edit.html
msgid ""
@@ -28227,7 +28246,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 Kund*innen die Warteliste nicht "
"nicht angezeigt. Dies führt dazu, dass Kunden die Warteliste nicht "
"finden können."
#: pretix/control/templates/pretixcontrol/waitinglist/index.html
@@ -28547,11 +28566,11 @@ msgstr "Das ausgewählte List wurde gelöscht."
#: pretix/control/views/dashboards.py
msgid "Attendees (ordered)"
msgstr "Teilnehmende (bestellt)"
msgstr "Teilnehmer (bestellt)"
#: pretix/control/views/dashboards.py
msgid "Attendees (paid)"
msgstr "Teilnehmende (bezahlt)"
msgstr "Teilnehmer (bezahlt)"
#: pretix/control/views/dashboards.py
#, python-brace-format
@@ -30628,7 +30647,7 @@ msgstr "PDF-Sammlungen"
#: pretix/plugins/badges/exporters.py
msgid "Download all attendee badges as one large PDF for printing."
msgstr "Alle Teilnehmer*innen-Badges in einer großen PDF-Datei für den Druck."
msgstr "Alle Teilnehmer-Badges in einer großen PDF-Datei für den Druck."
#: pretix/plugins/badges/exporters.py
#: pretix/plugins/ticketoutputpdf/exporters.py
@@ -30879,7 +30898,7 @@ msgstr "Anderes Bankkonto"
#: pretix/plugins/banktransfer/payment.py
msgid "Name of account holder"
msgstr "Kontoinhaber*in"
msgstr "Kontoinhaber"
#: pretix/plugins/banktransfer/payment.py
msgid ""
@@ -31015,7 +31034,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*in"
msgstr "Kontoinhaber"
#: pretix/plugins/banktransfer/payment.py
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html
@@ -31592,7 +31611,7 @@ msgid ""
"Download a spreadsheet with all attendees that are included in a check-in "
"list."
msgstr ""
"Tabelle (Excel oder CSV) mit allen Teilnehmer*innen, die in einer Check-in-"
"Tabelle (Excel oder CSV) mit allen Teilnehmer, die in einer Check-in-"
"Liste zutrittsberechtigt sind."
#: pretix/plugins/checkinlists/exporters.py
@@ -32708,7 +32727,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*innen verschickt."
msgstr "Rundmail wurde an Kunden oder Teilnehmer verschickt."
#: pretix/plugins/sendmail/signals.py
msgid "Mass email was sent to waiting list entries."
@@ -32740,7 +32759,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*in verschickt."
msgstr "Eine automatisierte E-Mail wurde an eine Teilnehmer verschickt."
#: pretix/plugins/sendmail/signals.py
msgid "An email rule was deleted"
@@ -32773,7 +32792,7 @@ msgstr "Alle nicht eingecheckten Kunden"
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html
msgid "Attendee contact addresses"
msgstr "Teilnehmer*innen-E-Mail-Adressen"
msgstr "Teilnehmer-E-Mail-Adressen"
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html
msgid "All contact addresses"
@@ -32925,14 +32944,14 @@ msgstr ""
#: pretix/plugins/sendmail/views.py
msgid "Orders or attendees"
msgstr "Bestellungen oder Teilnehmer*innen"
msgstr "Bestellungen oder Teilnehmer"
#: 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*innen, alle Ticketinhaber*innen "
"Senden Sie eine E-Mail an alle Ticketkäufer, alle Ticketinhaber "
"oder eine Kombination aus beiden Gruppen."
#: pretix/plugins/sendmail/views.py
@@ -33495,23 +33514,23 @@ msgstr "SEPA-Lastschrift"
#: pretix/plugins/stripe/payment.py
msgid "Account Holder Name"
msgstr "Kontoinhaber*in"
msgstr "Kontoinhaber"
#: pretix/plugins/stripe/payment.py
msgid "Account Holder Street"
msgstr "Straße (Kontoinhaber*in)"
msgstr "Straße (Kontoinhaber)"
#: pretix/plugins/stripe/payment.py
msgid "Account Holder Postal Code"
msgstr "PLZ (Kontoinhaber*in)"
msgstr "PLZ (Kontoinhaber)"
#: pretix/plugins/stripe/payment.py
msgid "Account Holder City"
msgstr "Stadt (Kontoinhaber*in)"
msgstr "Stadt (Kontoinhaber)"
#: pretix/plugins/stripe/payment.py
msgid "Account Holder Country"
msgstr "Land (Kontoinhaber*in)"
msgstr "Land (Kontoinhaber)"
#: pretix/plugins/stripe/payment.py
msgid "Affirm via Stripe"
@@ -33951,7 +33970,7 @@ msgstr "MOTO"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html
msgid "Payer name"
msgstr "Name des Zahlenden"
msgstr "Name des Zahlers"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html
msgid "Payment receipt"
@@ -35261,7 +35280,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 der teilnehmenden Person nicht angegeben"
msgstr "Name des Teilnehmenrs nicht angegeben"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html
msgid "The price of this product was reduced because of an automatic discount."
@@ -37028,12 +37047,12 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html
#: pretix/presale/views/customer.py
msgid "Attendee profiles"
msgstr "Teilnehmer*innen-Profile"
msgstr "Teilnehmer-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*innen-Profile gespeichert."
"In Ihrem Kundenkonto sind noch keine Teilnehmer-Profile gespeichert."
#: pretix/presale/templates/pretixpresale/organizers/customer_registration.html
msgid "Registration"
@@ -38834,7 +38853,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*innen zu erstellen."
#~ "Teilnehmer zu erstellen."
#~ msgid "This plugin allows you to receive payments via PayPal"
#~ msgstr "Dieses Plugin erlaubt, Zahlungen über PayPal anzunehmen"
+2 -2
View File
@@ -153,11 +153,11 @@ msgstr "Bezahlte Bestellungen"
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js
msgid "Attendees (ordered)"
msgstr "Teilnehmende (bestellt)"
msgstr "Teilnehmer (bestellt)"
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js
msgid "Attendees (paid)"
msgstr "Teilnehmende (bezahlt)"
msgstr "Teilnehmer (bezahlt)"
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js
msgid "Total revenue"
@@ -853,7 +853,7 @@ msgstr "Details der Bestellposition"
#: pretix/base/datasync/sourcefields.py
msgid "Attendee details"
msgstr "Details Teilnehmer*in"
msgstr "Details Teilnehmer"
#: pretix/base/datasync/sourcefields.py pretix/base/exporters/answers.py
#: pretix/base/models/items.py pretix/control/navigation.py
@@ -900,11 +900,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 Teilnehmer*in"
msgstr "Name"
#: pretix/base/datasync/sourcefields.py
msgid "Attendee"
msgstr "Teilnehmer*in"
msgstr "Teilnehmer"
#: pretix/base/datasync/sourcefields.py pretix/base/exporters/orderlist.py
#: pretix/base/forms/questions.py pretix/base/models/customers.py
@@ -912,11 +912,11 @@ msgstr "Teilnehmer*in"
#: pretix/control/templates/pretixcontrol/order/index.html
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html
msgid "Attendee email"
msgstr "E-Mail Teilnehmer*in"
msgstr "E-Mail Teilnehmer"
#: pretix/base/datasync/sourcefields.py
msgid "Attendee or order email"
msgstr "E-Mail Teilnehmer*in oder Bestellung"
msgstr "E-Mail Teilnehmer oder Bestellung"
#: pretix/base/datasync/sourcefields.py pretix/base/exporters/orderlist.py
#: pretix/base/pdf.py pretix/control/templates/pretixcontrol/order/index.html
@@ -924,23 +924,23 @@ msgstr "E-Mail Teilnehmer*in oder Bestellung"
#: pretix/plugins/ticketoutputpdf/exporters.py
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html
msgid "Attendee company"
msgstr "Teilnehmer*innen-Firma"
msgstr "Teilnehmer-Firma"
#: pretix/base/datasync/sourcefields.py
msgid "Attendee address street"
msgstr "Teilnehmer*innen-Adresse: Straße"
msgstr "Teilnehmer-Adresse: Straße"
#: pretix/base/datasync/sourcefields.py
msgid "Attendee address ZIP code"
msgstr "Teilnehmer*innen-Adresse: PLZ"
msgstr "Teilnehmer-Adresse: PLZ"
#: pretix/base/datasync/sourcefields.py
msgid "Attendee address city"
msgstr "Teilnehmer*innen-Adresse: Stadt"
msgstr "Teilnehmer-Adresse: Stadt"
#: pretix/base/datasync/sourcefields.py
msgid "Attendee address country"
msgstr "Teilnehmer*innen-Adresse: Land"
msgstr "Teilnehmer-Adresse: Land"
#: pretix/base/datasync/sourcefields.py pretix/base/exporters/orderlist.py
#: pretix/base/pdf.py
@@ -1174,7 +1174,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 Kund*innen im Bestellprozess als "
"ZIP-Datei mit allen Dateien, die von Kunden im Bestellprozess als "
"Antwort auf eine Frage hochgeladen wurden."
#: pretix/base/exporters/answers.py pretix/base/exporters/orderlist.py
@@ -2052,8 +2052,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*innen und "
"Ticketinhaber*innen eingesammelt wurden."
"Textdatei mit allen E-Mail-Adressen, die von Käufer und "
"Ticketinhaber eingesammelt wurden."
#: pretix/base/exporters/mail.py pretix/plugins/reports/exporters.py
msgid "Filter by status"
@@ -3860,13 +3860,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*innen-E-Mail-Adresse"
msgstr "Teilnehmer-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*innen-Adresse"
msgstr "Teilnehmer-Adresse"
#: pretix/base/modelimport_orders.py
msgid "Calculate from product"
@@ -5369,8 +5369,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 Studierende "
"nützlich, deren Studierendenausweis noch geprüft werden soll."
"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studenten "
"nützlich, deren Studentenausweis noch geprüft werden soll."
#: pretix/base/models/items.py
msgid ""
@@ -6262,8 +6262,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 Studierende "
"nützlich, deren Studierendenausweis noch geprüft werden soll."
"dieses Ticket besondere Behandlung braucht. Das ist z.B. für Studenten "
"nützlich, deren Studentenausweis noch geprüft werden soll."
#: pretix/base/models/orders.py
msgid ""
@@ -7727,7 +7727,7 @@ msgstr "Musterfirma"
#: pretix/base/pdf.py
msgid "Full attendee address"
msgstr "Volle Teilnehmer*innen-Adresse"
msgstr "Volle Teilnehmer-Adresse"
#: pretix/base/pdf.py
msgid ""
@@ -7745,23 +7745,23 @@ msgstr ""
#: pretix/base/pdf.py
msgid "Attendee street"
msgstr "Teilnehmer*innen-Straße"
msgstr "Teilnehmer-Straße"
#: pretix/base/pdf.py
msgid "Attendee ZIP code"
msgstr "Teilnehmer*innen-PLZ"
msgstr "Teilnehmer-PLZ"
#: pretix/base/pdf.py
msgid "Attendee city"
msgstr "Teilnehmer*innen-Stadt"
msgstr "Teilnehmer-Stadt"
#: pretix/base/pdf.py
msgid "Attendee state"
msgstr "Teilnehmer*innen-Bundesstaat"
msgstr "Teilnehmer-Bundesstaat"
#: pretix/base/pdf.py
msgid "Attendee country"
msgstr "Teilnehmer*innen-Land"
msgstr "Teilnehmer-Land"
#: pretix/base/pdf.py
msgid "Pseudonymization ID (lead scanning)"
@@ -8056,7 +8056,7 @@ msgstr "Herr Mustermann"
#: pretix/plugins/ticketoutputpdf/exporters.py
#, python-brace-format
msgid "Attendee name: {part}"
msgstr "Teilnehmer*innenname: {part}"
msgstr "Teilnehmer: {part}"
#: pretix/base/pdf.py
msgid "Invoice address name for salutation"
@@ -8983,7 +8983,7 @@ msgstr "Veranstaltungsort: {location}"
#, python-brace-format
msgctxt "invoice"
msgid "Attendee: {name}"
msgstr "Teilnehmer*in: {name}"
msgstr "Teilnehmer: {name}"
#: pretix/base/services/invoices.py pretix/plugins/reports/exporters.py
#, python-brace-format
@@ -9939,7 +9939,7 @@ msgstr ""
#: pretix/base/settings.py
msgid "Hide prices on attendee ticket page"
msgstr "Preise auf Teilnehmer*innen-Ticket-Seite verstecken"
msgstr "Preise auf Teilnehmer-Ticket-Seite verstecken"
#: pretix/base/settings.py
msgid ""
@@ -9949,13 +9949,13 @@ msgid ""
"price."
msgstr ""
"Wenn eine Person mehrere Tickets erwirbt und E-Mails an alle "
"Teilnehmer*innen verschickt werden, wird mit dieser Option der Ticketpreis "
"auf der Ticket-Seite der einzelnen Teilnehmer*innen versteckt. Nur die "
"Teilnehmer verschickt werden, wird mit dieser Option der Ticketpreis "
"auf der Ticket-Seite der einzelnen Teilnehmer versteckt. Nur die "
"Person, welche die Tickets kauft, sieht den Preis."
#: pretix/base/settings.py
msgid "Ask for attendee names"
msgstr "Namen der Teilnehmer*innen erfragen"
msgstr "Namen der Teilnehmer erfragen"
#: pretix/base/settings.py
msgid "Ask for a name for all personalized tickets."
@@ -9964,11 +9964,11 @@ msgstr ""
#: pretix/base/settings.py
msgid "Require attendee names"
msgstr "Namen der Teilnehmer*innen erfordern"
msgstr "Namen der Teilnehmer erfordern"
#: pretix/base/settings.py
msgid "Require customers to fill in the names of all attendees."
msgstr "Erfordere die Eingabe aller Teilnehmer*innen-Namen."
msgstr "Erfordere die Eingabe aller Teilnehmer-Namen."
#: pretix/base/settings.py
msgid "Ask for email addresses per ticket"
@@ -9990,7 +9990,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 jeder Teilnehmer*in benötigst. pretix sendet die Bestellbestätigung "
"von jedem Teilnehmer 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."
@@ -10521,8 +10521,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äufer*innen weiter angezeigt, "
"aber Teilnehmer*innen, die ihr Ticket nicht selbst gekauft haben, werden "
"Die Box mit Zahlungsinstruktionen wird Ticketkäufern weiter angezeigt, "
"aber Teilnehmer, die ihr Ticket nicht selbst gekauft haben, werden "
"keine Anzeichen des fehlenden Zahlungseingangs sehen."
#: pretix/base/settings.py
@@ -11033,7 +11033,7 @@ msgstr ""
#: pretix/base/settings.py
msgid "Show number of check-ins to customer"
msgstr "Zeige Anzahl der Check-ins für Kund*innen an"
msgstr "Zeige Anzahl der Check-ins für Kunden an"
#: pretix/base/settings.py
msgid ""
@@ -11044,12 +11044,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 Kund*innen selbst sehen, wie oft sie die "
"Wenn diese Option aktiv ist, können Kunden 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 Kund*innen die bisherige Nutzung des Tickets einsehen "
"erlauben, sodass Kunden die bisherige Nutzung des Tickets einsehen "
"können. Ausgänge oder fehlgeschlagene Scans werden nicht angezeigt und die "
"Kund*innen sehen keine Aufschlüsselung verschiedener Check-in-Listen."
"Kunden sehen keine Aufschlüsselung verschiedener Check-in-Listen."
#: pretix/base/settings.py
msgid "Allow users to download tickets"
@@ -11222,7 +11222,7 @@ msgstr ""
#: pretix/base/settings.py
msgid "Both the attendee and the person who ordered can make changes"
msgstr ""
"Sowohl Besteller*in als auch Teilnehmer*innen können Änderungen vornehmen"
"Sowohl Besteller als auch Teilnehmer können Änderungen vornehmen"
#: pretix/base/settings.py
msgid "Allow customers to modify their information"
@@ -11330,7 +11330,7 @@ msgstr ""
#: pretix/base/settings.py
msgid "Allow individual attendees to change their ticket"
msgstr "Erlaubt einzelnen Teilnehmer*innen ihr Ticket zu ändern"
msgstr "Erlaubt einzelnen Teilnehmer ihr Ticket zu ändern"
#: pretix/base/settings.py
msgid ""
@@ -11342,7 +11342,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*innen Änderungen vornehmen. Teilnehmer*innen können "
"auch einzelne Teilnehmer Änderungen vornehmen. Teilnehmer 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."
@@ -11525,7 +11525,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 Teilnehmer*innen zu ermöglichen, "
"Wir werden diese Adresse veröffentlichen um Teilnehmern zu ermöglichen, "
"dich zu kontaktieren."
#: pretix/base/settings.py
@@ -11650,7 +11650,7 @@ msgid ""
"people."
msgstr ""
"Du kannst dieses Feld benutzen um zusätzliche Informationen mit deinen "
"Teilnehmer*innen zu teilen, wie z.B. Anreise-Informationen oder den Link zu "
"Teilnehmer 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 "
@@ -11885,8 +11885,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*innen als "
"auch Teilnehmer*innen verschickt. Nicht geeignet zum Versand nicht-"
"Bestellung\" von oben auftreten. Sie wird ggf. sowohl an Besteller als "
"auch Teilnehmer 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 "
@@ -13129,7 +13129,7 @@ msgstr ""
msgid ""
"You cannot require specifying attendee names if you do not ask for them."
msgstr ""
"Du kannst die Angabe von Teilnehmer*innennamen nur erfordern, wenn auch nach "
"Du kannst die Angabe von Teilnehmernamen nur erfordern, wenn auch nach "
"Namen gefragt wird."
#: pretix/base/settings.py
@@ -14818,11 +14818,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*innen werden ihre Tickets im PDF-Format herunterladen können."
"Die Teilnehmer 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*innen ihre Namen ausfüllen"
msgstr "Erfordere, dass alle Teilnehmer ihre Namen ausfüllen"
#: pretix/control/forms/event.py
msgid ""
@@ -14858,7 +14858,7 @@ msgid ""
"then import your bank statements to process the payments within pretix, or "
"mark them as paid manually."
msgstr ""
"Deine Teilnehmer*innen werden angewiesen, das Geld direkt auf dein Bankkonto "
"Deine Teilnehmer 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."
@@ -15181,7 +15181,7 @@ msgstr "Check-in-Status"
#: pretix/control/forms/filter.py pretix/plugins/checkinlists/exporters.py
msgid "All attendees"
msgstr "Alle Teilnehmer*innen"
msgstr "Alle Teilnehmer"
#: pretix/control/forms/filter.py
#: pretix/control/templates/pretixcontrol/checkin/index.html
@@ -15784,7 +15784,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*innen, "
"z.B. Dieses reduzierte Ticket ist erhältlich für Vollzeitstudenten, "
"Arbeitslose und Menschen über 65. Das Ticket enthält Zugang zu allen Teilen "
"der Veranstaltung außer des VIP-Bereiches."
@@ -17706,7 +17706,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*in verschickt."
msgstr "Eine individuelle E-Mail wurde an eine Teilnehmer verschickt."
#: pretix/control/logdisplay.py
msgid ""
@@ -19509,7 +19509,7 @@ msgstr "Terminal-ID"
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html
msgid "Card holder"
msgstr "Karteninhaber*in"
msgstr "Karteninhaber"
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html
msgid "Card expiration"
@@ -19713,7 +19713,7 @@ msgstr "CSV"
#: pretix/control/templates/pretixcontrol/checkin/index.html
msgid "No attendee record was found."
msgstr "Keine passenden Teilnehmer*innen gefunden."
msgstr "Keine passenden Teilnehmer gefunden."
#: pretix/control/templates/pretixcontrol/checkin/index.html
#: pretix/control/templates/pretixcontrol/datasync/failed_jobs.html
@@ -21493,7 +21493,7 @@ msgid ""
"provide ways for your attendees to contact you:"
msgstr ""
"Wenn irgendetwas schiefgeht oder unklar ist, empfehlen wir, dass du deinen "
"Teilnehmer*innen die Möglichkeit gibst, dich zu benachrichtigen:"
"Teilnehmer die Möglichkeit gibst, dich zu benachrichtigen:"
#: pretix/control/templates/pretixcontrol/event/settings.html
msgid "Basics"
@@ -22470,7 +22470,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*innen\" gewertet, "
"Nur Käufe eines solchen Produkts werden als \"Teilnehmer\" gewertet, "
"z.B. in Statistiken oder in Funktionen von Erweiterungen."
#: pretix/control/templates/pretixcontrol/item/create.html
@@ -22549,7 +22549,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*innen-Daten "
"Das System wird nicht nach einem Namen oder anderen Teilnehmer-Daten "
"fragen. Dies betrifft nur vom System bereitgestellte Felder, eigene Fragen "
"können trotzdem hinzugefügt werden."
@@ -23220,9 +23220,9 @@ msgid ""
"ticket. If you provide food, one example might be to ask your users about "
"dietary requirements."
msgstr ""
"Fragen erlauben deinen Besucher*innen, zusätzliche Informationen zu ihrem "
"Fragen erlauben deinen Besucher, zusätzliche Informationen zu ihrem "
"Ticket auszufüllen. Wenn deine Veranstaltung Verpflegung beinhaltet, "
"könntest du z.B. nach Allergien deiner Teilnehmer*innen fragen."
"könntest du z.B. nach Allergien deiner Teilnehmer fragen."
#: pretix/control/templates/pretixcontrol/items/questions.html
msgid "Create a new per-ticket question"
@@ -23428,7 +23428,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*innen aufnehmen kann oder ob die Anzahl begrenzt ist. Du kannst "
"Teilnehmer 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."
@@ -24851,7 +24851,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*innen"
msgstr "Empfohlen für neue Benutzer"
#: pretix/control/templates/pretixcontrol/orders/export.html
#: pretix/control/templates/pretixcontrol/organizers/export.html
@@ -25792,7 +25792,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*innen gedacht."
msgstr "Dieser Dialog ist für fortgeschrittene Anwender gedacht."
#: pretix/control/templates/pretixcontrol/organizers/edit.html
msgid ""
@@ -28188,7 +28188,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 Kund*innen die Warteliste nicht "
"nicht angezeigt. Dies führt dazu, dass Kunden die Warteliste nicht "
"finden können."
#: pretix/control/templates/pretixcontrol/waitinglist/index.html
@@ -28507,11 +28507,11 @@ msgstr "Das ausgewählte List wurde gelöscht."
#: pretix/control/views/dashboards.py
msgid "Attendees (ordered)"
msgstr "Teilnehmende (bestellt)"
msgstr "Teilnehmer (bestellt)"
#: pretix/control/views/dashboards.py
msgid "Attendees (paid)"
msgstr "Teilnehmende (bezahlt)"
msgstr "Teilnehmer (bezahlt)"
#: pretix/control/views/dashboards.py
#, python-brace-format
@@ -30584,7 +30584,7 @@ msgstr "PDF-Sammlungen"
#: pretix/plugins/badges/exporters.py
msgid "Download all attendee badges as one large PDF for printing."
msgstr "Alle Teilnehmer*innen-Badges in einer großen PDF-Datei für den Druck."
msgstr "Alle Teilnehmer-Badges in einer großen PDF-Datei für den Druck."
#: pretix/plugins/badges/exporters.py
#: pretix/plugins/ticketoutputpdf/exporters.py
@@ -30834,7 +30834,7 @@ msgstr "Anderes Bankkonto"
#: pretix/plugins/banktransfer/payment.py
msgid "Name of account holder"
msgstr "Kontoinhaber*in"
msgstr "Kontoinhaber"
#: pretix/plugins/banktransfer/payment.py
msgid ""
@@ -30970,7 +30970,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*in"
msgstr "Kontoinhaber"
#: pretix/plugins/banktransfer/payment.py
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html
@@ -31548,7 +31548,7 @@ msgid ""
"Download a spreadsheet with all attendees that are included in a check-in "
"list."
msgstr ""
"Tabelle (Excel oder CSV) mit allen Teilnehmer*innen, die in einer Check-in-"
"Tabelle (Excel oder CSV) mit allen Teilnehmer, die in einer Check-in-"
"Liste zutrittsberechtigt sind."
#: pretix/plugins/checkinlists/exporters.py
@@ -32660,7 +32660,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*innen verschickt."
msgstr "Rundmail wurde an Kunden oder Teilnehmer verschickt."
#: pretix/plugins/sendmail/signals.py
msgid "Mass email was sent to waiting list entries."
@@ -32692,7 +32692,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*in verschickt."
msgstr "Eine automatisierte E-Mail wurde an einen Teilnehmer verschickt."
#: pretix/plugins/sendmail/signals.py
msgid "An email rule was deleted"
@@ -32725,7 +32725,7 @@ msgstr "Alle nicht eingecheckten Kunden"
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html
msgid "Attendee contact addresses"
msgstr "Teilnehmer*innen-E-Mail-Adressen"
msgstr "Teilnehmer-E-Mail-Adressen"
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html
msgid "All contact addresses"
@@ -32879,14 +32879,14 @@ msgstr ""
#: pretix/plugins/sendmail/views.py
msgid "Orders or attendees"
msgstr "Bestellungen oder Teilnehmer*innen"
msgstr "Bestellungen oder Teilnehmer"
#: 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*innen, alle Ticketinhaber*innen oder "
"Sende eine E-Mail an alle Ticketkäufer, alle Ticketinhaber oder "
"eine Kombination aus beiden Gruppen."
#: pretix/plugins/sendmail/views.py
@@ -33447,23 +33447,23 @@ msgstr "SEPA-Lastschrift"
#: pretix/plugins/stripe/payment.py
msgid "Account Holder Name"
msgstr "Kontoinhaber*in"
msgstr "Kontoinhaber"
#: pretix/plugins/stripe/payment.py
msgid "Account Holder Street"
msgstr "Straße (Kontoinhaber*in)"
msgstr "Straße (Kontoinhaber)"
#: pretix/plugins/stripe/payment.py
msgid "Account Holder Postal Code"
msgstr "PLZ (Kontoinhaber*in)"
msgstr "PLZ (Kontoinhaber)"
#: pretix/plugins/stripe/payment.py
msgid "Account Holder City"
msgstr "Stadt (Kontoinhaber*in)"
msgstr "Stadt (Kontoinhaber)"
#: pretix/plugins/stripe/payment.py
msgid "Account Holder Country"
msgstr "Land (Kontoinhaber*in)"
msgstr "Land (Kontoinhaber)"
#: pretix/plugins/stripe/payment.py
msgid "Affirm via Stripe"
@@ -33901,7 +33901,7 @@ msgstr "MOTO"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html
msgid "Payer name"
msgstr "Name des Zahlenden"
msgstr "Name des Zahlers"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html
msgid "Payment receipt"
@@ -35206,7 +35206,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 der teilnehmenden Person nicht angegeben"
msgstr "Name des Teilnehmenrs nicht angegeben"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html
msgid "The price of this product was reduced because of an automatic discount."
@@ -36971,12 +36971,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*innen-Adresse"
msgstr "Teilnehmer-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*innen-Profile gespeichert."
"In deinem Kundenkonto sind noch keine Teilnehmer-Profile gespeichert."
#: pretix/presale/templates/pretixpresale/organizers/customer_registration.html
msgid "Registration"
@@ -38722,7 +38722,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*innen zu erstellen."
#~ "Teilnehmer zu erstellen."
#~ msgid "This plugin allows you to receive payments via PayPal"
#~ msgstr "Dieses Plugin erlaubt, Zahlungen über PayPal anzunehmen"
@@ -39296,7 +39296,7 @@ msgstr "Kosovo"
#~ msgstr "Biete Ticket-Download bereits vor Bezahlung einer Bestellung an"
#~ msgid "Attendee names"
#~ msgstr "Teilnehmer*innennamen"
#~ msgstr "Teilnehmername"
#~ msgid "Enable output"
#~ msgstr "Aktivieren"
@@ -39573,7 +39573,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*innen selbstständig "
#~ "Wenn diese Option aktiviert ist, können Teilnehmer 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 "Teilnehmende (bestellt)"
msgstr "Teilnehmer (bestellt)"
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js
msgid "Attendees (paid)"
msgstr "Teilnehmende (bezahlt)"
msgstr "Teilnehmer (bezahlt)"
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js
msgid "Total revenue"
+81 -49
View File
@@ -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-10-03 23:00+0000\n"
"Last-Translator: Oksigenia <github@oksigenia.cc>\n"
"PO-Revision-Date: 2026-09-28 11:01+0000\n"
"Last-Translator: Tim <plicnetwork@gmail.com>\n"
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix/"
"es/>\n"
"Language: es\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.10\n"
"X-Generator: Weblate 2026.9.1\n"
#: pretix/_base_settings.py
msgid "English"
@@ -1793,12 +1793,16 @@ msgid "Transmission type"
msgstr "Tipo de transmisión"
#: pretix/base/exporters/invoices.py
#, fuzzy
#| msgid "Transmission type"
msgid "Transmission status"
msgstr "Estado de la transmisión"
msgstr "Tipo de transmisión"
#: pretix/base/exporters/invoices.py
#, fuzzy
#| msgid "Transmission type"
msgid "Transmission date"
msgstr "Fecha de emisión"
msgstr "Tipo de transmisión"
#: pretix/base/exporters/invoices.py
msgid "Cancellation"
@@ -3285,7 +3289,7 @@ msgstr ""
#: pretix/base/forms/validators.py pretix/control/views/event.py
#, python-format
msgid "Invalid placeholder: {%(value)s}"
msgstr "Marcador de posición no válido: {%(value)s}"
msgstr "Marcador de posición no válido: {%(value)ss}"
#: pretix/base/forms/widgets.py
#, python-format
@@ -4454,8 +4458,10 @@ msgid "Initialization date"
msgstr "Fecha de inicialización"
#: pretix/base/models/devices.py
#, fuzzy
#| msgid "Save to profile"
msgid "Security profile"
msgstr "Perfil de seguridad"
msgstr "Guardar en perfil"
#: pretix/base/models/discount.py
msgctxt "subevent"
@@ -5898,8 +5904,10 @@ msgid "Maximum value"
msgstr "Valor máximo"
#: pretix/base/models/items.py
#, fuzzy
#| msgid "Maximum length"
msgid "Minimum length"
msgstr "Longitud mínima"
msgstr "Longitud máxima"
#: pretix/base/models/items.py
msgid "Maximum length"
@@ -5970,8 +5978,10 @@ msgid "The maximum value must not be lower than the minimum value."
msgstr "El valor máximo no debe ser inferior al mínimo."
#: pretix/base/models/items.py
#, fuzzy
#| msgid "The maximum value must not be lower than the minimum value."
msgid "The maximum length must not be shorter than the minimum length."
msgstr "La longitud máxima no debe ser inferior a la longitud mínima."
msgstr "El valor máximo no debe ser inferior al mínimo."
#: pretix/base/models/items.py
msgid ""
@@ -10571,8 +10581,10 @@ msgstr ""
"después de la `Última fecha de pagos' configurada anteriormente."
#: pretix/base/settings.py
#, fuzzy
#| msgid "Generate invoices for Sales channels"
msgid "Allow postponed payment choice for sales channels"
msgstr "Permitir la opción de pago aplazado en los canales de venta"
msgstr "Generar facturas para canales de ventas"
#: pretix/base/settings.py
msgid ""
@@ -10580,9 +10592,6 @@ 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 ""
"Si en un canal de venta se permite el pago aplazado, los clientes pueden "
"completar su pedido sin seleccionar una forma de pago. Esto resulta útil "
"cuando los pedidos no los realiza la misma persona que efectúa el pago."
#: pretix/base/settings.py
msgid "Show start date"
@@ -16851,7 +16860,7 @@ msgstr "tercero"
#: pretix/control/forms/rrule.py
msgctxt "rrule"
msgid "fourth"
msgstr "cuarto"
msgstr ""
#: pretix/control/forms/rrule.py
msgctxt "rrule"
@@ -17984,20 +17993,28 @@ msgid "Queued emails have been aborted."
msgstr "Los correos electrónicos en cola se han cancelado."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The property has been created."
msgid "An organizer meta property has been created."
msgstr "Se ha creado una metapropiedad de organizador."
msgstr "La propiedad ha sido creada."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The selected property has been deleted."
msgid "An organizer meta property has been deleted."
msgstr "Se ha eliminado una metapropiedad del organizador."
msgstr "La propiedad seleccionada ha sido eliminada."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The organizer has been changed."
msgid "An organizer meta property has been changed."
msgstr "Se ha modificado una metapropiedad del organizador."
msgstr "El pedido se ha cambiado."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The product has been reordered."
msgid "An organizer meta property has been reordered."
msgstr "Se ha cambiado el orden de una metapropiedad del organizador."
msgstr "El producto se ha pedido de nuevo."
#: pretix/control/logdisplay.py
msgid "Gift card acceptance for another organizer has been added."
@@ -18211,8 +18228,6 @@ msgstr "Se ha generado un código de emergencia de doble factor."
#: pretix/control/logdisplay.py
msgid "Drift and throttle values for two-factor devices have been reset."
msgstr ""
"Se han restablecido los valores de deriva y aceleración para los "
"dispositivos de dos factores."
#: pretix/control/logdisplay.py
#, python-brace-format
@@ -19165,8 +19180,10 @@ msgid "Cancel"
msgstr "Cancelar"
#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html
#, fuzzy
#| msgid "Authorized apps"
msgid "Authorize"
msgstr "Autorizar"
msgstr "Aplicaciones autorizadas"
#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html
msgid "Error:"
@@ -22054,10 +22071,14 @@ msgstr ""
"hacer referencia a este evento."
#: pretix/control/templates/pretixcontrol/events/create_basics.html
#, fuzzy
#| msgid ""
#| "We strongly recommend against using short forms of more then 16 "
#| "characters."
msgid ""
"We strongly recommend against using short forms of more than 16 characters."
msgstr ""
"Recomendamos encarecidamente no utilizar abreviaturas de más de 16 "
"Recomendamos encarecidamente no utilizar formularios cortos de más de 16 "
"caracteres."
#: pretix/control/templates/pretixcontrol/events/create_basics.html
@@ -27936,23 +27957,27 @@ msgstr "Autenticación backend"
#: pretix/control/templates/pretixcontrol/users/form.html
msgid "Reset drift and throttle"
msgstr "Restablecer la desviación y el control"
msgstr ""
#: pretix/control/templates/pretixcontrol/users/form.html
#, fuzzy
#| msgid "Disable two-factor authentication"
msgid "Available two-factor authentication methods"
msgstr "Métodos de autenticación de dos factores disponibles"
msgstr "Desactivar la autenticación de dos factores"
#: pretix/control/templates/pretixcontrol/users/form.html
#, python-format
#, fuzzy, python-format
#| msgid "Expired since %(date)s"
msgid "1 failed attempt since %(date)s"
msgid_plural "%(cnt)s failed attempts since %(date)s"
msgstr[0] "1 intento fallido desde %(date)s"
msgstr[1] "%(cnt)s intentos fallidos desde el %(date)s"
msgstr[0] "Vencido desde el %(date)s"
msgstr[1] "Vencido desde el %(date)s"
#: pretix/control/templates/pretixcontrol/users/form.html
#, python-format
#, fuzzy, python-format
#| msgid "Valid until %(date)s"
msgid "Currently locked until %(date)s"
msgstr "Actualmente bloqueado hasta el %(date)s"
msgstr "Válido hasta el %(date)s"
#: pretix/control/templates/pretixcontrol/users/form.html
msgid "Team memberships"
@@ -28494,18 +28519,20 @@ msgid "Invalid code, please try again."
msgstr "Código inválido, por favor inténtelo de nuevo."
#: pretix/control/views/auth.py
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid "Invalid code, please try again."
msgid "Invalid code. Please try again after waiting {value} minute."
msgid_plural "Invalid code. Please try again after waiting {value} minutes."
msgstr[0] "Código no válido. Inténtalo de nuevo tras esperar {value} minutos."
msgstr[1] "ódigo no válido. Inténtalo de nuevo tras esperar {value} minutos."
msgstr[0] "Código inválido, por favor inténtelo de nuevo."
msgstr[1] "Código inválido, por favor inténtelo de nuevo."
#: pretix/control/views/auth.py
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid "Invalid code, please try again."
msgid "Invalid code. Please try again after waiting {value} second."
msgid_plural "Invalid code. Please try again after waiting {value} seconds."
msgstr[0] "Código no válido. Inténtalo de nuevo tras esperar {value} segundo."
msgstr[1] "Código no válido. Inténtalo de nuevo tras esperar {value} segundos."
msgstr[0] "Código inválido, por favor inténtelo de nuevo."
msgstr[1] "Código inválido, por favor inténtelo de nuevo."
#: pretix/control/views/checkin.py
msgid "The selected check-ins have been reverted."
@@ -29378,8 +29405,10 @@ msgid "You entered an order in an event with a different currency."
msgstr "Ha introducido un pedido en un evento con una moneda diferente."
#: pretix/control/views/orders.py
#, fuzzy
#| msgid "You entered an order in an event with a different currency."
msgid "You entered an order in an event that you do not have access to."
msgstr "Ha introducido un pedido en un evento al que no tienes acceso."
msgstr "Ha introducido un pedido en un evento con una moneda diferente."
#: pretix/control/views/orders.py
msgid ""
@@ -30267,9 +30296,10 @@ msgstr ""
"código de emergencia anterior para este usuario permanecerá activo."
#: pretix/control/views/users.py
#, fuzzy
#| msgid "The password has been reset."
msgid "The drift values for TOTP devices have been reset."
msgstr ""
"Se han restablecido los valores de desviación para los dispositivos TOTP."
msgstr "La contraseña ha sido reiniciada."
#: pretix/control/views/users.py
msgid "The new user has been created."
@@ -30284,12 +30314,14 @@ msgid "Bypass quota"
msgstr "Cuota de bypass"
#: pretix/control/views/vouchers.py
#, fuzzy
#| msgid "Widget"
msgid "Budget"
msgstr "Presupuesto"
msgstr "Widget"
#: pretix/control/views/vouchers.py
msgid "Budget used"
msgstr "Presupuesto utilizado"
msgstr ""
#: pretix/control/views/vouchers.py
msgid "The requested voucher does not exist."
@@ -34990,29 +35022,29 @@ msgid ""
"Not sure yet? You can complete your order first and then select a payment "
"method later."
msgstr ""
"¿Aún no estás seguro? Puedes completar primero tu pedido y seleccionar la "
"forma de pago más tarde."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
msgid ""
"To do so, please first remove the payment methods you already selected above."
msgstr ""
"Para ello, elimina primero los métodos de pago que ya hayas seleccionado "
"anteriormente."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, python-format
#, fuzzy, python-format
#| msgid "Your event needs to be over to use this feature."
msgid "Your payment needs to be completed within %(minutes)s minutes."
msgstr "Su pago debe completarse en un plazo de %(minutes)s minutos."
msgstr "Su evento debe haber terminado para utilizar esta función."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, python-format
#, fuzzy, python-format
#| msgid "Your event needs to be over to use this feature."
msgid "Your payment needs to be completed by %(deadline)s."
msgstr "Su pago debe completarse antes de %(deadline)s."
msgstr "Su evento debe haber terminado para utilizar esta función."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, fuzzy
#| msgid "Proceed with reset"
msgid "Proceed without selection"
msgstr "Continuar sin seleccionar nada"
msgstr "Continuar con el restablecimiento"
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html
msgid "Before we continue, we need you to answer some questions."
+4 -4
View File
@@ -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-10-03 23:00+0000\n"
"Last-Translator: Oksigenia <github@oksigenia.cc>\n"
"PO-Revision-Date: 2026-06-29 17:00+0000\n"
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix-"
"js/es/>\n"
"Language: es\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.10\n"
"X-Generator: Weblate 2026.6.1\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js
msgid "Marked as paid"
@@ -780,7 +780,7 @@ msgstr "El organizador retiene %(currency)s %(amount)s"
#: pretix/static/pretixpresale/js/ui/main.js
msgid "You get %(currency)s %(amount)s back"
msgstr "Se le devolverá %(currency)s %(amount)s"
msgstr "Se le devolverá %(moneda)s %(cantidad)s"
#: pretix/static/pretixpresale/js/ui/main.js
msgid "Please enter the amount the organizer can keep."
+81 -51
View File
@@ -4,10 +4,10 @@ msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-10-01 09:28+0000\n"
"PO-Revision-Date: 2026-09-30 07:25+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"
@@ -1793,12 +1793,16 @@ msgid "Transmission type"
msgstr "Type de transmission"
#: pretix/base/exporters/invoices.py
#, fuzzy
#| msgid "Transmission type"
msgid "Transmission status"
msgstr "État de la transmission"
msgstr "Type de transmission"
#: pretix/base/exporters/invoices.py
#, fuzzy
#| msgid "Transmission type"
msgid "Transmission date"
msgstr "Date de transmission"
msgstr "Type de transmission"
#: pretix/base/exporters/invoices.py
msgid "Cancellation"
@@ -4464,8 +4468,10 @@ msgid "Initialization date"
msgstr "Date d'initialisation"
#: pretix/base/models/devices.py
#, fuzzy
#| msgid "Save to profile"
msgid "Security profile"
msgstr "Profil de sécurité"
msgstr "Enregistrer dans le profil"
#: pretix/base/models/discount.py
msgctxt "subevent"
@@ -5919,8 +5925,10 @@ msgid "Maximum value"
msgstr "Valeur maximale"
#: pretix/base/models/items.py
#, fuzzy
#| msgid "Maximum length"
msgid "Minimum length"
msgstr "Longueur minimale"
msgstr "Longueur maximale"
#: pretix/base/models/items.py
msgid "Maximum length"
@@ -5992,9 +6000,10 @@ msgid "The maximum value must not be lower than the minimum value."
msgstr "La valeur maximale ne doit pas être inférieure à la valeur minimale."
#: pretix/base/models/items.py
#, fuzzy
#| msgid "The maximum value must not be lower than the minimum value."
msgid "The maximum length must not be shorter than the minimum length."
msgstr ""
"La longueur maximale ne doit pas être inférieure à la longueur minimale."
msgstr "La valeur maximale ne doit pas être inférieure à la valeur minimale."
#: pretix/base/models/items.py
msgid ""
@@ -10638,8 +10647,10 @@ msgstr ""
"accepté après la 'dernière date de paiement' configurée ci-dessus."
#: pretix/base/settings.py
#, fuzzy
#| msgid "Generate invoices for Sales channels"
msgid "Allow postponed payment choice for sales channels"
msgstr "Autoriser l'option de paiement différé pour les canaux de vente"
msgstr "Générer des factures pour les canaux de vente"
#: pretix/base/settings.py
msgid ""
@@ -10647,10 +10658,6 @@ 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 ""
"Si le paiement différé est autorisé sur un canal de vente, les clients "
"peuvent finaliser leur commande sans sélectionner de mode de paiement. Cette "
"fonctionnalité est utile lorsque la commande n'est pas passée par la même "
"personne que celle qui effectue le paiement."
#: pretix/base/settings.py
msgid "Show start date"
@@ -17010,7 +17017,7 @@ msgstr "troisième"
#: pretix/control/forms/rrule.py
msgctxt "rrule"
msgid "fourth"
msgstr "quatrième"
msgstr ""
#: pretix/control/forms/rrule.py
msgctxt "rrule"
@@ -18130,20 +18137,28 @@ msgid "Queued emails have been aborted."
msgstr "Les e-mails en attente ont été annulés."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The property has been created."
msgid "An organizer meta property has been created."
msgstr "Une méta-propriété d'organisateur a été créée."
msgstr "La propriété a été créée."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The selected property has been deleted."
msgid "An organizer meta property has been deleted."
msgstr "Une méta-propriété d'organisateur a été supprimée."
msgstr "La propriété sélectionnée a été supprimée."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The organizer has been changed."
msgid "An organizer meta property has been changed."
msgstr "Une méta-propriété d'organisateur a été modifiée."
msgstr "L’organisateur a été modifié."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The product has been reordered."
msgid "An organizer meta property has been reordered."
msgstr "Une méta-propriété d'organisateur a été réorganisée."
msgstr "Le produit a été commandé à nouveau."
#: pretix/control/logdisplay.py
msgid "Gift card acceptance for another organizer has been added."
@@ -18359,8 +18374,6 @@ msgstr "Un code d'urgence à deux facteurs a été généré."
#: pretix/control/logdisplay.py
msgid "Drift and throttle values for two-factor devices have been reset."
msgstr ""
"Les valeurs de déviation et de puissance pour les appareils à deux facteurs "
"ont été réinitialisées."
#: pretix/control/logdisplay.py
#, python-brace-format
@@ -19309,8 +19322,10 @@ msgid "Cancel"
msgstr "Annuler"
#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html
#, fuzzy
#| msgid "Authorized apps"
msgid "Authorize"
msgstr "Autoriser"
msgstr "App. autorisées"
#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html
msgid "Error:"
@@ -22216,11 +22231,15 @@ msgstr ""
"comme abréviations pour faire référence à cet événement."
#: pretix/control/templates/pretixcontrol/events/create_basics.html
#, fuzzy
#| msgid ""
#| "We strongly recommend against using short forms of more then 16 "
#| "characters."
msgid ""
"We strongly recommend against using short forms of more than 16 characters."
msgstr ""
"Nous déconseillons vivement d'utiliser des abréviations de plus de 16 "
"caractères."
"Nous vous déconseillons fortement d'utiliser des formulaires courts de plus "
"de 16 caractères."
#: pretix/control/templates/pretixcontrol/events/create_basics.html
msgid "Display settings"
@@ -28152,23 +28171,27 @@ msgstr "Backend d’authentification"
#: pretix/control/templates/pretixcontrol/users/form.html
msgid "Reset drift and throttle"
msgstr "Réinitialisation de la déviation et de la puissance"
msgstr ""
#: pretix/control/templates/pretixcontrol/users/form.html
#, fuzzy
#| msgid "Disable two-factor authentication"
msgid "Available two-factor authentication methods"
msgstr "Méthodes d'authentification à deux facteurs disponibles"
msgstr "Désactiver l'authentification à deux facteurs"
#: pretix/control/templates/pretixcontrol/users/form.html
#, python-format
#, fuzzy, python-format
#| msgid "Expired since %(date)s"
msgid "1 failed attempt since %(date)s"
msgid_plural "%(cnt)s failed attempts since %(date)s"
msgstr[0] "1 tentative infructueuse depuis %(date)s"
msgstr[1] "%(cnt)s tentatives infructueuses depuis le %(date)s"
msgstr[0] "Expiré depuis le %(date)s"
msgstr[1] "Expiré depuis le %(date)s"
#: pretix/control/templates/pretixcontrol/users/form.html
#, python-format
#, fuzzy, python-format
#| msgid "Valid until %(date)s"
msgid "Currently locked until %(date)s"
msgstr "Actuellement verrouillé jusqu'au %(date)s"
msgstr "Valable jusqu'au %(date)s"
#: pretix/control/templates/pretixcontrol/users/form.html
msgid "Team memberships"
@@ -28714,19 +28737,20 @@ msgid "Invalid code, please try again."
msgstr "Code invalide, veuillez réessayer."
#: pretix/control/views/auth.py
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid "Invalid code, please try again."
msgid "Invalid code. Please try again after waiting {value} minute."
msgid_plural "Invalid code. Please try again after waiting {value} minutes."
msgstr[0] "Code invalide. Veuillez réessayer après avoir patienté {value} minute."
msgstr[1] "Code invalide. Veuillez réessayer après avoir patienté {value} minutes."
msgstr[0] "Code invalide, veuillez réessayer."
msgstr[1] "Code invalide, veuillez réessayer."
#: pretix/control/views/auth.py
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid "Invalid code, please try again."
msgid "Invalid code. Please try again after waiting {value} second."
msgid_plural "Invalid code. Please try again after waiting {value} seconds."
msgstr[0] "Code invalide. Veuillez réessayer après avoir patienté {value} seconde."
msgstr[1] ""
"Code invalide. Veuillez réessayer après avoir patienté {value} secondes."
msgstr[0] "Code invalide, veuillez réessayer."
msgstr[1] "Code invalide, veuillez réessayer."
#: pretix/control/views/checkin.py
msgid "The selected check-ins have been reverted."
@@ -29608,9 +29632,11 @@ msgstr ""
"Vous avez passé une commande dans un événement dont la devise est différente."
#: pretix/control/views/orders.py
#, fuzzy
#| msgid "You entered an order in an event with a different currency."
msgid "You entered an order in an event that you do not have access to."
msgstr ""
"Vous avez saisi une commande dans un événement auquel vous n'avez pas accès."
"Vous avez passé une commande dans un événement dont la devise est différente."
#: pretix/control/views/orders.py
msgid ""
@@ -30509,8 +30535,10 @@ msgstr ""
"d'urgence précédents de cet utilisateur sont toujours actifs."
#: pretix/control/views/users.py
#, fuzzy
#| msgid "The password has been reset."
msgid "The drift values for TOTP devices have been reset."
msgstr "Les valeurs de dérive des appareils TOTP ont été réinitialisées."
msgstr "Le mot de passe a été réinitialisé."
#: pretix/control/views/users.py
msgid "The new user has been created."
@@ -30525,12 +30553,14 @@ msgid "Bypass quota"
msgstr "Outrepasser le quota"
#: pretix/control/views/vouchers.py
#, fuzzy
#| msgid "Widget"
msgid "Budget"
msgstr "Budget"
msgstr "Widget"
#: pretix/control/views/vouchers.py
msgid "Budget used"
msgstr "Budget utilisé"
msgstr ""
#: pretix/control/views/vouchers.py
msgid "The requested voucher does not exist."
@@ -35279,29 +35309,29 @@ msgid ""
"Not sure yet? You can complete your order first and then select a payment "
"method later."
msgstr ""
"Vous hésitez encore ? Vous pouvez d'abord finaliser votre commande, puis "
"choisir un mode de paiement ultérieurement."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
msgid ""
"To do so, please first remove the payment methods you already selected above."
msgstr ""
"Pour ce faire, veuillez d'abord supprimer les moyens de paiement que vous "
"avez déjà sélectionnés ci-dessus."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, python-format
#, fuzzy, python-format
#| msgid "The payment has to be completed before %(date)s."
msgid "Your payment needs to be completed within %(minutes)s minutes."
msgstr "otre paiement doit être effectué dans les %(minutes)s minutes."
msgstr "Le paiement doit être effectué avant le %(date)s."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, python-format
#, fuzzy, python-format
#| msgid "The payment has to be completed before %(date)s."
msgid "Your payment needs to be completed by %(deadline)s."
msgstr "Votre paiement doit être effectué avant le %(deadline)s."
msgstr "Le paiement doit être effectué avant le %(date)s."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, fuzzy
#| msgid "Proceed with reset"
msgid "Proceed without selection"
msgstr "Continuer sans sélectionner"
msgstr "Procéder à la réinitialisation"
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html
msgid "Before we continue, we need you to answer some questions."
+33 -11
View File
@@ -8,7 +8,7 @@ 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-09-30 17:00+0000\n"
"PO-Revision-Date: 2026-08-01 21:00+0000\n"
"Last-Translator: szurofkamarciidfbe08444ef04788 <szurofkamarcii@gmail.com>\n"
"Language-Team: Hungarian <https://translate.pretix.eu/projects/pretix/pretix/"
"hu/>\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.9.1\n"
"X-Generator: Weblate 2026.7.1\n"
#: pretix/_base_settings.py
msgid "English"
@@ -93,7 +93,7 @@ msgstr "Héber"
#: pretix/_base_settings.py
msgid "Hungarian"
msgstr "Magyar"
msgstr ""
#: pretix/_base_settings.py
msgid "Indonesian"
@@ -426,8 +426,10 @@ msgid "You cannot exchange a medium for a medium."
msgstr "Nem cserélhet adathordozót adathordozóra."
#: pretix/api/views/checkin.py
#, fuzzy
#| msgid "Product does not support medium exchange."
msgid "You cannot simulate a medium exchange."
msgstr "Az adathordozó szimuláció nem engedélyezett."
msgstr "A termék nem támogatja az adathordozó-cserét."
#: pretix/api/views/oauth.py pretix/control/logdisplay.py
#, python-brace-format
@@ -1777,12 +1779,16 @@ msgid "Transmission type"
msgstr "Továbbítás típusa"
#: pretix/base/exporters/invoices.py
#, fuzzy
#| msgid "Transmission type"
msgid "Transmission status"
msgstr "Továbbítás állapot"
msgstr "Továbbítás típusa"
#: pretix/base/exporters/invoices.py
#, fuzzy
#| msgid "Transmission type"
msgid "Transmission date"
msgstr "Továbbítás dátum"
msgstr "Továbbítás típusa"
#: pretix/base/exporters/invoices.py
msgid "Cancellation"
@@ -3072,6 +3078,9 @@ msgid "Street"
msgstr "Utca"
#: pretix/base/forms/questions.py
#, fuzzy
#| msgctxt "address"
#| msgid "State"
msgid "State"
msgstr "Állam/tartomány"
@@ -4420,8 +4429,10 @@ msgid "Initialization date"
msgstr "Inicializálás dátuma"
#: pretix/base/models/devices.py
#, fuzzy
#| msgid "Save to profile"
msgid "Security profile"
msgstr "Biztonsági profil"
msgstr "Mentés a profilhoz"
#: pretix/base/models/discount.py
msgctxt "subevent"
@@ -5853,8 +5864,10 @@ msgid "Maximum value"
msgstr "Maximális érték"
#: pretix/base/models/items.py
#, fuzzy
#| msgid "Maximum length"
msgid "Minimum length"
msgstr "Minimum hossz"
msgstr "Maximális hossz"
#: pretix/base/models/items.py
msgid "Maximum length"
@@ -5925,8 +5938,10 @@ msgid "The maximum value must not be lower than the minimum value."
msgstr "A maximális érték nem lehet kisebb a minimális értéknél."
#: pretix/base/models/items.py
#, fuzzy
#| msgid "The maximum value must not be lower than the minimum value."
msgid "The maximum length must not be shorter than the minimum length."
msgstr "A maximális hossz nem lehet rövidebb a minimális hossznál."
msgstr "A maximális érték nem lehet kisebb a minimális értéknél."
#: pretix/base/models/items.py
msgid ""
@@ -7474,6 +7489,9 @@ msgid "The payment for this invoice has already been received."
msgstr "A számla már ki lett fizetve."
#: pretix/base/payment.py
#, fuzzy
#| msgid ""
#| "This payment is already being processed and can not be canceled any more."
msgid ""
"This payment is already being processed and cannot be canceled any more."
msgstr "Ez a fizetés már feldolgozás alatt áll, és többé nem törölhető."
@@ -8249,12 +8267,16 @@ msgid "Presale end"
msgstr "Elővétel vége"
#: pretix/base/reldate.py
#, fuzzy
#| msgid "Order email"
msgid "Order creation"
msgstr "Rendelés létrehozás"
msgstr "Rendelés e-mail címe"
#: pretix/base/reldate.py
#, fuzzy
#| msgid "Order expired"
msgid "Order expiry"
msgstr "Rendelés lejárat"
msgstr "Rendelés lejárt"
#: pretix/base/reldate.py
msgid "before"
+78 -41
View File
@@ -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-10-05 14:00+0000\n"
"Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n"
"PO-Revision-Date: 2026-09-07 18:00+0000\n"
"Last-Translator: Yasunobu YesNo Kawaguchi <kawaguti@gmail.com>\n"
"Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/pretix/"
"ja/>\n"
"Language: ja\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 2026.10\n"
"X-Generator: Weblate 2026.9\n"
#: pretix/_base_settings.py
msgid "English"
@@ -1776,12 +1776,16 @@ msgid "Transmission type"
msgstr "送信タイプ"
#: pretix/base/exporters/invoices.py
#, fuzzy
#| msgid "Transmission type"
msgid "Transmission status"
msgstr "送信ステータス"
msgstr "送信タイプ"
#: pretix/base/exporters/invoices.py
#, fuzzy
#| msgid "Transmission type"
msgid "Transmission date"
msgstr "送信日"
msgstr "送信タイプ"
#: pretix/base/exporters/invoices.py
msgid "Cancellation"
@@ -4396,8 +4400,10 @@ msgid "Initialization date"
msgstr "初期化日"
#: pretix/base/models/devices.py
#, fuzzy
#| msgid "Save to profile"
msgid "Security profile"
msgstr "セキュリティ・プロフィール"
msgstr "プロフィールに保存します"
#: pretix/base/models/discount.py
msgctxt "subevent"
@@ -5773,8 +5779,10 @@ msgid "Maximum value"
msgstr "最大値"
#: pretix/base/models/items.py
#, fuzzy
#| msgid "Maximum length"
msgid "Minimum length"
msgstr "最小長"
msgstr "最大長"
#: pretix/base/models/items.py
msgid "Maximum length"
@@ -5845,8 +5853,10 @@ msgid "The maximum value must not be lower than the minimum value."
msgstr "最大値は最小値より低くできません。"
#: pretix/base/models/items.py
#, fuzzy
#| msgid "The maximum value must not be lower than the minimum value."
msgid "The maximum length must not be shorter than the minimum length."
msgstr "最大長は最小長より短くできません。"
msgstr "最大値は最小値より低くできません。"
#: pretix/base/models/items.py
msgid ""
@@ -10259,8 +10269,10 @@ msgstr ""
"す。上記で設定された\"支払いの最終日\"を過ぎてからは支払いを受け付けません。"
#: pretix/base/settings.py
#, fuzzy
#| msgid "Generate invoices for Sales channels"
msgid "Allow postponed payment choice for sales channels"
msgstr "販売チャネルの支払延期選択を許可する"
msgstr "請求書を生成する販売チャネル"
#: pretix/base/settings.py
msgid ""
@@ -10268,9 +10280,6 @@ 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 ""
"販売チャネルで支払いの延期が許可されている場合、顧客は支払い方法を選択せずに"
"注文を完了できます。これは、支払いを行う同じ人物によって注文が作成されていな"
"い場合に便利です。"
#: pretix/base/settings.py
msgid "Show start date"
@@ -16353,7 +16362,7 @@ msgstr "第三"
#: pretix/control/forms/rrule.py
msgctxt "rrule"
msgid "fourth"
msgstr "4番目"
msgstr ""
#: pretix/control/forms/rrule.py
msgctxt "rrule"
@@ -17433,20 +17442,28 @@ msgid "Queued emails have been aborted."
msgstr "キューに入っていた電子メールが、破棄されました。"
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The property has been created."
msgid "An organizer meta property has been created."
msgstr "主催者メタプロパティが作成されました。"
msgstr "プロパティが作成されました。"
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The selected property has been deleted."
msgid "An organizer meta property has been deleted."
msgstr "オーガナイザーのメタプロパティが削除されました。"
msgstr "選択されたプロパティは削除されました。"
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The organizer has been changed."
msgid "An organizer meta property has been changed."
msgstr "主催者のメタプロパティが変更されました。"
msgstr "主催者が変更されました。"
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The product has been reordered."
msgid "An organizer meta property has been reordered."
msgstr "オーガナイザーのメタプロパティが再配置されました。"
msgstr "製品の並び順が変更されました。"
#: pretix/control/logdisplay.py
msgid "Gift card acceptance for another organizer has been added."
@@ -17656,7 +17673,7 @@ msgstr "二要素の緊急コードが生成されました。"
#: pretix/control/logdisplay.py
msgid "Drift and throttle values for two-factor devices have been reset."
msgstr "二要素装置のドリフト値とスロットル値がリセットされました。"
msgstr ""
#: pretix/control/logdisplay.py
#, python-brace-format
@@ -18594,8 +18611,10 @@ msgid "Cancel"
msgstr "キャンセル"
#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html
#, fuzzy
#| msgid "Authorized apps"
msgid "Authorize"
msgstr "承認する"
msgstr "承認されたアプリ"
#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html
msgid "Error:"
@@ -21399,6 +21418,10 @@ msgstr ""
"銀行振込の参照としていくつかの場所で使用します。"
#: pretix/control/templates/pretixcontrol/events/create_basics.html
#, fuzzy
#| msgid ""
#| "We strongly recommend against using short forms of more then 16 "
#| "characters."
msgid ""
"We strongly recommend against using short forms of more than 16 characters."
msgstr "16文字を超える短縮形の使用は強くお勧めしません。"
@@ -27113,22 +27136,26 @@ msgstr "認証バックエンド"
#: pretix/control/templates/pretixcontrol/users/form.html
msgid "Reset drift and throttle"
msgstr "ドリフトとスロットルをリセットする"
msgstr ""
#: pretix/control/templates/pretixcontrol/users/form.html
#, fuzzy
#| msgid "Disable two-factor authentication"
msgid "Available two-factor authentication methods"
msgstr "選択可能な二要素認証"
msgstr "二要素認証を無効にする"
#: pretix/control/templates/pretixcontrol/users/form.html
#, python-format
#, fuzzy, python-format
#| msgid "Expired since %(date)s"
msgid "1 failed attempt since %(date)s"
msgid_plural "%(cnt)s failed attempts since %(date)s"
msgstr[0] "%(date)s以降%(cnt)s回失敗"
msgstr[0] "%(date)s以降失効"
#: pretix/control/templates/pretixcontrol/users/form.html
#, python-format
#, fuzzy, python-format
#| msgid "Valid until %(date)s"
msgid "Currently locked until %(date)s"
msgstr "現時点で%(date)sまでロックされています"
msgstr "%(date)sまで有効"
#: pretix/control/templates/pretixcontrol/users/form.html
msgid "Team memberships"
@@ -27649,16 +27676,18 @@ msgid "Invalid code, please try again."
msgstr "無効なコードです。もう一度お試しください。"
#: pretix/control/views/auth.py
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid "Invalid code, please try again."
msgid "Invalid code. Please try again after waiting {value} minute."
msgid_plural "Invalid code. Please try again after waiting {value} minutes."
msgstr[0] "無効なコードです。{value}分後再度お試しください。"
msgstr[0] "無効なコードです。もう一度お試しください。"
#: pretix/control/views/auth.py
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid "Invalid code, please try again."
msgid "Invalid code. Please try again after waiting {value} second."
msgid_plural "Invalid code. Please try again after waiting {value} seconds."
msgstr[0] "無効なコードです。{value}秒後再度お試しください。"
msgstr[0] "無効なコードです。もう一度お試しください。"
#: pretix/control/views/checkin.py
msgid "The selected check-ins have been reverted."
@@ -28504,8 +28533,10 @@ msgid "You entered an order in an event with a different currency."
msgstr "イベントで異なる通貨で注文を入力しました。"
#: pretix/control/views/orders.py
#, fuzzy
#| msgid "You entered an order in an event with a different currency."
msgid "You entered an order in an event that you do not have access to."
msgstr "アクセスできないイベントに注文が入力されました。"
msgstr "イベントで異なる通貨で注文を入力しました。"
#: pretix/control/views/orders.py
msgid ""
@@ -29363,8 +29394,10 @@ msgstr ""
"ください。このユーザーの過去の緊急トークンは引き続き有効です。"
#: pretix/control/views/users.py
#, fuzzy
#| msgid "The password has been reset."
msgid "The drift values for TOTP devices have been reset."
msgstr "TOTP デバイスのドリフト値がリセットされました。"
msgstr "パスワードがリセットされました。"
#: pretix/control/views/users.py
msgid "The new user has been created."
@@ -29379,12 +29412,14 @@ msgid "Bypass quota"
msgstr "クォータをバイパスする"
#: pretix/control/views/vouchers.py
#, fuzzy
#| msgid "Widget"
msgid "Budget"
msgstr "予算"
msgstr "ウィジェット"
#: pretix/control/views/vouchers.py
msgid "Budget used"
msgstr "消化済み予算"
msgstr ""
#: pretix/control/views/vouchers.py
msgid "The requested voucher does not exist."
@@ -33944,27 +33979,29 @@ msgid ""
"Not sure yet? You can complete your order first and then select a payment "
"method later."
msgstr ""
"まだ確かではありませんか?ご注文を先に完了し、その後でお支払い方法を選択でき"
"ます。"
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
msgid ""
"To do so, please first remove the payment methods you already selected above."
msgstr "そのためには、まず上記で既に選択された支払い方法を削除してください。"
msgstr ""
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, python-format
#, fuzzy, python-format
#| msgid "Your event needs to be over to use this feature."
msgid "Your payment needs to be completed within %(minutes)s minutes."
msgstr "支払いは、%(minutes)s分以内に完了する必要があります。"
msgstr "この機能を使用するには、イベントが終了している必要があります。"
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, python-format
#, fuzzy, python-format
#| msgid "Your event needs to be over to use this feature."
msgid "Your payment needs to be completed by %(deadline)s."
msgstr "支払いは、%(deadline)sまでに完了させる必要があります。"
msgstr "この機能を使用するには、イベントが終了している必要があります。"
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, fuzzy
#| msgid "Proceed with reset"
msgid "Proceed without selection"
msgstr "選択なしで進む"
msgstr "リセットを実行"
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html
msgid "Before we continue, we need you to answer some questions."
File diff suppressed because it is too large Load Diff
+55 -35
View File
@@ -8,9 +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-10-02 05:00+0000\n"
"Last-Translator: Translate pretix user 594 "
"<ivagvr@users.noreply.translate.pretix.eu>\n"
"PO-Revision-Date: 2025-10-17 16:55+0000\n"
"Last-Translator: fd <fd@denkena-consulting.com>\n"
"Language-Team: Russian <https://translate.pretix.eu/projects/pretix/pretix-"
"js/ru/>\n"
"Language: ru\n"
@@ -19,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 2026.10\n"
"X-Generator: Weblate 5.13.3\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js
msgid "Marked as paid"
@@ -79,8 +78,10 @@ msgid "SOFORT"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js
#, fuzzy
#| msgid "Yes"
msgid "eps"
msgstr ""
msgstr "Да"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js
msgid "MyBank"
@@ -146,7 +147,7 @@ msgstr "Подтверждается ваш платёж…"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js
msgid "Payment method unavailable"
msgstr "Способ оплаты недоступен"
msgstr ""
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js
msgid "Placed orders"
@@ -199,16 +200,21 @@ msgid "Switch check-in list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
#, fuzzy
#| msgid "Check-in QR"
msgid "Search results"
msgstr "Результаты поиска"
msgstr "QR-код для регистрации"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
#, fuzzy
#| msgctxt "widget"
#| msgid "Close ticket shop"
msgid "No tickets found"
msgstr "Нет доступных билетов"
msgstr "Закрыть билетную кассу"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Result"
msgstr "Результат"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "This ticket requires special attention"
@@ -220,7 +226,7 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Entry"
msgstr "Вход"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Exit"
@@ -269,7 +275,7 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Ticket not paid"
msgstr "Билет не оплачен"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "This ticket is not yet paid. Do you want to continue anyways?"
@@ -289,19 +295,21 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Ticket already used"
msgstr "Повторный проход по билету"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Information required"
msgstr "Необходима информация"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
#, fuzzy
#| msgid "Unknown error."
msgid "Unknown ticket"
msgstr "Неизвестный билет"
msgstr "Неизвестная ошибка."
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Ticket type not allowed here"
msgstr "Здесь нельзя пройти по этому билету"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Entry not allowed"
@@ -309,11 +317,11 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Ticket code revoked/changed"
msgstr "Код билета аннулирован и/или изменен"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Ticket blocked"
msgstr "Билет заблокирован"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Ticket not valid at this time"
@@ -329,7 +337,7 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Order not approved"
msgstr "Заказ не подтвержден"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
#, fuzzy
@@ -369,20 +377,32 @@ msgstr "Закрыть"
#: pretix/static/pretixbase/js/addressform.js
#: pretix/static/pretixpresale/js/ui/main.js
#, fuzzy
#| msgid "Cart expired"
msgid "required"
msgstr "обязательно"
msgstr "Срок действия корзины истёк"
#: pretix/static/pretixbase/js/asynctask.js
#, fuzzy
#| msgid ""
#| "Your request has been queued on the server and will now be processed. "
#| "Depending on the size of your event, this might take up to a few minutes."
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
msgstr ""
"Ваш запрос принят в обработку. В зависимости от масштаба вашего мероприятия "
"это может занять до нескольких минут."
"Ваш запрос поставлен в очередь на сервере и будет обработан. В зависимости "
"от масштаба вашего мероприятия это может занять до нескольких минут."
#: pretix/static/pretixbase/js/asynctask.js
#, fuzzy
#| msgid ""
#| "Your request has been queued on the server and will now be processed. "
#| "Depending on the size of your event, this might take up to a few minutes."
msgid "Your request has been queued on the server and will soon be processed."
msgstr "Ваш запрос поставлен в очередь на сервере и будет обработан."
msgstr ""
"Ваш запрос поставлен в очередь на сервере и будет обработан. В зависимости "
"от масштаба вашего мероприятия это может занять до нескольких минут."
#: pretix/static/pretixbase/js/asynctask.js
msgid ""
@@ -453,7 +473,7 @@ msgstr "Чтобы скопировать, нажмите Ctrl-C."
#: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue
msgid "Edit"
msgstr "Редактировать"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue
msgid "Visualize"
@@ -512,7 +532,7 @@ msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules/constants.ts
msgid "Duplicate"
msgstr "Дубликат"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules/constants.ts
msgctxt "entry_status"
@@ -1195,15 +1215,15 @@ msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "Tuesday"
msgstr "Вторник"
msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "Wednesday"
msgstr "Среда"
msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "Thursday"
msgstr "Четверг"
msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "Friday"
@@ -1211,11 +1231,11 @@ msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "Saturday"
msgstr "Суббота"
msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "Sunday"
msgstr "Воскресенье"
msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "January"
@@ -1231,23 +1251,23 @@ msgstr "март"
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "April"
msgstr "Апрель"
msgstr "апрель"
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "May"
msgstr "Май"
msgstr "май"
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "June"
msgstr "Июнь"
msgstr "июнь"
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "July"
msgstr "Июль"
msgstr "июль"
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "August"
msgstr "Август"
msgstr "август"
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "September"
@@ -1255,7 +1275,7 @@ msgstr "сентябрь"
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "October"
msgstr "Октябрь"
msgstr "октябрь"
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "November"
+4 -3
View File
@@ -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-09-30 17:00+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"PO-Revision-Date: 2026-09-04 14:29+0000\n"
"Last-Translator: Linnea Thelander <linnea@coeo.events>\n"
"Language-Team: Swedish <https://translate.pretix.eu/projects/pretix/pretix/"
"sv/>\n"
"Language: sv\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.9.1\n"
"X-Generator: Weblate 2026.9\n"
#: pretix/_base_settings.py
msgid "English"
@@ -19239,6 +19239,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/order_pay.html
#: pretix/presale/templates/pretixpresale/event/order_pay_change.html
#: pretix/presale/templates/pretixpresale/event/position_change.html
#, fuzzy
msgid "Continue"
msgstr "Fortsätt"
+4 -3
View File
@@ -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-09-30 17:00+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"PO-Revision-Date: 2026-09-04 14:29+0000\n"
"Last-Translator: Linnea Thelander <linnea@coeo.events>\n"
"Language-Team: Swedish <https://translate.pretix.eu/projects/pretix/pretix-"
"js/sv/>\n"
"Language: sv\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.9.1\n"
"X-Generator: Weblate 2026.9\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js
msgid "Marked as paid"
@@ -133,6 +133,7 @@ msgstr "Mercado Pago"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
#: pretix/static/pretixpresale/js/ui/cart.js
#, fuzzy
msgid "Continue"
msgstr "Fortsätt"
File diff suppressed because it is too large Load Diff
+4 -6
View File
@@ -8,7 +8,7 @@ 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-10-02 05:00+0000\n"
"PO-Revision-Date: 2026-09-29 09:51+0000\n"
"Last-Translator: Nate Horst <nate@agcthailand.org>\n"
"Language-Team: Thai <https://translate.pretix.eu/projects/pretix/pretix-js/"
"th/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 2026.10\n"
"X-Generator: Weblate 2026.9.1\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js
msgid "Marked as paid"
@@ -426,7 +426,7 @@ msgstr "แก้ไข"
#: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue
msgid "Visualize"
msgstr "แสดงภาพผัง"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue
msgid ""
@@ -434,12 +434,10 @@ msgid ""
"or variations are not contained in any of your rule parts so people with "
"these tickets will not get in:"
msgstr ""
"กฎของคุณมีการกรองตามสินค้าหรือรูปแบบย่อยเสมอ แต่สินค้าหรือรูปแบบย่อยต่อไปนี้ไม่ได้ถูกรวมอยู่ในส่วนใ"
"ดของกฎ คุณจึงส่งผลให้ผู้ที่ถือตั๋วเหล่านี้จะไม่สามารถผ่านเข้างานได้:"
#: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue
msgid "Please double-check if this was intentional."
msgstr "โปรดตรวจสอบอีกครั้งว่าเป็นการดำเนินการโดยตั้งใจหรือไม่"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules/constants.ts
msgid "All of the conditions below (AND)"
+1 -11
View File
@@ -161,12 +161,7 @@ class OrderMailForm(BaseMailForm):
),
label=pgettext_lazy('sendmail_form', 'Restrict to products'),
required=True,
queryset=Item.objects.none(),
help_text=pgettext_lazy(
'sendmail_form',
'There may be multiple mails sent out to the same mail address if one order contains multiple attendee '
'products for it, if you restrict to products while also restricting mails to attendees only. '
'This is intended, as every one of those get linked to their own separate order page restricted to only that product.')
queryset=Item.objects.none()
)
filter_checkins = forms.BooleanField(
label=_('Filter check-in status'),
@@ -379,11 +374,6 @@ class RuleForm(FormPlaceholderMixin, I18nModelForm):
del self.fields['subevent']
self.fields['limit_products'].queryset = Item.objects.filter(event=self.event)
self.fields['limit_products'].help_text = pgettext_lazy(
'sendmail_form',
'There may be multiple mails sent out to the same mail address if one order contains multiple attendee '
'products for it, if you restrict to products while also restricting mails to attendees only. '
'This is intended, as every one of those get linked to their own separate order page restricted to only that product.')
self.fields['schedule_type'] = forms.ChoiceField(
label=_('Type of schedule time'),
+35 -50
View File
@@ -19,7 +19,6 @@
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
import logging
from datetime import datetime, time, timedelta
from dateutil.tz import datetime_exists
@@ -40,8 +39,6 @@ from pretix.base.models import (
)
from pretix.base.models.base import LoggingMixin
logger = logging.getLogger(__name__)
class ScheduledMail(models.Model):
STATE_SCHEDULED = 'scheduled'
@@ -118,7 +115,7 @@ class ScheduledMail(models.Model):
filter_orders_by_op = False
op_qs = OrderPosition.objects.filter(
order__event=e,
order__event=self.event,
canceled=False,
)
@@ -170,58 +167,14 @@ class ScheduledMail(models.Model):
for o in orders:
with language(o.locale, e.settings.region):
positions = list(o.positions.all())
send_to_order = send_to_orders
o_sent = False
try:
ia = o.invoice_address
except InvoiceAddress.DoesNotExist:
ia = InvoiceAddress(order=o)
if send_to_attendees:
parent_op = None
sent_to_positions = set()
for p in positions:
if p.addon_to_id is None:
# this op might have matching add-ons, so save for later
parent_op = p
elif not parent_op or p.addon_to_id != parent_op.id:
# this op is an add-on, but not to the current parent_op
# something got mixed up as add-ons should always come directly after their parent
logger.warning(f"Add-ons are mixed up for position #{p.positionid} in order {o.full_code}")
continue
if p.id not in position_ids:
# not a matching op, just there for parent_op
continue
if p.addon_to_id and (
not p.attendee_email or p.attendee_email == parent_op.attendee_email
):
# if op is addon and either has no mail or the same as parent => send to parent
p = parent_op
if p.pk in sent_to_positions:
# this position already got an email
continue
if not p.attendee_email or p.attendee_email == o.email:
# no email or same as order => send to order
send_to_order = True
continue
email_ctx = get_email_context(
event=e,
order=o,
invoice_address=ia,
position=p,
event_or_subevent=self.subevent or e,
)
p.send_mail(self.rule.subject, self.rule.template, email_ctx,
attach_ical=self.rule.attach_ical,
log_entry_type='pretix.plugins.sendmail.rule.order.position.email.sent')
sent_to_positions.add(p.pk)
if send_to_order and o.email:
if send_to_orders and o.email:
email_ctx = get_email_context(
event=e,
order=o,
@@ -231,6 +184,38 @@ class ScheduledMail(models.Model):
o.send_mail(self.rule.subject, self.rule.template, email_ctx,
attach_ical=self.rule.attach_ical,
log_entry_type='pretix.plugins.sendmail.rule.order.email.sent')
o_sent = True
if send_to_attendees:
if not self.rule.all_products:
positions = [p for p in positions if p.item_id in limit_products]
if self.subevent_id:
positions = [p for p in positions if p.subevent_id == self.subevent_id]
for p in positions:
if p.id in position_ids:
if p.attendee_email and (p.attendee_email != o.email or not o_sent):
email_ctx = get_email_context(
event=e,
order=o,
invoice_address=ia,
position=p,
event_or_subevent=self.subevent or e,
)
p.send_mail(self.rule.subject, self.rule.template, email_ctx,
attach_ical=self.rule.attach_ical,
log_entry_type='pretix.plugins.sendmail.rule.order.position.email.sent')
elif not o_sent and o.email:
email_ctx = get_email_context(
event=e,
order=o,
invoice_address=ia,
event_or_subevent=self.subevent or e,
)
o.send_mail(self.rule.subject, self.rule.template, email_ctx,
attach_ical=self.rule.attach_ical,
log_entry_type='pretix.plugins.sendmail.rule.order.email.sent')
o_sent = True
self.last_successful_order_id = o.pk
+9 -31
View File
@@ -31,7 +31,6 @@
# 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 logging
from datetime import datetime
from django.db.models import Exists, OuterRef, Q
@@ -44,8 +43,6 @@ from pretix.base.services.mail import mail
from pretix.base.services.tasks import ProfiledEventTask
from pretix.celery_app import app
logger = logging.getLogger(__name__)
def _chunks(lst, n):
"""
@@ -73,8 +70,6 @@ def send_mails_to_orders(event: Event, user: int, subject: dict, message: dict,
except InvoiceAddress.DoesNotExist:
ia = InvoiceAddress(order=o)
parent_op = None
sent_to_positions = set()
if recipients in ('both', 'attendees'):
for p in o.positions.annotate(
any_checkins=Exists(
@@ -90,16 +85,10 @@ def send_mails_to_orders(event: Event, user: int, subject: dict, message: dict,
)
),
).prefetch_related('addons', 'subevent'):
if p.addon_to_id is None:
parent_op = p
elif not parent_op or p.addon_to_id != parent_op.id:
# this op is an add-on, but not to the current parent_op
# something got mixed up as add-ons should always come directly after their parent
logger.warning(f"Add-ons are mixed up for position #{p.positionid} in order {o.full_code}")
if p.addon_to_id is not None:
continue
if p.item_id not in items:
if p.item_id not in items and not any(a.item_id in items for a in p.addons.all()):
continue
if filter_checkins:
@@ -110,11 +99,13 @@ def send_mails_to_orders(event: Event, user: int, subject: dict, message: dict,
if not allowed:
continue
if p.addon_to_id and (
not p.attendee_email or p.attendee_email == parent_op.attendee_email
):
# if op is addon and either has no mail or the same as parent => send to parent
p = parent_op
if not p.attendee_email:
if recipients == 'attendees':
send_to_order = True
continue
if p.attendee_email == o.email and send_to_order:
continue
if subevent and p.subevent_id != subevent:
continue
@@ -125,18 +116,6 @@ def send_mails_to_orders(event: Event, user: int, subject: dict, message: dict,
if subevents_to and p.subevent.date_from >= subevents_to:
continue
if not p.attendee_email:
send_to_order = True
continue
if p.pk in sent_to_positions:
# this position already got an email
continue
if p.attendee_email == o.email:
send_to_order = True
continue
with language(o.locale, event.settings.region):
email_context = get_email_context(event=event, order=o, invoice_address=ia, position=p)
outgoing_mail = mail(
@@ -158,7 +137,6 @@ def send_mails_to_orders(event: Event, user: int, subject: dict, message: dict,
user=user,
data=outgoing_mail.log_data(),
)
sent_to_positions.add(p.pk)
if send_to_order and o.email:
with language(o.locale, event.settings.region):
+1
View File
@@ -183,6 +183,7 @@ class OrderPositionDetailMixin(NoSearchIndexViewMixin):
def position(self):
qs = OrderPosition.objects.filter(
order__event=self.request.event,
addon_to__isnull=True,
order__code=self.kwargs['order'],
positionid=self.kwargs['position']
).select_related('order', 'order__event')
@@ -117,16 +117,6 @@ input[type=number]::-webkit-outer-spin-button {
border: transparent;
}
.btn.disabled, .btn[disabled], fieldset[disabled] .btn {
box-shadow: 0px 0px 0px 1px #ccc inset, inset 0 1px 3px 0 #d9d9d9;
background: #eee;
opacity: 0.7;
}
.btn-link.disabled, .btn-link[disabled], fieldset[disabled] .btn-link {
box-shadow: none;
background: none;
}
.btn-group-flex { display: flex; }
.btn-group-flex > .btn { flex: 1; }
@@ -556,6 +556,8 @@ var editor = {
editor.$fcv.get(0).height = editor.pdf_viewport.height
editor.fabric = new fabric.Canvas('fabric-canvas')
editor.fabric.on('object:modified', editor._create_savepoint)
editor.fabric.on('object:added', editor._create_savepoint)
editor.fabric.on('selection:cleared', editor._update_toolbox)
editor.fabric.on('selection:created', editor._update_toolbox)
editor.fabric.on('selection:updated', editor._update_toolbox)
@@ -588,12 +590,6 @@ var editor = {
if (editor._window_loaded) {
editor._ready()
}
editor.fabric.on('object:modified', editor._create_savepoint)
editor.fabric.on('object:added', editor._create_savepoint)
editor.fabric.on('object:added', function(e) {
editor.fabric.setActiveObject(e.target);
})
},
_window_load_event: function () {
@@ -960,6 +956,7 @@ var editor = {
mtr: true
})
editor.fabric.add(text)
editor._create_savepoint()
return text
},
@@ -975,6 +972,7 @@ var editor = {
rect.scaleToHeight(126)
rect.setControlsVisibility({ mtr: false, mb: false, mt: false, mr: false, ml: false })
editor.fabric.add(rect)
editor._create_savepoint()
return rect
},
@@ -1011,6 +1009,7 @@ var editor = {
mtr: true
})
editor.fabric.add(rect)
editor._create_savepoint()
$('#version-notice').show()
return rect
},
@@ -1027,6 +1026,7 @@ var editor = {
})
rect.setControlsVisibility({ mtr: false })
editor.fabric.add(rect)
editor._create_savepoint()
return rect
},
@@ -1044,6 +1044,7 @@ var editor = {
})
rect.setControlsVisibility({ mtr: false, mb: false, mt: false, mr: false, ml: false })
editor.fabric.add(rect)
editor._create_savepoint()
return rect
},
@@ -813,13 +813,7 @@ function setup_basics (el) {
return
}
$('<li></li>')
.append(
$('<a></a>').attr("href", "#" + scrollTarget.id).text($.trim(label))
)
.append(
document.createTextNode(' - ' + description)
)
$('<li><a href="#' + scrollTarget.id + '">' + $.trim(label) + '</a> – ' + description + '</li>')
.appendTo(alert.querySelector('ul') || $('<ul>').appendTo(alert))
.find('a').on('click', function (e) {
$panel.collapse('show')
@@ -157,12 +157,6 @@
.profile-scope:last-child .profile-save-container {
margin-bottom: -15px;
}
/* the rule above removes blank space after any profile-save-container at the end of every fieldset, which causes an overlay if addon-questions are used. So re-add margin for non-addon-fieldsets followed by fieldsets (currently only happens it addon-questions are available) */
fieldset:not(:has(.profile-add-on)):has( + fieldset) .profile-scope:last-child .profile-save-container {
margin-bottom: 0;
}
.profile-save-container .help-block {
margin-bottom: 0;
}
-8
View File
@@ -1925,14 +1925,6 @@ def test_addons_create(token_client, organizer, event, item, category, category2
@pytest.mark.django_db
def test_addons_update(token_client, organizer, event, item, addon):
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/items/{}/addons/{}/'.format(organizer.slug, event.slug, item.pk, addon.pk),
{
},
format='json'
)
assert resp.status_code == 200
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/items/{}/addons/{}/'.format(organizer.slug, event.slug, item.pk, addon.pk),
{
-78
View File
@@ -199,84 +199,6 @@ def test_sendmail_rule_send_order_vs_pos(send_to, amount_mails, recipients, orde
assert djmail.outbox[0].subject == 'Dummy: Foo City @ 11:30'
@pytest.mark.django_db
@pytest.mark.parametrize('send_to,amount_mails,recipients,ticket_mail,addon_mail, products', [
(Rule.ATTENDEES, 1, ['addon-attendee@dummy.test'], 'attendee@dummy.test', 'addon-attendee@dummy.test', 'addon'),
(Rule.ATTENDEES, 2, ['attendee@dummy.test', 'addon-attendee@dummy.test'], 'attendee@dummy.test',
'addon-attendee@dummy.test', 'both'),
(Rule.ATTENDEES, 1, ['attendee@dummy.test'], 'attendee@dummy.test', 'attendee@dummy.test', 'both'),
(Rule.ATTENDEES, 1, ['attendee@dummy.test'], 'attendee@dummy.test', None, 'addon'),
(Rule.ATTENDEES, 1, ['attendee@dummy.test'], 'attendee@dummy.test', None, 'both'),
(Rule.ATTENDEES, 1, ['dummy@dummy.test'], None, None, 'addon'),
(Rule.ATTENDEES, 1, ['dummy@dummy.test'], None, None, 'both'),
(Rule.ATTENDEES, 2, ['dummy@dummy.test', 'addon-attendee@dummy.test'], None, 'addon-attendee@dummy.test', 'both'),
(Rule.ATTENDEES, 1, ['dummy@dummy.test'], None, None, 'all'),
(Rule.ATTENDEES, 2, ['dummy@dummy.test', 'addon-attendee@dummy.test'], None, 'addon-attendee@dummy.test', 'all'),
])
@scopes_disabled()
def test_sendmail_rule_send_addons(send_to, amount_mails, recipients, ticket_mail, addon_mail, products, order,
event, pos, item, item2):
djmail.outbox = []
order.status = order.STATUS_PAID
order.save()
p = pos
p.attendee_email = ticket_mail
p.save()
order.all_positions.create(item=item2, price=0, attendee_email=addon_mail, addon_to=p)
rule = order.event.sendmail_rules.create(date_is_absolute=True, send_date=dt_now - datetime.timedelta(hours=1),
send_to=send_to, subject='meow', template='meow meow meow',
all_products=products == 'all')
if products == 'addon':
rule.limit_products.set([item2])
if products == 'both':
rule.limit_products.set([item, item2])
sendmail_run_rules(None)
assert len(djmail.outbox) == amount_mails
_recipients = [mail.to[0] for mail in djmail.outbox]
assert set(recipients) == set(_recipients)
@pytest.mark.django_db
@pytest.mark.parametrize('send_to,amount_mails,recipients,ticket_mail,addon_mail, products', [
(Rule.ATTENDEES, 2, ['attendee@dummy.test', 'addon-attendee@dummy.test'], 'attendee@dummy.test',
'addon-attendee@dummy.test', 'addon'),
(Rule.ATTENDEES, 2, ['attendee@dummy.test', 'addon-attendee@dummy.test'], 'attendee@dummy.test',
'addon-attendee@dummy.test', 'both'),
])
@scopes_disabled()
def test_sendmail_rule_send_addons_one_unp(send_to, amount_mails, recipients, ticket_mail, addon_mail, products, order,
event, pos, item, item2):
djmail.outbox = []
order.status = order.STATUS_PAID
order.save()
p = pos
p.attendee_email = ticket_mail
p.save()
order.all_positions.create(item=item2, price=0, attendee_email=addon_mail, addon_to=p)
order.all_positions.create(item=item2, price=0, addon_to=p)
rule = order.event.sendmail_rules.create(date_is_absolute=True, send_date=dt_now - datetime.timedelta(hours=1),
send_to=send_to, subject='meow', template='meow meow meow',
all_products=False)
if products == 'addon':
rule.limit_products.set([item2])
if products == 'both':
rule.limit_products.set([item, item2])
sendmail_run_rules(None)
assert len(djmail.outbox) == amount_mails
_recipients = [mail.to[0] for mail in djmail.outbox]
assert set(recipients) == set(_recipients)
@pytest.mark.django_db
@scopes_disabled()
def test_sendmail_rule_send_attendees_unset_mail(order, event, item):
-306
View File
@@ -406,312 +406,6 @@ def test_sendmail_attendee_product_filter(logged_in_client, sendmail_url, event,
assert '/order/' not in djmail.outbox[0].body
@pytest.mark.django_db
def test_sendmail_attendee_addon_filter(logged_in_client, sendmail_url, event, order, pos):
event.settings.attendee_emails_asked = True
with scopes_disabled():
addon = Item.objects.create(name='Test addon', event=event, default_price=12)
p = pos
p.attendee_email = 'attendee1@dummy.test'
p.save()
order.positions.create(
item=addon, price=0, attendee_email='add-on-attendee@dummy.test', addon_to=p
)
djmail.outbox = []
response = logged_in_client.post(sendmail_url + 'orders/',
{'sendto': 'na',
'action': 'send',
'recipients': 'attendees',
'items': addon.pk,
'subject_0': 'Test subject',
'message_0': 'This is a test file for sending mails.',
},
follow=True)
assert response.status_code == 200
assert 'alert-success' in response.rendered_content
assert len(djmail.outbox) == 1
assert djmail.outbox[0].to == ['add-on-attendee@dummy.test']
assert '/ticket/' in djmail.outbox[0].body
assert '/order/' not in djmail.outbox[0].body
@pytest.mark.django_db
def test_sendmail_attendee_ticket_and_addon_filter(logged_in_client, sendmail_url, event, order, pos):
event.settings.attendee_emails_asked = True
with scopes_disabled():
addon = Item.objects.create(name='Test addon', event=event, default_price=12)
p = pos
p.attendee_email = 'attendee1@dummy.test'
p.save()
order.positions.create(
item=addon, price=0, attendee_email='add-on-attendee@dummy.test', addon_to=p
)
djmail.outbox = []
response = logged_in_client.post(sendmail_url + 'orders/',
{'sendto': 'na',
'action': 'send',
'recipients': 'attendees',
'items': {addon.pk, p.item_id},
'subject_0': 'Test subject',
'message_0': 'This is a test file for sending mails.',
},
follow=True)
assert response.status_code == 200
assert 'alert-success' in response.rendered_content
assert len(djmail.outbox) == 2
for msg in djmail.outbox:
assert msg.to in [['attendee1@dummy.test'], ['add-on-attendee@dummy.test']]
assert '/ticket/' in msg.body
assert '/order/' not in msg.body
@pytest.mark.django_db
def test_sendmail_attendee_ticket_and_same_addon_filter(logged_in_client, sendmail_url, event, order, pos):
event.settings.attendee_emails_asked = True
with scopes_disabled():
addon = Item.objects.create(name='Test addon', event=event, default_price=12)
p = pos
p.attendee_email = 'attendee1@dummy.test'
p.save()
order.positions.create(
item=addon, price=0, attendee_email='attendee1@dummy.test', addon_to=p
)
djmail.outbox = []
response = logged_in_client.post(sendmail_url + 'orders/',
{'sendto': 'na',
'action': 'send',
'recipients': 'attendees',
'items': {addon.pk, p.item_id},
'subject_0': 'Test subject',
'message_0': 'This is a test file for sending mails.',
},
follow=True)
assert response.status_code == 200
assert 'alert-success' in response.rendered_content
assert len(djmail.outbox) == 1
assert djmail.outbox[0].to == ['attendee1@dummy.test']
assert '/ticket/' in djmail.outbox[0].body
assert '/order/' not in djmail.outbox[0].body
@pytest.mark.django_db
def test_sendmail_attendee_addon_unpersonalized_filter(logged_in_client, sendmail_url, event, order, pos):
event.settings.attendee_emails_asked = True
with scopes_disabled():
addon = Item.objects.create(name='Test addon', event=event, default_price=12)
p = pos
p.attendee_email = 'attendee1@dummy.test'
p.save()
order.positions.create(
item=addon, price=0, addon_to=p
)
djmail.outbox = []
response = logged_in_client.post(sendmail_url + 'orders/',
{'sendto': 'na',
'action': 'send',
'recipients': 'attendees',
'items': addon.pk,
'subject_0': 'Test subject',
'message_0': 'This is a test file for sending mails.',
},
follow=True)
assert response.status_code == 200
assert 'alert-success' in response.rendered_content
assert len(djmail.outbox) == 1
assert djmail.outbox[0].to == ['attendee1@dummy.test']
assert '/ticket/' in djmail.outbox[0].body
assert '/order/' not in djmail.outbox[0].body
@pytest.mark.django_db
def test_sendmail_attendee_ticket_and_addon_unp_filter(logged_in_client, sendmail_url, event, order, pos):
event.settings.attendee_emails_asked = True
with scopes_disabled():
addon = Item.objects.create(name='Test addon', event=event, default_price=12)
p = pos
p.attendee_email = 'attendee1@dummy.test'
p.save()
order.positions.create(
item=addon, price=0, addon_to=p
)
djmail.outbox = []
response = logged_in_client.post(sendmail_url + 'orders/',
{'sendto': 'na',
'action': 'send',
'recipients': 'attendees',
'items': {addon.pk, p.item_id},
'subject_0': 'Test subject',
'message_0': 'This is a test file for sending mails.',
},
follow=True)
assert response.status_code == 200
assert 'alert-success' in response.rendered_content
assert len(djmail.outbox) == 1
assert djmail.outbox[0].to == ['attendee1@dummy.test']
assert '/ticket/' in djmail.outbox[0].body
assert '/order/' not in djmail.outbox[0].body
@pytest.mark.django_db
def test_sendmail_attendee_ticket_unp_and_addon_filter(logged_in_client, sendmail_url, event, order, pos):
event.settings.attendee_emails_asked = True
with scopes_disabled():
addon = Item.objects.create(name='Test addon', event=event, default_price=12)
order.positions.create(
item=addon, price=0, attendee_email='add-on-attendee@dummy.test', addon_to=pos
)
djmail.outbox = []
response = logged_in_client.post(sendmail_url + 'orders/',
{'sendto': 'na',
'action': 'send',
'recipients': 'attendees',
'items': {addon.pk, pos.item_id},
'subject_0': 'Test subject',
'message_0': 'This is a test file for sending mails.',
},
follow=True)
assert response.status_code == 200
assert 'alert-success' in response.rendered_content
assert len(djmail.outbox) == 2
for msg in djmail.outbox:
assert msg.to in [[order.email], ['add-on-attendee@dummy.test']]
if msg.to == [order.email]:
assert '/ticket/' not in msg.body
assert '/order/' in msg.body
else:
assert msg.to == ['add-on-attendee@dummy.test']
assert '/ticket/' in msg.body
assert '/order/' not in msg.body
@pytest.mark.django_db
def test_sendmail_attendee_addon_unp_unp_filter(logged_in_client, sendmail_url, event, order, pos):
event.settings.attendee_emails_asked = True
with scopes_disabled():
addon = Item.objects.create(name='Test addon', event=event, default_price=12)
order.positions.create(
item=addon, price=0, addon_to=pos
)
djmail.outbox = []
response = logged_in_client.post(sendmail_url + 'orders/',
{'sendto': 'na',
'action': 'send',
'recipients': 'attendees',
'items': addon.pk,
'subject_0': 'Test subject',
'message_0': 'This is a test file for sending mails.',
},
follow=True)
assert response.status_code == 200
assert 'alert-success' in response.rendered_content
assert len(djmail.outbox) == 1
assert djmail.outbox[0].to == [order.email]
assert '/ticket/' not in djmail.outbox[0].body
assert '/order/' in djmail.outbox[0].body
@pytest.mark.django_db
def test_sendmail_attendee_and_addon_unp_unp_filter(logged_in_client, sendmail_url, event, order, pos):
event.settings.attendee_emails_asked = True
with scopes_disabled():
addon = Item.objects.create(name='Test addon', event=event, default_price=12)
order.positions.create(
item=addon, price=0, addon_to=pos
)
djmail.outbox = []
response = logged_in_client.post(sendmail_url + 'orders/',
{'sendto': 'na',
'action': 'send',
'recipients': 'attendees',
'items': {addon.pk, pos.item_id},
'subject_0': 'Test subject',
'message_0': 'This is a test file for sending mails.',
},
follow=True)
assert response.status_code == 200
assert 'alert-success' in response.rendered_content
assert len(djmail.outbox) == 1
assert djmail.outbox[0].to == [order.email]
assert '/ticket/' not in djmail.outbox[0].body
assert '/order/' in djmail.outbox[0].body
@pytest.mark.django_db
def test_sendmail_attendee_two_addons_one_unp_filter(logged_in_client, sendmail_url, event, order, pos):
event.settings.attendee_emails_asked = True
with scopes_disabled():
p = pos
p.attendee_email = 'attendee1@dummy.test'
p.save()
addon = Item.objects.create(name='Test addon', event=event, default_price=12)
order.positions.create(
item=addon, price=0, attendee_email='add-on-attendee@dummy.test', addon_to=p
)
order.positions.create(
item=addon, price=0, addon_to=p
)
djmail.outbox = []
response = logged_in_client.post(sendmail_url + 'orders/',
{'sendto': 'na',
'action': 'send',
'recipients': 'attendees',
'items': addon.pk,
'subject_0': 'Test subject',
'message_0': 'This is a test file for sending mails.',
},
follow=True)
assert response.status_code == 200
assert 'alert-success' in response.rendered_content
assert len(djmail.outbox) == 2
for msg in djmail.outbox:
assert msg.to in [['attendee1@dummy.test'], ['add-on-attendee@dummy.test']]
assert '/ticket/' in msg.body
assert '/order/' not in msg.body
@pytest.mark.django_db
def test_sendmail_attendee_and_two_addons_one_unp_filter(logged_in_client, sendmail_url, event, order, pos):
event.settings.attendee_emails_asked = True
with scopes_disabled():
p = pos
p.attendee_email = 'attendee1@dummy.test'
p.save()
addon = Item.objects.create(name='Test addon', event=event, default_price=12)
order.positions.create(
item=addon, price=0, attendee_email='add-on-attendee@dummy.test', addon_to=p
)
order.positions.create(
item=addon, price=0, addon_to=p
)
djmail.outbox = []
response = logged_in_client.post(sendmail_url + 'orders/',
{'sendto': 'na',
'action': 'send',
'recipients': 'attendees',
'items': {addon.pk, p.item_id},
'subject_0': 'Test subject',
'message_0': 'This is a test file for sending mails.',
},
follow=True)
assert response.status_code == 200
assert 'alert-success' in response.rendered_content
assert len(djmail.outbox) == 2
for msg in djmail.outbox:
assert msg.to in [['attendee1@dummy.test'], ['add-on-attendee@dummy.test']]
assert '/ticket/' in msg.body
assert '/order/' not in msg.body
@pytest.mark.django_db
def test_sendmail_attendee_subevent_filter(logged_in_client, sendmail_url, event, item, order, pos):
event.settings.attendee_emails_asked = True