Compare commits

..

19 Commits

Author SHA1 Message Date
Lukas Bockstaller
0472101c81 use correct choice format 2026-05-28 13:41:57 +02:00
Lukas Bockstaller
b0a34fa196 add test for order.subevents cases 2026-05-28 11:21:43 +02:00
Lukas Bockstaller
99d9d65521 general cleanup 2026-05-27 16:54:54 +02:00
Lukas Bockstaller
599318e7c7 rewrite reldate.js use data-attributes 2026-05-27 16:54:54 +02:00
Lukas Bockstaller
b7dc8ad75d add a little bit of information to the tests for future reference 2026-05-27 16:54:54 +02:00
Lukas Bockstaller
027aceaf6c add OptionAttrsSelect to allow select options with their own attributes per value 2026-05-27 16:54:54 +02:00
Lukas Bockstaller
23e37ada59 move reldate.js include in correct file 2026-05-27 16:54:48 +02:00
Lukas Bockstaller
62917da9a5 Apply suggestions from code review
Co-authored-by: Raphael Michel <mail@raphaelmichel.de>
2026-05-26 15:29:50 +02:00
Lukas Bockstaller
d68c6415f3 test upgrade behaviour 2026-05-20 11:44:35 +02:00
Lukas Bockstaller
4271928df2 fix tests 2026-05-20 11:37:44 +02:00
Lukas Bockstaller
21fc8e4dec moves logic from RelativeDateWrapper into RelativeDate and adds BaseChoice for configuring which models attributes support which relationship 2026-05-19 17:11:06 +02:00
Lukas Bockstaller
f0d1d7ca5a add type annotations 2026-05-18 14:57:03 +02:00
Lukas Bockstaller
b2fd6a9c1e move js includes of to fragment_js.html 2026-05-18 14:56:40 +02:00
Lukas Bockstaller
27966969f1 Apply suggestions from code review
Co-authored-by: Raphael Michel <mail@raphaelmichel.de>
2026-05-12 10:40:46 +02:00
Lukas Bockstaller
64e301ef47 Update src/pretix/base/reldate.py
Co-authored-by: Raphael Michel <michel@pretix.eu>
2026-05-12 10:40:02 +02:00
Lukas Bockstaller
582cb90bb0 fix tests 2026-05-07 11:12:15 +02:00
Lukas Bockstaller
4db98def79 add js to prevent illegal inputs 2026-05-07 10:53:52 +02:00
Lukas Bockstaller
8adc649c4c factor out _resolve_base_date 2026-05-07 09:49:08 +02:00
Lukas Bockstaller
8692222bd3 initial implementation 2026-05-06 18:10:41 +02:00
280 changed files with 105333 additions and 107782 deletions

View File

@@ -1,6 +1,5 @@
doc/
env/
node_modules/
res/
local/
.git/

View File

@@ -1,5 +0,0 @@
[*.{js,jsx,ts,tsx,vue}]
indent_style = tab
indent_size = 2
trim_trailing_whitespace = true
insert_final_newline = true

View File

@@ -46,7 +46,4 @@ jobs:
- name: Run build
run: python -m build
- name: Check files
run: |
for pat in 'static.dist/vite/widget/widget.js' 'static.dist/vite/control/assets/checkinrules/main-' 'static.dist/vite/control/assets/webcheckin/main-'; do
unzip -l dist/pretix*whl | grep -q "$pat" || { echo "Missing: $pat"; exit 1; }
done
run: unzip -l dist/pretix*whl | grep node_modules || exit 1

View File

@@ -1,43 +0,0 @@
name: JS Code Style
on:
push:
branches: [ master ]
paths:
- 'src/pretix/static/pretixpresale/widget/**'
- 'src/pretix/static/pretixcontrol/js/ui/checkinrules/**'
- 'src/pretix/plugins/webcheckin/**'
- 'eslint.config.mjs'
- 'package.json'
- 'package-lock.json'
pull_request:
branches: [ master ]
paths:
- 'src/pretix/static/pretixpresale/widget/**'
- 'src/pretix/static/pretixcontrol/js/ui/checkinrules/**'
- 'src/pretix/plugins/webcheckin/**'
- 'eslint.config.mjs'
- 'package.json'
- 'package-lock.json'
permissions:
contents: read
env:
FORCE_COLOR: 1
jobs:
eslint:
name: eslint
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Set up Node.js 24
uses: actions/setup-node@v4
with:
node-version: 24
cache: npm
- name: Install Dependencies
run: npm ci
- name: Run ESLint
run: npm run lint:eslint

View File

@@ -72,7 +72,7 @@ jobs:
run: make all compress
- name: Run tests
working-directory: ./src
run: PRETIX_CONFIG_FILE=tests/ci_${{ matrix.database }}.cfg py.test -n 3 -p no:sugar --cov=./ --cov-report=xml tests --ignore=tests/e2e --maxfail=100
run: PRETIX_CONFIG_FILE=tests/ci_${{ matrix.database }}.cfg py.test -n 3 -p no:sugar --cov=./ --cov-report=xml tests --maxfail=100
- name: Run concurrency tests
working-directory: ./src
run: PRETIX_CONFIG_FILE=tests/ci_${{ matrix.database }}.cfg py.test tests/concurrency_tests/ --reuse-db
@@ -84,46 +84,3 @@ jobs:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false
if: matrix.database == 'postgres' && matrix.python-version == '3.13'
e2e:
runs-on: ubuntu-22.04
name: E2E Tests
services:
postgres:
image: postgres:15
env:
POSTGRES_PASSWORD: postgres
POSTGRES_DB: pretix
options: >-
--health-cmd "pg_isready -U postgres -d pretix"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.13"
- uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install system dependencies
run: sudo apt update && sudo apt install -y gettext
- name: Install Python dependencies
run: pip3 install uv && uv pip install --system -e ".[dev]" psycopg2-binary
- name: Install JS dependencies
working-directory: ./src
run: make npminstall
- name: Compile
working-directory: ./src
run: make all compress
- name: Install Playwright browsers
run: playwright install
- name: Run E2E tests
working-directory: ./src
run: PRETIX_CONFIG_FILE=tests/ci_postgres.cfg py.test tests/e2e/ -v --maxfail=10

2
.gitignore vendored
View File

@@ -24,7 +24,5 @@ local/
.project
.pydevproject
.DS_Store
node_modules/
.vite/

View File

@@ -10,10 +10,9 @@ tests:
- cd src
- python manage.py check
- make all compress
- playwright install
- PRETIX_CONFIG_FILE=tests/ci_sqlite.cfg py.test -n 3 tests --maxfail=100
except:
- '/^v.*$/'
- pypi
pypi:
stage: release
image:
@@ -36,7 +35,7 @@ pypi:
- twine check dist/*
- twine upload dist/*
only:
- '/^v.*$/'
- pypi
artifacts:
paths:
- src/dist/

View File

@@ -1 +1 @@
24
17

View File

@@ -1 +0,0 @@
/*

View File

@@ -1,7 +1,6 @@
FROM python:3.13-trixie
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \
apt-get update && \
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential \
gettext \
@@ -22,7 +21,8 @@ RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \
libmaxminddb0 \
libmaxminddb-dev \
zlib1g-dev \
nodejs && \
nodejs \
npm && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
dpkg-reconfigure locales && \
@@ -50,10 +50,6 @@ COPY deployment/docker/production_settings.py /pretix/src/production_settings.py
COPY pyproject.toml /pretix/pyproject.toml
COPY _build /pretix/_build
COPY src /pretix/src
COPY package.json /pretix/package.json
COPY package-lock.json /pretix/package-lock.json
COPY tsconfig.json /pretix/tsconfig.json
COPY vite.config.ts /pretix/vite.config.ts
RUN pip3 install -U \
pip \

View File

@@ -48,8 +48,3 @@ recursive-include src Makefile
recursive-exclude doc *
recursive-exclude deployment *
recursive-exclude res *
include package.json
include package-lock.json
include tsconfig.json
include vite.config.ts

View File

@@ -844,187 +844,3 @@ You can also fetch existing leads (if you are authorized to do so):
:statuscode 200: No error
:statuscode 401: Invalid authentication code
:statuscode 403: Not permitted to access bulk data
Retrieving Vouchers
"""""""""""""""""""
Vouchers returned by the App API use a different format than described in :ref:`rest-vouchers`.
.. rst-class:: rest-resource-table
===================================== ========================== =======================================================
Field Type Description
===================================== ========================== =======================================================
id integer Internal ID of the voucher
code string The voucher code that is required to redeem the voucher
max_usages integer The maximum number of times this voucher can be
redeemed (default: 1).
redeemed integer The number of times this voucher already has been
redeemed.
valid_until datetime The voucher expiration date (or ``null``).
subevent string Name of the date inside an event series this voucher belongs to (or ``null``).
tag string A string that is used for grouping vouchers
comment string An internal exhibitor comment on the voucher.
items list of strings A list of items this voucher is restricted to (or ``null``).
price_mode string Determines how this voucher affects product prices.
Possible values:
* ``none`` No effect on price
* ``set`` The product price is set to the given ``value``
* ``subtract`` The product price is determined by the original price *minus* the given ``value``
* ``percent`` The product price is determined by the original price reduced by the percentage given in ``value``
value decimal (string) The value (see ``price_mode``)
redemptions list of objects A list of objects, where each object represents an order position that has been purchased using the voucher.
Each entry will contains the fields ``attendee_fields``, ``redemption_date`` and ``subevent``.
The attendee data in the ``attendee_fields`` that is shown is based on the event's configuration, and each entry
contains the fields ``id``, ``label``, ``value``, and ``details``. ``details`` is usually empty
except in a few cases where it contains an additional list of objects
with ``value`` and ``label`` keys (e.g. splitting of names).
===================================== ========================== =======================================================
.. http:get:: /exhibitors/api/v1/vouchers/
Returns a list of all vouchers connected to the exhibitor.
Note that the ``attendee_fields`` array can contain any number of dynamic keys!
Depending on the exhibitors permission and event configuration this might be empty, or contain lots of details.
The app should dynamically show these values (read-only) with the labels sent by the server.
**Example request**:
.. sourcecode:: http
GET /exhibitors/api/v1/vouchers/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": 1,
"code": "43K6LKM37FBVR2YG",
"max_usages": 1,
"redeemed": 0,
"valid_until": null,
"subevent": null,
"tag": "testvoucher",
"comment": "",
"items": [
"All"
],
"price_mode": "set",
"value": "12.00",
"redemptions": [
{
"attendee_fields": [
{
"id": "attendee_name",
"label": "Name",
"value": "Jon Doe",
"details": [
{"label": "Given name", "value": "John"},
{"label": "Family name", "value": "Doe"},
]
},
{
"id": "attendee_email",
"label": "Email",
"value": "test@example.com",
"details": []
}
],
"redemption_date": "2026-05-06",
"subevent": null
},
]
}
]
}
:statuscode 200: No error
:statuscode 401: Invalid authentication code
:statuscode 403: Not permitted to access bulk data
.. http:get:: /exhibitors/api/v1/vouchers/(id)/
Returns the details of a single, specific voucher connected to the exhibitor.
Note that the ``attendee_fields`` array can contain any number of dynamic keys!
Depending on the exhibitors permission and event configuration this might be empty, or contain lots of details.
The app should dynamically show these values (read-only) with the labels sent by the server.
**Example request**:
.. sourcecode:: http
GET /exhibitors/api/v1/vouchers/1/ HTTP/1.1
Host: pretix.eu
Accept: application/json, text/javascript
**Example response**:
.. sourcecode:: http
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"id": 1,
"code": "43K6LKM37FBVR2YG",
"max_usages": 1,
"redeemed": 0,
"valid_until": null,
"subevent": null,
"tag": "testvoucher",
"comment": "",
"items": [
"All"
],
"price_mode": "set",
"value": "12.00",
"redemptions": [
{
"attendee_fields": [
{
"id": "attendee_name",
"label": "Name",
"value": "Jon Doe",
"details": [
{"label": "Given name", "value": "John"},
{"label": "Family name", "value": "Doe"},
]
},
{
"id": "attendee_email",
"label": "Email",
"value": "test@example.com",
"details": []
}
],
"redemption_date": "2026-05-06",
"subevent": null
},
]
}
:param id: The ``id`` field of the voucher to fetch
:statuscode 200: No error
:statuscode 401: Invalid authentication code
:statuscode 403: Not permitted to access bulk data
:statuscode 404: Voucher not found in system

View File

@@ -70,7 +70,6 @@ The following values for ``action_types`` are valid with pretix core:
* ``pretix.subevent.changed``
* ``pretix.subevent.deleted``
* ``pretix.event.item.*``
* ``pretix.event.quota.*``
* ``pretix.event.live.activated``
* ``pretix.event.live.deactivated``
* ``pretix.event.testmode.activated``

View File

@@ -86,7 +86,7 @@ individual commits, we use "Rebase and merge" instead. Merge commits should be a
.. _PEP 8: https://legacy.python.org/dev/peps/pep-0008/
.. _flake8: https://pypi.python.org/pypi/flake8
.. _Django Coding Style: https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/coding-style/
.. _translation: https://docs.djangoproject.com/en/6.0/topics/i18n/translation/
.. _class-based views: https://docs.djangoproject.com/en/6.0/topics/class-based-views/
.. _translation: https://docs.djangoproject.com/en/1.11/topics/i18n/translation/
.. _class-based views: https://docs.djangoproject.com/en/1.11/topics/class-based-views/
.. _pytest-style: https://docs.pytest.org/en/latest/assert.html
.. _fixtures: https://docs.pytest.org/en/latest/fixture.html

View File

@@ -110,56 +110,6 @@ process::
However, beware that code changes will not auto-reload within Celery.
Running the local development server will also automatically start a vite dev server for all control vue components.
Run the widget development server
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
To locally develop the presale widget you need to start a separate vite dev server using::
npm run dev:widget
You can control the org, event and much more via query parameters like this::
http://localhost:5180/?org=testorg&event=testevent
The following query parameters are supported:
.. list-table::
:header-rows: 1
:widths: 20 20 60
* - Parameter
- Default
- Description
* - ``org``
- ``testorg``
- Organization slug
* - ``event``
- ``testevent``
- Event slug
* - ``host``
- ``http://localhost:8000``
- Backend host URL
* - ``type``
- ``widget``
- Element type: ``widget`` or ``button``
* - ``mode``
- ``dev``
- ``dev`` loads the Vite dev source, ``prod`` loads the built ``v2.{lang}.js``
* - ``lang``
- ``de``
- Language code for the prod script
* - ``button-text``
- ``Buy tickets!``
- Text content for the button (only used when ``type=button``)
Any other query parameter is passed through as an attribute on the widget/button element.
For example, ``?skip-ssl-check&list-type=calendar&items=123`` adds those attributes directly.
.. _`checksandtests`:
Code checks and unit tests

View File

@@ -1,108 +0,0 @@
import { defineConfig, globalIgnores } from 'eslint/config'
import globals from 'globals'
import js from '@eslint/js'
import ts from 'typescript-eslint'
import stylistic from '@stylistic/eslint-plugin'
import vue from 'eslint-plugin-vue'
import vuePug from 'eslint-plugin-vue-pug'
const ignores = globalIgnores([
'**/node_modules',
'**/dist'
])
export default defineConfig([
ignores,
...ts.config(
js.configs.recommended,
ts.configs.recommended
),
stylistic.configs.customize({
indent: 'tab',
braceStyle: '1tbs',
quoteProps: 'as-needed'
}),
...vue.configs['flat/recommended'],
...vuePug.configs['flat/recommended'],
{
languageOptions: {
globals: {
...globals.browser,
...globals.node,
localStorage: false,
$: 'readonly',
$$: 'readonly',
$ref: 'readonly',
$computed: 'readonly',
},
parserOptions: {
parser: '@typescript-eslint/parser'
}
},
rules: {
'no-debugger': 'off',
curly: 0,
'no-return-assign': 0,
'no-console': 'off',
'vue/require-default-prop': 0,
'vue/require-v-for-key': 0,
'vue/valid-v-for': 'warn',
'vue/no-reserved-keys': 0,
'vue/no-setup-props-destructure': 0,
'vue/multi-word-component-names': 0,
'vue/max-attributes-per-line': 0,
'vue/attribute-hyphenation': ['warn', 'never'],
'vue/v-on-event-hyphenation': ['warn', 'never'],
'import/first': 0,
'@typescript-eslint/ban-ts-comment': 0,
'@typescript-eslint/no-explicit-any': 0,
'no-use-before-define': 'off',
'no-var': 'error',
'@typescript-eslint/no-use-before-define': ['error', {
typedefs: false,
functions: false,
}],
'@typescript-eslint/no-unused-vars': ['error', {
args: 'all',
argsIgnorePattern: '^_',
caughtErrors: 'all',
caughtErrorsIgnorePattern: '^_',
destructuredArrayIgnorePattern: '^_',
varsIgnorePattern: '^_',
ignoreRestSiblings: true
}],
'@stylistic/comma-dangle': 0,
'@stylistic/space-before-function-paren': ['error', 'always'],
'@stylistic/max-statements-per-line': ['error', { max: 1, ignoredNodes: ['BreakStatement'] }],
'@stylistic/member-delimiter-style': 0,
'@stylistic/arrow-parens': 0,
'@stylistic/generator-star-spacing': 0,
'@stylistic/yield-star-spacing': ['error', 'after'],
},
},
{
files: [
'src/pretix/static/pretixcontrol/js/ui/checkinrules/**/*.vue',
'src/pretix/plugins/webcheckin/**/*.vue',
],
languageOptions: {
globals: {
moment: 'readonly',
},
},
},
{
files: [
'src/pretix/static/pretixpresale/widget/**/*.{ts,vue}',
],
languageOptions: {
globals: {
LANG: 'readonly',
},
},
},
])

4781
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,52 +0,0 @@
{
"name": "pretix",
"version": "1.0.0",
"description": "",
"homepage": "https://github.com/pretix/pretix#readme",
"bugs": {
"url": "https://github.com/pretix/pretix/issues"
},
"repository": {
"type": "git",
"url": "git+https://github.com/pretix/pretix.git"
},
"license": "SEE LICENSE IN LICENSE",
"author": "",
"type": "module",
"main": "index.js",
"directories": {
"doc": "doc"
},
"scripts": {
"dev:control": "vite",
"dev:widget": "vite src/pretix/static/pretixpresale/widget",
"build": "npm run build:control -s && npm run build:widget -s",
"build:control": "vite build",
"build:widget": "vite build src/pretix/static/pretixpresale/widget",
"lint:eslint": "eslint src/pretix/static/pretixpresale/widget src/pretix/static/pretixcontrol/js/ui/checkinrules src/pretix/plugins/webcheckin",
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"vue": "^3.5.30"
},
"devDependencies": {
"@eslint/js": "^10.0.1",
"@stylistic/eslint-plugin": "^5.10.0",
"@types/jquery": "^3.5.33",
"@types/moment": "^2.11.29",
"@types/node": "^25.5.0",
"@vitejs/plugin-vue": "^6.0.5",
"@vue/eslint-config-typescript": "^14.7.0",
"@vue/language-plugin-pug": "^3.2.5",
"eslint": "^10.0.3",
"eslint-plugin-vue": "^10.8.0",
"eslint-plugin-vue-pug": "^1.0.0-alpha.5",
"globals": "^17.4.0",
"pug": "^3.0.3",
"sass-embedded": "^1.98.0",
"smol-toml": "^1.6.1",
"stylus": "^0.64.0",
"typescript-eslint": "^8.57.0",
"vite": "^8.0.0"
}
}

View File

@@ -27,13 +27,13 @@ classifiers = [
]
dependencies = [
"arabic-reshaper==3.0.1", # Support for Arabic in reportlab
"arabic-reshaper==3.0.0", # Support for Arabic in reportlab
"babel",
"BeautifulSoup4==4.14.*",
"bleach==6.3.*",
"celery==5.6.*",
"chardet==5.2.*",
"cryptography>=48.0.0",
"cryptography>=47.0.0",
"css-inline==0.20.*",
"defusedcsv>=3.0.0",
"dnspython==2.*",
@@ -43,7 +43,7 @@ dependencies = [
"django-countries==8.2.*",
"django-filter==25.1",
"django-formset-js-improved==0.5.0.5",
"django-formtools==2.6.1",
"django-formtools==2.5.1",
"django-hierarkey==2.0.*,>=2.0.1",
"django-hijack==3.7.*",
"django-i18nfield==1.11.*",
@@ -56,7 +56,7 @@ dependencies = [
"django-redis==6.0.*",
"django-scopes==2.0.*",
"django-statici18n==2.7.*",
"djangorestframework==3.17.*",
"djangorestframework==3.16.*",
"dnspython==2.8.*",
"drf_ujson2==1.7.*",
"geoip2==5.*",
@@ -74,11 +74,11 @@ dependencies = [
"packaging",
"paypalrestsdk==1.13.*",
"paypal-checkout-serversdk==1.0.*",
"PyJWT==2.13.*",
"PyJWT==2.12.*",
"phonenumberslite==9.0.*",
"Pillow==12.2.*",
"pretix-plugin-build",
"protobuf==7.35.*",
"protobuf==7.34.*",
"psycopg2-binary",
"pycountry",
"pycparser==3.0",
@@ -91,9 +91,9 @@ dependencies = [
"pyuca",
"qrcode==8.2",
"redis==7.4.*",
"reportlab==4.5.*",
"reportlab==4.4.*",
"requests==2.32.*",
"sentry-sdk==2.60.*",
"sentry-sdk==2.58.*",
"sepaxml==2.7.*",
"stripe==7.9.*",
"text-unidecode==1.*",
@@ -111,22 +111,20 @@ dev = [
"aiohttp==3.13.*",
"coverage",
"coveralls",
"fakeredis==2.35.*",
"fakeredis==2.34.*",
"flake8==7.3.*",
"freezegun",
"isort==8.0.*",
"pep8-naming==0.15.*",
"potypo",
"pytest-asyncio>=1.4.0",
"pytest-asyncio>=1.3.0",
"pytest-cache",
"pytest-cov",
"pytest-django==4.*",
"pytest-mock==3.15.*",
"pytest-sugar",
"pytest-xdist==3.8.*",
"pytest-playwright",
"pytest==9.0.*",
"playwright",
"responses",
]

View File

@@ -37,9 +37,4 @@ ignore =
CONTRIBUTING.md
Dockerfile
SECURITY.md
eslint.config.mjs
package-lock.json
package.json
tsconfig.json
vite.config.js

View File

@@ -9,10 +9,10 @@ localegen:
./manage.py makemessages --keep-pot --ignore "pretix/static/npm_dir/*" $(LNGS)
./manage.py makemessages --keep-pot -d djangojs --ignore "pretix/static/npm_dir/*" --ignore "pretix/helpers/*" --ignore "pretix/static/jsi18n/*" --ignore "pretix/static/jsi18n/*" --ignore "pretix/static.dist/*" --ignore "data/*" --ignore "pretix/static/rrule/*" --ignore "build/*" $(LNGS)
staticfiles: npminstall npmbuild jsi18n
staticfiles: jsi18n
./manage.py collectstatic --noinput
compress:
compress: npminstall
./manage.py compress
jsi18n: localecompile
@@ -25,8 +25,8 @@ coverage:
coverage run -m py.test
npminstall:
npm ci
npmbuild:
npm run build
# keep this in sync with pretix/_build.py!
mkdir -p pretix/static.dist/node_prefix/
cp -r pretix/static/npm_dir/* pretix/static.dist/node_prefix/
npm ci --prefix=pretix/static.dist/node_prefix

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.5.1"
__version__ = "2026.5.0.dev0"

View File

@@ -37,11 +37,9 @@ INSTALLED_APPS = [
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.humanize',
# pretix needs to go before staticfiles
# so we can override the runserver command
'pretix.base',
'django.contrib.staticfiles',
'django.contrib.humanize',
'pretix.base',
'pretix.control',
'pretix.presale',
'pretix.multidomain',
@@ -245,6 +243,7 @@ STORAGES = {
COMPRESS_PRECOMPILERS = (
('text/x-scss', 'django_libsass.SassCompiler'),
('text/vue', 'pretix.helpers.compressor.VueCompiler'),
)
COMPRESS_OFFLINE_CONTEXT = {

View File

@@ -21,13 +21,13 @@
#
import os
import shutil
import subprocess
from setuptools.command.build import build
from setuptools.command.build_ext import build_ext
here = os.path.abspath(os.path.dirname(__file__))
project_root = os.path.abspath(os.path.join(here, '..', '..'))
npm_installed = False
@@ -35,14 +35,14 @@ def npm_install():
global npm_installed
if not npm_installed:
subprocess.check_call('npm ci', shell=True, cwd=project_root)
# keep this in sync with Makefile!
node_prefix = os.path.join(here, 'static.dist', 'node_prefix')
os.makedirs(node_prefix, exist_ok=True)
shutil.copytree(os.path.join(here, 'static', 'npm_dir'), node_prefix, dirs_exist_ok=True)
subprocess.check_call('npm ci', shell=True, cwd=node_prefix)
npm_installed = True
def npm_build():
subprocess.check_call('npm run build', shell=True, cwd=project_root)
class CustomBuild(build):
def run(self):
if "src" not in os.listdir(".") or "pretix" not in os.listdir("src"):
@@ -62,7 +62,6 @@ class CustomBuild(build):
settings.COMPRESS_OFFLINE = True
npm_install()
npm_build()
management.call_command('compilemessages', verbosity=1)
management.call_command('compilejsi18n', verbosity=1)
management.call_command('collectstatic', verbosity=1, interactive=False)

View File

@@ -47,5 +47,3 @@ HAS_MEMCACHED = False
HAS_CELERY = False
HAS_GEOIP = False
SENTRY_ENABLED = False
VITE_DEV_MODE = False
VITE_IGNORE = False

View File

@@ -133,43 +133,37 @@ class JobRunSerializer(serializers.Serializer):
return not bool(self._errors)
class ExportFormDataField(serializers.Field):
def get_attribute(self, instance):
return (instance.export_identifier, instance.export_form_data)
def to_representation(self, value):
export_identifier, export_form_data = value
exporter = self.context['exporters'].get(export_identifier)
if exporter:
return JobRunSerializer(exporter=exporter).to_representation(export_form_data)
else:
return export_form_data
def get_value(self, dictionary):
return dictionary
def to_internal_value(self, data):
if "export_form_data" in data:
identifier = data.get('export_identifier', self.parent.instance.export_identifier if self.parent.instance else None)
exporter = self.context['exporters'].get(identifier)
if exporter:
return JobRunSerializer(exporter=exporter).to_internal_value(data["export_form_data"])
else:
return data['export_form_data']
class ScheduledExportSerializer(serializers.ModelSerializer):
schedule_next_run = serializers.DateTimeField(read_only=True)
export_identifier = serializers.ChoiceField(choices=[])
locale = serializers.ChoiceField(choices=settings.LANGUAGES, default='en')
owner = serializers.SlugRelatedField(slug_field='email', read_only=True)
error_counter = serializers.IntegerField(read_only=True)
export_form_data = ExportFormDataField()
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['export_identifier'].choices = [(e, e) for e in self.context['exporters']]
def validate(self, attrs):
if attrs.get("export_form_data"):
identifier = attrs.get('export_identifier', self.instance.export_identifier if self.instance else None)
exporter = self.context['exporters'].get(identifier)
if exporter:
try:
attrs["export_form_data"] = JobRunSerializer(exporter=exporter).to_internal_value(attrs["export_form_data"])
except ValidationError as e:
raise ValidationError({"export_form_data": e.detail})
else:
raise ValidationError({"export_identifier": ["Unknown exporter."]})
return attrs
def to_representation(self, instance):
repr = super().to_representation(instance)
exporter = self.context['exporters'].get(instance.export_identifier)
if exporter:
repr["export_form_data"] = JobRunSerializer(exporter=exporter).to_representation(repr["export_form_data"])
return repr
def validate_mail_additional_recipients(self, value):
d = value.replace(' ', '')
if len(d.split(',')) > 25:

View File

@@ -45,12 +45,6 @@ class PrimaryKeyRelatedField(serializers.PrimaryKeyRelatedField):
return value
return super().to_representation(value)
def to_internal_value(self, data):
value = super().to_internal_value(data)
if value is not None:
return value.pk
return value
class FormFieldWrapperField(serializers.Field):
def __init__(self, *args, **kwargs):

View File

@@ -408,12 +408,6 @@ def register_default_webhook_events(sender, **kwargs):
_('This includes product added or deleted and changes to nested objects like '
'variations or bundles.'),
),
ParametrizedItemWebhookEvent(
'pretix.event.quota.*',
_('Quota changed'),
_('This includes related events like creation, deletion, opening or closing of quotas. '
'No webhook is sent for changes to the resulting availability.'),
),
ParametrizedEventWebhookEvent(
'pretix.event.live.activated',
_('Shop taken live'),

View File

@@ -160,7 +160,7 @@ class OrderListExporter(MultiSheetListExporter):
def _get_all_payment_methods(self, qs):
pps = dict(get_all_payment_providers())
return sorted([(pp, pps.get(pp, pp)) for pp in set(
return sorted([(pp, pps[pp]) for pp in set(
OrderPayment.objects.exclude(provider='free').filter(order__event__in=self.events).values_list(
'provider', flat=True
).distinct()
@@ -330,7 +330,6 @@ class OrderListExporter(MultiSheetListExporter):
taxsum=Sum('tax_value'), grosssum=Sum('value')
)
}
payment_methods = None
if form_data.get('include_payment_amounts'):
payment_sum_cache = {
(o['order__id'], o['provider']): o['grosssum'] for o in
@@ -348,7 +347,6 @@ class OrderListExporter(MultiSheetListExporter):
grosssum=Sum('amount')
)
}
payment_methods = self._get_all_payment_methods(qs)
sum_cache = {
(o['order__id'], o['tax_rate']): o for o in
OrderPosition.objects.values('tax_rate', 'order__id').order_by().annotate(
@@ -436,6 +434,7 @@ class OrderListExporter(MultiSheetListExporter):
)
if form_data.get('include_payment_amounts'):
payment_methods = self._get_all_payment_methods(qs)
for id, vn in payment_methods:
row.append(
payment_sum_cache.get((order.id, id), Decimal('0.00')) -

View File

@@ -61,23 +61,18 @@ class ReusableMediaExporter(OrganizerLevelExportMixin, ListExporter):
yield headers
yield self.ProgressSetTotal(total=media.count())
can_read_giftcards = self.permission_holder.has_organizer_permission(self.organizer, 'organizer.giftcards:read')
for medium in media.iterator(chunk_size=1000):
giftcard_secret = medium.linked_giftcard.secret if medium.linked_giftcard_id else ''
if giftcard_secret and not can_read_giftcards:
giftcard_secret = giftcard_secret[:3] + ""
yield [
row = [
medium.type,
medium.identifier,
_('Yes') if medium.active else _('No'),
date_format(medium.expires, 'SHORT_DATETIME_FORMAT') if medium.expires else '',
medium.customer.identifier if medium.customer_id else '',
f"{medium.linked_orderposition.order.code}-{medium.linked_orderposition.positionid}" if medium.linked_orderposition_id else '',
giftcard_secret,
medium.linked_giftcard.secret if medium.linked_giftcard_id else '',
medium.notes,
]
yield row
def get_filename(self):
return f'{self.organizer.slug}_media'

View File

@@ -35,7 +35,6 @@
import copy
import json
import logging
import re
from datetime import timedelta
from decimal import Decimal
from io import BytesIO
@@ -48,7 +47,9 @@ from django.conf import settings
from django.contrib import messages
from django.core.exceptions import ValidationError
from django.core.files.uploadedfile import SimpleUploadedFile
from django.core.validators import MaxValueValidator, MinValueValidator
from django.core.validators import (
MaxValueValidator, MinValueValidator, RegexValidator,
)
from django.db.models import QuerySet
from django.forms import Select, widgets
from django.forms.widgets import FILE_INPUT_CONTRADICTION
@@ -219,6 +220,20 @@ class NamePartsFormField(forms.MultiValueField):
defaults = {
'widget': self.widget,
'max_length': kwargs.pop('max_length', None),
'validators': [
RegexValidator(
# The following characters should never appear in a name anywhere of
# the world. However, they commonly appear in inputs generated by spam
# bots.
r'^[^$€/%§{}<>~]*$',
message=_('Please do not use special characters in names.')
),
RegexValidator(
URL_RE,
inverse_match=True,
message=_('Please do not use special characters in names.')
)
]
}
self.max_length = defaults['max_length']
self.scheme_name = kwargs.pop('scheme')
@@ -240,6 +255,7 @@ class NamePartsFormField(forms.MultiValueField):
if fname == 'title' and self.scheme_titles:
d = dict(defaults)
d.pop('max_length', None)
d.pop('validators', None)
field = forms.ChoiceField(
**d,
choices=[('', '')] + [(d, d) for d in self.scheme_titles[1]]
@@ -248,6 +264,7 @@ class NamePartsFormField(forms.MultiValueField):
elif fname == 'salutation':
d = dict(defaults)
d.pop('max_length', None)
d.pop('validators', None)
field = forms.ChoiceField(
**d,
choices=[
@@ -279,37 +296,6 @@ class NamePartsFormField(forms.MultiValueField):
if sum(len(v) for v in value.values() if v) > (self.max_length or 250):
raise forms.ValidationError(_('Please enter a shorter name.'), code='max_length')
for fname, label, size in self.scheme['fields']:
if fname == 'salutation' or (fname == 'title' and self.scheme_titles):
continue
v = value.get(fname)
if not v:
continue
special_chars = re.findall('[$€/%§{}<>~]', v)
if special_chars:
raise forms.ValidationError(
_('The field "%(label)s" may not contain special characters such as "%(chars)s".'),
code='name_special_chars',
params={
"label": label,
"chars": "".join(special_chars),
},
)
# URL_RE checks for valid domain names, including one special TLD med, which can be part of a title
if ".med" in v:
v = v.replace(".med", ". med")
value[fname] = v
url_matched = URL_RE.search(v)
if url_matched:
raise forms.ValidationError(
_('The field "%(label)s" may not contain an URL (%(url)s).'),
code='url_in_title',
params={
"label": label,
"url": url_matched.group(0),
}
)
if value.get("salutation") == "empty":
value["salutation"] = ""

View File

@@ -269,3 +269,18 @@ class BusinessBooleanRadio(forms.RadioSelect):
'False': False,
False: False,
}.get(value)
class OptionAttrsSelect(forms.Select):
def __init__(self, *args, option_attrs=None, **kwargs):
super().__init__(*args, **kwargs)
self.option_attrs = option_attrs or {}
def create_option(self, name, value, label, selected, index, subindex=None, attrs=None):
option = super().create_option(
name, value, label, selected, index, subindex=subindex, attrs=attrs
)
extra = self.option_attrs.get(str(value))
if extra:
option["attrs"].update(extra)
return option

View File

@@ -1160,7 +1160,7 @@ class Modern1Renderer(ClassicInvoiceRenderer):
return stylesheet
def _draw_invoice_from(self, canvas):
if not self.invoice.address_invoice_from:
if not self.invoice.invoice_from:
return
c = [
self._clean_text(l)

View File

@@ -1,59 +0,0 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-today pretix GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# 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/>.
#
"""This command supersedes the Django-inbuilt runserver command.
It runs the local frontend server, if node is installed and the setting
is set.
"""
import atexit
import os
import subprocess
from pathlib import Path
from django.conf import settings
from django.contrib.staticfiles.management.commands.runserver import (
Command as Parent,
)
from django.utils.autoreload import DJANGO_AUTORELOAD_ENV
class Command(Parent):
def handle(self, *args, **options):
# Only start Vite in the non-main process of the autoreloader
if settings.VITE_DEV_MODE and os.environ.get(DJANGO_AUTORELOAD_ENV) != "true":
# Start the vite server in the background
vite_server = subprocess.Popen(
["npm", "run", "dev:control"],
cwd=Path(__file__).parent.parent.parent.parent.parent
)
def cleanup():
vite_server.terminate()
try:
vite_server.wait(timeout=5)
except subprocess.TimeoutExpired:
vite_server.kill()
atexit.register(cleanup)
super().handle(*args, **options)

View File

@@ -281,7 +281,7 @@ class SecurityMiddleware(MiddlewareMixin):
h = {
'default-src': ["{static}"],
'script-src': ["{static}"],
'script-src': ['{static}'],
'object-src': ["'none'"],
'frame-src': ['{static}'],
'style-src': ["{static}", "{media}"],
@@ -295,18 +295,6 @@ class SecurityMiddleware(MiddlewareMixin):
# this. However, we'll restrict it to HTTPS.
'form-action': ["{dynamic}", "https:"] + (['http:'] if settings.SITE_URL.startswith('http://') else []),
}
if settings.VITE_DEV_MODE:
h['script-src'] += ["http://localhost:5173", "ws://localhost:5173"]
h['style-src'] += ["'unsafe-inline'"]
h['connect-src'] += ["http://localhost:5173", "ws://localhost:5173"]
if hasattr(request, 'csp_nonce'):
nonce = f"'nonce-{request.csp_nonce}'"
h['script-src'].append(nonce)
if not settings.VITE_DEV_MODE:
# can't have 'unsafe-inline' and nonce at the same time
h['style-src'].append(nonce)
# Only include pay.google.com for wallet detection purposes on the Payment selection page
if (
url.url_name == "event.order.pay.change" or

View File

@@ -442,7 +442,7 @@ class AttendeeState(ImportColumn):
@property
def verbose_name(self):
return _('Attendee address') + ': ' + pgettext('address', 'State')
return _('Attendee address') + ': ' + _('State')
def clean(self, value, previous_values):
if value:

View File

@@ -125,7 +125,7 @@ class LoggingMixin:
elif isinstance(self, Event):
event = self
organizer_id = self.organizer_id
elif hasattr(self, 'event') and self.event:
elif hasattr(self, 'event'):
event = self.event
organizer_id = self.event.organizer_id
elif hasattr(self, 'organizer_id'):

View File

@@ -19,9 +19,13 @@
# 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 copy
import datetime
import os
import warnings
from collections import namedtuple
from typing import Union
from dataclasses import dataclass
from typing import TYPE_CHECKING, Iterable, List, Literal, Tuple, Union
from zoneinfo import ZoneInfo
from dateutil import parser
@@ -29,20 +33,255 @@ from django import forms
from django.core.exceptions import ValidationError
from django.db import models
from django.utils.formats import get_format
from django.utils.functional import lazy
from django.utils.functional import Promise, lazy
from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
BASE_CHOICES = (
('date_from', _('Event start')),
('date_to', _('Event end')),
('date_admission', _('Event admission')),
('presale_start', _('Presale start')),
('presale_end', _('Presale end')),
)
from pretix.base.forms.widgets import OptionAttrsSelect
RelativeDate = namedtuple('RelativeDate', ['days', 'minutes', 'time', 'is_after', 'base_date_name'], defaults=(0, None, None, False, 'date_from'))
if TYPE_CHECKING:
from .models import Event, Order, SubEvent
@dataclass(frozen=True)
class BaseChoice:
base: Literal["event", "order", "order.subevents"]
attribute: str
modifier: str
text: Promise
supports_before: bool
supports_after: bool
@property
def key(self) -> str:
key = f"{self.base}__{self.attribute}"
if self.modifier:
key += f"__{self.modifier}"
return key
@staticmethod
def find(objects: Iterable["BaseChoice"], key: str) -> "BaseChoice":
if "__" in key:
choice = next((obj for obj in objects if obj.key == key), None)
else:
# fallback for RelativeDateFields stored, before support for bases other than event was added
choice = next((obj for obj in objects if obj.attribute == key and obj.base == "event"), None)
if choice is None:
raise TypeError(f"key {key} must be a valid key in BASE_CHOICES")
return choice
BASE_CHOICES: List[BaseChoice] = [
BaseChoice('event', 'date_from', "", _('Event start'), True, True),
BaseChoice('event', 'date_to', "", _('Event end'), True, True),
BaseChoice('event', 'date_admission', "", _('Event admission'), True, True),
BaseChoice('event', 'presale_start', "", _('Presale start'), True, True),
BaseChoice('event', 'presale_end', "", _('Presale end'), True, True),
BaseChoice('order', 'datetime', "", _('Order creation'), False, True),
BaseChoice('order', 'expires', "", _('Order expiry'), True, True),
BaseChoice('order.subevents', 'date_from', "first", _('Subevent start (first subevent in order)'), True, True),
BaseChoice('order.subevents', 'date_from', "last", _('Subevent start (last subevent in order)'), True, True),
BaseChoice('order.subevents', 'date_to', "first", _('Subevent end (first subevent in order)'), True, True),
BaseChoice('order.subevents', 'date_to', "last", _('Subevent end (last subevent in order)'), True, True),
BaseChoice('order.subevents', 'date_admission', "first", _('Subevent admission (first subevent in order)'), True, True),
BaseChoice('order.subevents', 'date_admission', "last", _('Subevent admission (last subevent in order)'), True, True),
]
LIMIT_FALLBACKS = ['date_from', 'date_to', 'date_admission', 'presale_start', 'presale_end']
EVENT_BASE_CHOICES = [
x for x in BASE_CHOICES if x.base == 'event'
]
ORDER_BASE_CHOICES = [
x for x in BASE_CHOICES if x.base == 'order'
]
SUBEVENT_BASE_CHOICES = [
x for x in BASE_CHOICES if x.base == 'order.subevents'
]
@dataclass(frozen=True)
class RelativeDate:
"""
This contains information on a date that is defined in relation to a fixed base point.
This means that the underlying data is a fixed date as the base point and a number of days or a time interval
to calculate the date.
The list of valid base date choices is defined in BASE_CHOICES.
If the base_date_key is not set, the date_from attribute of Event is used.
"""
days: int = 0
minutes: int = None
time: datetime.time = None
is_after: bool = False
base_date_name: str = 'event__date_from__'
def __post_init__(self) -> None:
if self.is_after and not self._choice.supports_after:
raise ValueError(
"The selected base date and attribute combination does not support relative dates placed after the base date"
)
if not self.is_after and not self._choice.supports_before:
raise ValueError(
"The selected base date and attribute combination does not support relative dates placed before the base date")
@property
def _choice(self):
return BaseChoice.find(BASE_CHOICES, self.base_date_name)
@property
def key(self):
return self._choice.key
def __eq__(self, o: object) -> bool:
if not isinstance(o, RelativeDate):
return False
return self.to_string() == o.to_string()
def _resolve_base_date(self, base: "Event | Order | SubEvent") -> Tuple[datetime.datetime, ZoneInfo]:
"""
:param base:
:return:
"""
from .models import Event, Order, SubEvent
choice = self._choice
if choice.base == "order" and isinstance(base, Order):
event = base.event
base_date = getattr(base, choice.attribute)
elif choice.base == "order.subevents" and isinstance(base, Order):
if not base.event.has_subevents:
raise ValueError("The order is for an event without subevents")
if choice.modifier == "first":
op = base.all_positions.order_by(f"subevent__{choice.attribute}").first()
if op is None:
raise ValueError("The order has no positions for subevents")
event = op.event
base_date = getattr(op.subevent, choice.attribute)
elif choice.modifier == "last":
op = base.all_positions.order_by(f"subevent__{choice.attribute}").last()
if op is None:
raise ValueError("The order has no positions for subevents")
event = op.event
base_date = getattr(op.subevent, choice.attribute)
else:
raise ValueError("The selected modifier does not exist")
elif choice.base == "event" and isinstance(base, SubEvent):
event = base.event
base_date = (getattr(base, choice.attribute) or
getattr(base.event, choice.attribute) or
base.date_from)
elif choice.base == "event" and isinstance(base, Event):
event = base
base_date = getattr(base, choice.attribute) or event.date_from
else:
raise TypeError("The base defined by data does not match the passed in base")
tz = ZoneInfo(event.settings.timezone)
return base_date, tz
def date(self, base: "Event | Order | SubEvent") -> datetime.date:
if self.minutes is not None:
raise ValueError('A minute-based relative datetime can not be used as a date')
base_date, tz = self._resolve_base_date(base)
if self.is_after:
new_date = base_date.astimezone(tz) + datetime.timedelta(days=self.days)
else:
new_date = base_date.astimezone(tz) - datetime.timedelta(days=self.days)
return new_date.date()
def datetime(self, base: "Event | Order | SubEvent") -> datetime.datetime:
base_date, tz = self._resolve_base_date(base)
if self.minutes is not None:
if self.is_after:
return base_date.astimezone(tz) + datetime.timedelta(minutes=self.minutes)
else:
return base_date.astimezone(tz) - datetime.timedelta(minutes=self.minutes)
else:
if self.is_after:
new_date = (base_date.astimezone(tz) + datetime.timedelta(days=self.days)).astimezone(tz)
else:
new_date = (base_date.astimezone(tz) - datetime.timedelta(days=self.days)).astimezone(tz)
if self.time:
new_date = new_date.replace(
hour=self.time.hour,
minute=self.time.minute,
second=self.time.second
)
new_date = new_date.astimezone(tz)
return new_date
def to_string(self) -> str:
"""
:return:
"""
if self.minutes is not None:
return 'RELDATE/minutes/{}/{}/{}'.format( #
self.minutes,
self._choice.key,
'after' if self.is_after else '',
)
return 'RELDATE/{}/{}/{}/{}'.format( #
self.days,
self.time.strftime('%H:%M:%S') if self.time else '-',
self._choice.key,
'after' if self.is_after else '',
)
@classmethod
def from_string(cls, input: str):
"""
:param input:
"""
if not input.startswith('RELDATE/'):
raise TypeError("Invalid input for RelativeDate.from_string()")
parts = input.split('/')
if parts[1] == 'minutes':
data = RelativeDate(
days=0,
minutes=int(parts[2]),
base_date_name=parts[3],
time=None,
is_after=len(parts) > 4 and parts[4] == "after",
)
else:
if parts[2] == '-':
time = None
else:
timeparts = parts[2].split(':')
time = datetime.time(hour=int(timeparts[0]), minute=int(timeparts[1]), second=int(timeparts[2]))
try:
data = RelativeDate(
days=int(parts[1] or 0),
base_date_name=parts[3],
time=time,
minutes=None,
is_after=len(parts) > 4 and parts[4] == "after",
)
except ValueError:
data = RelativeDate(
days=0,
base_date_name=parts[3],
time=time,
minutes=None,
is_after=len(parts) > 4 and parts[4] == "after",
)
return data
class RelativeDateWrapper:
@@ -50,130 +289,35 @@ class RelativeDateWrapper:
This contains information on a date that might be relative to an event. This means
that the underlying data is either a fixed date or a number of days and a wall clock
time to calculate the date based on a base point.
The base point can be the date_from, date_to, date_admission, presale_start or presale_end
attribute of an event or subevent. If the respective attribute is not set, ``date_from``
will be used.
"""
def __init__(self, data: Union[datetime.datetime, RelativeDate]):
self.data = data
def date(self, event) -> datetime.date:
from .models import SubEvent
def date(self, base: "Event | Order | SubEvent") -> datetime.date:
if isinstance(self.data, datetime.datetime):
return self.data.date()
elif isinstance(self.data, datetime.date):
return self.data
else:
if self.data.minutes is not None:
raise ValueError('A minute-based relative datetime can not be used as a date')
tz = ZoneInfo(event.settings.timezone)
if isinstance(event, SubEvent):
base_date = (
getattr(event, self.data.base_date_name)
or getattr(event.event, self.data.base_date_name)
or event.date_from
)
else:
base_date = getattr(event, self.data.base_date_name) or event.date_from
if self.data.is_after:
new_date = base_date.astimezone(tz) + datetime.timedelta(days=self.data.days)
else:
new_date = base_date.astimezone(tz) - datetime.timedelta(days=self.data.days)
return new_date.date()
def datetime(self, event) -> datetime.datetime:
from .models import SubEvent
return self.data.date(base)
def datetime(self, base: "Event | Order | SubEvent") -> datetime.datetime:
if isinstance(self.data, (datetime.datetime, datetime.date)):
return self.data
else:
tz = ZoneInfo(event.settings.timezone)
if isinstance(event, SubEvent):
base_date = (
getattr(event, self.data.base_date_name)
or getattr(event.event, self.data.base_date_name)
or event.date_from
)
else:
base_date = getattr(event, self.data.base_date_name) or event.date_from
if self.data.minutes is not None:
if self.data.is_after:
return base_date.astimezone(tz) + datetime.timedelta(minutes=self.data.minutes)
else:
return base_date.astimezone(tz) - datetime.timedelta(minutes=self.data.minutes)
else:
if self.data.is_after:
new_date = (base_date.astimezone(tz) + datetime.timedelta(days=self.data.days)).astimezone(tz)
else:
new_date = (base_date.astimezone(tz) - datetime.timedelta(days=self.data.days)).astimezone(tz)
if self.data.time:
new_date = new_date.replace(
hour=self.data.time.hour,
minute=self.data.time.minute,
second=self.data.time.second
)
new_date = new_date.astimezone(tz)
return new_date
return self.data.datetime(base)
def to_string(self) -> str:
if isinstance(self.data, (datetime.datetime, datetime.date)):
return self.data.isoformat()
else:
if self.data.minutes is not None:
return 'RELDATE/minutes/{}/{}/{}'.format( #
self.data.minutes,
self.data.base_date_name,
'after' if self.data.is_after else '',
)
return 'RELDATE/{}/{}/{}/{}'.format( #
self.data.days,
self.data.time.strftime('%H:%M:%S') if self.data.time else '-',
self.data.base_date_name,
'after' if self.data.is_after else '',
)
return self.data.to_string()
@classmethod
def from_string(cls, input: str):
if input.startswith('RELDATE/'):
parts = input.split('/')
if parts[1] == 'minutes':
data = RelativeDate(
days=0,
minutes=int(parts[2]),
base_date_name=parts[3],
time=None,
is_after=len(parts) > 4 and parts[4] == "after",
)
else:
if parts[2] == '-':
time = None
else:
timeparts = parts[2].split(':')
time = datetime.time(hour=int(timeparts[0]), minute=int(timeparts[1]), second=int(timeparts[2]))
try:
data = RelativeDate(
days=int(parts[1] or 0),
base_date_name=parts[3],
time=time,
minutes=None,
is_after=len(parts) > 4 and parts[4] == "after",
)
except ValueError:
data = RelativeDate(
days=0,
base_date_name=parts[3],
time=time,
minutes=None,
is_after=len(parts) > 4 and parts[4] == "after",
)
if data.base_date_name not in [k[0] for k in BASE_CHOICES]:
raise ValueError('{} is not a valid base date'.format(data.base_date_name))
data = RelativeDate.from_string(input)
else:
data = parser.parse(input)
return RelativeDateWrapper(data)
@@ -187,7 +331,6 @@ BEFORE_AFTER_CHOICE = (
('after', _('after')),
)
reldatetimeparts = namedtuple('reldatetimeparts', (
"status", # 0
"absolute", # 1
@@ -202,6 +345,14 @@ reldatetimeparts = namedtuple('reldatetimeparts', (
reldatetimeparts.indizes = reldatetimeparts(*range(9))
def _get_choices(base_choices: List[BaseChoice]) -> List[Tuple[str, Promise]]:
return [(c.key, c.text) for c in base_choices]
def _get_choice_validation_obj(choices: List[BaseChoice]):
return {c.key: {"data-supports-before": c.supports_before, "data-supports-after": c.supports_after} for c in choices}
class RelativeDateTimeWidget(forms.MultiWidget):
template_name = 'pretixbase/forms/widgets/reldatetime.html'
parts = reldatetimeparts
@@ -209,6 +360,7 @@ class RelativeDateTimeWidget(forms.MultiWidget):
def __init__(self, *args, **kwargs):
self.status_choices = kwargs.pop('status_choices')
base_choices = kwargs.pop('base_choices')
choices = _get_choices(base_choices)
def placeholder_datetime_format():
df = get_format('DATETIME_INPUT_FORMATS')[0]
@@ -226,14 +378,22 @@ class RelativeDateTimeWidget(forms.MultiWidget):
attrs={'placeholder': lazy(placeholder_datetime_format, str), 'class': 'datetimepicker'}
),
rel_days_number=forms.NumberInput(),
rel_mins_relationto=forms.Select(choices=base_choices),
rel_mins_relationto=OptionAttrsSelect(
attrs={'data-relative-choice': True},
choices=choices,
option_attrs=_get_choice_validation_obj(base_choices)
),
rel_days_timeofday=forms.TimeInput(
attrs={'placeholder': lazy(placeholder_time_format, str), 'class': 'timepickerfield'}
),
rel_mins_number=forms.NumberInput(),
rel_days_relationto=forms.Select(choices=base_choices),
rel_mins_relation=forms.Select(choices=BEFORE_AFTER_CHOICE),
rel_days_relation=forms.Select(choices=BEFORE_AFTER_CHOICE),
rel_days_relationto=OptionAttrsSelect(
attrs={'data-relative-choice': True},
choices=choices,
option_attrs=_get_choice_validation_obj(base_choices)
),
rel_mins_relation=forms.Select(attrs={'data-relation-choice': True}, choices=BEFORE_AFTER_CHOICE),
rel_days_relation=forms.Select(attrs={'data-relation-choice': True}, choices=BEFORE_AFTER_CHOICE),
)
super().__init__(widgets=widgets, *args, **kwargs)
@@ -247,10 +407,10 @@ class RelativeDateTimeWidget(forms.MultiWidget):
status="unset",
absolute=None,
rel_days_number=1,
rel_mins_relationto="date_from",
rel_mins_relationto="event__date_from",
rel_days_timeofday=None,
rel_mins_number=0,
rel_days_relationto="date_from",
rel_days_relationto="event__date_from",
rel_mins_relation="before",
rel_days_relation="before"
)
@@ -259,10 +419,10 @@ class RelativeDateTimeWidget(forms.MultiWidget):
status="absolute",
absolute=value.data,
rel_days_number=1,
rel_mins_relationto="date_from",
rel_mins_relationto="event__date_from",
rel_days_timeofday=None,
rel_mins_number=0,
rel_days_relationto="date_from",
rel_days_relationto="event__date_from",
rel_mins_relation="before",
rel_days_relation="before"
)
@@ -271,10 +431,10 @@ class RelativeDateTimeWidget(forms.MultiWidget):
status="relative_minutes",
absolute=None,
rel_days_number=None,
rel_mins_relationto=value.data.base_date_name,
rel_mins_relationto=value.data.key,
rel_days_timeofday=None,
rel_mins_number=value.data.minutes,
rel_days_relationto=value.data.base_date_name,
rel_days_relationto=value.data.key,
rel_mins_relation="after" if value.data.is_after else "before",
rel_days_relation="after" if value.data.is_after else "before"
)
@@ -282,10 +442,10 @@ class RelativeDateTimeWidget(forms.MultiWidget):
status="relative",
absolute=None,
rel_days_number=value.data.days,
rel_mins_relationto=value.data.base_date_name,
rel_mins_relationto=value.data.key,
rel_days_timeofday=value.data.time,
rel_mins_number=0,
rel_days_relationto=value.data.base_date_name,
rel_days_relationto=value.data.key,
rel_mins_relation="after" if value.data.is_after else "before",
rel_days_relation="after" if value.data.is_after else "before"
)
@@ -309,17 +469,42 @@ class RelativeDateTimeField(forms.MultiValueField):
('relative', _('Relative date:')),
('relative_minutes', _('Relative time:')),
]
self.relative_to_order = kwargs.pop('relative_to_order', False)
self.relative_to_subevent_positions = kwargs.pop('relative_to_subevent_positions', False)
possible_choices = copy.deepcopy(EVENT_BASE_CHOICES)
if self.relative_to_order:
possible_choices.extend(ORDER_BASE_CHOICES)
if self.relative_to_subevent_positions:
possible_choices.extend(SUBEVENT_BASE_CHOICES)
if kwargs.get('limit_choices'):
limit = kwargs.pop('limit_choices')
choices = [(k, v) for k, v in BASE_CHOICES if k in limit]
else:
choices = BASE_CHOICES
if any(["__" not in l for l in limit]):
_warn_skips = (os.path.dirname(__file__),)
warnings.warn(
"Please prefix limit_choices with the base the attributes refer to, for example event__date_from",
skip_file_prefixes=_warn_skips
)
possible_choices = [
c for c in possible_choices if
# new base case as we want limit_choices to be expressed as base__attribute
(c.key in limit) or
# fallback for old event based entries
# if the base is an event, then using only attribute is fine
(c.base == "event" and c.attribute in limit)
]
if not kwargs.get('required', True):
status_choices.insert(0, ('unset', _('Not set')))
choices = _get_choices(possible_choices)
fields = reldatetimeparts(
status=forms.ChoiceField(
choices=status_choices,
required=True
required=True,
),
absolute=forms.DateTimeField(
required=False
@@ -329,7 +514,7 @@ class RelativeDateTimeField(forms.MultiValueField):
),
rel_mins_relationto=forms.ChoiceField(
choices=choices,
required=False
required=False,
),
rel_days_timeofday=forms.TimeField(
required=False,
@@ -339,7 +524,7 @@ class RelativeDateTimeField(forms.MultiValueField):
),
rel_days_relationto=forms.ChoiceField(
choices=choices,
required=False
required=False,
),
rel_mins_relation=forms.ChoiceField(
choices=BEFORE_AFTER_CHOICE,
@@ -350,8 +535,9 @@ class RelativeDateTimeField(forms.MultiValueField):
required=False
),
)
if 'widget' not in kwargs:
kwargs['widget'] = RelativeDateTimeWidget(status_choices=status_choices, base_choices=choices)
kwargs['widget'] = RelativeDateTimeWidget(status_choices=status_choices, base_choices=possible_choices)
kwargs.pop('max_length', 0)
kwargs.pop('empty_value', 0)
super().__init__(
@@ -359,21 +545,26 @@ class RelativeDateTimeField(forms.MultiValueField):
)
def set_event(self, event):
self.widget.widgets[reldatetimeparts.indizes.rel_days_relationto].choices = [
(k, v) for k, v in BASE_CHOICES if getattr(event, k, None)
]
self.widget.widgets[reldatetimeparts.indizes.rel_mins_relationto].choices = [
(k, v) for k, v in BASE_CHOICES if getattr(event, k, None)
]
possible_choices = copy.deepcopy(EVENT_BASE_CHOICES)
if self.relative_to_order:
possible_choices.extend(ORDER_BASE_CHOICES)
if self.relative_to_subevent_positions and event.has_subevents:
possible_choices.extend(SUBEVENT_BASE_CHOICES)
possible_choices = possible_choices
choices = _get_choices(possible_choices)
self.widget.widgets[reldatetimeparts.indizes.rel_days_relationto].choices = choices
self.widget.widgets[reldatetimeparts.indizes.rel_mins_relationto].choices = choices
def compress(self, data_list):
if not data_list:
return None
data = reldatetimeparts(*data_list)
if data.status == 'absolute':
return RelativeDateWrapper(data.absolute)
elif data.status == 'unset':
if data.status == 'unset':
return None
elif data.status == 'absolute':
return RelativeDateWrapper(data.absolute)
elif data.status == 'relative_minutes':
return RelativeDateWrapper(RelativeDate(
days=0,
@@ -404,6 +595,18 @@ class RelativeDateTimeField(forms.MultiValueField):
raise ValidationError(self.error_messages['incomplete'])
elif data.status == 'relative_minutes' and (data.rel_mins_number is None or not data.rel_mins_relationto):
raise ValidationError(self.error_messages['incomplete'])
elif data.status == 'relative':
choice = BaseChoice.find(BASE_CHOICES, data.rel_days_relationto)
if data.rel_days_relation == "before" and not choice.supports_before:
raise ValidationError(_('A relative date cannot be expressed as "before" for "{}"'.format(choice.text)))
elif data.status == 'relative' and data.rel_days_relation == "after" and not choice.supports_after:
raise ValidationError(_('A relative date cannot be expressed as "after" for "{}"'.format(choice.text)))
elif data.status == 'relative_minutes':
choice = BaseChoice.find(BASE_CHOICES, data.rel_days_relationto)
if data.rel_days_relation == "before" and not choice.supports_before:
raise ValidationError(_('A relative time cannot be expressed as "before" for "{}"'.format(choice.text)))
elif data.rel_days_relation == "after" and not choice.supports_after:
raise ValidationError(_('A relative time cannot be expressed as "after" for "{}"'.format(choice.text)))
return super().clean(value)
@@ -424,14 +627,20 @@ class RelativeDateWidget(RelativeDateTimeWidget):
def __init__(self, *args, **kwargs):
self.status_choices = kwargs.pop('status_choices')
self.base_choices = kwargs.pop('base_choices')
widgets = reldateparts(
status=forms.RadioSelect(choices=self.status_choices),
absolute=forms.DateInput(
attrs={'class': 'datepickerfield'}
),
rel_days_number=forms.NumberInput(),
rel_days_relationto=forms.Select(choices=kwargs.pop('base_choices')),
rel_days_relation=forms.Select(choices=BEFORE_AFTER_CHOICE),
rel_days_relationto=OptionAttrsSelect(
choices=self.base_choices,
option_attrs=_get_choice_validation_obj(self.base_choices),
attrs={'data-relative-choice': True},
),
rel_days_relation=forms.Select(choices=BEFORE_AFTER_CHOICE, attrs={'data-relation-choice': True},),
)
forms.MultiWidget.__init__(self, widgets=widgets, *args, **kwargs)
@@ -460,7 +669,7 @@ class RelativeDateWidget(RelativeDateTimeWidget):
status="relative",
absolute=None,
rel_days_number=value.data.days,
rel_days_relationto=value.data.base_date_name,
rel_days_relationto=value.data.key,
rel_days_relation="after" if value.data.is_after else "before"
)
@@ -474,6 +683,18 @@ class RelativeDateField(RelativeDateTimeField):
]
if not kwargs.get('required', True):
status_choices.insert(0, ('unset', _('Not set')))
self.relative_to_order = kwargs.pop('relative_to_order', False)
self.relative_to_subevent_positions = kwargs.pop('relative_to_subevent_positions', False)
possible_choices = copy.deepcopy(EVENT_BASE_CHOICES)
if self.relative_to_order:
possible_choices.extend(ORDER_BASE_CHOICES)
if self.relative_to_subevent_positions:
possible_choices.extend(SUBEVENT_BASE_CHOICES)
choices = _get_choices(possible_choices)
fields = reldateparts(
status=forms.ChoiceField(
choices=status_choices,
@@ -486,33 +707,39 @@ class RelativeDateField(RelativeDateTimeField):
required=False
),
rel_days_relationto=forms.ChoiceField(
choices=BASE_CHOICES,
required=False
choices=choices,
required=False,
),
rel_days_relation=forms.ChoiceField(
choices=BEFORE_AFTER_CHOICE,
required=False
),
)
if 'widget' not in kwargs:
kwargs['widget'] = RelativeDateWidget(status_choices=status_choices, base_choices=BASE_CHOICES)
kwargs['widget'] = RelativeDateWidget(status_choices=status_choices, base_choices=possible_choices)
forms.MultiValueField.__init__(
self, fields=fields, require_all_fields=False, *args, **kwargs
)
def set_event(self, event):
self.widget.widgets[reldateparts.indizes.rel_days_relationto].choices = [
(k, v) for k, v in BASE_CHOICES if getattr(event, k, None)
choices = [
(c.key, c.text) for c in EVENT_BASE_CHOICES if getattr(event, c.attribute, None)
]
if self.relative_to_order:
choices += [(c.key, c.text) for c in ORDER_BASE_CHOICES]
if self.relative_to_subevent_positions and event.has_subevents:
choices += [(c.key, c.text) for c in SUBEVENT_BASE_CHOICES]
self.widget.widgets[reldateparts.indizes.rel_days_relationto].choices = choices
def compress(self, data_list):
if not data_list:
return None
data = reldateparts(*data_list)
if data.status == 'absolute':
return RelativeDateWrapper(data.absolute)
elif data.status == 'unset':
if data.status == 'unset':
return None
elif data.status == 'absolute':
return RelativeDateWrapper(data.absolute)
else:
return RelativeDateWrapper(RelativeDate(
days=data.rel_days_number,
@@ -525,8 +752,14 @@ class RelativeDateField(RelativeDateTimeField):
data = reldateparts(*value)
if data.status == 'absolute' and not data.absolute:
raise ValidationError(self.error_messages['incomplete'])
elif data.status == 'relative' and (data.rel_days_number is None or not data.rel_days_relationto):
raise ValidationError(self.error_messages['incomplete'])
if data.status == 'relative':
choice = BaseChoice.find(BASE_CHOICES, data.rel_days_relationto)
if data.rel_days_number is None or not data.rel_days_relationto:
raise ValidationError(self.error_messages['incomplete'])
elif data.rel_days_relation == "before" and not choice.supports_before:
raise ValidationError(_("A relative date cannot be expressed as 'before' for '{}'".format(choice.text)))
elif data.rel_days_relation == "after" and not choice.supports_after:
raise ValidationError(_("A relative date cannot be expressed as 'after' for '{}'".format(choice.text)))
return forms.MultiValueField.clean(self, value)

View File

@@ -162,12 +162,12 @@ error_messages = {
'price_too_high': gettext_lazy('The entered price is to high.'),
'voucher_invalid': gettext_lazy('This voucher code is not known in our database.'),
'voucher_min_usages': ngettext_lazy(
'The voucher code "%(voucher)s" can only be used if you select at least %(number)s matching product.',
'The voucher code "%(voucher)s" can only be used if you select at least %(number)s matching products.',
'The voucher code "%(voucher)s" can only be used if you select at least %(number)s matching products.',
'number'
),
'voucher_min_usages_removed': ngettext_lazy(
'The voucher code "%(voucher)s" can only be used if you select at least %(number)s matching product. '
'The voucher code "%(voucher)s" can only be used if you select at least %(number)s matching products. '
'We have therefore removed some positions from your cart that can no longer be purchased like this.',
'The voucher code "%(voucher)s" can only be used if you select at least %(number)s matching products. '
'We have therefore removed some positions from your cart that can no longer be purchased like this.',

File diff suppressed because one or more lines are too long

View File

@@ -55,12 +55,10 @@
{% trans "You receive these emails based on your notification settings." %}<br>
<a href="{{ settings_url }}">
{% trans "Click here to view and change your notification settings" %}
</a><br>
<a href="{{ disable_url }}">
{% trans "Click here disable all notifications immediately." %}
</a>
{% if disable_url %}<br>
<a href="{{ disable_url }}">
{% trans "Click here disable all notifications immediately." %}
</a>
{% endif %}
</div>
<!--[if gte mso 9]>
</td></tr></table>

View File

@@ -14,6 +14,5 @@
{% trans "You receive these emails based on your notification settings." %}
{% trans "Click here to view and change your notification settings:" %}
{{ settings_url }}
{% if disable_url %}{% trans "Click here disable all notifications immediately:" %}
{% trans "Click here disable all notifications immediately:" %}
{{ disable_url }}
{% endif %}

View File

@@ -1,4 +1,5 @@
{% load i18n %}
{% load static %}
<div class="reldatetime">
{% for group_name, group_choices, group-index in widget.subwidgets.0.optgroups %}
{% for selopt in group_choices %}

View File

@@ -1,4 +1,5 @@
{% load i18n %}
{% load static %}
<div class="reldatetime">
{% for group_name, group_choices, group-index in widget.subwidgets.0.optgroups %}
{% for selopt in group_choices %}

View File

@@ -1,32 +0,0 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-today pretix GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# 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/>.
#
from django import template
from django.conf import settings
register = template.Library()
@register.filter
def human_readable_locale(value):
if not value:
return ''
return dict(settings.LANGUAGES).get(value, '')

View File

@@ -1,243 +0,0 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-today pretix GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# 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 json
import logging
import pathlib
import re
import secrets
from urllib.parse import urljoin
from urllib.request import urlopen
import importlib_metadata as metadata
from django import template
from django.conf import settings
from django.utils.safestring import mark_safe
register = template.Library()
LOGGER = logging.getLogger(__name__)
_MANIFEST = {}
# TODO more os.path.join ?
MANIFEST_PATH = settings.STATIC_ROOT + "/vite/control/.vite/manifest.json"
MANIFEST_BASE = "vite/control/"
# entry_name -> {"manifest_entry": {...}, "url_base": "..."}
_PLUGIN_REGISTRY = {}
def _discover_plugin_manifests():
"""Discover plugin vite manifests at startup.
Scans installed pretix plugins for a .vite/manifest.json inside a static.dist
directory. Only non-editable (wheel) plugins are expected to ship pre-built
assets; editable plugins are served through the Vite dev server.
"""
for ep in metadata.entry_points(group='pretix.plugin'):
dist = ep.dist
if not dist or not dist.files:
continue
try:
url_info = json.loads(dist.read_text('direct_url.json') or '{}')
if url_info.get('dir_info', {}).get('editable', False):
continue # editable plugins are served via vite dev server
except Exception:
pass
# Find .vite/manifest.json inside a /static/ directory
try:
manifest_rel = None
for f in dist.files:
if f.name == 'manifest.json' and '/static/' in str(f) and '/.vite/' in str(f):
manifest_rel = f
break
if not manifest_rel:
continue
manifest_path = pathlib.Path(str(dist.locate_file(manifest_rel)))
if not manifest_path.exists():
continue
plugin_manifest = json.loads(manifest_path.read_text())
url_base = re.search(r'/static/(.+?)/\.vite/', str(manifest_rel)).group(1) + '/'
for _key, entry in plugin_manifest.items():
if entry.get('isEntry') and 'name' in entry:
_PLUGIN_REGISTRY[entry['name']] = {
'manifest_entry': entry,
'url_base': url_base,
}
except Exception:
LOGGER.warning(f"Failed to discover vite manifest for plugin {ep.name}", exc_info=True)
# Load core manifest
if not settings.VITE_DEV_MODE and not settings.VITE_IGNORE:
try:
with open(MANIFEST_PATH) as fp:
_MANIFEST = json.load(fp)
except Exception as e:
LOGGER.warning(f"Error reading vite manifest at {MANIFEST_PATH}: {str(e)}")
# Discover plugin manifests
if not settings.VITE_IGNORE:
_discover_plugin_manifests()
def _generate_script_tag(path, attrs, src=None):
all_attrs = " ".join(f'{key}="{value}"' for key, value in attrs.items())
if src is None:
if settings.VITE_DEV_MODE:
src = urljoin(settings.VITE_DEV_SERVER, path)
else:
src = urljoin(settings.STATIC_URL, path)
return f'<script {all_attrs} src="{src}"></script>'
def _generate_css_tags(asset, already_processed=None):
"""Recursively builds all CSS tags used in a given asset from the core manifest."""
tags = []
manifest_entry = _MANIFEST[asset]
if already_processed is None:
already_processed = []
if "css" in manifest_entry:
for css_path in manifest_entry["css"]:
if css_path not in already_processed:
full_path = urljoin(settings.STATIC_URL, MANIFEST_BASE + css_path)
tags.append(f'<link rel="stylesheet" href="{full_path}" />')
already_processed.append(css_path)
if "imports" in manifest_entry:
for import_path in manifest_entry["imports"]:
tags += _generate_css_tags(import_path, already_processed)
return tags
def _generate_plugin_css_tags(manifest_entry, url_base):
"""Build CSS tags for a plugin manifest entry."""
tags = []
if "css" in manifest_entry:
for css_path in manifest_entry["css"]:
full_path = urljoin(settings.STATIC_URL, url_base + css_path)
tags.append(f'<link rel="stylesheet" href="{full_path}" />')
return tags
@register.simple_tag
@mark_safe
def vite_asset(path):
"""
Generates one <script> tag and <link> tags for each of the CSS dependencies.
"""
if not path:
return ""
# Check plugin registry (non-editable plugins with pre-built assets)
if path in _PLUGIN_REGISTRY:
info = _PLUGIN_REGISTRY[path]
entry = info['manifest_entry']
url_base = info['url_base']
tags = _generate_plugin_css_tags(entry, url_base)
# Always use STATIC_URL for pre-built plugin assets, even in dev mode
src = urljoin(settings.STATIC_URL, url_base + entry["file"])
tags.append(_generate_script_tag(path, {"type": "module", "crossorigin": ""}, src=src))
return "".join(tags)
# Dev mode: editable plugins and core entries go through the vite dev server
if settings.VITE_DEV_MODE:
return _generate_script_tag(path, {"type": "module"})
# Prod mode
manifest_entry = _MANIFEST.get(path)
if not manifest_entry:
raise RuntimeError(f"Cannot find {path} in Vite manifest at {MANIFEST_PATH}")
tags = _generate_css_tags(path)
tags.append(
_generate_script_tag(
MANIFEST_BASE + manifest_entry["file"], {"type": "module", "crossorigin": ""}
)
)
return "".join(tags)
@register.simple_tag
@mark_safe
def vite_hmr():
if not settings.VITE_DEV_MODE:
return ""
return _generate_script_tag("@vite/client", {"type": "module"})
_dev_importmap_cache = None
def _get_dev_importmap():
"""Fetch the shared-dep import map from the Vite dev server. Cached after first call."""
global _dev_importmap_cache
if _dev_importmap_cache is not None:
return _dev_importmap_cache
try:
url = urljoin(settings.VITE_DEV_SERVER, "/__pretix_importmap")
raw = json.loads(urlopen(url, timeout=2).read())
_dev_importmap_cache = {
dep: urljoin(settings.VITE_DEV_SERVER, dep_path)
for dep, dep_path in raw.items()
}
except Exception:
LOGGER.warning("Failed to fetch import map from Vite dev server")
_dev_importmap_cache = {}
return _dev_importmap_cache
@register.simple_tag(takes_context=True)
@mark_safe
def vite_importmap(context):
"""Emit an import map so pre-built plugin assets can resolve shared dependencies like vue."""
imports = {}
if settings.VITE_DEV_MODE:
# Fetch the import map from the Vite dev server (served by sharedDepsPlugin)
imports.update(_get_dev_importmap())
else:
# Discover all _vendor/* entries from the core manifest
for _key, entry in _MANIFEST.items():
name = entry.get("name", "")
if name.startswith("_vendor/"):
bare_specifier = name[len("_vendor/"):]
imports[bare_specifier] = urljoin(settings.STATIC_URL, MANIFEST_BASE + entry["file"])
if not imports:
return ""
# Generate a nonce and store it on the request so the CSP middleware can allow it
nonce = secrets.token_urlsafe(16)
request = context.get('request')
if request:
request.csp_nonce = nonce
return f'<script type="importmap" nonce="{nonce}">{json.dumps({"imports": imports})}</script>'

View File

@@ -24,12 +24,10 @@ import calendar
from dateutil.rrule import DAILY, MONTHLY, WEEKLY, YEARLY, rrule, rrulestr
from django.conf import settings
from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator, validate_email
from django.core.validators import validate_email
from django.utils.deconstruct import deconstructible
from django.utils.translation import gettext_lazy as _
from pretix.base.templatetags.rich_text import URL_RE
# This file is based on an earlier version of pretix which was released under the Apache License 2.0. The full text of
# the Apache License 2.0 can be obtained at <http://www.apache.org/licenses/LICENSE-2.0>.
#
@@ -115,33 +113,6 @@ def multimail_validate(val):
return s
class RegexValidatorInverseMatchAndParam(RegexValidator):
inverse_match = True
def __call__(self, value):
regex_matches = self.regex.search(str(value))
if regex_matches:
raise ValidationError(
self.message,
code=self.code,
params={
"value": value,
"match": regex_matches.group(0) if regex_matches else "",
}
)
class NoUrlValidator(RegexValidatorInverseMatchAndParam):
regex = URL_RE
def __init__(self, **kwargs):
if not kwargs.get("message"):
kwargs["message"] = _('You entered an URL, which is not allowed. Please remove %(match)s from your input.')
if not kwargs.get("code"):
kwargs["code"] = "contains_url"
super().__init__(**kwargs)
class RRuleValidator:
def __init__(self, enforce_simple=False):
self.enforce_simple = enforce_simple

View File

@@ -1528,133 +1528,6 @@ class SubEventFilterForm(FilterForm):
return self.event.organizer.meta_properties.filter(filter_allowed=True)
class QuotaFilterForm(FilterForm):
orders = {
'-date': ('-subevent__date_from', 'name', 'pk'),
'date': ('subevent__date_from', '-name', '-pk'),
'size': ('size', 'name', 'pk'),
'-size': ('-size', '-name', '-pk'),
'name': ('name', 'pk'),
'-name': ('-name', '-pk'),
}
subevent = forms.ModelChoiceField(
label=pgettext_lazy('subevent', 'Date'),
queryset=SubEvent.objects.none(),
required=False,
empty_label=pgettext_lazy('subevent', 'All dates')
)
date_from = forms.DateField(
label=_('Date from'),
required=False,
widget=DatePickerWidget({
'placeholder': _('Date from'),
}),
)
date_until = forms.DateField(
label=_('Date until'),
required=False,
widget=DatePickerWidget({
'placeholder': _('Date until'),
}),
)
time_from = forms.TimeField(
label=_('Start time from'),
required=False,
widget=TimePickerWidget({}),
)
time_until = forms.TimeField(
label=_('Start time until'),
required=False,
widget=TimePickerWidget({}),
)
weekday = forms.MultipleChoiceField(
label=_('Weekday'),
choices=(
('2', _('Monday')),
('3', _('Tuesday')),
('4', _('Wednesday')),
('5', _('Thursday')),
('6', _('Friday')),
('7', _('Saturday')),
('1', _('Sunday')),
),
widget=forms.CheckboxSelectMultiple,
required=False
)
query = forms.CharField(
label=_('Quota name'),
widget=forms.TextInput(),
required=False
)
def __init__(self, *args, **kwargs):
self.event = kwargs.pop('event')
super().__init__(*args, **kwargs)
if self.event.has_subevents:
self.fields['date_from'].widget = DatePickerWidget()
self.fields['date_until'].widget = DatePickerWidget()
self.fields['subevent'].queryset = self.event.subevents.all()
self.fields['subevent'].widget = Select2(
attrs={
'data-model-select2': 'event',
'data-select2-url': reverse('control:event.subevents.select2', kwargs={
'event': self.event.slug,
'organizer': self.event.organizer.slug,
}),
'data-placeholder': pgettext_lazy('subevent', 'All dates')
}
)
self.fields['subevent'].widget.choices = self.fields['subevent'].choices
else:
del self.fields['subevent']
del self.fields['date_from']
del self.fields['date_until']
del self.fields['time_from']
del self.fields['time_until']
del self.fields['weekday']
def filter_qs(self, qs):
fdata = self.cleaned_data
if fdata.get('weekday'):
qs = qs.annotate(wday=ExtractWeekDay('subevent__date_from')).filter(wday__in=fdata.get('weekday'))
if fdata.get('subevent'):
qs = qs.filter(subevent=fdata["subevent"])
if fdata.get('query'):
query = fdata.get('query')
qs = qs.filter(name__icontains=query)
if fdata.get('date_until'):
date_end = make_aware(datetime.combine(
fdata.get('date_until') + timedelta(days=1),
time(hour=0, minute=0, second=0, microsecond=0)
), get_current_timezone())
qs = qs.filter(
Q(subevent__date_to__isnull=True, subevent__date_from__lt=date_end) |
Q(subevent__date_to__isnull=False, subevent__date_to__lt=date_end)
)
if fdata.get('date_from'):
date_start = make_aware(datetime.combine(
fdata.get('date_from'),
time(hour=0, minute=0, second=0, microsecond=0)
), get_current_timezone())
qs = qs.filter(subevent__date_from__gte=date_start)
if fdata.get('time_until'):
qs = qs.filter(subevent__date_from__time__lte=fdata.get('time_until'))
if fdata.get('time_from'):
qs = qs.filter(subevent__date_from__time__gte=fdata.get('time_from'))
if fdata.get('ordering'):
qs = qs.order_by(*get_deterministic_ordering(Quota, self.get_order_by()))
else:
qs = qs.order_by('-subevent__date_from', 'name', 'pk')
return qs
class OrganizerFilterForm(FilterForm):
orders = {
'slug': 'slug',

View File

@@ -104,13 +104,6 @@ class GlobalSettingsForm(SettingsForm):
help_text=_("Will be served at {domain}/.well-known/apple-developer-merchantid-domain-association").format(
domain=settings.SITE_URL
)
)),
('widget_vite_origins', forms.CharField(
widget=forms.Textarea(attrs={'rows': '3'}),
required=False,
# Not translated on purpose, this is a temporary feature and contains too many special case words
label="Vite widget origins",
help_text="One origin per line (e.g. https://example.com). Requests from these origins will be served the new vite-based widget.",
))
])
responses = register_global_settings.send(self)

View File

@@ -43,7 +43,6 @@ from django.core.exceptions import ValidationError
from django.db.models import Max, Q
from django.forms import ChoiceField, RadioSelect
from django.forms.formsets import DELETION_FIELD_NAME
from django.forms.utils import ErrorDict
from django.urls import reverse
from django.utils.functional import cached_property
from django.utils.html import escape, format_html
@@ -376,60 +375,6 @@ class QuotaForm(I18nModelForm):
return inst
class QuotaBulkEditForm(QuotaForm):
def __init__(self, *args, **kwargs):
self.mixed_values = kwargs.pop('mixed_values')
self.queryset = kwargs.pop('queryset')
super().__init__(**kwargs)
self.fields.pop("subevent", None) # Would add extra complexity and it's hard to imagine a use case for that
self.fields["name"].required = False
self.fields["itemvars"].required = False
def clean(self):
d = super().clean()
if self.prefix + "name" in self.data.getlist('_bulk') and not d.get("name"):
raise ValidationError({"name": _("This field is required.")})
if self.prefix + "itemvars" in self.data.getlist('_bulk') and not d.get("itemvars"):
raise ValidationError({"itemvars": _("This field is required.")})
return d
def save(self, commit=True):
objs = list(self.queryset)
fields = set()
for k in self.fields:
cb_val = self.prefix + k
if cb_val not in self.data.getlist('_bulk'):
continue
fields.add(k)
if k == 'itemvars':
selected_items = set(list(self.event.items.filter(id__in=[
i.split('-')[0] for i in self.cleaned_data['itemvars']
])))
selected_variations = list(ItemVariation.objects.filter(item__event=self.event, id__in=[
i.split('-')[1] for i in self.cleaned_data['itemvars'] if '-' in i
]))
for obj in objs:
obj.items.set(selected_items)
obj.variations.set(selected_variations)
else:
for obj in objs:
setattr(obj, k, self.cleaned_data[k])
fields = [f for f in fields if f != 'itemvars']
if fields:
Quota.objects.bulk_update(objs, fields, 200)
def full_clean(self):
if len(self.data) == 0:
# form wasn't submitted
self._errors = ErrorDict()
return
super().full_clean()
class ItemCreateForm(I18nModelForm):
NONE = 'none'
EXISTING = 'existing'

View File

@@ -93,14 +93,14 @@ class SubEventBulkForm(SubEventForm):
label=_('Start of presale'),
help_text=_('Optional. No products will be sold before this date.'),
required=False,
limit_choices=('date_from', 'date_to'),
limit_choices=('event__date_from', 'event__date_to'),
)
rel_presale_end = RelativeDateTimeField(
label=_('End of presale'),
help_text=_('Optional. No products will be sold after this date. If you do not set this value, the presale '
'will end after the end date of your event.'),
required=False,
limit_choices=('date_from', 'date_to'),
limit_choices=('event__date_from', 'event__date_to'),
)
skip_if_overlap = forms.BooleanField(
label=pgettext_lazy('subevent', 'Skip dates that overlap with any existing date'),
@@ -332,12 +332,12 @@ class BulkSubEventItemForm(SubEventItemForm):
rel_available_from = RelativeDateTimeField(
label=_('Available from'),
required=False,
limit_choices=('date_from', 'date_to'),
limit_choices=('event__date_from', 'event__date_to'),
)
rel_available_until = RelativeDateTimeField(
label=_('Available until'),
required=False,
limit_choices=('date_from', 'date_to'),
limit_choices=('event__date_from', 'event__date_to'),
)
def __init__(self, *args, **kwargs):
@@ -354,12 +354,12 @@ class BulkSubEventItemVariationForm(SubEventItemVariationForm):
rel_available_from = RelativeDateTimeField(
label=_('Available from'),
required=False,
limit_choices=('date_from', 'date_to'),
limit_choices=('event__date_from', 'event__date_to'),
)
rel_available_until = RelativeDateTimeField(
label=_('Available_until'),
required=False,
limit_choices=('date_from', 'date_to'),
limit_choices=('event__date_from', 'event__date_to'),
)
def __init__(self, *args, **kwargs):

View File

@@ -34,11 +34,11 @@
# License for the specific language governing permissions and limitations under the License.
from collections import defaultdict
from datetime import datetime
from decimal import Decimal
from typing import Optional
import bleach
import dateutil.parser
from django.dispatch import receiver
from django.urls import reverse
from django.utils.formats import date_format
@@ -248,7 +248,7 @@ class OrderValidFromChanged(OrderChangeLogEntryType):
def display_prefixed(self, event: Event, logentry: LogEntry, data):
return _('The validity start date for position #{posid} has been changed to {value}.').format(
posid=data.get('positionid', '?'),
value=date_format(datetime.fromisoformat(data.get('new_value')), 'SHORT_DATETIME_FORMAT') if data.get(
value=date_format(dateutil.parser.parse(data.get('new_value')), 'SHORT_DATETIME_FORMAT') if data.get(
'new_value') else ''
)
@@ -260,7 +260,7 @@ class OrderValidUntilChanged(OrderChangeLogEntryType):
def display_prefixed(self, event: Event, logentry: LogEntry, data):
return _('The validity end date for position #{posid} has been changed to {value}.').format(
posid=data.get('positionid', '?'),
value=date_format(datetime.fromisoformat(data.get('new_value')), 'SHORT_DATETIME_FORMAT') if data.get('new_value') else ''
value=date_format(dateutil.parser.parse(data.get('new_value')), 'SHORT_DATETIME_FORMAT') if data.get('new_value') else ''
)
@@ -364,7 +364,7 @@ class CheckinErrorLogEntryType(OrderLogEntryType):
data['posid'] = logentry.parsed_data.get('positionid', '?')
if 'datetime' in data:
dt = datetime.fromisoformat(data.get('datetime'))
dt = dateutil.parser.parse(data.get('datetime'))
if abs((logentry.datetime - dt).total_seconds()) > 5 or data.get('forced'):
if event:
data['datetime'] = date_format(dt.astimezone(event.timezone), "SHORT_DATETIME_FORMAT")
@@ -430,7 +430,7 @@ class OrderPrintLogEntryType(OrderLogEntryType):
return _('Position #{posid} has been printed at {datetime} with type "{type}".').format(
posid=data.get('positionid'),
datetime=date_format(
datetime.fromisoformat(data["datetime"]).astimezone(logentry.event.timezone),
dateutil.parser.parse(data["datetime"]).astimezone(logentry.event.timezone),
"SHORT_DATETIME_FORMAT"
) if logentry.event else data["datetime"],
type=dict(PrintLog.PRINT_TYPES)[data["type"]],
@@ -985,7 +985,7 @@ class LegacyCheckinLogEntryType(OrderLogEntryType):
def display(self, logentry, data):
# deprecated
dt = datetime.fromisoformat(data.get('datetime'))
dt = dateutil.parser.parse(data.get('datetime'))
tz = logentry.event.timezone
dt_formatted = date_format(dt.astimezone(tz), "SHORT_DATETIME_FORMAT")
if 'list' in data:

View File

@@ -2,7 +2,6 @@
{% load static %}
{% load i18n %}
{% load statici18n %}
{% load vite %}
{% load eventsignal %}
{% load eventurl %}
{% load dialog %}
@@ -58,6 +57,7 @@
<script type="text/javascript" src="{% static "leaflet/leaflet.js" %}"></script>
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/geo.js" %}"></script>
<script type="text/javascript" src="{% static "pretixbase/js/details.js" %}"></script>
<script type="text/javascript" src="{% static "pretixbase/js/reldate.js" %}"></script>
<script type="text/javascript" src="{% static "pretixbase/js/asynctask.js" %}"></script>
<script type="text/javascript" src="{% static "sortable/Sortable.js" %}"></script>
<script type="text/javascript" src="{% static "colorpicker/bootstrap-colorpicker.js" %}"></script>
@@ -85,7 +85,6 @@
<meta name="theme-color" content="#3b1c4a">
<meta name="referrer" content="origin">
{% vite_importmap %}
{% block custom_header %}{% endblock %}
</head>
<body data-datetimeformat="{{ js_datetime_format }}" data-timeformat="{{ js_time_format }}"

View File

@@ -3,7 +3,6 @@
{% load bootstrap3 %}
{% load static %}
{% load compress %}
{% load vite %}
{% block title %}
{% if checkinlist %}
{% blocktrans with name=checkinlist.name %}Check-in list: {{ name }}{% endblocktrans %}
@@ -75,8 +74,45 @@
{% bootstrap_field form.ignore_in_statistics layout="control" %}
<h3>{% trans "Custom check-in rule" %}</h3>
<div id="rules-editor">
<!-- Vue app mount point -->
<div id="rules-editor" class="form-inline">
<div>
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active">
<a href="#rules-edit" role="tab" data-toggle="tab">
<span class="fa fa-edit"></span>
{% trans "Edit" %}
</a>
</li>
<li role="presentation">
<a href="#rules-viz" role="tab" data-toggle="tab">
<span class="fa fa-eye"></span>
{% trans "Visualize" %}
</a>
</li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="rules-edit">
<checkin-rules-editor></checkin-rules-editor>
</div>
<div role="tabpanel" class="tab-pane" id="rules-viz">
<checkin-rules-visualization></checkin-rules-visualization>
</div>
</div>
</div>
<div class="alert alert-info" v-if="missingItems.length">
<p>
{% trans "Your rule always filters by product or variation, but the following products or variations are not contained in any of your rule parts so people with these tickets will not get in:" %}
</p>
<ul>
<li v-for="h in missingItems">{{ "{" }}{h}{{ "}" }}</li>
</ul>
<p>
{% trans "Please double-check if this was intentional." %}
</p>
</div>
</div>
<div class="disabled-withoutjs sr-only">
{{ form.rules }}
@@ -89,10 +125,13 @@
</button>
</div>
</form>
{% if items %}
{{ items|json_script:"items" }}
{% endif %}
{{ items|json_script:"items" }}
{% if DEBUG %}
<script type="text/javascript" src="{% static "vuejs/vue.js" %}"></script>
{% else %}
<script type="text/javascript" src="{% static "vuejs/vue.min.js" %}"></script>
{% endif %}
{% compress js %}
<script type="text/javascript" src="{% static "d3/d3.v6.js" %}"></script>
<script type="text/javascript" src="{% static "d3/d3-color.v2.js" %}"></script>
@@ -105,6 +144,15 @@
<script type="text/javascript" src="{% static "d3/d3-drag.v2.js" %}"></script>
<script type="text/javascript" src="{% static "d3/d3-zoom.v2.js" %}"></script>
{% endcompress %}
{% vite_hmr %}
{% vite_asset "src/pretix/static/pretixcontrol/js/ui/checkinrules/index.ts" %}
{% compress js %}
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/checkinrules/jsonlogic-boolalg.js" %}"></script>
<script type="text/vue" src="{% static 'pretixcontrol/js/ui/checkinrules/datetimefield.vue' %}"></script>
<script type="text/vue" src="{% static 'pretixcontrol/js/ui/checkinrules/timefield.vue' %}"></script>
<script type="text/vue" src="{% static 'pretixcontrol/js/ui/checkinrules/lookup-select2.vue' %}"></script>
<script type="text/vue" src="{% static 'pretixcontrol/js/ui/checkinrules/checkin-rule.vue' %}"></script>
<script type="text/vue" src="{% static 'pretixcontrol/js/ui/checkinrules/checkin-rules-editor.vue' %}"></script>
<script type="text/vue" src="{% static 'pretixcontrol/js/ui/checkinrules/viz-node.vue' %}"></script>
<script type="text/vue" src="{% static 'pretixcontrol/js/ui/checkinrules/checkin-rules-visualization.vue' %}"></script>
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/checkinrules.js" %}"></script>
{% endcompress %}
{% endblock %}

View File

@@ -5,7 +5,6 @@
{% load getitem %}
{% load static %}
{% load compress %}
{% load vite %}
{% block title %}{% trans "Check-in simulator" %}{% endblock %}
{% block inside %}
<h1>
@@ -125,9 +124,11 @@
{% endif %}
{% if result.rule_graph %}
<div id="rules-editor" class="form-inline">
<!-- Vue app mount point -->
<div role="tabpanel" class="tab-pane" id="rules-viz">
<checkin-rules-visualization></checkin-rules-visualization>
</div>
<textarea id="id_rules" class="sr-only">{{ result.rule_graph|attr_escapejson_dumps }}</textarea>
</div>
<textarea id="id_rules" class="sr-only">{{ result.rule_graph|attr_escapejson_dumps }}</textarea>
{% endif %}
</div>
</div>
@@ -151,6 +152,10 @@
<script type="text/javascript" src="{% static "d3/d3-drag.v2.js" %}"></script>
<script type="text/javascript" src="{% static "d3/d3-zoom.v2.js" %}"></script>
{% endcompress %}
{% vite_hmr %}
{% vite_asset "src/pretix/static/pretixcontrol/js/ui/checkinrules/index.ts" %}
{% compress js %}
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/checkinrules/jsonlogic-boolalg.js" %}"></script>
<script type="text/vue" src="{% static 'pretixcontrol/js/ui/checkinrules/viz-node.vue' %}"></script>
<script type="text/vue" src="{% static 'pretixcontrol/js/ui/checkinrules/checkin-rules-visualization.vue' %}"></script>
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/checkinrules.js" %}"></script>
{% endcompress %}
{% endblock %}

View File

@@ -1,49 +0,0 @@
{% extends "pretixcontrol/event/base.html" %}
{% load i18n %}
{% load bootstrap3 %}
{% block content %}
<h1>
{% trans "Change multiple quotas" %}
<small>
{% blocktrans trimmed with number=quotas.count %}
{{ number }} selected
{% endblocktrans %}
</small>
</h1>
<form class="form-horizontal" action="" method="post">
{% csrf_token %}
{% bootstrap_form_errors form %}
<div class="hidden">
{% for d in quotas %}
<input type="hidden" name="quota" value="{{ d.pk }}">
{% endfor %}
</div>
<fieldset>
<legend>{% trans "General information" %}</legend>
{% bootstrap_field form.name layout="bulkedit" %}
{% bootstrap_field form.size layout="bulkedit" %}
</fieldset>
<fieldset>
<legend>{% trans "Items" %}</legend>
<p>
{% blocktrans trimmed %}
Please select the products or product variations this quota should be applied to. If you apply two
quotas to the same product, it will only be available if <strong>both</strong> quotas have capacity
left.
{% endblocktrans %}
</p>
{% bootstrap_field form.itemvars layout="bulkedit" %}
</fieldset>
<fieldset>
<legend>{% trans "Advanced options" %}</legend>
{% bootstrap_field form.close_when_sold_out layout="bulkedit" %}
{% bootstrap_field form.release_after_exit layout="bulkedit" %}
{% bootstrap_field form.ignore_for_event_availability layout="bulkedit" %}
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">
{% trans "Save" %}
</button>
</div>
</form>
{% endblock %}

View File

@@ -1,34 +0,0 @@
{% extends "pretixcontrol/event/base.html" %}
{% load i18n %}
{% load bootstrap3 %}
{% block title %}{% trans "Delete quotas" %}{% endblock %}
{% block content %}
<h1>{% trans "Delete quotas" %}</h1>
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
{% if allowed %}
<p>{% blocktrans trimmed count num=allowed|length %}
Are you sure you want to delete the following quota?
{% plural %}
Are you sure you want to delete the following {{ num }} quotas?
{% endblocktrans %}</p>
<ul>
{% for q in allowed %}
<li>
{{ q }} {% if q.subevent %}({{ q.subevent }}){% endif %}
<input type="hidden" name="quota" value="{{ q.pk }}">
</li>
{% endfor %}
</ul>
{% endif %}
<div class="form-group submit-group">
<a href="{% url "control:event.items.quotas" organizer=request.event.organizer.slug event=request.event.slug %}"
class="btn btn-default btn-cancel">
{% trans "Cancel" %}
</a>
<button type="submit" class="btn btn-danger btn-save" value="delete_confirm" name="action">
{% trans "Delete" %}
</button>
</div>
</form>
{% endblock %}

View File

@@ -1,7 +1,6 @@
{% extends "pretixcontrol/items/base.html" %}
{% load i18n %}
{% load urlreplace %}
{% load bootstrap3 %}
{% block title %}{% trans "Quotas" %}{% endblock %}
{% block inside %}
<h1>{% trans "Quotas" %}</h1>
@@ -14,12 +13,21 @@
number of a specific ticket type at the same time.
{% endblocktrans %}
</p>
{% if quotas|length == 0 and not filter_form.filtered %}
{% if request.event.has_subevents %}
<form class="form-inline helper-display-inline" action="" method="get">
{% include "pretixcontrol/event/fragment_subevent_choice_simple.html" %}
</form>
{% endif %}
{% if quotas|length == 0 %}
<div class="empty-collection">
<p>
{% blocktrans trimmed %}
You haven't created any quotas yet.
{% endblocktrans %}
{% if request.GET.subevent %}
{% trans "Your search did not match any quotas." %}
{% else %}
{% blocktrans trimmed %}
You haven't created any quotas yet.
{% endblocktrans %}
{% endif %}
</p>
{% if 'event.items:write' in request.eventpermset %}
@@ -28,160 +36,79 @@
{% endif %}
</div>
{% else %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
{% trans "Filter" %}
</h3>
</div>
<form class="panel-body filter-form" action="" method="get">
<div class="row">
<div class="{% if not filter_form.subevent %}col-lg-6{% else %}col-lg-2{% endif %} col-md-6 col-sm-6 col-xs-12">
{% bootstrap_field filter_form.query %}
</div>
{% if filter_form.subevent %}
<div class="col-lg-2 col-md-6 col-md-2 col-sm-6 col-xs-12">
{% bootstrap_field filter_form.subevent %}
</div>
<div class="col-lg-2 col-md-3 col-sm-6 col-xs-12">
{% bootstrap_field filter_form.date_from %}
</div>
<div class="col-lg-2 col-md-3 col-sm-6 col-xs-12">
{% bootstrap_field filter_form.date_until %}
</div>
<div class="col-lg-2 col-md-3 col-sm-6 col-xs-12">
{% bootstrap_field filter_form.time_from %}
</div>
<div class="col-lg-2 col-md-3 col-sm-6 col-xs-12">
{% bootstrap_field filter_form.time_until %}
</div>
<div class="col-xs-12 one-line-checkboxes">
{% bootstrap_field filter_form.weekday %}
</div>
{% endif %}
</div>
<div class="text-right flip">
<button class="btn btn-primary btn-lg" type="submit">
<span class="fa fa-filter"></span>
{% trans "Filter" %}
</button>
</div>
</form>
</div>
{% if 'event.items:write' in request.eventpermset %}
<p>
<a href="{% url "control:event.items.quotas.add" organizer=request.event.organizer.slug event=request.event.slug %}" class="btn btn-default"><i class="fa fa-plus"></i> {% trans "Create a new quota" %}
</a>
</p>
{% endif %}
<form action="{% url "control:event.items.quotas.bulkaction" organizer=request.event.organizer.slug event=request.event.slug %}" method="post">
{% csrf_token %}
{% for field in filter_form %}
{{ field.as_hidden }}
{% endfor %}
<div class="table-responsive">
<table class="table table-hover table-quotas">
<thead>
<tr>
{% if "event.items:write" in request.eventpermset %}
<th>
<label aria-label="{% trans "select all rows for batch-operation" %}" class="batch-select-label"><input type="checkbox" data-toggle-table/></label>
</th>
{% endif %}
<th>{% trans "Quota name" %}
<a href="?{% url_replace request 'filter-ordering' '-name' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'filter-ordering' 'name' %}"><i class="fa fa-caret-up"></i></a>
<div class="table-responsive">
<table class="table table-hover table-quotas">
<thead>
<tr>
<th>{% trans "Quota name" %}
<a href="?{% url_replace request 'ordering' '-name' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'name' %}"><i class="fa fa-caret-up"></i></a>
</th>
<th>{% trans "Products" %}</th>
{% if request.event.has_subevents %}
<th>{% trans "Date" context "subevent" %}
<a href="?{% url_replace request 'ordering' '-date' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'date' %}"><i class="fa fa-caret-up"></i></a>
</th>
<th>{% trans "Products" %}</th>
{% if request.event.has_subevents %}
<th>{% trans "Date" context "subevent" %}
<a href="?{% url_replace request 'filter-ordering' '-date' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'filter-ordering' 'date' %}"><i class="fa fa-caret-up"></i></a>
</th>
{% endif %}
<th>{% trans "Total capacity" %}
<a href="?{% url_replace request 'filter-ordering' '-size' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'filter-ordering' 'size' %}"><i class="fa fa-caret-up"></i></a>
</th>
<th>{% trans "Capacity left" %}</th>
<th class="action-col-2"></th>
</tr>
{% if "event.items:write" in request.eventpermset and page_obj.paginator.num_pages > 1 %}
<tr class="table-select-all warning hidden">
<td>
<input type="checkbox" name="__ALL" id="__all" data-results-total="{{ page_obj.paginator.count }}">
</td>
<td colspan="6">
<label for="__all">
{% trans "Select all results on other pages as well" %}
</label>
</td>
</tr>
{% endif %}
</thead>
<tbody>
{% for q in quotas %}
<tr>
{% if "event.items:write" in request.eventpermset %}
<td>
<label aria-label="{% trans "select row for batch-operation" %}" class="batch-select-label"><input type="checkbox" name="quota" class="batch-select-checkbox" value="{{ q.pk }}"/></label>
</td>
<th>{% trans "Total capacity" %}
<a href="?{% url_replace request 'ordering' '-size' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'size' %}"><i class="fa fa-caret-up"></i></a>
</th>
<th>{% trans "Capacity left" %}</th>
<th class="action-col-2"></th>
</tr>
</thead>
<tbody>
{% for q in quotas %}
<tr>
<td>
<strong><a href="{% url "control:event.items.quotas.show" organizer=request.event.organizer.slug event=request.event.slug quota=q.id %}">{{ q.name }}</a></strong>
{% if q.ignore_for_event_availability %}
<span class="fa fa-eye-slash text-muted" data-toggle="tooltip" title="{% trans "Ignore this quota when determining event availability" %}"></span>
{% endif %}
</td>
<td>
<ul>
{% for item in q.cached_items %}
{% if not item.has_variations %}
<li><a href="{% url "control:event.item" organizer=request.event.organizer.slug event=request.event.slug item=item.id %}">{{ item }}</a></li>
{% endif %}
{% endfor %}
{% for v in q.variations.all %}
<li><a href="{% url "control:event.item" organizer=request.event.organizer.slug event=request.event.slug item=v.item.id %}#tab-0-3-open">
{{ v.item }} {{ v }}</a></li>
{% endfor %}
</ul>
</td>
{% if request.event.has_subevents %}
<td>
<strong><a href="{% url "control:event.items.quotas.show" organizer=request.event.organizer.slug event=request.event.slug quota=q.id %}">{{ q.name }}</a></strong>
{% if q.ignore_for_event_availability %}
<span class="fa fa-eye-slash text-muted" data-toggle="tooltip" title="{% trans "Ignore this quota when determining event availability" %}"></span>
{% endif %}
{{ q.subevent.name }} {{ q.subevent.get_date_range_display_with_times }}
</td>
<td>
<ul>
{% for item in q.cached_items %}
{% if not item.has_variations %}
<li><a href="{% url "control:event.item" organizer=request.event.organizer.slug event=request.event.slug item=item.id %}">{{ item }}</a></li>
{% endif %}
{% endfor %}
{% for v in q.variations.all %}
<li><a href="{% url "control:event.item" organizer=request.event.organizer.slug event=request.event.slug item=v.item.id %}#tab-0-3-open">
{{ v.item }} {{ v }}</a></li>
{% endfor %}
</ul>
</td>
{% if request.event.has_subevents %}
<td>
{{ q.subevent.name }} {{ q.subevent.get_date_range_display_with_times }}
</td>
{% endif %}
<td>{% if q.size == None %}Unlimited{% else %}{{ q.size }}{% endif %}</td>
<td>{% include "pretixcontrol/items/fragment_quota_availability.html" with availability=q.cached_avail closed=q.closed %}</td>
<td class="text-right flip">
{% if 'event.items:write' in request.eventpermset %}
<a href="{% url "control:event.items.quotas.edit" organizer=request.event.organizer.slug event=request.event.slug quota=q.id %}" class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<a href="{% url "control:event.items.quotas.add" organizer=request.event.organizer.slug event=request.event.slug %}?copy_from={{ q.id }}"
class="btn btn-sm btn-default" title="{% trans "Clone" %}" data-toggle="tooltip">
<span class="fa fa-copy"></span>
</a>
<a href="{% url "control:event.items.quotas.delete" organizer=request.event.organizer.slug event=request.event.slug quota=q.id %}" class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
{% endif %}
<td>{% if q.size == None %}Unlimited{% else %}{{ q.size }}{% endif %}</td>
<td>{% include "pretixcontrol/items/fragment_quota_availability.html" with availability=q.cached_avail closed=q.closed %}</td>
<td class="text-right flip">
{% if 'event.items:write' in request.eventpermset %}
<a href="{% url "control:event.items.quotas.edit" organizer=request.event.organizer.slug event=request.event.slug quota=q.id %}" class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<a href="{% url "control:event.items.quotas.add" organizer=request.event.organizer.slug event=request.event.slug %}?copy_from={{ q.id }}"
class="btn btn-sm btn-default" title="{% trans "Clone" %}" data-toggle="tooltip">
<span class="fa fa-copy"></span>
</a>
<a href="{% url "control:event.items.quotas.delete" organizer=request.event.organizer.slug event=request.event.slug quota=q.id %}" class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% if "event.items:write" in request.eventpermset %}
<div class="batch-select-actions">
<button type="submit" class="btn btn-danger btn-save" name="action" value="delete">
<i class="fa fa-trash"></i>{% trans "Delete selected" %}
</button>
<button type="submit" class="btn btn-primary btn-save" name="action" value="edit"
formaction="{% url "control:event.items.quotas.bulkedit" organizer=request.event.organizer.slug event=request.event.slug %}">
<i class="fa fa-edit"></i>{% trans "Edit selected" %}
</button>
</div>
{% endif %}
</form>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}
{% include "pretixcontrol/pagination.html" %}
{% endblock %}

View File

@@ -134,39 +134,6 @@
</div>
{% endif %}
{% if invoice_qualified and order.invoice_dirty %}
<div class="alert alert-warning">
<p>
{% blocktrans trimmed %}
This order was changed after the last invoice was generated. A new invoice was not generated yet, because invoices are configured to be generated on payment or if required by the payment method.
A new invoice will be generated once the customer pays the invoice or selects a payment method that requires an invoice.
{% endblocktrans %}
</p>
{% if "event.orders:write" in request.eventpermset %}
<p>
{% if uncancelled_invoice %}
<form action="{% url "control:event.order.reissueinvoice" event=request.event.slug organizer=request.event.organizer.slug code=order.code id=uncancelled_invoice.pk %}"
method="post">
{% csrf_token %}
<button class="btn btn-default" type="submit">
{% blocktrans trimmed %}
Reissue invoice
{% endblocktrans %}
</button>
</form>
{% elif can_generate_invoice %}
<form method="post" action="{% url "control:event.order.geninvoice" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}">
{% csrf_token %}
<button class="btn btn-default">
{% trans "Generate invoice" %}
</button>
</form>
{% endif %}
</p>
{% endif %}
</div>
{% endif %}
<div class="row">
<div class="col-xs-12 col-lg-10">
{% for cr in order.cancellation_requests.all %}
@@ -504,9 +471,7 @@
{% endif %}
{% if line.subevent %}
<br/>
<span class="fa fa-calendar fa-fw"></span>
<a href="{% url "control:event.subevent" organizer=request.event.organizer.slug event=request.event.slug subevent=line.subevent_id %}">{{ line.subevent.name }}</a>
&middot; {{ line.subevent.get_date_range_display_with_times }}
<span class="fa fa-calendar fa-fw"></span> {{ line.subevent.name }} &middot; {{ line.subevent.get_date_range_display_with_times }}
{% endif %}
{% if line.used_membership %}
<br /><span class="fa fa-id-card fa-fw" aria-hidden="true"></span>
@@ -586,7 +551,7 @@
<span class="fa fa-print"></span>
{{ pl.datetime|date:"SHORT_DATETIME_FORMAT" }}
{{ pl.get_type_display }}
({{ pl.source }}{% if pl.device %}, {{ pl.device.name }} - #{{ pl.device.device_id }}{% endif %})
({{ pl.source }}{% if pl.device %}, #{{ pl.device.device_id }}{% endif %})
{% if not pl.successful %}<span class="fa fa-warning fa-fw"></span>{% endif %}
<br>
{% endfor %}
@@ -1078,7 +1043,7 @@
<dt>{% trans "VAT ID" %}</dt>
<dd>
{{ order.invoice_address.vat_id }}
{% if order.invoice_address.vat_id and order.invoice_address.vat_id_validated %}
{% if order.invoice_address.vat_id_validated %}
<span class="fa fa-check" data-toggle="tooltip" title="{% blocktrans trimmed %}Valid EU VAT ID{% endblocktrans %}"></span>
{% elif order.invoice_address.vat_id %}
<form class="form-inline helper-display-inline" method="post"

View File

@@ -23,9 +23,9 @@
<legend>{% trans "How should the refund be sent?" %}</legend>
<p>
{% blocktrans trimmed %}
Any payments you selected for automatic refunds will have the refund request sent immediately to the
respective payment provider. Manual refunds will be created as pending refunds, which you can later
mark as done once you have actually transferred the money back to the customer.
Any payments that you selected for automatical refunds will be immediately communicate the refund
request to the respective payment provider. Manual refunds will be created as pending refunds, you
can then later mark them as done once you actually transferred the money back to the customer.
{% endblocktrans %}
</p>

View File

@@ -108,7 +108,7 @@
</a>
</p>
{% endif %}
<form action="#will-be-overridden" method="post">
<form action="{% url "control:organizer.device.bulk_edit" organizer=request.organizer.slug %}" method="post">
{% csrf_token %}
{% for field in filter_form %}
{{ field.as_hidden }}

View File

@@ -349,8 +349,6 @@ urlpatterns = [
name='event.items.questions.edit'),
re_path(r'^questions/add$', item.QuestionCreate.as_view(), name='event.items.questions.add'),
re_path(r'^quotas/$', item.QuotaList.as_view(), name='event.items.quotas'),
re_path(r'^quotas/bulk_action$', item.QuotaBulkAction.as_view(), name='event.items.quotas.bulkaction'),
re_path(r'^quotas/bulk_edit$', item.QuotaBulkUpdateView.as_view(), name='event.items.quotas.bulkedit'),
re_path(r'^quotas/(?P<quota>\d+)/$', item.QuotaView.as_view(), name='event.items.quotas.show'),
re_path(r'^quotas/select$', typeahead.quotas_select2, name='event.items.quotas.select2'),
re_path(r'^quotas/(?P<quota>\d+)/change$', item.QuotaUpdate.as_view(), name='event.items.quotas.edit'),

View File

@@ -41,22 +41,21 @@ from json.decoder import JSONDecodeError
from django.contrib import messages
from django.core.exceptions import PermissionDenied
from django.core.files import File
from django.db import models, transaction
from django.db import transaction
from django.db.models import (
Count, Exists, F, OuterRef, Prefetch, ProtectedError, Q, Subquery, Value,
Count, Exists, F, OuterRef, Prefetch, ProtectedError, Q,
)
from django.db.models.functions import Cast, Concat
from django.forms.models import inlineformset_factory
from django.http import (
Http404, HttpResponse, HttpResponseBadRequest, HttpResponseRedirect,
)
from django.shortcuts import redirect, render
from django.shortcuts import redirect
from django.urls import resolve, reverse
from django.utils.functional import cached_property
from django.utils.timezone import now
from django.utils.translation import gettext, gettext_lazy as _
from django.views.decorators.http import require_http_methods
from django.views.generic import FormView, ListView, View
from django.views.generic import ListView
from django.views.generic.detail import DetailView, SingleObjectMixin
from django_countries.fields import Country
@@ -66,7 +65,7 @@ from pretix.api.serializers.item import (
)
from pretix.base.forms import I18nFormSet
from pretix.base.models import (
CartPosition, Item, ItemCategory, ItemProgramTime, ItemVariation, LogEntry,
CartPosition, Item, ItemCategory, ItemProgramTime, ItemVariation,
OrderPosition, Question, QuestionAnswer, QuestionOption, Quota,
SeatCategoryMapping, Voucher,
)
@@ -75,15 +74,12 @@ from pretix.base.models.items import ItemAddOn, ItemBundle, ItemMetaValue
from pretix.base.services.quotas import QuotaAvailability
from pretix.base.services.tickets import invalidate_cache
from pretix.base.signals import quota_availability
from pretix.control.forms.filter import (
QuestionAnswerFilterForm, QuotaFilterForm,
)
from pretix.control.forms.filter import QuestionAnswerFilterForm
from pretix.control.forms.item import (
CategoryForm, ItemAddOnForm, ItemAddOnsFormSet, ItemBundleForm,
ItemBundleFormSet, ItemCreateForm, ItemMetaValueForm, ItemProgramTimeForm,
ItemProgramTimeFormSet, ItemUpdateForm, ItemVariationForm,
ItemVariationsFormSet, QuestionForm, QuestionOptionForm, QuotaBulkEditForm,
QuotaForm,
ItemVariationsFormSet, QuestionForm, QuestionOptionForm, QuotaForm,
)
from pretix.control.permissions import (
EventPermissionRequiredMixin, event_permission_required,
@@ -91,7 +87,6 @@ from pretix.control.permissions import (
from pretix.control.signals import item_forms, item_formsets
from pretix.helpers.models import modelcopy
from ...helpers import GroupConcat
from ...helpers.compat import CompatDeleteView
from . import ChartContainingView, CreateView, PaginationMixin, UpdateView
@@ -836,38 +831,13 @@ class QuestionCreate(EventPermissionRequiredMixin, QuestionMixin, CreateView):
return ret
class QuotaQueryMixin:
@cached_property
def request_data(self):
if self.request.method == "POST":
return self.request.POST
return self.request.GET
def get_queryset(self):
qs = self.request.event.quotas
if self.filter_form.is_valid():
qs = self.filter_form.filter_qs(qs)
if 'quota' in self.request_data and '__ALL' not in self.request_data:
qs = qs.filter(
id__in=self.request_data.getlist('quota')
)
return qs
@cached_property
def filter_form(self):
return QuotaFilterForm(data=self.request_data, prefix='filter', event=self.request.event)
class QuotaList(PaginationMixin, QuotaQueryMixin, ListView):
class QuotaList(PaginationMixin, ListView):
model = Quota
context_object_name = 'quotas'
template_name = 'pretixcontrol/items/quotas.html'
def get_queryset(self):
return super().get_queryset().prefetch_related(
qs = self.request.event.quotas.prefetch_related(
Prefetch(
"items",
queryset=Item.objects.annotate(
@@ -882,10 +852,28 @@ class QuotaList(PaginationMixin, QuotaQueryMixin, ListView):
queryset=self.request.event.subevents.all()
)
)
if self.request.GET.get("subevent", "") != "":
s = self.request.GET.get("subevent", "")
qs = qs.filter(subevent_id=s)
valid_orders = {
'-date': ('-subevent__date_from', 'name', 'pk'),
'date': ('subevent__date_from', '-name', '-pk'),
'size': ('size', 'name', 'pk'),
'-size': ('-size', '-name', '-pk'),
'name': ('name', 'pk'),
'-name': ('-name', '-pk'),
}
if self.request.GET.get("ordering", "-date") in valid_orders:
qs = qs.order_by(*valid_orders[self.request.GET.get("ordering", "-date")])
else:
qs = qs.order_by('name', 'subevent__date_from', 'pk')
return qs
def get_context_data(self, **kwargs):
ctx = super().get_context_data()
ctx['filter_form'] = self.filter_form
qa = QuotaAvailability()
qa.queue(*ctx['quotas'])
@@ -896,165 +884,6 @@ class QuotaList(PaginationMixin, QuotaQueryMixin, ListView):
return ctx
class QuotaBulkAction(QuotaQueryMixin, EventPermissionRequiredMixin, View):
permission = 'event.items:write'
@transaction.atomic
def post(self, request, *args, **kwargs):
if request.POST.get('action') == 'delete':
return render(request, 'pretixcontrol/items/quota_delete_bulk.html', {
'allowed': self.get_queryset().select_related("subevent"),
})
elif request.POST.get('action') == 'delete_confirm':
log_entries = []
to_delete = []
for obj in self.get_queryset():
log_entries.append(obj.log_action('pretix.event.quota.deleted', user=self.request.user, save=False))
to_delete.append(obj.pk)
if to_delete:
LogEntry.bulk_create_and_postprocess(log_entries)
Quota.objects.filter(pk__in=to_delete).delete()
messages.success(request, _('The selected quotas have been deleted or disabled.'))
return redirect(self.get_success_url())
def get_success_url(self) -> str:
return reverse('control:event.items.quotas', kwargs={
'organizer': self.request.event.organizer.slug,
'event': self.request.event.slug,
})
class QuotaBulkUpdateView(QuotaQueryMixin, EventPermissionRequiredMixin, FormView):
template_name = 'pretixcontrol/items/quota_bulk_edit.html'
permission = 'event.items:write'
context_object_name = 'quota'
form_class = QuotaBulkEditForm
def get_queryset(self):
return super().get_queryset().prefetch_related(None).order_by()
def get(self, request, *args, **kwargs):
return HttpResponse(status=405)
@cached_property
def is_submitted(self):
# Usually, django considers a form "bound" / "submitted" on every POST request. However, this view is always
# called with POST method, even if just to pass the selection of objects to work on, so we want to modify
# that behaviour
return '_bulk' in self.request.POST
def get_form_kwargs(self):
initial = {}
mixed_values = set()
qs = self.get_queryset().annotate(
items_list=Subquery(
Quota.items.through.objects.filter(
quota_id=OuterRef('pk'),
item__variations__isnull=True,
).order_by().values('quota_id').annotate(
g=GroupConcat('item_id', separator=',', ordered=True)
).values('g')
),
vars_list=Subquery(
Quota.variations.through.objects.filter(
quota_id=OuterRef('pk')
).order_by().values('quota_id').annotate(
g=GroupConcat(
Concat(
Cast(F('itemvariation__item_id'), output_field=models.TextField()),
Value('-', output_field=models.TextField()),
Cast(F('itemvariation_id'), output_field=models.TextField()),
),
separator=',',
ordered=True
)
).values('g')
),
)
fields = {
'name': 'name',
'size': 'size',
'subevent': 'subevent',
'close_when_sold_out': 'close_when_sold_out',
'release_after_exit': 'release_after_exit',
'ignore_for_event_availability': 'ignore_for_event_availability',
}
for k, f in fields.items():
existing_values = list(qs.order_by(f).values(f).annotate(c=Count('*')))
if len(existing_values) == 1:
initial[k] = existing_values[0][f]
elif len(existing_values) > 1:
mixed_values.add(k)
initial[k] = None
item_values = list(qs.order_by("items_list").values("items_list").annotate(c=Count('*')))
var_values = list(qs.order_by("vars_list").values("vars_list").annotate(c=Count('*')))
if len(item_values) > 1 or len(var_values) > 1:
mixed_values.add("itemvars")
else:
initial["itemvars"] = [iv for iv in (item_values[0]["items_list"] or "").split(",") + (var_values[0]["vars_list"] or "").split(",") if iv]
kwargs = super().get_form_kwargs()
kwargs['event'] = self.request.event
kwargs['prefix'] = 'bulkedit'
kwargs['initial'] = initial
kwargs['queryset'] = self.get_queryset()
kwargs['mixed_values'] = mixed_values
if not self.is_submitted:
kwargs['data'] = None
kwargs['files'] = None
return kwargs
def get_success_url(self):
return reverse('control:event.items.quotas', kwargs={
'organizer': self.request.event.organizer.slug,
'event': self.request.event.slug,
})
@transaction.atomic()
def form_valid(self, form):
log_entries = []
# Main form
form.save()
data = {
k: v
for k, v in form.cleaned_data.items()
if k in form.changed_data
}
data['_raw_bulk_data'] = self.request.POST.dict()
for obj in self.get_queryset():
log_entries.append(
obj.log_action('pretix.event.quota.changed', data=data, user=self.request.user, save=False)
)
LogEntry.bulk_create_and_postprocess(log_entries)
messages.success(self.request, _('Your changes have been saved.'))
return super().form_valid(form)
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx['quotas'] = self.get_queryset()
ctx['bulk_selected'] = self.request.POST.getlist("_bulk")
return ctx
def post(self, request, *args, **kwargs):
form = self.get_form()
is_valid = (
self.is_submitted and
form.is_valid()
)
if is_valid:
return self.form_valid(form)
else:
if self.is_submitted:
messages.error(self.request, _('We could not save your changes. See below for details.'))
return self.form_invalid(form)
class QuotaCreate(EventPermissionRequiredMixin, CreateView):
model = Quota
form_class = QuotaForm

View File

@@ -554,9 +554,6 @@ class OrderDetail(OrderView):
ctx['download_buttons'] = self.download_buttons
ctx['payment_refund_sum'] = self.order.payment_refund_sum
ctx['pending_sum'] = self.order.pending_sum
ctx['uncancelled_invoice'] = self.order.invoices.exclude(
Exists(self.order.invoices.filter(refers=OuterRef('pk'), is_cancellation=True))
).exclude(is_cancellation=True).first()
return ctx

View File

@@ -424,7 +424,7 @@ class SubEventEditorMixin(MetaDataEditorMixin):
days = (self.copy_from.date_from.astimezone(tz).date() - value.astimezone(tz).date()).days
return RelativeDateWrapper(RelativeDate(
days=abs(days),
base_date_name='date_from',
base_date_name='event__date_from',
time=value.astimezone(tz).time(),
minutes=None,
is_after=days < 0,
@@ -531,7 +531,6 @@ class SubEventUpdate(EventPermissionRequiredMixin, SubEventEditorMixin, UpdateVi
@transaction.atomic
def form_valid(self, form):
self.object = form.save()
self.save_formset(self.object)
self.save_cl_formset(self.object)
self.save_meta()
@@ -570,7 +569,7 @@ class SubEventUpdate(EventPermissionRequiredMixin, SubEventEditorMixin, UpdateVi
f.subevent = self.object
f.save()
tickets.invalidate_cache.apply_async(kwargs={'event': self.request.event.pk})
return HttpResponseRedirect(self.get_success_url())
return super().form_valid(form)
def get_success_url(self) -> str:
return reverse('control:event.subevents', kwargs={

View File

@@ -0,0 +1,63 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-today pretix GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# 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 os
import re
import shlex
from compressor.exceptions import FilterError
from compressor.filters import CompilerFilter
from django.conf import settings
class VueCompiler(CompilerFilter):
# Based on work (c) Laura Klünder in https://github.com/codingcatgirl/django-vue-rollup
# Released under Apache License 2.0
def __init__(self, content, attrs, **kwargs):
config_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'static', 'npm_dir')
node_path = os.path.join(settings.STATIC_ROOT, 'node_prefix', 'node_modules')
self.rollup_bin = os.path.join(node_path, 'rollup', 'dist', 'bin', 'rollup')
rollup_config = os.path.join(config_dir, 'rollup.config.js')
if not os.path.exists(self.rollup_bin) and not settings.DEBUG:
raise FilterError("Rollup not installed or pretix not built properly, please run 'make npminstall' in source root.")
command = (
' '.join((
'NODE_PATH=' + shlex.quote(node_path),
shlex.quote(self.rollup_bin),
'-c',
shlex.quote(rollup_config))
) +
' --input {infile} -n {export_name} --file {outfile}'
)
super().__init__(content, command=command, **kwargs)
def input(self, **kwargs):
if self.filename is None:
raise FilterError('VueCompiler can only compile files, not inline code.')
if not os.path.exists(self.rollup_bin):
raise FilterError("Rollup not installed, please run 'make npminstall' in source root.")
self.options += (('export_name', re.sub(
r'^([a-z])|[^a-z0-9A-Z]+([a-zA-Z0-9])?',
lambda s: s.group(0)[-1].upper(),
os.path.basename(self.filename).split('.')[0]
)),)
return super().input(**kwargs)

View File

@@ -117,17 +117,12 @@ class GroupConcat(Aggregate):
template = "%(function)s(%(distinct)s%(field)s::text, '%(separator)s' ORDER BY %(field)s::text ASC)"
else:
template = "%(function)s(%(distinct)s%(field)s::text, '%(separator)s')"
template, params = super().as_sql(
return super().as_sql(
compiler, connection,
function='string_agg',
template=template,
**extra_context,
)
if self.ordered:
# ordered statement requires field parameters twice
params = params + params
return template, params
class ReplicaRouter:

View File

@@ -40,8 +40,6 @@ from urllib3.util.connection import (
)
from urllib3.util.timeout import _DEFAULT_TIMEOUT
_cgnat_net = ipaddress.ip_network('100.64.0.0/10')
def monkeypatch_vobject_performance():
"""
@@ -154,8 +152,6 @@ def monkeypatch_urllib3_ssrf_protection():
raise HTTPError(f"Request to local address {sa[0]} blocked")
if ip_addr.is_private:
raise HTTPError(f"Request to private address {sa[0]} blocked")
if ip_addr in _cgnat_net:
raise HTTPError(f"Request to RFC 6598 address {sa[0]} blocked")
sock = None
try:

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-05-27 14:47+0000\n"
"POT-Creation-Date: 2026-04-28 09:04+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -130,6 +130,7 @@ msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
#: pretix/static/pretixpresale/js/ui/cart.js:89
msgid "Continue"
msgstr ""
@@ -183,6 +184,172 @@ msgstr ""
msgid "Contacting your bank …"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
msgid "No tickets found"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
msgid "Result"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
msgid "This ticket requires special attention"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
msgid "Switch direction"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
msgid "Entry"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
msgid "Valid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
msgid "Unpaid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
msgid "Canceled"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Confirmed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Approval pending"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Redeemed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
msgid "Cancel"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
msgid "Ticket not paid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "This ticket is not yet paid. Do you want to continue anyways?"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53
msgid "Additional information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
msgid "Valid ticket"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
msgid "Exit recorded"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
msgid "Unknown ticket"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
msgid "Entry not allowed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
msgid "Ticket code revoked/changed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
msgid "Ticket blocked"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
msgid "Ticket not valid at this time"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
msgid "Order canceled"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
msgid "Ticket code is ambiguous on list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67
msgid "Order not approved"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
msgid "Checked-in Tickets"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
msgid "Currently inside"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr ""
#: pretix/static/lightbox/js/lightbox.js:96
msgid "close"
msgstr ""
@@ -209,46 +376,46 @@ msgid ""
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:135
#: pretix/static/pretixbase/js/asynctask.js:192
#: pretix/static/pretixbase/js/asynctask.js:196
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:138
#: pretix/static/pretixbase/js/asynctask.js:128
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:172
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:198
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:226
#: pretix/static/pretixbase/js/asynctask.js:216
msgid "We are processing your request …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:229
#: pretix/static/pretixbase/js/asynctask.js:219
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
"page and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:286
#: pretix/static/pretixbase/js/asynctask.js:276
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:341
#: pretix/static/pretixbase/js/asynctask.js:331
msgid "Close message"
msgstr ""
@@ -260,6 +427,146 @@ msgstr ""
msgid "Press Ctrl-C to copy!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:12
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:18
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
msgid "is one of"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
msgid "is before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
msgid "is after"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "="
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Product variation"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Gate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
msgid "Current date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
msgid "Number of previous entries since midnight"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
msgid "Number of previous entries since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
msgid "Number of previous entries before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
msgid "Number of days with a previous entry since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
msgid "Number of days with a previous entry before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
msgid "Minutes since last entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
msgid "Minutes since first entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:184
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
msgid "minutes"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status"
msgid "present"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status"
msgid "absent"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
msgid "Error: Product not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
msgid "Error: Variation not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
msgstr ""
@@ -394,16 +701,6 @@ msgstr ""
msgid "Count"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/subevent.js:112
msgid "(one more date)"
msgid_plural "({num} more dates)"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-05-27 14:47+0000\n"
"POT-Creation-Date: 2026-04-28 09:04+0000\n"
"PO-Revision-Date: 2021-09-15 11:22+0000\n"
"Last-Translator: Mohamed Tawfiq <mtawfiq@wafyapp.com>\n"
"Language-Team: Arabic <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -134,6 +134,7 @@ msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
#: pretix/static/pretixpresale/js/ui/cart.js:89
msgid "Continue"
msgstr "المتابعة"
@@ -187,6 +188,180 @@ msgstr "المجموع"
msgid "Contacting your bank …"
msgstr "جاري الاتصال بالبنك الذي تتعامل معه …"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr "اختر قائمة الدخول"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr "لم يتم العثور على قوائم دخول نشطة."
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr "تبديل قائمة الدخول"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
msgstr "البحث في النتائج"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
msgid "No tickets found"
msgstr "لم يتم العثور على تذاكر"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
msgid "Result"
msgstr "النتيجة"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
msgid "This ticket requires special attention"
msgstr "تحتاج هذه التذكرة إلى إهتمام خاص"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
msgid "Switch direction"
msgstr "تغيير المسار"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
msgid "Entry"
msgstr "دخول"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit"
msgstr "خروج"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…"
msgstr "قم بمسح التذكرة أو إبحث واضغط زر العودة…"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more"
msgstr "تحميل المزيد"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
msgid "Valid"
msgstr "ساري المفعول"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
msgid "Unpaid"
msgstr "غير مدفوع"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
msgid "Canceled"
msgstr "ملغاة"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Confirmed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Approval pending"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Redeemed"
msgstr "مستخدم"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
msgid "Cancel"
msgstr "قم بالإلغاء"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
msgid "Ticket not paid"
msgstr "لم يتم دفع قيمة التذكرة"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "This ticket is not yet paid. Do you want to continue anyways?"
msgstr "لم يتم دفع قيمة التذكرة بعد، هل تريد المتابعة على أي حال؟"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53
msgid "Additional information required"
msgstr "مطلوب معلومات إضافية"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
msgid "Valid ticket"
msgstr "تذكرة سارية المفعول"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
msgid "Exit recorded"
msgstr "تم تسجيل الخروج"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used"
msgstr "تم استخدام التذكرة مسبقا"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required"
msgstr "معلومات مطلوبة"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
#, fuzzy
#| msgid "Unknown error."
msgid "Unknown ticket"
msgstr "خطأ غير معروف."
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
#, fuzzy
#| msgid "Entry not allowed"
msgid "Ticket type not allowed here"
msgstr "إدخال غير مسموح"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
msgid "Entry not allowed"
msgstr "إدخال غير مسموح"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
msgid "Ticket code revoked/changed"
msgstr "تم إلغاء رمز التذكرة أو تبديله"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
#, fuzzy
#| msgid "Ticket not paid"
msgid "Ticket blocked"
msgstr "لم يتم دفع قيمة التذكرة"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
#, fuzzy
#| msgid "Ticket not paid"
msgid "Ticket not valid at this time"
msgstr "لم يتم دفع قيمة التذكرة"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
msgid "Order canceled"
msgstr "تم إلغاء الطلب"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
msgid "Ticket code is ambiguous on list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67
msgid "Order not approved"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
msgid "Checked-in Tickets"
msgstr "تذاكر الدخول"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets"
msgstr "تذاكر سارية المفعول"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
msgid "Currently inside"
msgstr "حاليا بالداخل"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr "نعم"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr "لا"
#: pretix/static/lightbox/js/lightbox.js:96
#, fuzzy
#| msgctxt "widget"
@@ -220,36 +395,36 @@ msgstr ""
"وصل طلبك للخادم وننتظر تنفيذه. إذا استغرق الأمر أكثر من دقيقتين تواصل معنا "
"أو عاود المحاولة مجددا."
#: pretix/static/pretixbase/js/asynctask.js:135
#: pretix/static/pretixbase/js/asynctask.js:192
#: pretix/static/pretixbase/js/asynctask.js:196
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "حدث خطأ من نوع {code}."
#: pretix/static/pretixbase/js/asynctask.js:138
#: pretix/static/pretixbase/js/asynctask.js:128
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr "لم نتمكن من الاتصال بالخادم، لكن سنواصل المحاولة، رمز آخر خطأ: {code}"
#: pretix/static/pretixbase/js/asynctask.js:172
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "استغرقت الطلب فترة طويلة، الرجاء المحاولة مرة أخرى."
#: pretix/static/pretixbase/js/asynctask.js:198
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
msgstr ""
"لا يمكننا الوصول إلى الخادم حاليا، حاول مرة أخرى من فضلك. رمز الخطأ : {code}"
#: pretix/static/pretixbase/js/asynctask.js:226
#: pretix/static/pretixbase/js/asynctask.js:216
msgid "We are processing your request …"
msgstr "جاري معالجة طلبك …"
#: pretix/static/pretixbase/js/asynctask.js:229
#: pretix/static/pretixbase/js/asynctask.js:219
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
@@ -258,11 +433,11 @@ msgstr ""
"نعمل الآن على ارسال طلبك إلى الخادم، إذا أستغرقت العملية أكثر من دقيقة، يرجى "
"التحقق من اتصالك بالإنترنت ثم أعد تحميل الصفحة مرة أخرى."
#: pretix/static/pretixbase/js/asynctask.js:286
#: pretix/static/pretixbase/js/asynctask.js:276
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:341
#: pretix/static/pretixbase/js/asynctask.js:331
msgid "Close message"
msgstr "أغلق الرسالة"
@@ -274,6 +449,154 @@ msgstr "تم النسخ!"
msgid "Press Ctrl-C to copy!"
msgstr "للنسخ اضغط Ctrl + C!"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:12
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:18
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
msgid "is one of"
msgstr "واحد من"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
msgid "is before"
msgstr "قبل"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
msgid "is after"
msgstr "بعد"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "="
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product"
msgstr "منتج"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Product variation"
msgstr "نوع المنتج"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Gate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
msgid "Current date and time"
msgstr "التاريخ والوقت الحالي"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries"
msgstr "عدد المدخلات السابقة"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
msgid "Number of previous entries since midnight"
msgstr "عدد المدخلات السابقة قبل منتصف الليل"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
#, fuzzy
#| msgid "Number of previous entries"
msgid "Number of previous entries since"
msgstr "عدد المدخلات السابقة"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
#, fuzzy
#| msgid "Number of previous entries"
msgid "Number of previous entries before"
msgstr "عدد المدخلات السابقة"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry"
msgstr "عدد الأيام التي تحتوي على مدخل سابق"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry since"
msgstr "عدد الأيام التي تحتوي على مدخل سابق"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry before"
msgstr "عدد الأيام التي تحتوي على مدخل سابق"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
msgid "Minutes since last entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
msgid "Minutes since first entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)"
msgstr "جميع الشروط في الأسفل"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
msgid "At least one of the conditions below (OR)"
msgstr "خيار واحد على الأقل"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:184
msgid "Event start"
msgstr "بداية الفعالية"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
msgid "Event end"
msgstr "نهاية الفعالية"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
msgid "Event admission"
msgstr "تسجيل الفعالية"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
msgid "custom date and time"
msgstr "تحديد التاريخ والوقت"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
msgid "custom time"
msgstr "الوقت المحدد"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
msgid "Tolerance (minutes)"
msgstr "القدرة على التحمل (الدقائق)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
msgid "Add condition"
msgstr "أضف شرطا"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
msgid "minutes"
msgstr "الدقائق"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status"
msgid "present"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status"
msgid "absent"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
msgid "Error: Product not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
msgid "Error: Variation not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
msgstr "QR الدخول"
@@ -418,16 +741,6 @@ msgstr "غير ذلك"
msgid "Count"
msgstr "احسب"
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr "نعم"
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr "لا"
#: pretix/static/pretixcontrol/js/ui/subevent.js:112
msgid "(one more date)"
msgid_plural "({num} more dates)"
@@ -947,193 +1260,6 @@ msgstr "نوفمبر"
msgid "December"
msgstr "ديسمبر"
#~ msgid "Select a check-in list"
#~ msgstr "اختر قائمة الدخول"
#~ msgid "No active check-in lists found."
#~ msgstr "لم يتم العثور على قوائم دخول نشطة."
#~ msgid "Switch check-in list"
#~ msgstr "تبديل قائمة الدخول"
#~ msgid "Search results"
#~ msgstr "البحث في النتائج"
#~ msgid "No tickets found"
#~ msgstr "لم يتم العثور على تذاكر"
#~ msgid "Result"
#~ msgstr "النتيجة"
#~ msgid "This ticket requires special attention"
#~ msgstr "تحتاج هذه التذكرة إلى إهتمام خاص"
#~ msgid "Switch direction"
#~ msgstr "تغيير المسار"
#~ msgid "Entry"
#~ msgstr "دخول"
#~ msgid "Exit"
#~ msgstr "خروج"
#~ msgid "Scan a ticket or search and press return…"
#~ msgstr "قم بمسح التذكرة أو إبحث واضغط زر العودة…"
#~ msgid "Load more"
#~ msgstr "تحميل المزيد"
#~ msgid "Valid"
#~ msgstr "ساري المفعول"
#~ msgid "Unpaid"
#~ msgstr "غير مدفوع"
#~ msgid "Canceled"
#~ msgstr "ملغاة"
#~ msgid "Redeemed"
#~ msgstr "مستخدم"
#~ msgid "Cancel"
#~ msgstr "قم بالإلغاء"
#~ msgid "Ticket not paid"
#~ msgstr "لم يتم دفع قيمة التذكرة"
#~ msgid "This ticket is not yet paid. Do you want to continue anyways?"
#~ msgstr "لم يتم دفع قيمة التذكرة بعد، هل تريد المتابعة على أي حال؟"
#~ msgid "Additional information required"
#~ msgstr "مطلوب معلومات إضافية"
#~ msgid "Valid ticket"
#~ msgstr "تذكرة سارية المفعول"
#~ msgid "Exit recorded"
#~ msgstr "تم تسجيل الخروج"
#~ msgid "Ticket already used"
#~ msgstr "تم استخدام التذكرة مسبقا"
#~ msgid "Information required"
#~ msgstr "معلومات مطلوبة"
#, fuzzy
#~| msgid "Unknown error."
#~ msgid "Unknown ticket"
#~ msgstr "خطأ غير معروف."
#, fuzzy
#~| msgid "Entry not allowed"
#~ msgid "Ticket type not allowed here"
#~ msgstr "إدخال غير مسموح"
#~ msgid "Entry not allowed"
#~ msgstr "إدخال غير مسموح"
#~ msgid "Ticket code revoked/changed"
#~ msgstr "تم إلغاء رمز التذكرة أو تبديله"
#, fuzzy
#~| msgid "Ticket not paid"
#~ msgid "Ticket blocked"
#~ msgstr "لم يتم دفع قيمة التذكرة"
#, fuzzy
#~| msgid "Ticket not paid"
#~ msgid "Ticket not valid at this time"
#~ msgstr "لم يتم دفع قيمة التذكرة"
#~ msgid "Order canceled"
#~ msgstr "تم إلغاء الطلب"
#~ msgid "Checked-in Tickets"
#~ msgstr "تذاكر الدخول"
#~ msgid "Valid Tickets"
#~ msgstr "تذاكر سارية المفعول"
#~ msgid "Currently inside"
#~ msgstr "حاليا بالداخل"
#~ msgid "is one of"
#~ msgstr "واحد من"
#~ msgid "is before"
#~ msgstr "قبل"
#~ msgid "is after"
#~ msgstr "بعد"
#~ msgid "Product"
#~ msgstr "منتج"
#~ msgid "Product variation"
#~ msgstr "نوع المنتج"
#~ msgid "Current date and time"
#~ msgstr "التاريخ والوقت الحالي"
#~ msgid "Number of previous entries"
#~ msgstr "عدد المدخلات السابقة"
#~ msgid "Number of previous entries since midnight"
#~ msgstr "عدد المدخلات السابقة قبل منتصف الليل"
#, fuzzy
#~| msgid "Number of previous entries"
#~ msgid "Number of previous entries since"
#~ msgstr "عدد المدخلات السابقة"
#, fuzzy
#~| msgid "Number of previous entries"
#~ msgid "Number of previous entries before"
#~ msgstr "عدد المدخلات السابقة"
#~ msgid "Number of days with a previous entry"
#~ msgstr "عدد الأيام التي تحتوي على مدخل سابق"
#, fuzzy
#~| msgid "Number of days with a previous entry"
#~ msgid "Number of days with a previous entry since"
#~ msgstr "عدد الأيام التي تحتوي على مدخل سابق"
#, fuzzy
#~| msgid "Number of days with a previous entry"
#~ msgid "Number of days with a previous entry before"
#~ msgstr "عدد الأيام التي تحتوي على مدخل سابق"
#~ msgid "All of the conditions below (AND)"
#~ msgstr "جميع الشروط في الأسفل"
#~ msgid "At least one of the conditions below (OR)"
#~ msgstr "خيار واحد على الأقل"
#~ msgid "Event start"
#~ msgstr "بداية الفعالية"
#~ msgid "Event end"
#~ msgstr "نهاية الفعالية"
#~ msgid "Event admission"
#~ msgstr "تسجيل الفعالية"
#~ msgid "custom date and time"
#~ msgstr "تحديد التاريخ والوقت"
#~ msgid "custom time"
#~ msgstr "الوقت المحدد"
#~ msgid "Tolerance (minutes)"
#~ msgstr "القدرة على التحمل (الدقائق)"
#~ msgid "Add condition"
#~ msgstr "أضف شرطا"
#~ msgid "minutes"
#~ msgstr "الدقائق"
#~ msgid "Time zone:"
#~ msgstr "المنطقة الزمنية:"

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-05-27 14:47+0000\n"
"POT-Creation-Date: 2026-04-28 09:04+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -130,6 +130,7 @@ msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
#: pretix/static/pretixpresale/js/ui/cart.js:89
msgid "Continue"
msgstr ""
@@ -183,6 +184,172 @@ msgstr ""
msgid "Contacting your bank …"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
msgid "No tickets found"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
msgid "Result"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
msgid "This ticket requires special attention"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
msgid "Switch direction"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
msgid "Entry"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
msgid "Valid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
msgid "Unpaid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
msgid "Canceled"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Confirmed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Approval pending"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Redeemed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
msgid "Cancel"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
msgid "Ticket not paid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "This ticket is not yet paid. Do you want to continue anyways?"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53
msgid "Additional information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
msgid "Valid ticket"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
msgid "Exit recorded"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
msgid "Unknown ticket"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
msgid "Entry not allowed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
msgid "Ticket code revoked/changed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
msgid "Ticket blocked"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
msgid "Ticket not valid at this time"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
msgid "Order canceled"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
msgid "Ticket code is ambiguous on list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67
msgid "Order not approved"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
msgid "Checked-in Tickets"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
msgid "Currently inside"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr ""
#: pretix/static/lightbox/js/lightbox.js:96
msgid "close"
msgstr ""
@@ -209,46 +376,46 @@ msgid ""
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:135
#: pretix/static/pretixbase/js/asynctask.js:192
#: pretix/static/pretixbase/js/asynctask.js:196
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:138
#: pretix/static/pretixbase/js/asynctask.js:128
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:172
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:198
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:226
#: pretix/static/pretixbase/js/asynctask.js:216
msgid "We are processing your request …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:229
#: pretix/static/pretixbase/js/asynctask.js:219
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
"page and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:286
#: pretix/static/pretixbase/js/asynctask.js:276
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:341
#: pretix/static/pretixbase/js/asynctask.js:331
msgid "Close message"
msgstr ""
@@ -260,6 +427,146 @@ msgstr ""
msgid "Press Ctrl-C to copy!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:12
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:18
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
msgid "is one of"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
msgid "is before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
msgid "is after"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "="
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Product variation"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Gate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
msgid "Current date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
msgid "Number of previous entries since midnight"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
msgid "Number of previous entries since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
msgid "Number of previous entries before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
msgid "Number of days with a previous entry since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
msgid "Number of days with a previous entry before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
msgid "Minutes since last entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
msgid "Minutes since first entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:184
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
msgid "minutes"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status"
msgid "present"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status"
msgid "absent"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
msgid "Error: Product not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
msgid "Error: Variation not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
msgstr ""
@@ -394,16 +701,6 @@ msgstr ""
msgid "Count"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/subevent.js:112
msgid "(one more date)"
msgid_plural "({num} more dates)"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-05-27 14:47+0000\n"
"POT-Creation-Date: 2026-04-28 09:04+0000\n"
"PO-Revision-Date: 2025-10-31 17:00+0000\n"
"Last-Translator: Núria Masclans <nuriamasclansserrat@gmail.com>\n"
"Language-Team: Catalan <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -131,6 +131,7 @@ msgid "Mercado Pago"
msgstr "Mercado Pago"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
#: pretix/static/pretixpresale/js/ui/cart.js:89
msgid "Continue"
msgstr "Continua"
@@ -184,6 +185,172 @@ msgstr "Total"
msgid "Contacting your bank …"
msgstr "Contactant amb el teu banc…"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr "Selecciona una llista d'acreditació"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr "No s'ha trobat cap lllista d'acreditació activa."
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr "Canvia la llista d'acreditació"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
msgstr "Resultats de la cerca"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
msgid "No tickets found"
msgstr "No s'han trobat entrades"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
msgid "Result"
msgstr "Resultat"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
msgid "This ticket requires special attention"
msgstr "Aquesta entrada requereix atenció especial"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
msgid "Switch direction"
msgstr "Canvia la direcció"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
msgid "Entry"
msgstr "Entrada"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit"
msgstr "Sortida"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…"
msgstr "Escaneja l'entrada o cerca i prem Retorn…"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more"
msgstr "Mostra'n més"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
msgid "Valid"
msgstr "Vàlid"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
msgid "Unpaid"
msgstr "No pagat"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
msgid "Canceled"
msgstr "Cancel·lat"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Confirmed"
msgstr "Confirmat"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Approval pending"
msgstr "Pendent d'aprovació"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Redeemed"
msgstr "Reemborsat"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
msgid "Cancel"
msgstr "Cancel·lar"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
msgid "Ticket not paid"
msgstr "Entrada no pagada"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "This ticket is not yet paid. Do you want to continue anyways?"
msgstr "Aquesta entrada no està pagada. Vols continuar igualment?"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53
msgid "Additional information required"
msgstr "Cal informació addicional"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
msgid "Valid ticket"
msgstr "Entrada vàlida"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
msgid "Exit recorded"
msgstr "Sortida registrada"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used"
msgstr "Entrada ja utilitzada"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required"
msgstr "Informació requerida"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
msgid "Unknown ticket"
msgstr "Entrada desconeguda"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
msgstr "Tipus d'entrada no permès aquí"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
msgid "Entry not allowed"
msgstr "Entrada no permesa"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
msgid "Ticket code revoked/changed"
msgstr "Codi dentrada anul·lat o modificat"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
msgid "Ticket blocked"
msgstr "Entrada bloquejada"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
msgid "Ticket not valid at this time"
msgstr "Entrada no vàlida en aquest moment"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
msgid "Order canceled"
msgstr "S'ha cancel·lat la comanda"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
msgid "Ticket code is ambiguous on list"
msgstr "Codi de lentrada ambigu a la llista"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67
msgid "Order not approved"
msgstr "Comanda no aprovada"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
msgid "Checked-in Tickets"
msgstr "Entrades registrades"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets"
msgstr "Entrades vàlides"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
msgid "Currently inside"
msgstr "Actualment dins"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr "Sí"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr "No"
#: pretix/static/lightbox/js/lightbox.js:96
msgid "close"
msgstr "Tanca"
@@ -216,14 +383,14 @@ msgstr ""
"Si aquesta acció triga més de 2 minuts, contacta'ns o torna enrere al "
"navegador i prova-ho de nou."
#: pretix/static/pretixbase/js/asynctask.js:135
#: pretix/static/pretixbase/js/asynctask.js:192
#: pretix/static/pretixbase/js/asynctask.js:196
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "S'ha produït un error de tipus {code}."
#: pretix/static/pretixbase/js/asynctask.js:138
#: pretix/static/pretixbase/js/asynctask.js:128
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -231,23 +398,23 @@ msgstr ""
"Actualment no podem connectar amb el servidor, però seguim intentant-ho. "
"Últim codi derror: {code}"
#: pretix/static/pretixbase/js/asynctask.js:172
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "Temps despera esgotat. Torna-ho a provar."
#: pretix/static/pretixbase/js/asynctask.js:198
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
msgstr ""
"No es pot connectar amb el servidor. Torna-ho a provar. Codi derror: {code}"
#: pretix/static/pretixbase/js/asynctask.js:226
#: pretix/static/pretixbase/js/asynctask.js:216
msgid "We are processing your request …"
msgstr "Estem processant la vostra sol·licitud …"
#: pretix/static/pretixbase/js/asynctask.js:229
#: pretix/static/pretixbase/js/asynctask.js:219
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
@@ -256,11 +423,11 @@ msgstr ""
"Hem enviat la teva petició al servidor. Si triga més d'1 minut, comprova la "
"connexió, recarrega la pàgina i torna-ho a provar."
#: pretix/static/pretixbase/js/asynctask.js:286
#: pretix/static/pretixbase/js/asynctask.js:276
msgid "If this takes longer than a few minutes, please contact us."
msgstr "Si triga més de pocs minuts, contacta'ns."
#: pretix/static/pretixbase/js/asynctask.js:341
#: pretix/static/pretixbase/js/asynctask.js:331
msgid "Close message"
msgstr "Tanca el missatge"
@@ -272,6 +439,146 @@ msgstr "Copiat!"
msgid "Press Ctrl-C to copy!"
msgstr "Prem Ctrl-C per copiar!"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:12
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:18
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
msgid "is one of"
msgstr "forma part de"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
msgid "is before"
msgstr "abans de"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
msgid "is after"
msgstr "després de"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "="
msgstr "="
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product"
msgstr "Producte"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Product variation"
msgstr "Variació del producte"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Gate"
msgstr "Porta"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
msgid "Current date and time"
msgstr "Data i hora actuals"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr "Dia actual de la setmana (1 = Dilluns, 7 = Diumenge)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status"
msgstr "Estat actual de l'entrada"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries"
msgstr "Nombre d'entrades anteriors"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
msgid "Number of previous entries since midnight"
msgstr "Nombre dentrades anteriors des de la mitjanit"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
msgid "Number of previous entries since"
msgstr "Nombre dentrades anteriors des de"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
msgid "Number of previous entries before"
msgstr "Nombre dentrades anteriors abans de"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry"
msgstr "Nombre de dies amb una entrada anterior"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
msgid "Number of days with a previous entry since"
msgstr "Nombre de dies amb una entrada anterior des de"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
msgid "Number of days with a previous entry before"
msgstr "Nombre de dies amb una entrada anterior abans de"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
msgid "Minutes since last entry (-1 on first entry)"
msgstr "Minuts des de l'última entrada (-1 per la primera entrada)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
msgid "Minutes since first entry (-1 on first entry)"
msgstr "Minuts des de la primera entrada (-1 a la primera entrada)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)"
msgstr "Complir totes les condicions següents"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
msgid "At least one of the conditions below (OR)"
msgstr "Complir almenys una de les condicions següents"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:184
msgid "Event start"
msgstr "Inici de l'esdeveniment"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
msgid "Event end"
msgstr "Finalització de l'esdeveniment"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
msgid "Event admission"
msgstr "Admissió de l'esdeveniment"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
msgid "custom date and time"
msgstr "Data i hora personalitzades"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
msgid "custom time"
msgstr "Hora personalitzada"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
msgid "Tolerance (minutes)"
msgstr "Tolerància (minuts)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
msgid "Add condition"
msgstr "Afegeix condició"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
msgid "minutes"
msgstr "en minuts"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate"
msgstr "Duplicat"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status"
msgid "present"
msgstr "present"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status"
msgid "absent"
msgstr "absent"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
msgid "Error: Product not found!"
msgstr "Error: Producte no trobat!"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
msgid "Error: Variation not found!"
msgstr "Error: Variació no trobada!"
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
msgstr "Registre amb codi QR"
@@ -410,16 +717,6 @@ msgstr "Altres"
msgid "Count"
msgstr "Quantitat"
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr "Sí"
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr "No"
#: pretix/static/pretixcontrol/js/ui/subevent.js:112
msgid "(one more date)"
msgid_plural "({num} more dates)"
@@ -896,223 +1193,5 @@ msgstr ""
msgid "December"
msgstr ""
#~ msgid "Select a check-in list"
#~ msgstr "Selecciona una llista d'acreditació"
#~ msgid "No active check-in lists found."
#~ msgstr "No s'ha trobat cap lllista d'acreditació activa."
#~ msgid "Switch check-in list"
#~ msgstr "Canvia la llista d'acreditació"
#~ msgid "Search results"
#~ msgstr "Resultats de la cerca"
#~ msgid "No tickets found"
#~ msgstr "No s'han trobat entrades"
#~ msgid "Result"
#~ msgstr "Resultat"
#~ msgid "This ticket requires special attention"
#~ msgstr "Aquesta entrada requereix atenció especial"
#~ msgid "Switch direction"
#~ msgstr "Canvia la direcció"
#~ msgid "Entry"
#~ msgstr "Entrada"
#~ msgid "Exit"
#~ msgstr "Sortida"
#~ msgid "Scan a ticket or search and press return…"
#~ msgstr "Escaneja l'entrada o cerca i prem Retorn…"
#~ msgid "Load more"
#~ msgstr "Mostra'n més"
#~ msgid "Valid"
#~ msgstr "Vàlid"
#~ msgid "Unpaid"
#~ msgstr "No pagat"
#~ msgid "Canceled"
#~ msgstr "Cancel·lat"
#~ msgid "Confirmed"
#~ msgstr "Confirmat"
#~ msgid "Approval pending"
#~ msgstr "Pendent d'aprovació"
#~ msgid "Redeemed"
#~ msgstr "Reemborsat"
#~ msgid "Cancel"
#~ msgstr "Cancel·lar"
#~ msgid "Ticket not paid"
#~ msgstr "Entrada no pagada"
#~ msgid "This ticket is not yet paid. Do you want to continue anyways?"
#~ msgstr "Aquesta entrada no està pagada. Vols continuar igualment?"
#~ msgid "Additional information required"
#~ msgstr "Cal informació addicional"
#~ msgid "Valid ticket"
#~ msgstr "Entrada vàlida"
#~ msgid "Exit recorded"
#~ msgstr "Sortida registrada"
#~ msgid "Ticket already used"
#~ msgstr "Entrada ja utilitzada"
#~ msgid "Information required"
#~ msgstr "Informació requerida"
#~ msgid "Unknown ticket"
#~ msgstr "Entrada desconeguda"
#~ msgid "Ticket type not allowed here"
#~ msgstr "Tipus d'entrada no permès aquí"
#~ msgid "Entry not allowed"
#~ msgstr "Entrada no permesa"
#~ msgid "Ticket code revoked/changed"
#~ msgstr "Codi dentrada anul·lat o modificat"
#~ msgid "Ticket blocked"
#~ msgstr "Entrada bloquejada"
#~ msgid "Ticket not valid at this time"
#~ msgstr "Entrada no vàlida en aquest moment"
#~ msgid "Order canceled"
#~ msgstr "S'ha cancel·lat la comanda"
#~ msgid "Ticket code is ambiguous on list"
#~ msgstr "Codi de lentrada ambigu a la llista"
#~ msgid "Order not approved"
#~ msgstr "Comanda no aprovada"
#~ msgid "Checked-in Tickets"
#~ msgstr "Entrades registrades"
#~ msgid "Valid Tickets"
#~ msgstr "Entrades vàlides"
#~ msgid "Currently inside"
#~ msgstr "Actualment dins"
#~ msgid "is one of"
#~ msgstr "forma part de"
#~ msgid "is before"
#~ msgstr "abans de"
#~ msgid "is after"
#~ msgstr "després de"
#~ msgid "="
#~ msgstr "="
#~ msgid "Product"
#~ msgstr "Producte"
#~ msgid "Product variation"
#~ msgstr "Variació del producte"
#~ msgid "Gate"
#~ msgstr "Porta"
#~ msgid "Current date and time"
#~ msgstr "Data i hora actuals"
#~ msgid "Current day of the week (1 = Monday, 7 = Sunday)"
#~ msgstr "Dia actual de la setmana (1 = Dilluns, 7 = Diumenge)"
#~ msgid "Current entry status"
#~ msgstr "Estat actual de l'entrada"
#~ msgid "Number of previous entries"
#~ msgstr "Nombre d'entrades anteriors"
#~ msgid "Number of previous entries since midnight"
#~ msgstr "Nombre dentrades anteriors des de la mitjanit"
#~ msgid "Number of previous entries since"
#~ msgstr "Nombre dentrades anteriors des de"
#~ msgid "Number of previous entries before"
#~ msgstr "Nombre dentrades anteriors abans de"
#~ msgid "Number of days with a previous entry"
#~ msgstr "Nombre de dies amb una entrada anterior"
#~ msgid "Number of days with a previous entry since"
#~ msgstr "Nombre de dies amb una entrada anterior des de"
#~ msgid "Number of days with a previous entry before"
#~ msgstr "Nombre de dies amb una entrada anterior abans de"
#~ msgid "Minutes since last entry (-1 on first entry)"
#~ msgstr "Minuts des de l'última entrada (-1 per la primera entrada)"
#~ msgid "Minutes since first entry (-1 on first entry)"
#~ msgstr "Minuts des de la primera entrada (-1 a la primera entrada)"
#~ msgid "All of the conditions below (AND)"
#~ msgstr "Complir totes les condicions següents"
#~ msgid "At least one of the conditions below (OR)"
#~ msgstr "Complir almenys una de les condicions següents"
#~ msgid "Event start"
#~ msgstr "Inici de l'esdeveniment"
#~ msgid "Event end"
#~ msgstr "Finalització de l'esdeveniment"
#~ msgid "Event admission"
#~ msgstr "Admissió de l'esdeveniment"
#~ msgid "custom date and time"
#~ msgstr "Data i hora personalitzades"
#~ msgid "custom time"
#~ msgstr "Hora personalitzada"
#~ msgid "Tolerance (minutes)"
#~ msgstr "Tolerància (minuts)"
#~ msgid "Add condition"
#~ msgstr "Afegeix condició"
#~ msgid "minutes"
#~ msgstr "en minuts"
#~ msgid "Duplicate"
#~ msgstr "Duplicat"
#~ msgctxt "entry_status"
#~ msgid "present"
#~ msgstr "present"
#~ msgctxt "entry_status"
#~ msgid "absent"
#~ msgstr "absent"
#~ msgid "Error: Product not found!"
#~ msgstr "Error: Producte no trobat!"
#~ msgid "Error: Variation not found!"
#~ msgstr "Error: Variació no trobada!"
#~ msgid "iDEAL"
#~ msgstr "iDEAL"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-05-27 14:47+0000\n"
"POT-Creation-Date: 2026-04-28 09:04+0000\n"
"PO-Revision-Date: 2026-01-08 04:00+0000\n"
"Last-Translator: Jiří Pastrňák <jiri@pastrnak.email>\n"
"Language-Team: Czech <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -131,6 +131,7 @@ msgid "Mercado Pago"
msgstr "Mercado Pago"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
#: pretix/static/pretixpresale/js/ui/cart.js:89
msgid "Continue"
msgstr "Pokračovat"
@@ -184,6 +185,172 @@ msgstr "Celkem"
msgid "Contacting your bank …"
msgstr "Kontaktuji vaši banku …"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr "Zvolte check-in list"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr "Žádné aktivní check-in listy."
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr "Změnit check-in list"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
msgstr "Vyhledat výsledky"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
msgid "No tickets found"
msgstr "Nenalezeny žádné lístky"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
msgid "Result"
msgstr "Výsledek"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
msgid "This ticket requires special attention"
msgstr "Tato vstupenka vyžaduje speciální pozornost"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
msgid "Switch direction"
msgstr "Změnit směr"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
msgid "Entry"
msgstr "Vstup"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit"
msgstr "Výstup"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…"
msgstr "Naskenujte vstupenku, nebo ji vyhledejte a zmáčkněte zpět…"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more"
msgstr "Načíst více"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
msgid "Valid"
msgstr "Potrvzeno"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
msgid "Unpaid"
msgstr "Nezaplaceno"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
msgid "Canceled"
msgstr "Zrušeno"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Confirmed"
msgstr "Potvrzeno"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Approval pending"
msgstr "Čeká na schválení"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Redeemed"
msgstr "Uplatněno"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
msgid "Cancel"
msgstr "Zrušit"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
msgid "Ticket not paid"
msgstr "Vstupenka není zaplacena"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "This ticket is not yet paid. Do you want to continue anyways?"
msgstr "Vstupenka nebyla zaplacena. Chcete i přesto pokračovat?"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53
msgid "Additional information required"
msgstr "Potřebné další informace"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
msgid "Valid ticket"
msgstr "Platná vstupenka"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
msgid "Exit recorded"
msgstr "Opustit nahrávané"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used"
msgstr "Vstupenka již byla použita"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required"
msgstr "Informace vyžadována"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
msgid "Unknown ticket"
msgstr "Neznámá vstupenka"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
msgstr "Typ vstupenky zde není povolen"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
msgid "Entry not allowed"
msgstr "Vstup není povolen"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
msgid "Ticket code revoked/changed"
msgstr "Kód vstupenky změněn"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
msgid "Ticket blocked"
msgstr "Vstupenka zablokována"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
msgid "Ticket not valid at this time"
msgstr "Vstupenka je v tuto chvíli neplatná"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
msgid "Order canceled"
msgstr "Objednávka zrušena"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
msgid "Ticket code is ambiguous on list"
msgstr "Kód vstupenky je v seznamu nejednoznačný"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67
msgid "Order not approved"
msgstr "Objednávka nebyla potvrzena"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
msgid "Checked-in Tickets"
msgstr "Vyřízené vstupenky"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets"
msgstr "Platné vstupenky"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
msgid "Currently inside"
msgstr "Aktuálně uvnitř"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr "Ano"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr "Ne"
#: pretix/static/lightbox/js/lightbox.js:96
msgid "close"
msgstr "zavřít"
@@ -215,14 +382,14 @@ msgstr ""
"Pokud to trvá více jak dvě minuty, prosím kontaktuje nás nebo se vraťte do "
"vašeho prohlížeče a zkuste to znovu."
#: pretix/static/pretixbase/js/asynctask.js:135
#: pretix/static/pretixbase/js/asynctask.js:192
#: pretix/static/pretixbase/js/asynctask.js:196
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Vyskytla se chyba {code}."
#: pretix/static/pretixbase/js/asynctask.js:138
#: pretix/static/pretixbase/js/asynctask.js:128
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -230,12 +397,12 @@ msgstr ""
"Momentálně nemůžeme kontaktovat server, ale stále se o to pokoušíme. "
"Poslední chybový kód: {code}"
#: pretix/static/pretixbase/js/asynctask.js:172
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "Zpracování požadavku trvá příliš dlouho. Prosím zkuste to znovu."
#: pretix/static/pretixbase/js/asynctask.js:198
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -243,11 +410,11 @@ msgstr ""
"Momentálně nemůžeme kontaktovat server. Prosím zkuste to znovu. Chybový kód: "
"{code}"
#: pretix/static/pretixbase/js/asynctask.js:226
#: pretix/static/pretixbase/js/asynctask.js:216
msgid "We are processing your request …"
msgstr "Zpracováváme váš požadavek …"
#: pretix/static/pretixbase/js/asynctask.js:229
#: pretix/static/pretixbase/js/asynctask.js:219
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
@@ -257,11 +424,11 @@ msgstr ""
"prosím zkontrolujte své internetové připojení a znovu načtěte stránku a "
"zkuste to znovu."
#: pretix/static/pretixbase/js/asynctask.js:286
#: pretix/static/pretixbase/js/asynctask.js:276
msgid "If this takes longer than a few minutes, please contact us."
msgstr "Pokud akce trvá déle než několik minut, kontaktujte nás."
#: pretix/static/pretixbase/js/asynctask.js:341
#: pretix/static/pretixbase/js/asynctask.js:331
msgid "Close message"
msgstr "Zavřít zprávu"
@@ -273,6 +440,154 @@ msgstr "Zkopírováno!"
msgid "Press Ctrl-C to copy!"
msgstr "Stiskněte Ctrl-C pro zkopírování!"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:12
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:18
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
msgid "is one of"
msgstr "je jedním z"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
msgid "is before"
msgstr "je před"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
msgid "is after"
msgstr "je po"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "="
msgstr "="
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product"
msgstr "Produkt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Product variation"
msgstr "Varianta produktu"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Gate"
msgstr "Brána"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
msgid "Current date and time"
msgstr "Současný čas"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr "Aktuální den týdne (1 = pondělí, 7 = neděle)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries"
msgstr "Počet předchozích záznamů"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
msgid "Number of previous entries since midnight"
msgstr "Počet záznamů od půlnoci"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
#, fuzzy
#| msgid "Number of previous entries"
msgid "Number of previous entries since"
msgstr "Počet předchozích záznamů"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
#, fuzzy
#| msgid "Number of previous entries"
msgid "Number of previous entries before"
msgstr "Počet předchozích záznamů"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry"
msgstr "Počet dní bez úprav"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry since"
msgstr "Počet dní bez úprav"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry before"
msgstr "Počet dní bez úprav"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
msgid "Minutes since last entry (-1 on first entry)"
msgstr "Minuty od předchozího vstupu (-1 pro první vstup)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
msgid "Minutes since first entry (-1 on first entry)"
msgstr "Minuty od prvního vstupu (-1 pro první vstup)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)"
msgstr "Všechny následující podmínky (AND)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
msgid "At least one of the conditions below (OR)"
msgstr "Alespoň jedna z následujících podmínek (OR)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:184
msgid "Event start"
msgstr "Začátek akce"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
msgid "Event end"
msgstr "Konec akce"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
msgid "Event admission"
msgstr "Vstup na akci"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
msgid "custom date and time"
msgstr "Pevný termín"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
msgid "custom time"
msgstr "Pevná doba"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
msgid "Tolerance (minutes)"
msgstr "Tolerance (v minutách)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
msgid "Add condition"
msgstr "Přidat podmínku"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
msgid "minutes"
msgstr "minuty"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate"
msgstr "Duplikát"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status"
msgid "present"
msgstr "přítomen"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status"
msgid "absent"
msgstr "nepřítomen"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
msgid "Error: Product not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
msgid "Error: Variation not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
msgstr "Check-in QR kód"
@@ -412,16 +727,6 @@ msgstr "Další"
msgid "Count"
msgstr "Počet"
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr "Ano"
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr "Ne"
#: pretix/static/pretixcontrol/js/ui/subevent.js:112
msgid "(one more date)"
msgid_plural "({num} more dates)"
@@ -915,223 +1220,6 @@ msgstr "Listopad"
msgid "December"
msgstr "Prosinec"
#~ msgid "Select a check-in list"
#~ msgstr "Zvolte check-in list"
#~ msgid "No active check-in lists found."
#~ msgstr "Žádné aktivní check-in listy."
#~ msgid "Switch check-in list"
#~ msgstr "Změnit check-in list"
#~ msgid "Search results"
#~ msgstr "Vyhledat výsledky"
#~ msgid "No tickets found"
#~ msgstr "Nenalezeny žádné lístky"
#~ msgid "Result"
#~ msgstr "Výsledek"
#~ msgid "This ticket requires special attention"
#~ msgstr "Tato vstupenka vyžaduje speciální pozornost"
#~ msgid "Switch direction"
#~ msgstr "Změnit směr"
#~ msgid "Entry"
#~ msgstr "Vstup"
#~ msgid "Exit"
#~ msgstr "Výstup"
#~ msgid "Scan a ticket or search and press return…"
#~ msgstr "Naskenujte vstupenku, nebo ji vyhledejte a zmáčkněte zpět…"
#~ msgid "Load more"
#~ msgstr "Načíst více"
#~ msgid "Valid"
#~ msgstr "Potrvzeno"
#~ msgid "Unpaid"
#~ msgstr "Nezaplaceno"
#~ msgid "Canceled"
#~ msgstr "Zrušeno"
#~ msgid "Confirmed"
#~ msgstr "Potvrzeno"
#~ msgid "Approval pending"
#~ msgstr "Čeká na schválení"
#~ msgid "Redeemed"
#~ msgstr "Uplatněno"
#~ msgid "Cancel"
#~ msgstr "Zrušit"
#~ msgid "Ticket not paid"
#~ msgstr "Vstupenka není zaplacena"
#~ msgid "This ticket is not yet paid. Do you want to continue anyways?"
#~ msgstr "Vstupenka nebyla zaplacena. Chcete i přesto pokračovat?"
#~ msgid "Additional information required"
#~ msgstr "Potřebné další informace"
#~ msgid "Valid ticket"
#~ msgstr "Platná vstupenka"
#~ msgid "Exit recorded"
#~ msgstr "Opustit nahrávané"
#~ msgid "Ticket already used"
#~ msgstr "Vstupenka již byla použita"
#~ msgid "Information required"
#~ msgstr "Informace vyžadována"
#~ msgid "Unknown ticket"
#~ msgstr "Neznámá vstupenka"
#~ msgid "Ticket type not allowed here"
#~ msgstr "Typ vstupenky zde není povolen"
#~ msgid "Entry not allowed"
#~ msgstr "Vstup není povolen"
#~ msgid "Ticket code revoked/changed"
#~ msgstr "Kód vstupenky změněn"
#~ msgid "Ticket blocked"
#~ msgstr "Vstupenka zablokována"
#~ msgid "Ticket not valid at this time"
#~ msgstr "Vstupenka je v tuto chvíli neplatná"
#~ msgid "Order canceled"
#~ msgstr "Objednávka zrušena"
#~ msgid "Ticket code is ambiguous on list"
#~ msgstr "Kód vstupenky je v seznamu nejednoznačný"
#~ msgid "Order not approved"
#~ msgstr "Objednávka nebyla potvrzena"
#~ msgid "Checked-in Tickets"
#~ msgstr "Vyřízené vstupenky"
#~ msgid "Valid Tickets"
#~ msgstr "Platné vstupenky"
#~ msgid "Currently inside"
#~ msgstr "Aktuálně uvnitř"
#~ msgid "is one of"
#~ msgstr "je jedním z"
#~ msgid "is before"
#~ msgstr "je před"
#~ msgid "is after"
#~ msgstr "je po"
#~ msgid "="
#~ msgstr "="
#~ msgid "Product"
#~ msgstr "Produkt"
#~ msgid "Product variation"
#~ msgstr "Varianta produktu"
#~ msgid "Gate"
#~ msgstr "Brána"
#~ msgid "Current date and time"
#~ msgstr "Současný čas"
#~ msgid "Current day of the week (1 = Monday, 7 = Sunday)"
#~ msgstr "Aktuální den týdne (1 = pondělí, 7 = neděle)"
#~ msgid "Number of previous entries"
#~ msgstr "Počet předchozích záznamů"
#~ msgid "Number of previous entries since midnight"
#~ msgstr "Počet záznamů od půlnoci"
#, fuzzy
#~| msgid "Number of previous entries"
#~ msgid "Number of previous entries since"
#~ msgstr "Počet předchozích záznamů"
#, fuzzy
#~| msgid "Number of previous entries"
#~ msgid "Number of previous entries before"
#~ msgstr "Počet předchozích záznamů"
#~ msgid "Number of days with a previous entry"
#~ msgstr "Počet dní bez úprav"
#, fuzzy
#~| msgid "Number of days with a previous entry"
#~ msgid "Number of days with a previous entry since"
#~ msgstr "Počet dní bez úprav"
#, fuzzy
#~| msgid "Number of days with a previous entry"
#~ msgid "Number of days with a previous entry before"
#~ msgstr "Počet dní bez úprav"
#~ msgid "Minutes since last entry (-1 on first entry)"
#~ msgstr "Minuty od předchozího vstupu (-1 pro první vstup)"
#~ msgid "Minutes since first entry (-1 on first entry)"
#~ msgstr "Minuty od prvního vstupu (-1 pro první vstup)"
#~ msgid "All of the conditions below (AND)"
#~ msgstr "Všechny následující podmínky (AND)"
#~ msgid "At least one of the conditions below (OR)"
#~ msgstr "Alespoň jedna z následujících podmínek (OR)"
#~ msgid "Event start"
#~ msgstr "Začátek akce"
#~ msgid "Event end"
#~ msgstr "Konec akce"
#~ msgid "Event admission"
#~ msgstr "Vstup na akci"
#~ msgid "custom date and time"
#~ msgstr "Pevný termín"
#~ msgid "custom time"
#~ msgstr "Pevná doba"
#~ msgid "Tolerance (minutes)"
#~ msgstr "Tolerance (v minutách)"
#~ msgid "Add condition"
#~ msgstr "Přidat podmínku"
#~ msgid "minutes"
#~ msgstr "minuty"
#~ msgid "Duplicate"
#~ msgstr "Duplikát"
#~ msgctxt "entry_status"
#~ msgid "present"
#~ msgstr "přítomen"
#~ msgctxt "entry_status"
#~ msgid "absent"
#~ msgstr "nepřítomen"
#~ msgid "iDEAL"
#~ msgstr "iDEAL"

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-05-27 14:47+0000\n"
"POT-Creation-Date: 2026-04-28 09:04+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -131,6 +131,7 @@ msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
#: pretix/static/pretixpresale/js/ui/cart.js:89
msgid "Continue"
msgstr ""
@@ -184,6 +185,172 @@ msgstr ""
msgid "Contacting your bank …"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
msgid "No tickets found"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
msgid "Result"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
msgid "This ticket requires special attention"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
msgid "Switch direction"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
msgid "Entry"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
msgid "Valid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
msgid "Unpaid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
msgid "Canceled"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Confirmed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Approval pending"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Redeemed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
msgid "Cancel"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
msgid "Ticket not paid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "This ticket is not yet paid. Do you want to continue anyways?"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53
msgid "Additional information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
msgid "Valid ticket"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
msgid "Exit recorded"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
msgid "Unknown ticket"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
msgid "Entry not allowed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
msgid "Ticket code revoked/changed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
msgid "Ticket blocked"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
msgid "Ticket not valid at this time"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
msgid "Order canceled"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
msgid "Ticket code is ambiguous on list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67
msgid "Order not approved"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
msgid "Checked-in Tickets"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
msgid "Currently inside"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr ""
#: pretix/static/lightbox/js/lightbox.js:96
msgid "close"
msgstr ""
@@ -210,46 +377,46 @@ msgid ""
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:135
#: pretix/static/pretixbase/js/asynctask.js:192
#: pretix/static/pretixbase/js/asynctask.js:196
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:138
#: pretix/static/pretixbase/js/asynctask.js:128
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:172
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:198
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:226
#: pretix/static/pretixbase/js/asynctask.js:216
msgid "We are processing your request …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:229
#: pretix/static/pretixbase/js/asynctask.js:219
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
"page and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:286
#: pretix/static/pretixbase/js/asynctask.js:276
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:341
#: pretix/static/pretixbase/js/asynctask.js:331
msgid "Close message"
msgstr ""
@@ -261,6 +428,146 @@ msgstr ""
msgid "Press Ctrl-C to copy!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:12
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:18
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
msgid "is one of"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
msgid "is before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
msgid "is after"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "="
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Product variation"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Gate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
msgid "Current date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
msgid "Number of previous entries since midnight"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
msgid "Number of previous entries since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
msgid "Number of previous entries before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
msgid "Number of days with a previous entry since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
msgid "Number of days with a previous entry before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
msgid "Minutes since last entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
msgid "Minutes since first entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:184
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
msgid "minutes"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status"
msgid "present"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status"
msgid "absent"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
msgid "Error: Product not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
msgid "Error: Variation not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
msgstr ""
@@ -395,16 +702,6 @@ msgstr ""
msgid "Count"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/subevent.js:112
msgid "(one more date)"
msgid_plural "({num} more dates)"

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-05-27 14:47+0000\n"
"POT-Creation-Date: 2026-04-28 09:04+0000\n"
"PO-Revision-Date: 2026-04-22 18:00+0000\n"
"Last-Translator: Nikolai <nikolai@lengefeldt.de>\n"
"Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -132,6 +132,7 @@ msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
#: pretix/static/pretixpresale/js/ui/cart.js:89
#, fuzzy
#| msgctxt "widget"
@@ -188,6 +189,177 @@ msgstr "Total"
msgid "Contacting your bank …"
msgstr "Kontakter din bank …"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr "Vælg en check-in liste"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr "Der blev ikke fundet nogen aktive check-in lister."
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr "Skift check-in liste"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
msgstr "Søgeresultater"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
msgid "No tickets found"
msgstr "Ingen billetter fundet"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
msgid "Result"
msgstr "Resultat"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
msgid "This ticket requires special attention"
msgstr "Denne billet kræver særlig opmærksomhed"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
msgid "Switch direction"
msgstr "Skift retning"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
msgid "Entry"
msgstr "Indgang"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit"
msgstr "Udgang"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…"
msgstr "Scan en billet eller søg og tryk på retur…"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more"
msgstr "Hent flere"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
msgid "Valid"
msgstr "Gyldig"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
msgid "Unpaid"
msgstr "Ubetalt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
msgid "Canceled"
msgstr "Annulleret"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Confirmed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Approval pending"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
#, fuzzy
#| msgctxt "widget"
#| msgid "Redeem"
msgid "Redeemed"
msgstr "Indløs"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
msgid "Cancel"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
msgid "Ticket not paid"
msgstr "Billet ikke betalt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "This ticket is not yet paid. Do you want to continue anyways?"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53
msgid "Additional information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
msgid "Valid ticket"
msgstr "Gyldig billet"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
msgid "Exit recorded"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used"
msgstr "Billet allerede i brug"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required"
msgstr "Kræver information"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
msgid "Unknown ticket"
msgstr "Ukendt billet"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
msgstr "Billettype er ikke tilladt her"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
msgid "Entry not allowed"
msgstr "Adgang ikke tilladt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
msgid "Ticket code revoked/changed"
msgstr "Billetkode trukket tilbage/ændret"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
msgid "Ticket blocked"
msgstr "Billet blokeret"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
msgid "Ticket not valid at this time"
msgstr "Billetten er ikke gyldig på dette tidspunkt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
msgid "Order canceled"
msgstr "Bestilling annulleret"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
msgid "Ticket code is ambiguous on list"
msgstr "Billetkoden er flertydig på listen"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67
msgid "Order not approved"
msgstr "Bestilling ikke godkendt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
#, fuzzy
#| msgid "Check-in QR"
msgid "Checked-in Tickets"
msgstr "Check-in QR"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets"
msgstr "Gyldige billetter"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
msgid "Currently inside"
msgstr "Inde i øjeblikket"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr "Ja"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr "Nej"
#: pretix/static/lightbox/js/lightbox.js:96
#, fuzzy
#| msgctxt "widget"
@@ -233,14 +405,14 @@ msgstr ""
"Din forespørgsel er under behandling. Hvis der går mere end to minutter, så "
"kontakt os eller gå tilbage og prøv igen."
#: pretix/static/pretixbase/js/asynctask.js:135
#: pretix/static/pretixbase/js/asynctask.js:192
#: pretix/static/pretixbase/js/asynctask.js:196
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Der er sket en fejl ({code})."
#: pretix/static/pretixbase/js/asynctask.js:138
#: pretix/static/pretixbase/js/asynctask.js:128
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -248,12 +420,12 @@ msgstr ""
"Vi kan ikke komme i kontakt med serveren, men prøver igen. Seneste fejlkode: "
"{code}"
#: pretix/static/pretixbase/js/asynctask.js:172
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "Forespørgslen tog for lang tid. Prøv igen."
#: pretix/static/pretixbase/js/asynctask.js:198
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -261,11 +433,11 @@ msgstr ""
"Vi kan i øjeblikket ikke komme i kontakt med serveren. Prøv igen. Fejlkode: "
"{code}"
#: pretix/static/pretixbase/js/asynctask.js:226
#: pretix/static/pretixbase/js/asynctask.js:216
msgid "We are processing your request …"
msgstr "Vi behandler din bestilling …"
#: pretix/static/pretixbase/js/asynctask.js:229
#: pretix/static/pretixbase/js/asynctask.js:219
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
@@ -274,11 +446,11 @@ msgstr ""
"Din forespørgsel bliver sendt til serveren. Hvis det tager mere end et "
"minut, så tjek din internetforbindelse, genindlæs siden og prøv igen."
#: pretix/static/pretixbase/js/asynctask.js:286
#: pretix/static/pretixbase/js/asynctask.js:276
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:341
#: pretix/static/pretixbase/js/asynctask.js:331
msgid "Close message"
msgstr "Luk besked"
@@ -290,6 +462,154 @@ msgstr "Kopieret!"
msgid "Press Ctrl-C to copy!"
msgstr "Tryk Ctrl-C eller ⌘-C for at kopiere!"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:12
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:18
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
msgid "is one of"
msgstr "er en af"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
msgid "is before"
msgstr "er før"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
msgid "is after"
msgstr "er efter"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "="
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product"
msgstr "Produkt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Product variation"
msgstr "Produktvariation"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Gate"
msgstr "Indgang"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
msgid "Current date and time"
msgstr "Aktuel dato og klokkeslæt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr "Aktuel ugedag (1 = mandag, 7 = søndag)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries"
msgstr "Antal tidligere poster"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
msgid "Number of previous entries since midnight"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
#, fuzzy
#| msgid "Number of previous entries"
msgid "Number of previous entries since"
msgstr "Antal tidligere poster"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
#, fuzzy
#| msgid "Number of previous entries"
msgid "Number of previous entries before"
msgstr "Antal tidligere poster"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
#, fuzzy
#| msgid "Number of previous entries"
msgid "Number of days with a previous entry since"
msgstr "Antal tidligere poster"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
#, fuzzy
#| msgid "Number of previous entries"
msgid "Number of days with a previous entry before"
msgstr "Antal tidligere poster"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
msgid "Minutes since last entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
msgid "Minutes since first entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:184
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
msgid "Event admission"
msgstr "Adgang til arrangementet"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
msgid "minutes"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status"
msgid "present"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status"
msgid "absent"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
msgid "Error: Product not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
msgid "Error: Variation not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
msgstr "Check-in QR"
@@ -435,16 +755,6 @@ msgstr "Andre"
msgid "Count"
msgstr "Antal"
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr "Ja"
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr "Nej"
#: pretix/static/pretixcontrol/js/ui/subevent.js:112
msgid "(one more date)"
msgid_plural "({num} more dates)"
@@ -961,157 +1271,6 @@ msgstr "November"
msgid "December"
msgstr "December"
#~ msgid "Select a check-in list"
#~ msgstr "Vælg en check-in liste"
#~ msgid "No active check-in lists found."
#~ msgstr "Der blev ikke fundet nogen aktive check-in lister."
#~ msgid "Switch check-in list"
#~ msgstr "Skift check-in liste"
#~ msgid "Search results"
#~ msgstr "Søgeresultater"
#~ msgid "No tickets found"
#~ msgstr "Ingen billetter fundet"
#~ msgid "Result"
#~ msgstr "Resultat"
#~ msgid "This ticket requires special attention"
#~ msgstr "Denne billet kræver særlig opmærksomhed"
#~ msgid "Switch direction"
#~ msgstr "Skift retning"
#~ msgid "Entry"
#~ msgstr "Indgang"
#~ msgid "Exit"
#~ msgstr "Udgang"
#~ msgid "Scan a ticket or search and press return…"
#~ msgstr "Scan en billet eller søg og tryk på retur…"
#~ msgid "Load more"
#~ msgstr "Hent flere"
#~ msgid "Valid"
#~ msgstr "Gyldig"
#~ msgid "Unpaid"
#~ msgstr "Ubetalt"
#~ msgid "Canceled"
#~ msgstr "Annulleret"
#, fuzzy
#~| msgctxt "widget"
#~| msgid "Redeem"
#~ msgid "Redeemed"
#~ msgstr "Indløs"
#~ msgid "Ticket not paid"
#~ msgstr "Billet ikke betalt"
#~ msgid "Valid ticket"
#~ msgstr "Gyldig billet"
#~ msgid "Ticket already used"
#~ msgstr "Billet allerede i brug"
#~ msgid "Information required"
#~ msgstr "Kræver information"
#~ msgid "Unknown ticket"
#~ msgstr "Ukendt billet"
#~ msgid "Ticket type not allowed here"
#~ msgstr "Billettype er ikke tilladt her"
#~ msgid "Entry not allowed"
#~ msgstr "Adgang ikke tilladt"
#~ msgid "Ticket code revoked/changed"
#~ msgstr "Billetkode trukket tilbage/ændret"
#~ msgid "Ticket blocked"
#~ msgstr "Billet blokeret"
#~ msgid "Ticket not valid at this time"
#~ msgstr "Billetten er ikke gyldig på dette tidspunkt"
#~ msgid "Order canceled"
#~ msgstr "Bestilling annulleret"
#~ msgid "Ticket code is ambiguous on list"
#~ msgstr "Billetkoden er flertydig på listen"
#~ msgid "Order not approved"
#~ msgstr "Bestilling ikke godkendt"
#, fuzzy
#~| msgid "Check-in QR"
#~ msgid "Checked-in Tickets"
#~ msgstr "Check-in QR"
#~ msgid "Valid Tickets"
#~ msgstr "Gyldige billetter"
#~ msgid "Currently inside"
#~ msgstr "Inde i øjeblikket"
#~ msgid "is one of"
#~ msgstr "er en af"
#~ msgid "is before"
#~ msgstr "er før"
#~ msgid "is after"
#~ msgstr "er efter"
#~ msgid "Product"
#~ msgstr "Produkt"
#~ msgid "Product variation"
#~ msgstr "Produktvariation"
#~ msgid "Gate"
#~ msgstr "Indgang"
#~ msgid "Current date and time"
#~ msgstr "Aktuel dato og klokkeslæt"
#~ msgid "Current day of the week (1 = Monday, 7 = Sunday)"
#~ msgstr "Aktuel ugedag (1 = mandag, 7 = søndag)"
#~ msgid "Number of previous entries"
#~ msgstr "Antal tidligere poster"
#, fuzzy
#~| msgid "Number of previous entries"
#~ msgid "Number of previous entries since"
#~ msgstr "Antal tidligere poster"
#, fuzzy
#~| msgid "Number of previous entries"
#~ msgid "Number of previous entries before"
#~ msgstr "Antal tidligere poster"
#, fuzzy
#~| msgid "Number of previous entries"
#~ msgid "Number of days with a previous entry since"
#~ msgstr "Antal tidligere poster"
#, fuzzy
#~| msgid "Number of previous entries"
#~ msgid "Number of days with a previous entry before"
#~ msgstr "Antal tidligere poster"
#~ msgid "Event admission"
#~ msgstr "Adgang til arrangementet"
#~ msgid "iDEAL"
#~ msgstr "iDEAL"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-05-27 14:47+0000\n"
"POT-Creation-Date: 2026-04-28 09:04+0000\n"
"PO-Revision-Date: 2026-03-17 14:27+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -131,6 +131,7 @@ msgid "Mercado Pago"
msgstr "Mercado Pago"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
#: pretix/static/pretixpresale/js/ui/cart.js:89
msgid "Continue"
msgstr "Fortfahren"
@@ -184,6 +185,172 @@ msgstr "Gesamt"
msgid "Contacting your bank …"
msgstr "Kontaktiere Ihre Bank …"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr "Wählen Sie eine Check-In Liste"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr "Keine aktive Check-In Liste gefunden."
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr "Check-In Liste wechseln"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
msgstr "Suchergebnisse"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
msgid "No tickets found"
msgstr "Keine Tickets gefunden"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
msgid "Result"
msgstr "Ergebnis"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
msgid "This ticket requires special attention"
msgstr "Dieses Ticket benötigt besondere Aufmerksamkeit"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
msgid "Switch direction"
msgstr "Richtung wechseln"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
msgid "Entry"
msgstr "Eingang"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit"
msgstr "Ausgang"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…"
msgstr "Ticket scannen oder suchen und mit Enter bestätigen…"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more"
msgstr "Mehr laden"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
msgid "Valid"
msgstr "Gültig"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
msgid "Unpaid"
msgstr "Unbezahlt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
msgid "Canceled"
msgstr "storniert"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Confirmed"
msgstr "bestätigt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Approval pending"
msgstr "Freigabe ausstehend"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Redeemed"
msgstr "Eingelöst"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
msgid "Cancel"
msgstr "Abbrechen"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
msgid "Ticket not paid"
msgstr "Ticket nicht bezahlt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "This ticket is not yet paid. Do you want to continue anyways?"
msgstr "Dieses Ticket ist noch nicht bezahlt. Möchten Sie dennoch fortfahren?"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53
msgid "Additional information required"
msgstr "Zusätzliche Informationen benötigt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
msgid "Valid ticket"
msgstr "Gültiges Ticket"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
msgid "Exit recorded"
msgstr "Ausgang gespeichert"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used"
msgstr "Ticket bereits eingelöst"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required"
msgstr "Infos benötigt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
msgid "Unknown ticket"
msgstr "Unbekanntes Ticket"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
msgstr "Ticketart hier nicht erlaubt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
msgid "Entry not allowed"
msgstr "Eingang nicht erlaubt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
msgid "Ticket code revoked/changed"
msgstr "Ticket-Code gesperrt/geändert"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
msgid "Ticket blocked"
msgstr "Ticket gesperrt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
msgid "Ticket not valid at this time"
msgstr "Ticket aktuell nicht gültig"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
msgid "Order canceled"
msgstr "Bestellung storniert"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
msgid "Ticket code is ambiguous on list"
msgstr "Ticket-Code ist nicht eindeutig auf der Liste"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67
msgid "Order not approved"
msgstr "Bestellung nicht freigegeben"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
msgid "Checked-in Tickets"
msgstr "Eingecheckte Tickets"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets"
msgstr "Gültige Tickets"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
msgid "Currently inside"
msgstr "Derzeit anwesend"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr "Ja"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr "Nein"
#: pretix/static/lightbox/js/lightbox.js:96
msgid "close"
msgstr "schließen"
@@ -218,14 +385,14 @@ msgstr ""
"bitte oder gehen Sie in Ihrem Browser einen Schritt zurück und versuchen es "
"erneut."
#: pretix/static/pretixbase/js/asynctask.js:135
#: pretix/static/pretixbase/js/asynctask.js:192
#: pretix/static/pretixbase/js/asynctask.js:196
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Ein Fehler ist aufgetreten. Fehlercode: {code}"
#: pretix/static/pretixbase/js/asynctask.js:138
#: pretix/static/pretixbase/js/asynctask.js:128
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -233,12 +400,12 @@ msgstr ""
"Wir können den Server aktuell nicht erreichen, versuchen es aber weiter. "
"Letzter Fehlercode: {code}"
#: pretix/static/pretixbase/js/asynctask.js:172
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "Diese Anfrage hat zu lange gedauert. Bitte erneut versuchen."
#: pretix/static/pretixbase/js/asynctask.js:198
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -246,11 +413,11 @@ msgstr ""
"Wir können den Server aktuell nicht erreichen. Bitte versuchen Sie es noch "
"einmal. Fehlercode: {code}"
#: pretix/static/pretixbase/js/asynctask.js:226
#: pretix/static/pretixbase/js/asynctask.js:216
msgid "We are processing your request …"
msgstr "Wir verarbeiten Ihre Anfrage …"
#: pretix/static/pretixbase/js/asynctask.js:229
#: pretix/static/pretixbase/js/asynctask.js:219
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
@@ -260,11 +427,11 @@ msgstr ""
"dauert, prüfen Sie bitte Ihre Internetverbindung. Danach können Sie diese "
"Seite neu laden und es erneut versuchen."
#: pretix/static/pretixbase/js/asynctask.js:286
#: pretix/static/pretixbase/js/asynctask.js:276
msgid "If this takes longer than a few minutes, please contact us."
msgstr "Wenn dies länger als einige Minuten dauert, kontaktiere uns bitte."
#: pretix/static/pretixbase/js/asynctask.js:341
#: pretix/static/pretixbase/js/asynctask.js:331
msgid "Close message"
msgstr "Schließen"
@@ -276,6 +443,146 @@ msgstr "Kopiert!"
msgid "Press Ctrl-C to copy!"
msgstr "Drücken Sie Strg+C zum Kopieren!"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:12
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:18
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
msgid "is one of"
msgstr "ist eines von"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
msgid "is before"
msgstr "ist vor"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
msgid "is after"
msgstr "ist nach"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "="
msgstr "="
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product"
msgstr "Produkt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Product variation"
msgstr "Variante"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Gate"
msgstr "Station"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
msgid "Current date and time"
msgstr "Aktueller Zeitpunkt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr "Aktueller Tag der Woche (1 = Montag, 7 = Sonntag)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status"
msgstr "Aktueller Zutrittsstatus"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries"
msgstr "Anzahl bisheriger Eintritte"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
msgid "Number of previous entries since midnight"
msgstr "Anzahl bisheriger Eintritte seit Mitternacht"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
msgid "Number of previous entries since"
msgstr "Anzahl bisheriger Eintritte seit"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
msgid "Number of previous entries before"
msgstr "Anzahl bisheriger Eintritte vor"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry"
msgstr "Anzahl an Tagen mit vorherigem Eintritt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
msgid "Number of days with a previous entry since"
msgstr "Anzahl an Tagen mit vorherigem Eintritt seit"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
msgid "Number of days with a previous entry before"
msgstr "Anzahl an Tagen mit vorherigem Eintritt vor"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
msgid "Minutes since last entry (-1 on first entry)"
msgstr "Minuten seit vorherigem Eintritt (-1 bei erstem Zutritt)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
msgid "Minutes since first entry (-1 on first entry)"
msgstr "Minuten seit erstem Eintritt (-1 bei erstem Zutritt)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)"
msgstr "Alle der folgenden Bedingungen (UND)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
msgid "At least one of the conditions below (OR)"
msgstr "Mindestens eine der folgenden Bedingungen (ODER)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:184
msgid "Event start"
msgstr "Veranstaltungsbeginn"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
msgid "Event end"
msgstr "Veranstaltungsende"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
msgid "Event admission"
msgstr "Einlass"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
msgid "custom date and time"
msgstr "Fester Zeitpunkt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
msgid "custom time"
msgstr "Feste Uhrzeit"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
msgid "Tolerance (minutes)"
msgstr "Toleranz (Minuten)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
msgid "Add condition"
msgstr "Bedingung hinzufügen"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
msgid "minutes"
msgstr "Minuten"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate"
msgstr "Duplizieren"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status"
msgid "present"
msgstr "anwesend"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status"
msgid "absent"
msgstr "abwesend"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
msgid "Error: Product not found!"
msgstr "Fehler: Produkt nicht gefunden!"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
msgid "Error: Variation not found!"
msgstr "Fehler: Variante nicht gefunden!"
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
msgstr "Check-in-QR-Code"
@@ -417,16 +724,6 @@ msgstr "Sonstige"
msgid "Count"
msgstr "Anzahl"
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr "Ja"
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr "Nein"
#: pretix/static/pretixcontrol/js/ui/subevent.js:112
msgid "(one more date)"
msgid_plural "({num} more dates)"
@@ -918,225 +1215,6 @@ msgstr "November"
msgid "December"
msgstr "Dezember"
#~ msgid "Select a check-in list"
#~ msgstr "Wählen Sie eine Check-In Liste"
#~ msgid "No active check-in lists found."
#~ msgstr "Keine aktive Check-In Liste gefunden."
#~ msgid "Switch check-in list"
#~ msgstr "Check-In Liste wechseln"
#~ msgid "Search results"
#~ msgstr "Suchergebnisse"
#~ msgid "No tickets found"
#~ msgstr "Keine Tickets gefunden"
#~ msgid "Result"
#~ msgstr "Ergebnis"
#~ msgid "This ticket requires special attention"
#~ msgstr "Dieses Ticket benötigt besondere Aufmerksamkeit"
#~ msgid "Switch direction"
#~ msgstr "Richtung wechseln"
#~ msgid "Entry"
#~ msgstr "Eingang"
#~ msgid "Exit"
#~ msgstr "Ausgang"
#~ msgid "Scan a ticket or search and press return…"
#~ msgstr "Ticket scannen oder suchen und mit Enter bestätigen…"
#~ msgid "Load more"
#~ msgstr "Mehr laden"
#~ msgid "Valid"
#~ msgstr "Gültig"
#~ msgid "Unpaid"
#~ msgstr "Unbezahlt"
#~ msgid "Canceled"
#~ msgstr "storniert"
#~ msgid "Confirmed"
#~ msgstr "bestätigt"
#~ msgid "Approval pending"
#~ msgstr "Freigabe ausstehend"
#~ msgid "Redeemed"
#~ msgstr "Eingelöst"
#~ msgid "Cancel"
#~ msgstr "Abbrechen"
#~ msgid "Ticket not paid"
#~ msgstr "Ticket nicht bezahlt"
#~ msgid "This ticket is not yet paid. Do you want to continue anyways?"
#~ msgstr ""
#~ "Dieses Ticket ist noch nicht bezahlt. Möchten Sie dennoch fortfahren?"
#~ msgid "Additional information required"
#~ msgstr "Zusätzliche Informationen benötigt"
#~ msgid "Valid ticket"
#~ msgstr "Gültiges Ticket"
#~ msgid "Exit recorded"
#~ msgstr "Ausgang gespeichert"
#~ msgid "Ticket already used"
#~ msgstr "Ticket bereits eingelöst"
#~ msgid "Information required"
#~ msgstr "Infos benötigt"
#~ msgid "Unknown ticket"
#~ msgstr "Unbekanntes Ticket"
#~ msgid "Ticket type not allowed here"
#~ msgstr "Ticketart hier nicht erlaubt"
#~ msgid "Entry not allowed"
#~ msgstr "Eingang nicht erlaubt"
#~ msgid "Ticket code revoked/changed"
#~ msgstr "Ticket-Code gesperrt/geändert"
#~ msgid "Ticket blocked"
#~ msgstr "Ticket gesperrt"
#~ msgid "Ticket not valid at this time"
#~ msgstr "Ticket aktuell nicht gültig"
#~ msgid "Order canceled"
#~ msgstr "Bestellung storniert"
#~ msgid "Ticket code is ambiguous on list"
#~ msgstr "Ticket-Code ist nicht eindeutig auf der Liste"
#~ msgid "Order not approved"
#~ msgstr "Bestellung nicht freigegeben"
#~ msgid "Checked-in Tickets"
#~ msgstr "Eingecheckte Tickets"
#~ msgid "Valid Tickets"
#~ msgstr "Gültige Tickets"
#~ msgid "Currently inside"
#~ msgstr "Derzeit anwesend"
#~ msgid "is one of"
#~ msgstr "ist eines von"
#~ msgid "is before"
#~ msgstr "ist vor"
#~ msgid "is after"
#~ msgstr "ist nach"
#~ msgid "="
#~ msgstr "="
#~ msgid "Product"
#~ msgstr "Produkt"
#~ msgid "Product variation"
#~ msgstr "Variante"
#~ msgid "Gate"
#~ msgstr "Station"
#~ msgid "Current date and time"
#~ msgstr "Aktueller Zeitpunkt"
#~ msgid "Current day of the week (1 = Monday, 7 = Sunday)"
#~ msgstr "Aktueller Tag der Woche (1 = Montag, 7 = Sonntag)"
#~ msgid "Current entry status"
#~ msgstr "Aktueller Zutrittsstatus"
#~ msgid "Number of previous entries"
#~ msgstr "Anzahl bisheriger Eintritte"
#~ msgid "Number of previous entries since midnight"
#~ msgstr "Anzahl bisheriger Eintritte seit Mitternacht"
#~ msgid "Number of previous entries since"
#~ msgstr "Anzahl bisheriger Eintritte seit"
#~ msgid "Number of previous entries before"
#~ msgstr "Anzahl bisheriger Eintritte vor"
#~ msgid "Number of days with a previous entry"
#~ msgstr "Anzahl an Tagen mit vorherigem Eintritt"
#~ msgid "Number of days with a previous entry since"
#~ msgstr "Anzahl an Tagen mit vorherigem Eintritt seit"
#~ msgid "Number of days with a previous entry before"
#~ msgstr "Anzahl an Tagen mit vorherigem Eintritt vor"
#~ msgid "Minutes since last entry (-1 on first entry)"
#~ msgstr "Minuten seit vorherigem Eintritt (-1 bei erstem Zutritt)"
#~ msgid "Minutes since first entry (-1 on first entry)"
#~ msgstr "Minuten seit erstem Eintritt (-1 bei erstem Zutritt)"
#~ msgid "All of the conditions below (AND)"
#~ msgstr "Alle der folgenden Bedingungen (UND)"
#~ msgid "At least one of the conditions below (OR)"
#~ msgstr "Mindestens eine der folgenden Bedingungen (ODER)"
#~ msgid "Event start"
#~ msgstr "Veranstaltungsbeginn"
#~ msgid "Event end"
#~ msgstr "Veranstaltungsende"
#~ msgid "Event admission"
#~ msgstr "Einlass"
#~ msgid "custom date and time"
#~ msgstr "Fester Zeitpunkt"
#~ msgid "custom time"
#~ msgstr "Feste Uhrzeit"
#~ msgid "Tolerance (minutes)"
#~ msgstr "Toleranz (Minuten)"
#~ msgid "Add condition"
#~ msgstr "Bedingung hinzufügen"
#~ msgid "minutes"
#~ msgstr "Minuten"
#~ msgid "Duplicate"
#~ msgstr "Duplizieren"
#~ msgctxt "entry_status"
#~ msgid "present"
#~ msgstr "anwesend"
#~ msgctxt "entry_status"
#~ msgid "absent"
#~ msgstr "abwesend"
#~ msgid "Error: Product not found!"
#~ msgstr "Fehler: Produkt nicht gefunden!"
#~ msgid "Error: Variation not found!"
#~ msgstr "Fehler: Variante nicht gefunden!"
#~ msgid "iDEAL"
#~ msgstr "iDEAL"

File diff suppressed because it is too large Load Diff

View File

@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-05-27 14:47+0000\n"
"PO-Revision-Date: 2026-05-04 07:42+0000\n"
"Last-Translator: Martin Gross <gross@rami.io>\n"
"POT-Creation-Date: 2026-04-28 09:04+0000\n"
"PO-Revision-Date: 2026-03-17 14:30+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
"pretix/pretix-js/de_Informal/>\n"
"Language: de_Informal\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.17\n"
"X-Generator: Weblate 5.16.2\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -131,6 +131,7 @@ msgid "Mercado Pago"
msgstr "Mercado Pago"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
#: pretix/static/pretixpresale/js/ui/cart.js:89
msgid "Continue"
msgstr "Fortfahren"
@@ -184,6 +185,172 @@ msgstr "Gesamt"
msgid "Contacting your bank …"
msgstr "Kontaktiere deine Bank …"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr "Wähle eine Check-In Liste"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr "Keine aktive Check-In Liste gefunden."
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr "Check-In Liste wechseln"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
msgstr "Suchergebnisse"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
msgid "No tickets found"
msgstr "Keine Tickets gefunden"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
msgid "Result"
msgstr "Ergebnis"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
msgid "This ticket requires special attention"
msgstr "Dieses Ticket benötigt besondere Aufmerksamkeit"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
msgid "Switch direction"
msgstr "Richtung wechseln"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
msgid "Entry"
msgstr "Eingang"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit"
msgstr "Ausgang"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…"
msgstr "Ticket scannen oder suchen und mit Enter bestätigen…"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more"
msgstr "Mehr laden"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
msgid "Valid"
msgstr "Gültig"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
msgid "Unpaid"
msgstr "Unbezahlt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
msgid "Canceled"
msgstr "storniert"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Confirmed"
msgstr "Bestätigt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Approval pending"
msgstr "Freigabe ausstehend"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Redeemed"
msgstr "Eingelöst"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
msgid "Cancel"
msgstr "Abbrechen"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
msgid "Ticket not paid"
msgstr "Ticket nicht bezahlt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "This ticket is not yet paid. Do you want to continue anyways?"
msgstr "Dieses Ticket ist noch nicht bezahlt. Möchtest du dennoch fortfahren?"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53
msgid "Additional information required"
msgstr "Zusätzliche Informationen benötigt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
msgid "Valid ticket"
msgstr "Gültiges Ticket"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
msgid "Exit recorded"
msgstr "Ausgang gespeichert"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used"
msgstr "Ticket bereits eingelöst"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required"
msgstr "Infos benötigt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
msgid "Unknown ticket"
msgstr "Unbekanntes Ticket"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
msgstr "Ticketart hier nicht erlaubt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
msgid "Entry not allowed"
msgstr "Eingang nicht erlaubt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
msgid "Ticket code revoked/changed"
msgstr "Ticket-Code gesperrt/geändert"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
msgid "Ticket blocked"
msgstr "Ticket gesperrt"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
msgid "Ticket not valid at this time"
msgstr "Ticket aktuell nicht gültig"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
msgid "Order canceled"
msgstr "Bestellung storniert"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
msgid "Ticket code is ambiguous on list"
msgstr "Ticket-Code ist nicht eindeutig auf der Liste"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67
msgid "Order not approved"
msgstr "Bestellung nicht freigegeben"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
msgid "Checked-in Tickets"
msgstr "Eingecheckte Tickets"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets"
msgstr "Gültige Tickets"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
msgid "Currently inside"
msgstr "Derzeit anwesend"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr "Ja"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr "Nein"
#: pretix/static/lightbox/js/lightbox.js:96
msgid "close"
msgstr "schließen"
@@ -217,14 +384,14 @@ msgstr ""
"verarbeitet. Wenn dies länger als zwei Minuten dauert, kontaktiere uns bitte "
"oder gehe in deinem Browser einen Schritt zurück und versuche es erneut."
#: pretix/static/pretixbase/js/asynctask.js:135
#: pretix/static/pretixbase/js/asynctask.js:192
#: pretix/static/pretixbase/js/asynctask.js:196
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Ein Fehler vom Typ {code} ist aufgetreten."
#: pretix/static/pretixbase/js/asynctask.js:138
#: pretix/static/pretixbase/js/asynctask.js:128
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -232,12 +399,12 @@ msgstr ""
"Wir können den Server aktuell nicht erreichen, versuchen es aber weiter. "
"Letzter Fehlercode: {code}"
#: pretix/static/pretixbase/js/asynctask.js:172
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "Diese Anfrage hat zu lange gedauert. Bitte erneut versuchen."
#: pretix/static/pretixbase/js/asynctask.js:198
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -245,11 +412,11 @@ msgstr ""
"Wir können den Server aktuell nicht erreichen. Bitte versuche es noch "
"einmal. Fehlercode: {code}"
#: pretix/static/pretixbase/js/asynctask.js:226
#: pretix/static/pretixbase/js/asynctask.js:216
msgid "We are processing your request …"
msgstr "Wir verarbeiten deine Anfrage …"
#: pretix/static/pretixbase/js/asynctask.js:229
#: pretix/static/pretixbase/js/asynctask.js:219
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
@@ -259,11 +426,12 @@ msgstr ""
"dauert, prüfe bitte deine Internetverbindung. Danach kannst du diese Seite "
"neu laden und es erneut versuchen."
#: pretix/static/pretixbase/js/asynctask.js:286
#: pretix/static/pretixbase/js/asynctask.js:276
msgid "If this takes longer than a few minutes, please contact us."
msgstr "Wenn dies länger als einige Minuten dauert, kontaktiere uns bitte."
msgstr ""
"Wenn dies länger als einige Minuten dauert, kontaktieren Sie uns bitte."
#: pretix/static/pretixbase/js/asynctask.js:341
#: pretix/static/pretixbase/js/asynctask.js:331
msgid "Close message"
msgstr "Schließen"
@@ -275,6 +443,146 @@ msgstr "Kopiert!"
msgid "Press Ctrl-C to copy!"
msgstr "Drücke Strg+C zum kopieren!"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:12
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:18
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
msgid "is one of"
msgstr "ist eines von"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
msgid "is before"
msgstr "ist vor"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
msgid "is after"
msgstr "ist nach"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "="
msgstr "="
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product"
msgstr "Produkt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Product variation"
msgstr "Variante"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Gate"
msgstr "Station"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
msgid "Current date and time"
msgstr "Aktueller Zeitpunkt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr "Aktueller Wochentag (1 = Montag, 7 = Sonntag)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status"
msgstr "Aktueller Zutrittsstatus"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries"
msgstr "Anzahl bisheriger Eintritte"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
msgid "Number of previous entries since midnight"
msgstr "Anzahl bisheriger Eintritte seit Mitternacht"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
msgid "Number of previous entries since"
msgstr "Anzahl bisheriger Eintritte seit"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
msgid "Number of previous entries before"
msgstr "Anzahl bisheriger Eintritte vor"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry"
msgstr "Anzahl an Tagen mit vorherigem Eintritt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
msgid "Number of days with a previous entry since"
msgstr "Anzahl an Tagen mit vorherigem Eintritt seit"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
msgid "Number of days with a previous entry before"
msgstr "Anzahl an Tagen mit vorherigem Eintritt vor"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
msgid "Minutes since last entry (-1 on first entry)"
msgstr "Minuten seit vorherigem Zutritt (-1 beim erstem Zutritt)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
msgid "Minutes since first entry (-1 on first entry)"
msgstr "Minuten seit erstem Zutritt (-1 bei erstem Zutritt)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)"
msgstr "Alle der folgenden Bedingungen (UND)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
msgid "At least one of the conditions below (OR)"
msgstr "Mindestens eine der folgenden Bedingungen (ODER)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:184
msgid "Event start"
msgstr "Veranstaltungsbeginn"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
msgid "Event end"
msgstr "Veranstaltungsende"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
msgid "Event admission"
msgstr "Einlass"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
msgid "custom date and time"
msgstr "Fester Zeitpunkt"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
msgid "custom time"
msgstr "Feste Uhrzeit"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
msgid "Tolerance (minutes)"
msgstr "Toleranz (Minuten)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
msgid "Add condition"
msgstr "Bedingung hinzufügen"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
msgid "minutes"
msgstr "Minuten"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate"
msgstr "Duplizieren"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status"
msgid "present"
msgstr "anwesend"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status"
msgid "absent"
msgstr "abwesend"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
msgid "Error: Product not found!"
msgstr "Fehler: Produkt nicht gefunden!"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
msgid "Error: Variation not found!"
msgstr "Fehler: Variante nicht gefunden!"
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
msgstr "Check-in-QR-Code"
@@ -416,16 +724,6 @@ msgstr "Sonstige"
msgid "Count"
msgstr "Anzahl"
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr "Ja"
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr "Nein"
#: pretix/static/pretixcontrol/js/ui/subevent.js:112
msgid "(one more date)"
msgid_plural "({num} more dates)"
@@ -917,225 +1215,6 @@ msgstr "November"
msgid "December"
msgstr "Dezember"
#~ msgid "Select a check-in list"
#~ msgstr "Wähle eine Check-In Liste"
#~ msgid "No active check-in lists found."
#~ msgstr "Keine aktive Check-In Liste gefunden."
#~ msgid "Switch check-in list"
#~ msgstr "Check-In Liste wechseln"
#~ msgid "Search results"
#~ msgstr "Suchergebnisse"
#~ msgid "No tickets found"
#~ msgstr "Keine Tickets gefunden"
#~ msgid "Result"
#~ msgstr "Ergebnis"
#~ msgid "This ticket requires special attention"
#~ msgstr "Dieses Ticket benötigt besondere Aufmerksamkeit"
#~ msgid "Switch direction"
#~ msgstr "Richtung wechseln"
#~ msgid "Entry"
#~ msgstr "Eingang"
#~ msgid "Exit"
#~ msgstr "Ausgang"
#~ msgid "Scan a ticket or search and press return…"
#~ msgstr "Ticket scannen oder suchen und mit Enter bestätigen…"
#~ msgid "Load more"
#~ msgstr "Mehr laden"
#~ msgid "Valid"
#~ msgstr "Gültig"
#~ msgid "Unpaid"
#~ msgstr "Unbezahlt"
#~ msgid "Canceled"
#~ msgstr "storniert"
#~ msgid "Confirmed"
#~ msgstr "Bestätigt"
#~ msgid "Approval pending"
#~ msgstr "Freigabe ausstehend"
#~ msgid "Redeemed"
#~ msgstr "Eingelöst"
#~ msgid "Cancel"
#~ msgstr "Abbrechen"
#~ msgid "Ticket not paid"
#~ msgstr "Ticket nicht bezahlt"
#~ msgid "This ticket is not yet paid. Do you want to continue anyways?"
#~ msgstr ""
#~ "Dieses Ticket ist noch nicht bezahlt. Möchtest du dennoch fortfahren?"
#~ msgid "Additional information required"
#~ msgstr "Zusätzliche Informationen benötigt"
#~ msgid "Valid ticket"
#~ msgstr "Gültiges Ticket"
#~ msgid "Exit recorded"
#~ msgstr "Ausgang gespeichert"
#~ msgid "Ticket already used"
#~ msgstr "Ticket bereits eingelöst"
#~ msgid "Information required"
#~ msgstr "Infos benötigt"
#~ msgid "Unknown ticket"
#~ msgstr "Unbekanntes Ticket"
#~ msgid "Ticket type not allowed here"
#~ msgstr "Ticketart hier nicht erlaubt"
#~ msgid "Entry not allowed"
#~ msgstr "Eingang nicht erlaubt"
#~ msgid "Ticket code revoked/changed"
#~ msgstr "Ticket-Code gesperrt/geändert"
#~ msgid "Ticket blocked"
#~ msgstr "Ticket gesperrt"
#~ msgid "Ticket not valid at this time"
#~ msgstr "Ticket aktuell nicht gültig"
#~ msgid "Order canceled"
#~ msgstr "Bestellung storniert"
#~ msgid "Ticket code is ambiguous on list"
#~ msgstr "Ticket-Code ist nicht eindeutig auf der Liste"
#~ msgid "Order not approved"
#~ msgstr "Bestellung nicht freigegeben"
#~ msgid "Checked-in Tickets"
#~ msgstr "Eingecheckte Tickets"
#~ msgid "Valid Tickets"
#~ msgstr "Gültige Tickets"
#~ msgid "Currently inside"
#~ msgstr "Derzeit anwesend"
#~ msgid "is one of"
#~ msgstr "ist eines von"
#~ msgid "is before"
#~ msgstr "ist vor"
#~ msgid "is after"
#~ msgstr "ist nach"
#~ msgid "="
#~ msgstr "="
#~ msgid "Product"
#~ msgstr "Produkt"
#~ msgid "Product variation"
#~ msgstr "Variante"
#~ msgid "Gate"
#~ msgstr "Station"
#~ msgid "Current date and time"
#~ msgstr "Aktueller Zeitpunkt"
#~ msgid "Current day of the week (1 = Monday, 7 = Sunday)"
#~ msgstr "Aktueller Wochentag (1 = Montag, 7 = Sonntag)"
#~ msgid "Current entry status"
#~ msgstr "Aktueller Zutrittsstatus"
#~ msgid "Number of previous entries"
#~ msgstr "Anzahl bisheriger Eintritte"
#~ msgid "Number of previous entries since midnight"
#~ msgstr "Anzahl bisheriger Eintritte seit Mitternacht"
#~ msgid "Number of previous entries since"
#~ msgstr "Anzahl bisheriger Eintritte seit"
#~ msgid "Number of previous entries before"
#~ msgstr "Anzahl bisheriger Eintritte vor"
#~ msgid "Number of days with a previous entry"
#~ msgstr "Anzahl an Tagen mit vorherigem Eintritt"
#~ msgid "Number of days with a previous entry since"
#~ msgstr "Anzahl an Tagen mit vorherigem Eintritt seit"
#~ msgid "Number of days with a previous entry before"
#~ msgstr "Anzahl an Tagen mit vorherigem Eintritt vor"
#~ msgid "Minutes since last entry (-1 on first entry)"
#~ msgstr "Minuten seit vorherigem Zutritt (-1 beim erstem Zutritt)"
#~ msgid "Minutes since first entry (-1 on first entry)"
#~ msgstr "Minuten seit erstem Zutritt (-1 bei erstem Zutritt)"
#~ msgid "All of the conditions below (AND)"
#~ msgstr "Alle der folgenden Bedingungen (UND)"
#~ msgid "At least one of the conditions below (OR)"
#~ msgstr "Mindestens eine der folgenden Bedingungen (ODER)"
#~ msgid "Event start"
#~ msgstr "Veranstaltungsbeginn"
#~ msgid "Event end"
#~ msgstr "Veranstaltungsende"
#~ msgid "Event admission"
#~ msgstr "Einlass"
#~ msgid "custom date and time"
#~ msgstr "Fester Zeitpunkt"
#~ msgid "custom time"
#~ msgstr "Feste Uhrzeit"
#~ msgid "Tolerance (minutes)"
#~ msgstr "Toleranz (Minuten)"
#~ msgid "Add condition"
#~ msgstr "Bedingung hinzufügen"
#~ msgid "minutes"
#~ msgstr "Minuten"
#~ msgid "Duplicate"
#~ msgstr "Duplizieren"
#~ msgctxt "entry_status"
#~ msgid "present"
#~ msgstr "anwesend"
#~ msgctxt "entry_status"
#~ msgid "absent"
#~ msgstr "abwesend"
#~ msgid "Error: Product not found!"
#~ msgstr "Fehler: Produkt nicht gefunden!"
#~ msgid "Error: Variation not found!"
#~ msgstr "Fehler: Variante nicht gefunden!"
#~ msgid "iDEAL"
#~ msgstr "iDEAL"

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-05-27 15:49+0000\n"
"POT-Creation-Date: 2026-04-28 09:04+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -130,6 +130,7 @@ msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
#: pretix/static/pretixpresale/js/ui/cart.js:89
msgid "Continue"
msgstr ""
@@ -183,6 +184,172 @@ msgstr ""
msgid "Contacting your bank …"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
msgid "No tickets found"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
msgid "Result"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
msgid "This ticket requires special attention"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
msgid "Switch direction"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
msgid "Entry"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
msgid "Valid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
msgid "Unpaid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
msgid "Canceled"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Confirmed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Approval pending"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Redeemed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
msgid "Cancel"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
msgid "Ticket not paid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "This ticket is not yet paid. Do you want to continue anyways?"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53
msgid "Additional information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
msgid "Valid ticket"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
msgid "Exit recorded"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
msgid "Unknown ticket"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
msgid "Entry not allowed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
msgid "Ticket code revoked/changed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
msgid "Ticket blocked"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
msgid "Ticket not valid at this time"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
msgid "Order canceled"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
msgid "Ticket code is ambiguous on list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67
msgid "Order not approved"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
msgid "Checked-in Tickets"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
msgid "Currently inside"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr ""
#: pretix/static/lightbox/js/lightbox.js:96
msgid "close"
msgstr ""
@@ -209,46 +376,46 @@ msgid ""
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:135
#: pretix/static/pretixbase/js/asynctask.js:192
#: pretix/static/pretixbase/js/asynctask.js:196
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:138
#: pretix/static/pretixbase/js/asynctask.js:128
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:172
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:198
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:226
#: pretix/static/pretixbase/js/asynctask.js:216
msgid "We are processing your request …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:229
#: pretix/static/pretixbase/js/asynctask.js:219
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
"page and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:286
#: pretix/static/pretixbase/js/asynctask.js:276
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:341
#: pretix/static/pretixbase/js/asynctask.js:331
msgid "Close message"
msgstr ""
@@ -260,6 +427,146 @@ msgstr ""
msgid "Press Ctrl-C to copy!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:12
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:18
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
msgid "is one of"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
msgid "is before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
msgid "is after"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "="
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Product variation"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Gate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
msgid "Current date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
msgid "Number of previous entries since midnight"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
msgid "Number of previous entries since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
msgid "Number of previous entries before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
msgid "Number of days with a previous entry since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
msgid "Number of days with a previous entry before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
msgid "Minutes since last entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
msgid "Minutes since first entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:184
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
msgid "minutes"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status"
msgid "present"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status"
msgid "absent"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
msgid "Error: Product not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
msgid "Error: Variation not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
msgstr ""
@@ -394,16 +701,6 @@ msgstr ""
msgid "Count"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/subevent.js:112
msgid "(one more date)"
msgid_plural "({num} more dates)"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-05-27 14:47+0000\n"
"POT-Creation-Date: 2026-04-28 09:04+0000\n"
"PO-Revision-Date: 2024-12-22 00:00+0000\n"
"Last-Translator: Dimitris Tsimpidis <tsimpidisd@gmail.com>\n"
"Language-Team: Greek <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -131,6 +131,7 @@ msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
#: pretix/static/pretixpresale/js/ui/cart.js:89
#, fuzzy
#| msgctxt "widget"
@@ -187,6 +188,182 @@ msgstr "Σύνολο"
msgid "Contacting your bank …"
msgstr "Επικοινωνία με την τράπεζα …"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
#, fuzzy
#| msgctxt "widget"
#| msgid "Close ticket shop"
msgid "No tickets found"
msgstr "Κλείστε το κατάστημα εισιτηρίων"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
msgid "Result"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
msgid "This ticket requires special attention"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
msgid "Switch direction"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
msgid "Entry"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
msgid "Valid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
msgid "Unpaid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
msgid "Canceled"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Confirmed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Approval pending"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
#, fuzzy
#| msgctxt "widget"
#| msgid "Redeem"
msgid "Redeemed"
msgstr "Εξαργυρώστε"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
msgid "Cancel"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
msgid "Ticket not paid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "This ticket is not yet paid. Do you want to continue anyways?"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53
msgid "Additional information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
msgid "Valid ticket"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
msgid "Exit recorded"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
#, fuzzy
#| msgid "Unknown error."
msgid "Unknown ticket"
msgstr "Άγνωστο σφάλμα."
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
msgid "Entry not allowed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
msgid "Ticket code revoked/changed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
msgid "Ticket blocked"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
msgid "Ticket not valid at this time"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
msgid "Order canceled"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
msgid "Ticket code is ambiguous on list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67
msgid "Order not approved"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
#, fuzzy
#| msgid "Check-in QR"
msgid "Checked-in Tickets"
msgstr "Έλεγχος QR"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
msgid "Currently inside"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr "Ναι"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr "Όχι"
#: pretix/static/lightbox/js/lightbox.js:96
#, fuzzy
#| msgctxt "widget"
@@ -235,14 +412,14 @@ msgstr ""
"του. Αν αυτό διαρκεί περισσότερο από δύο λεπτά, επικοινωνήστε μαζί μας ή "
"επιστρέψτε στο πρόγραμμα περιήγησής σας και δοκιμάστε ξανά."
#: pretix/static/pretixbase/js/asynctask.js:135
#: pretix/static/pretixbase/js/asynctask.js:192
#: pretix/static/pretixbase/js/asynctask.js:196
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Παρουσιάστηκε σφάλμα τύπου {code}."
#: pretix/static/pretixbase/js/asynctask.js:138
#: pretix/static/pretixbase/js/asynctask.js:128
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -250,14 +427,14 @@ msgstr ""
"Αυτήν τη στιγμή δεν μπορούμε να φτάσουμε στο διακομιστή, αλλά συνεχίζουμε να "
"προσπαθούμε. Τελευταίος κωδικός σφάλματος: {code}"
#: pretix/static/pretixbase/js/asynctask.js:172
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixcontrol/js/ui/mail.js:21
#, fuzzy
#| msgid "The request took to long. Please try again."
msgid "The request took too long. Please try again."
msgstr "Το αίτημα διήρκησε πολύ. Παρακαλώ προσπαθήστε ξανά."
#: pretix/static/pretixbase/js/asynctask.js:198
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -265,11 +442,11 @@ msgstr ""
"Αυτήν τη στιγμή δεν μπορούμε να συνδεθούμε με το διακομιστή. Παρακαλώ "
"προσπαθήστε ξανά. Κωδικός σφάλματος: {code}"
#: pretix/static/pretixbase/js/asynctask.js:226
#: pretix/static/pretixbase/js/asynctask.js:216
msgid "We are processing your request …"
msgstr "Επεξεργαζόμαστε το αίτημά σας …"
#: pretix/static/pretixbase/js/asynctask.js:229
#: pretix/static/pretixbase/js/asynctask.js:219
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
@@ -279,11 +456,11 @@ msgstr ""
"περισσότερο από ένα λεπτό, ελέγξτε τη σύνδεσή σας στο διαδίκτυο και στη "
"συνέχεια επαναλάβετε τη φόρτωση αυτής της σελίδας και δοκιμάστε ξανά."
#: pretix/static/pretixbase/js/asynctask.js:286
#: pretix/static/pretixbase/js/asynctask.js:276
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:341
#: pretix/static/pretixbase/js/asynctask.js:331
msgid "Close message"
msgstr "Κλείσιμο μηνύματος"
@@ -295,6 +472,149 @@ msgstr "Αντιγράφηκε!"
msgid "Press Ctrl-C to copy!"
msgstr "Πατήστε Ctrl-C για αντιγραφή!"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:12
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:18
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
msgid "is one of"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
msgid "is before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
msgid "is after"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "="
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
#, fuzzy
#| msgctxt "widget"
#| msgid "See variations"
msgid "Product variation"
msgstr "Δείτε παραλλαγές"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Gate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
msgid "Current date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
msgid "Number of previous entries since midnight"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
msgid "Number of previous entries since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
msgid "Number of previous entries before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
msgid "Number of days with a previous entry since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
msgid "Number of days with a previous entry before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
msgid "Minutes since last entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
msgid "Minutes since first entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:184
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
msgid "minutes"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status"
msgid "present"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status"
msgid "absent"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
msgid "Error: Product not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
msgid "Error: Variation not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
msgstr "Έλεγχος QR"
@@ -445,16 +765,6 @@ msgstr "Άλλοι"
msgid "Count"
msgstr "Λογαριασμός"
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr "Ναι"
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr "Όχι"
#: pretix/static/pretixcontrol/js/ui/subevent.js:112
msgid "(one more date)"
msgid_plural "({num} more dates)"
@@ -971,34 +1281,6 @@ msgstr "Νοέμβριος"
msgid "December"
msgstr "Δεκέμβριος"
#, fuzzy
#~| msgctxt "widget"
#~| msgid "Close ticket shop"
#~ msgid "No tickets found"
#~ msgstr "Κλείστε το κατάστημα εισιτηρίων"
#, fuzzy
#~| msgctxt "widget"
#~| msgid "Redeem"
#~ msgid "Redeemed"
#~ msgstr "Εξαργυρώστε"
#, fuzzy
#~| msgid "Unknown error."
#~ msgid "Unknown ticket"
#~ msgstr "Άγνωστο σφάλμα."
#, fuzzy
#~| msgid "Check-in QR"
#~ msgid "Checked-in Tickets"
#~ msgstr "Έλεγχος QR"
#, fuzzy
#~| msgctxt "widget"
#~| msgid "See variations"
#~ msgid "Product variation"
#~ msgstr "Δείτε παραλλαγές"
#~ msgid ""
#~ "Your color has bad contrast for text on white background, please choose a "
#~ "darker shade."

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-05-27 14:47+0000\n"
"POT-Creation-Date: 2026-04-28 09:04+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -130,6 +130,7 @@ msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
#: pretix/static/pretixpresale/js/ui/cart.js:89
msgid "Continue"
msgstr ""
@@ -183,6 +184,172 @@ msgstr ""
msgid "Contacting your bank …"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
msgid "No tickets found"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
msgid "Result"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
msgid "This ticket requires special attention"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
msgid "Switch direction"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
msgid "Entry"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
msgid "Valid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
msgid "Unpaid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
msgid "Canceled"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Confirmed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Approval pending"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Redeemed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
msgid "Cancel"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
msgid "Ticket not paid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "This ticket is not yet paid. Do you want to continue anyways?"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53
msgid "Additional information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
msgid "Valid ticket"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
msgid "Exit recorded"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
msgid "Unknown ticket"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
msgid "Entry not allowed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
msgid "Ticket code revoked/changed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
msgid "Ticket blocked"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
msgid "Ticket not valid at this time"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
msgid "Order canceled"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
msgid "Ticket code is ambiguous on list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67
msgid "Order not approved"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
msgid "Checked-in Tickets"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
msgid "Currently inside"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr ""
#: pretix/static/lightbox/js/lightbox.js:96
msgid "close"
msgstr ""
@@ -209,46 +376,46 @@ msgid ""
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:135
#: pretix/static/pretixbase/js/asynctask.js:192
#: pretix/static/pretixbase/js/asynctask.js:196
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:138
#: pretix/static/pretixbase/js/asynctask.js:128
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:172
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:198
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:226
#: pretix/static/pretixbase/js/asynctask.js:216
msgid "We are processing your request …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:229
#: pretix/static/pretixbase/js/asynctask.js:219
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
"page and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:286
#: pretix/static/pretixbase/js/asynctask.js:276
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:341
#: pretix/static/pretixbase/js/asynctask.js:331
msgid "Close message"
msgstr ""
@@ -260,6 +427,146 @@ msgstr ""
msgid "Press Ctrl-C to copy!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:12
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:18
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
msgid "is one of"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
msgid "is before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
msgid "is after"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "="
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Product variation"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Gate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
msgid "Current date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
msgid "Number of previous entries since midnight"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
msgid "Number of previous entries since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
msgid "Number of previous entries before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
msgid "Number of days with a previous entry since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
msgid "Number of days with a previous entry before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
msgid "Minutes since last entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
msgid "Minutes since first entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:184
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
msgid "minutes"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status"
msgid "present"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status"
msgid "absent"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
msgid "Error: Product not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
msgid "Error: Variation not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
msgstr ""
@@ -394,16 +701,6 @@ msgstr ""
msgid "Count"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/subevent.js:112
msgid "(one more date)"
msgid_plural "({num} more dates)"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-05-27 14:47+0000\n"
"POT-Creation-Date: 2026-04-28 09:04+0000\n"
"PO-Revision-Date: 2026-03-30 03:00+0000\n"
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -131,6 +131,7 @@ msgid "Mercado Pago"
msgstr "Mercado Pago"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
#: pretix/static/pretixpresale/js/ui/cart.js:89
msgid "Continue"
msgstr "Continuar"
@@ -184,6 +185,172 @@ msgstr "Total"
msgid "Contacting your bank …"
msgstr "Contactando con el banco…"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr "Seleccione una lista de registro"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr "No se encontraron listas de registro activas."
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr "Cambiar lista de registro"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
msgstr "Resultados de la búsqueda"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
msgid "No tickets found"
msgstr "No se encontraron tickets"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
msgid "Result"
msgstr "Resultado"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
msgid "This ticket requires special attention"
msgstr "Este ticket requiere atención especial"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
msgid "Switch direction"
msgstr "Cambiar dirección"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
msgid "Entry"
msgstr "Ingreso"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit"
msgstr "Salida"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…"
msgstr "Escanee un ticket o busque y presione regresar…"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more"
msgstr "Cargar más"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
msgid "Valid"
msgstr "Válido"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
msgid "Unpaid"
msgstr "Por pagar"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
msgid "Canceled"
msgstr "Cancelado"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Confirmed"
msgstr "Confirmado"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Approval pending"
msgstr "Autorización pendiente"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Redeemed"
msgstr "Canjeado"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
msgid "Cancel"
msgstr "Cancelar"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
msgid "Ticket not paid"
msgstr "Entrada no pagada"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "This ticket is not yet paid. Do you want to continue anyways?"
msgstr "Este ticket aún no ha sido pagado ¿Desea continuar de todos modos?"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53
msgid "Additional information required"
msgstr "Se requiere información adicional"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
msgid "Valid ticket"
msgstr "Ticket válido"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
msgid "Exit recorded"
msgstr "Salida registrada"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used"
msgstr "Esta entrada ya fue utilizada"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required"
msgstr "Información requerida"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
msgid "Unknown ticket"
msgstr "Entrada desconocida"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
msgstr "Tipo de entrada no está permitido"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
msgid "Entry not allowed"
msgstr "Entrada no permitida"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
msgid "Ticket code revoked/changed"
msgstr "Código de entrada revocada/cambiada"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
msgid "Ticket blocked"
msgstr "Entrada bloqueada"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
msgid "Ticket not valid at this time"
msgstr "Entrada no válida en este momento"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
msgid "Order canceled"
msgstr "Pedido cancelado"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
msgid "Ticket code is ambiguous on list"
msgstr "El código de la entrada es ambiguo en la lista"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67
msgid "Order not approved"
msgstr "Pedido no aprobado"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
msgid "Checked-in Tickets"
msgstr "Billetes registrados"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets"
msgstr "Tickets válidos"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
msgid "Currently inside"
msgstr "Actualmente en el interior"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr "Si"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr "No"
#: pretix/static/lightbox/js/lightbox.js:96
msgid "close"
msgstr "cerrar"
@@ -215,14 +382,14 @@ msgstr ""
"Si toma más de dos minutos, por favor contáctenos o regrese a la página "
"anterior en su navegador e intente de nuevo."
#: pretix/static/pretixbase/js/asynctask.js:135
#: pretix/static/pretixbase/js/asynctask.js:192
#: pretix/static/pretixbase/js/asynctask.js:196
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Ha ocurrido un error de tipo {code}."
#: pretix/static/pretixbase/js/asynctask.js:138
#: pretix/static/pretixbase/js/asynctask.js:128
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -230,12 +397,12 @@ msgstr ""
"Ahora mismo no podemos contactar con el servidor, pero lo seguimos "
"intentando. El último código de error fue: {code}"
#: pretix/static/pretixbase/js/asynctask.js:172
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "La solicitud ha tomado demasiado tiempo. Por favor, intente de nuevo."
#: pretix/static/pretixbase/js/asynctask.js:198
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -243,11 +410,11 @@ msgstr ""
"Ahora mismo no podemos contactar con el servidor. Por favor, intente de "
"nuevo. Código de error: {code}"
#: pretix/static/pretixbase/js/asynctask.js:226
#: pretix/static/pretixbase/js/asynctask.js:216
msgid "We are processing your request …"
msgstr "Estamos procesando su solicitud…"
#: pretix/static/pretixbase/js/asynctask.js:229
#: pretix/static/pretixbase/js/asynctask.js:219
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
@@ -257,11 +424,11 @@ msgstr ""
"minuto, por favor, revise su conexión a Internet, recargue la página e "
"intente nuevamente."
#: pretix/static/pretixbase/js/asynctask.js:286
#: pretix/static/pretixbase/js/asynctask.js:276
msgid "If this takes longer than a few minutes, please contact us."
msgstr "Si tarda más de unos minutos, póngase en contacto con nosotros."
#: pretix/static/pretixbase/js/asynctask.js:341
#: pretix/static/pretixbase/js/asynctask.js:331
msgid "Close message"
msgstr "Cerrar mensaje"
@@ -273,6 +440,146 @@ msgstr "¡Copiado!"
msgid "Press Ctrl-C to copy!"
msgstr "¡Presione Control+C para copiar!"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:12
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:18
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
msgid "is one of"
msgstr "es uno de"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
msgid "is before"
msgstr "está antes"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
msgid "is after"
msgstr "está después"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "="
msgstr "="
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product"
msgstr "Producto"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Product variation"
msgstr "Variación del producto"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Gate"
msgstr "Puerta"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
msgid "Current date and time"
msgstr "Fecha y hora actual"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr "Día de la semana actual (1 = lunes, 7 = domingo)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status"
msgstr "Estatus de la entrada actual"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries"
msgstr "Número de entradas previas"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
msgid "Number of previous entries since midnight"
msgstr "Número de entradas previas desde medianoche"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
msgid "Number of previous entries since"
msgstr "Número de entradas desde"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
msgid "Number of previous entries before"
msgstr "Número de entradas antes de"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry"
msgstr "Número de días con una entrada previa"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
msgid "Number of days with a previous entry since"
msgstr "Número de días con una entrada desde"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
msgid "Number of days with a previous entry before"
msgstr "Número de días con una entrada antes de"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
msgid "Minutes since last entry (-1 on first entry)"
msgstr "Minutos desde última entrada (-1 para la primera entrada)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
msgid "Minutes since first entry (-1 on first entry)"
msgstr "Minutos desde la primera entrada (-1 para la primera entrada)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)"
msgstr "Todas las siguientes condiciones (Y)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
msgid "At least one of the conditions below (OR)"
msgstr "Al menos una de las siguientes condiciones (O)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:184
msgid "Event start"
msgstr "Inicio del evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
msgid "Event end"
msgstr "Fin del evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
msgid "Event admission"
msgstr "Admisión al evento"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
msgid "custom date and time"
msgstr "seleccionar fecha y hora"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
msgid "custom time"
msgstr "seleccionar hora"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
msgid "Tolerance (minutes)"
msgstr "Tolerancia (en minutos)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
msgid "Add condition"
msgstr "Añadir condición"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
msgid "minutes"
msgstr "minutos"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate"
msgstr "Duplicar"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status"
msgid "present"
msgstr "presente"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status"
msgid "absent"
msgstr "ausente"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
msgid "Error: Product not found!"
msgstr "Error: ¡Producto no encontrado!"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
msgid "Error: Variation not found!"
msgstr "Error: ¡Variación no encontrada!"
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
msgstr "QR de Chequeo"
@@ -415,16 +722,6 @@ msgstr "Otros"
msgid "Count"
msgstr "Cantidad"
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr "Si"
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr "No"
#: pretix/static/pretixcontrol/js/ui/subevent.js:112
msgid "(one more date)"
msgid_plural "({num} more dates)"
@@ -911,224 +1208,6 @@ msgstr "noviembre"
msgid "December"
msgstr "diciembre"
#~ msgid "Select a check-in list"
#~ msgstr "Seleccione una lista de registro"
#~ msgid "No active check-in lists found."
#~ msgstr "No se encontraron listas de registro activas."
#~ msgid "Switch check-in list"
#~ msgstr "Cambiar lista de registro"
#~ msgid "Search results"
#~ msgstr "Resultados de la búsqueda"
#~ msgid "No tickets found"
#~ msgstr "No se encontraron tickets"
#~ msgid "Result"
#~ msgstr "Resultado"
#~ msgid "This ticket requires special attention"
#~ msgstr "Este ticket requiere atención especial"
#~ msgid "Switch direction"
#~ msgstr "Cambiar dirección"
#~ msgid "Entry"
#~ msgstr "Ingreso"
#~ msgid "Exit"
#~ msgstr "Salida"
#~ msgid "Scan a ticket or search and press return…"
#~ msgstr "Escanee un ticket o busque y presione regresar…"
#~ msgid "Load more"
#~ msgstr "Cargar más"
#~ msgid "Valid"
#~ msgstr "Válido"
#~ msgid "Unpaid"
#~ msgstr "Por pagar"
#~ msgid "Canceled"
#~ msgstr "Cancelado"
#~ msgid "Confirmed"
#~ msgstr "Confirmado"
#~ msgid "Approval pending"
#~ msgstr "Autorización pendiente"
#~ msgid "Redeemed"
#~ msgstr "Canjeado"
#~ msgid "Cancel"
#~ msgstr "Cancelar"
#~ msgid "Ticket not paid"
#~ msgstr "Entrada no pagada"
#~ msgid "This ticket is not yet paid. Do you want to continue anyways?"
#~ msgstr "Este ticket aún no ha sido pagado ¿Desea continuar de todos modos?"
#~ msgid "Additional information required"
#~ msgstr "Se requiere información adicional"
#~ msgid "Valid ticket"
#~ msgstr "Ticket válido"
#~ msgid "Exit recorded"
#~ msgstr "Salida registrada"
#~ msgid "Ticket already used"
#~ msgstr "Esta entrada ya fue utilizada"
#~ msgid "Information required"
#~ msgstr "Información requerida"
#~ msgid "Unknown ticket"
#~ msgstr "Entrada desconocida"
#~ msgid "Ticket type not allowed here"
#~ msgstr "Tipo de entrada no está permitido"
#~ msgid "Entry not allowed"
#~ msgstr "Entrada no permitida"
#~ msgid "Ticket code revoked/changed"
#~ msgstr "Código de entrada revocada/cambiada"
#~ msgid "Ticket blocked"
#~ msgstr "Entrada bloqueada"
#~ msgid "Ticket not valid at this time"
#~ msgstr "Entrada no válida en este momento"
#~ msgid "Order canceled"
#~ msgstr "Pedido cancelado"
#~ msgid "Ticket code is ambiguous on list"
#~ msgstr "El código de la entrada es ambiguo en la lista"
#~ msgid "Order not approved"
#~ msgstr "Pedido no aprobado"
#~ msgid "Checked-in Tickets"
#~ msgstr "Billetes registrados"
#~ msgid "Valid Tickets"
#~ msgstr "Tickets válidos"
#~ msgid "Currently inside"
#~ msgstr "Actualmente en el interior"
#~ msgid "is one of"
#~ msgstr "es uno de"
#~ msgid "is before"
#~ msgstr "está antes"
#~ msgid "is after"
#~ msgstr "está después"
#~ msgid "="
#~ msgstr "="
#~ msgid "Product"
#~ msgstr "Producto"
#~ msgid "Product variation"
#~ msgstr "Variación del producto"
#~ msgid "Gate"
#~ msgstr "Puerta"
#~ msgid "Current date and time"
#~ msgstr "Fecha y hora actual"
#~ msgid "Current day of the week (1 = Monday, 7 = Sunday)"
#~ msgstr "Día de la semana actual (1 = lunes, 7 = domingo)"
#~ msgid "Current entry status"
#~ msgstr "Estatus de la entrada actual"
#~ msgid "Number of previous entries"
#~ msgstr "Número de entradas previas"
#~ msgid "Number of previous entries since midnight"
#~ msgstr "Número de entradas previas desde medianoche"
#~ msgid "Number of previous entries since"
#~ msgstr "Número de entradas desde"
#~ msgid "Number of previous entries before"
#~ msgstr "Número de entradas antes de"
#~ msgid "Number of days with a previous entry"
#~ msgstr "Número de días con una entrada previa"
#~ msgid "Number of days with a previous entry since"
#~ msgstr "Número de días con una entrada desde"
#~ msgid "Number of days with a previous entry before"
#~ msgstr "Número de días con una entrada antes de"
#~ msgid "Minutes since last entry (-1 on first entry)"
#~ msgstr "Minutos desde última entrada (-1 para la primera entrada)"
#~ msgid "Minutes since first entry (-1 on first entry)"
#~ msgstr "Minutos desde la primera entrada (-1 para la primera entrada)"
#~ msgid "All of the conditions below (AND)"
#~ msgstr "Todas las siguientes condiciones (Y)"
#~ msgid "At least one of the conditions below (OR)"
#~ msgstr "Al menos una de las siguientes condiciones (O)"
#~ msgid "Event start"
#~ msgstr "Inicio del evento"
#~ msgid "Event end"
#~ msgstr "Fin del evento"
#~ msgid "Event admission"
#~ msgstr "Admisión al evento"
#~ msgid "custom date and time"
#~ msgstr "seleccionar fecha y hora"
#~ msgid "custom time"
#~ msgstr "seleccionar hora"
#~ msgid "Tolerance (minutes)"
#~ msgstr "Tolerancia (en minutos)"
#~ msgid "Add condition"
#~ msgstr "Añadir condición"
#~ msgid "minutes"
#~ msgstr "minutos"
#~ msgid "Duplicate"
#~ msgstr "Duplicar"
#~ msgctxt "entry_status"
#~ msgid "present"
#~ msgstr "presente"
#~ msgctxt "entry_status"
#~ msgid "absent"
#~ msgstr "ausente"
#~ msgid "Error: Product not found!"
#~ msgstr "Error: ¡Producto no encontrado!"
#~ msgid "Error: Variation not found!"
#~ msgstr "Error: ¡Variación no encontrada!"
#~ msgid "iDEAL"
#~ msgstr "iDEAL"

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-05-27 14:47+0000\n"
"POT-Creation-Date: 2026-04-28 09:04+0000\n"
"PO-Revision-Date: 2025-08-04 14:16+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -131,6 +131,7 @@ msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
#: pretix/static/pretixpresale/js/ui/cart.js:89
msgid "Continue"
msgstr ""
@@ -184,6 +185,172 @@ msgstr ""
msgid "Contacting your bank …"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
msgid "No tickets found"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
msgid "Result"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
msgid "This ticket requires special attention"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
msgid "Switch direction"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
msgid "Entry"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
msgid "Valid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
msgid "Unpaid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
msgid "Canceled"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Confirmed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Approval pending"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Redeemed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
msgid "Cancel"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
msgid "Ticket not paid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "This ticket is not yet paid. Do you want to continue anyways?"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53
msgid "Additional information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
msgid "Valid ticket"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
msgid "Exit recorded"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
msgid "Unknown ticket"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
msgid "Entry not allowed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
msgid "Ticket code revoked/changed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
msgid "Ticket blocked"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
msgid "Ticket not valid at this time"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
msgid "Order canceled"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
msgid "Ticket code is ambiguous on list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67
msgid "Order not approved"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
msgid "Checked-in Tickets"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
msgid "Currently inside"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr ""
#: pretix/static/lightbox/js/lightbox.js:96
msgid "close"
msgstr ""
@@ -210,46 +377,46 @@ msgid ""
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:135
#: pretix/static/pretixbase/js/asynctask.js:192
#: pretix/static/pretixbase/js/asynctask.js:196
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:138
#: pretix/static/pretixbase/js/asynctask.js:128
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:172
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:198
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:226
#: pretix/static/pretixbase/js/asynctask.js:216
msgid "We are processing your request …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:229
#: pretix/static/pretixbase/js/asynctask.js:219
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
"page and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:286
#: pretix/static/pretixbase/js/asynctask.js:276
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:341
#: pretix/static/pretixbase/js/asynctask.js:331
msgid "Close message"
msgstr ""
@@ -261,6 +428,146 @@ msgstr ""
msgid "Press Ctrl-C to copy!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:12
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:18
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
msgid "is one of"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
msgid "is before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
msgid "is after"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "="
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Product variation"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Gate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
msgid "Current date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
msgid "Number of previous entries since midnight"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
msgid "Number of previous entries since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
msgid "Number of previous entries before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
msgid "Number of days with a previous entry since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
msgid "Number of days with a previous entry before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
msgid "Minutes since last entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
msgid "Minutes since first entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:184
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
msgid "minutes"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status"
msgid "present"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status"
msgid "absent"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
msgid "Error: Product not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
msgid "Error: Variation not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
msgstr ""
@@ -395,16 +702,6 @@ msgstr ""
msgid "Count"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/subevent.js:112
msgid "(one more date)"
msgid_plural "({num} more dates)"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-05-27 14:47+0000\n"
"POT-Creation-Date: 2026-04-28 09:04+0000\n"
"PO-Revision-Date: 2025-12-24 00:00+0000\n"
"Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n"
"Language-Team: Estonian <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -131,6 +131,7 @@ msgid "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
#: pretix/static/pretixpresale/js/ui/cart.js:89
msgid "Continue"
msgstr ""
@@ -184,6 +185,172 @@ msgstr ""
msgid "Contacting your bank …"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
msgid "No tickets found"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
msgid "Result"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
msgid "This ticket requires special attention"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
msgid "Switch direction"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
msgid "Entry"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
msgid "Valid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
msgid "Unpaid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
msgid "Canceled"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Confirmed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Approval pending"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Redeemed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
msgid "Cancel"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
msgid "Ticket not paid"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "This ticket is not yet paid. Do you want to continue anyways?"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53
msgid "Additional information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
msgid "Valid ticket"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
msgid "Exit recorded"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
msgid "Unknown ticket"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
msgid "Entry not allowed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
msgid "Ticket code revoked/changed"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
msgid "Ticket blocked"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
msgid "Ticket not valid at this time"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
msgid "Order canceled"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
msgid "Ticket code is ambiguous on list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67
msgid "Order not approved"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
msgid "Checked-in Tickets"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
msgid "Currently inside"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr ""
#: pretix/static/lightbox/js/lightbox.js:96
msgid "close"
msgstr ""
@@ -210,46 +377,46 @@ msgid ""
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:135
#: pretix/static/pretixbase/js/asynctask.js:192
#: pretix/static/pretixbase/js/asynctask.js:196
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:138
#: pretix/static/pretixbase/js/asynctask.js:128
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:172
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:198
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:226
#: pretix/static/pretixbase/js/asynctask.js:216
msgid "We are processing your request …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:229
#: pretix/static/pretixbase/js/asynctask.js:219
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
"page and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:286
#: pretix/static/pretixbase/js/asynctask.js:276
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:341
#: pretix/static/pretixbase/js/asynctask.js:331
msgid "Close message"
msgstr ""
@@ -261,6 +428,146 @@ msgstr ""
msgid "Press Ctrl-C to copy!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:12
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:18
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
msgid "is one of"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
msgid "is before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
msgid "is after"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "="
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Product variation"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Gate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
msgid "Current date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
msgid "Number of previous entries since midnight"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
msgid "Number of previous entries since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
msgid "Number of previous entries before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
msgid "Number of days with a previous entry since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
msgid "Number of days with a previous entry before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
msgid "Minutes since last entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
msgid "Minutes since first entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:184
msgid "Event start"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
msgid "Event end"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
msgid "Event admission"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
msgid "minutes"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status"
msgid "present"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status"
msgid "absent"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
msgid "Error: Product not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
msgid "Error: Variation not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
msgstr ""
@@ -395,16 +702,6 @@ msgstr ""
msgid "Count"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/subevent.js:112
msgid "(one more date)"
msgid_plural "({num} more dates)"

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-05-27 14:47+0000\n"
"POT-Creation-Date: 2026-04-28 09:04+0000\n"
"PO-Revision-Date: 2024-09-06 08:47+0000\n"
"Last-Translator: Albizuri <oier@puntu.eus>\n"
"Language-Team: Basque <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -131,6 +131,7 @@ msgid "Mercado Pago"
msgstr "Mercado Pago"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
#: pretix/static/pretixpresale/js/ui/cart.js:89
msgid "Continue"
msgstr "Jarraitu"
@@ -184,6 +185,172 @@ msgstr "Guztira"
msgid "Contacting your bank …"
msgstr "Zure bankuarekin kontaktatzen …"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr "Hautatu erregistro-zerrenda bat"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr "Ez da aurkitu erregistro-zerrenda aktiborik."
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr "Erregistro-zerrenda aldatu"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
msgstr "Emaitzak bilatu"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
msgid "No tickets found"
msgstr "Ez da tiketik aurkitu"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
msgid "Result"
msgstr "Emaitza"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
msgid "This ticket requires special attention"
msgstr "Tiket honek arreta berezia eskatzen du"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
msgid "Switch direction"
msgstr "Helbidea aldatu"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
msgid "Entry"
msgstr "Sarbidea"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit"
msgstr "Irteera"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…"
msgstr "Eskaneatu tiket bat edo bilatu eta sakatu itzuli…"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more"
msgstr "Gehiago kargatu"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
msgid "Valid"
msgstr "Baliozkoa"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
msgid "Unpaid"
msgstr "Ordaindu gabea"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
msgid "Canceled"
msgstr "Ezeztatua"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Confirmed"
msgstr "Baieztatua"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Approval pending"
msgstr "Onartzeko zain"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Redeemed"
msgstr "Berrerosia"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
msgid "Cancel"
msgstr "Ezeztatu"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
msgid "Ticket not paid"
msgstr "Tiketa ordaindu gabe"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "This ticket is not yet paid. Do you want to continue anyways?"
msgstr "Tiket hori oraindik ordaindu gabe dago. Jarraitu nahi duzu, dena den?"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53
msgid "Additional information required"
msgstr "Beharrezko informazio gehigarria"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
msgid "Valid ticket"
msgstr "Baliozko tiketa"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
msgid "Exit recorded"
msgstr "Irteera erregistratua"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used"
msgstr "Erabilitako tiketa"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required"
msgstr "Beharrezko informazioa"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
msgid "Unknown ticket"
msgstr "Tiket ezezaguna"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here"
msgstr "Tiket mota hau ez da onartzen hemen"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
msgid "Entry not allowed"
msgstr "Ezin da sartu"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
msgid "Ticket code revoked/changed"
msgstr "Baliogabetutako/aldatutako tiketaren kodea"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
msgid "Ticket blocked"
msgstr "Tiketa blokeatuta"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
msgid "Ticket not valid at this time"
msgstr "Tiketa ez dago erabilgarri momentu honetan"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
msgid "Order canceled"
msgstr "Eskaera ezeztatua"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
msgid "Ticket code is ambiguous on list"
msgstr "Tiketaren kodea anbiguoa da zerrendan"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67
msgid "Order not approved"
msgstr "Ez da onartu eskaera"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
msgid "Checked-in Tickets"
msgstr "Tiketak erosita"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets"
msgstr "Baliozko tiketak"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
msgid "Currently inside"
msgstr "Barruan orain bertan"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr "Bai"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr "Ez"
#: pretix/static/lightbox/js/lightbox.js:96
msgid "close"
msgstr "itxi"
@@ -215,14 +382,14 @@ msgstr ""
"Bi minutu baino gehiago irauten badu, mesedez, jarri gurekin harremanetan "
"edo itzuli zure nabigatzailera eta saiatu berriro."
#: pretix/static/pretixbase/js/asynctask.js:135
#: pretix/static/pretixbase/js/asynctask.js:192
#: pretix/static/pretixbase/js/asynctask.js:196
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "{kode} motako errore bat gertatu da."
#: pretix/static/pretixbase/js/asynctask.js:138
#: pretix/static/pretixbase/js/asynctask.js:128
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -230,12 +397,12 @@ msgstr ""
"Orain bertan ezin gara zerbitzarira iritsi, baina saiatzen jarraitzen dugu. "
"Azken errore-kodea: {kodea}"
#: pretix/static/pretixbase/js/asynctask.js:172
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "Gehiegi luzatu da eskaera. Mesedez, saiatu berriro."
#: pretix/static/pretixbase/js/asynctask.js:198
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -243,11 +410,11 @@ msgstr ""
"Une honetan ezin gara zerbitzarira iritsi. Mesedez, saiatu berriro. Errore-"
"kodea: {kodea}"
#: pretix/static/pretixbase/js/asynctask.js:226
#: pretix/static/pretixbase/js/asynctask.js:216
msgid "We are processing your request …"
msgstr "Zure eskaera prozesatzen ari gara …"
#: pretix/static/pretixbase/js/asynctask.js:229
#: pretix/static/pretixbase/js/asynctask.js:219
msgid ""
"We are currently sending your request to the server. If this takes longer "
"than one minute, please check your internet connection and then reload this "
@@ -257,11 +424,11 @@ msgstr ""
"baino gehiago irauten badu, mesedez, berrikusi zure Interneteko konexioa eta "
"gero kargatu berriro orri hau eta saiatu berriro."
#: pretix/static/pretixbase/js/asynctask.js:286
#: pretix/static/pretixbase/js/asynctask.js:276
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:341
#: pretix/static/pretixbase/js/asynctask.js:331
msgid "Close message"
msgstr "Mezua itxi"
@@ -273,6 +440,146 @@ msgstr "Kopiatuta!"
msgid "Press Ctrl-C to copy!"
msgstr "Sakatu Ctrl-C kopiatzeko!"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:12
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:18
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
msgid "is one of"
msgstr "-ko bat da"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
msgid "is before"
msgstr "lehenago da"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
msgid "is after"
msgstr "ondoren da"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "="
msgstr "="
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product"
msgstr "Produktua"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Product variation"
msgstr "Produktuen aniztasuna"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Gate"
msgstr "Atea"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
msgid "Current date and time"
msgstr "Uneko data eta ordua"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr "Asteko uneko eguna (1 = astelehena, 7 = igandea)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status"
msgstr "Egungo sarrera-egoera"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries"
msgstr "Aurreko sarreren kopurua"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
msgid "Number of previous entries since midnight"
msgstr "Aurreko sarrera kopurua gauerditik aurrera"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
msgid "Number of previous entries since"
msgstr "Aurreko sarrera-kopurua, orduz geroztik"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
msgid "Number of previous entries before"
msgstr "Aurreko sarreren kopurua"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry"
msgstr "Aurreko sarrera bat duten egunen kopurua"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
msgid "Number of days with a previous entry since"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
msgid "Number of days with a previous entry before"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
msgid "Minutes since last entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
msgid "Minutes since first entry (-1 on first entry)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
msgid "At least one of the conditions below (OR)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:184
msgid "Event start"
msgstr "Ekitaldiaren hasiera"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
msgid "Event end"
msgstr "Ekitaldiaren amaiera"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
msgid "Event admission"
msgstr "Ekitaldiaren onarpena"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
msgid "custom date and time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
msgid "custom time"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
msgid "Tolerance (minutes)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
msgid "Add condition"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
msgid "minutes"
msgstr "minutuak"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status"
msgid "present"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status"
msgid "absent"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
msgid "Error: Product not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
msgid "Error: Variation not found!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
msgstr ""
@@ -409,16 +716,6 @@ msgstr ""
msgid "Count"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes"
msgstr "Bai"
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No"
msgstr "Ez"
#: pretix/static/pretixcontrol/js/ui/subevent.js:112
msgid "(one more date)"
msgid_plural "({num} more dates)"
@@ -901,177 +1198,5 @@ msgstr ""
msgid "December"
msgstr ""
#~ msgid "Select a check-in list"
#~ msgstr "Hautatu erregistro-zerrenda bat"
#~ msgid "No active check-in lists found."
#~ msgstr "Ez da aurkitu erregistro-zerrenda aktiborik."
#~ msgid "Switch check-in list"
#~ msgstr "Erregistro-zerrenda aldatu"
#~ msgid "Search results"
#~ msgstr "Emaitzak bilatu"
#~ msgid "No tickets found"
#~ msgstr "Ez da tiketik aurkitu"
#~ msgid "Result"
#~ msgstr "Emaitza"
#~ msgid "This ticket requires special attention"
#~ msgstr "Tiket honek arreta berezia eskatzen du"
#~ msgid "Switch direction"
#~ msgstr "Helbidea aldatu"
#~ msgid "Entry"
#~ msgstr "Sarbidea"
#~ msgid "Exit"
#~ msgstr "Irteera"
#~ msgid "Scan a ticket or search and press return…"
#~ msgstr "Eskaneatu tiket bat edo bilatu eta sakatu itzuli…"
#~ msgid "Load more"
#~ msgstr "Gehiago kargatu"
#~ msgid "Valid"
#~ msgstr "Baliozkoa"
#~ msgid "Unpaid"
#~ msgstr "Ordaindu gabea"
#~ msgid "Canceled"
#~ msgstr "Ezeztatua"
#~ msgid "Confirmed"
#~ msgstr "Baieztatua"
#~ msgid "Approval pending"
#~ msgstr "Onartzeko zain"
#~ msgid "Redeemed"
#~ msgstr "Berrerosia"
#~ msgid "Cancel"
#~ msgstr "Ezeztatu"
#~ msgid "Ticket not paid"
#~ msgstr "Tiketa ordaindu gabe"
#~ msgid "This ticket is not yet paid. Do you want to continue anyways?"
#~ msgstr ""
#~ "Tiket hori oraindik ordaindu gabe dago. Jarraitu nahi duzu, dena den?"
#~ msgid "Additional information required"
#~ msgstr "Beharrezko informazio gehigarria"
#~ msgid "Valid ticket"
#~ msgstr "Baliozko tiketa"
#~ msgid "Exit recorded"
#~ msgstr "Irteera erregistratua"
#~ msgid "Ticket already used"
#~ msgstr "Erabilitako tiketa"
#~ msgid "Information required"
#~ msgstr "Beharrezko informazioa"
#~ msgid "Unknown ticket"
#~ msgstr "Tiket ezezaguna"
#~ msgid "Ticket type not allowed here"
#~ msgstr "Tiket mota hau ez da onartzen hemen"
#~ msgid "Entry not allowed"
#~ msgstr "Ezin da sartu"
#~ msgid "Ticket code revoked/changed"
#~ msgstr "Baliogabetutako/aldatutako tiketaren kodea"
#~ msgid "Ticket blocked"
#~ msgstr "Tiketa blokeatuta"
#~ msgid "Ticket not valid at this time"
#~ msgstr "Tiketa ez dago erabilgarri momentu honetan"
#~ msgid "Order canceled"
#~ msgstr "Eskaera ezeztatua"
#~ msgid "Ticket code is ambiguous on list"
#~ msgstr "Tiketaren kodea anbiguoa da zerrendan"
#~ msgid "Order not approved"
#~ msgstr "Ez da onartu eskaera"
#~ msgid "Checked-in Tickets"
#~ msgstr "Tiketak erosita"
#~ msgid "Valid Tickets"
#~ msgstr "Baliozko tiketak"
#~ msgid "Currently inside"
#~ msgstr "Barruan orain bertan"
#~ msgid "is one of"
#~ msgstr "-ko bat da"
#~ msgid "is before"
#~ msgstr "lehenago da"
#~ msgid "is after"
#~ msgstr "ondoren da"
#~ msgid "="
#~ msgstr "="
#~ msgid "Product"
#~ msgstr "Produktua"
#~ msgid "Product variation"
#~ msgstr "Produktuen aniztasuna"
#~ msgid "Gate"
#~ msgstr "Atea"
#~ msgid "Current date and time"
#~ msgstr "Uneko data eta ordua"
#~ msgid "Current day of the week (1 = Monday, 7 = Sunday)"
#~ msgstr "Asteko uneko eguna (1 = astelehena, 7 = igandea)"
#~ msgid "Current entry status"
#~ msgstr "Egungo sarrera-egoera"
#~ msgid "Number of previous entries"
#~ msgstr "Aurreko sarreren kopurua"
#~ msgid "Number of previous entries since midnight"
#~ msgstr "Aurreko sarrera kopurua gauerditik aurrera"
#~ msgid "Number of previous entries since"
#~ msgstr "Aurreko sarrera-kopurua, orduz geroztik"
#~ msgid "Number of previous entries before"
#~ msgstr "Aurreko sarreren kopurua"
#~ msgid "Number of days with a previous entry"
#~ msgstr "Aurreko sarrera bat duten egunen kopurua"
#~ msgid "Event start"
#~ msgstr "Ekitaldiaren hasiera"
#~ msgid "Event end"
#~ msgstr "Ekitaldiaren amaiera"
#~ msgid "Event admission"
#~ msgstr "Ekitaldiaren onarpena"
#~ msgid "minutes"
#~ msgstr "minutuak"
#~ msgid "iDEAL"
#~ msgstr "iDEAL"

Some files were not shown because too many files have changed in this diff Show More