Compare commits

..
Author SHA1 Message Date
Raphael MichelandGitHub 1480a5cdc3 Revert "Invoicing: Allow plugins to add data (#5452)"
This reverts commit ccd922b7f0.
2025-09-22 10:04:46 +02:00
Raphael MichelandGitHub ccd922b7f0 Invoicing: Allow plugins to add data (#5452)
* Allow plugins to add data to invoices

* Add documentation
2025-09-22 10:04:33 +02:00
2b5d659f64 Update doc/api/resources/invoices.rst
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2025-09-16 12:16:06 +02:00
Raphael Michel 1662c65b9b More changes 2025-09-08 19:51:01 +02:00
Raphael Michel dabdac6ff2 Fix typo 2025-09-08 18:41:09 +02:00
Raphael Michel 50d724f9e3 Fix tests 2025-09-08 18:15:40 +02:00
Raphael Michel ae5c0a5537 Invoicing: Configurable service date 2025-09-08 10:57:57 +02:00
179 changed files with 49333 additions and 53545 deletions
+14 -15
View File
@@ -80,17 +80,12 @@ lines list of objects The actual invo
for all invoice lines
created before this field was introduced as well as for
all lines not created by a fee (e.g. a product).
event_date_from datetime Start date of the (sub)event this line was created for as it
was set during invoice creation. Can be ``null`` for all invoice
lines created before this was introduced as well as for lines in
an event series not created by a product (e.g. shipping or
cancellation fees).
├ event_date_to datetime End date of the (sub)event this line was created for as it
was set during invoice creation. Can be ``null`` for all invoice
lines created before this was introduced as well as for lines in
an event series not created by a product (e.g. shipping or
cancellation fees) as well as whenever the respective (sub)event
has no end date set.
period_start datetime Start date of the service or delivery period of the invoice line.
Can be ``null`` if not known.
├ period_end datetime End date of the service or delivery period of the invoice line.
Can be ``null`` if not known.
├ event_date_from datetime Deprecated alias of ``period_start``.
├ event_date_to datetime Deprecated alias of ``period_end``.
├ event_location string Location of the (sub)event this line was created for as it
was set during invoice creation. Can be ``null`` for all invoice
lines created before this was introduced as well as for lines in
@@ -163,10 +158,10 @@ transmission_email_address string Optional. An em
Business customers only.
===================================== ========================== =======================================================
Peppol
PEPPOL
""""""
The identifier ``"peppol"`` represents the transmission of XML invoices through the `Peppol`_ network.
The identifier ``"peppol"`` represents the transmission of XML invoices through the `PEPPOL`_ network.
This is only available for business addresses.
This is not supported by pretix out of the box and requires the use of a suitable plugin.
The ``transmission_info`` object may contain the following properties:
@@ -176,7 +171,7 @@ The ``transmission_info`` object may contain the following properties:
===================================== ========================== =======================================================
Field Type Description
===================================== ========================== =======================================================
transmission_peppol_participant_id string Required. The Peppol participant ID of the recipient.
transmission_peppol_participant_id string Required. The PEPPOL participant ID of the recipient.
===================================== ========================== =======================================================
Italian Exchange System
@@ -274,6 +269,8 @@ List of all invoices
"fee_internal_type": null,
"event_date_from": "2017-12-27T10:00:00Z",
"event_date_to": null,
"period_start": "2017-12-27T10:00:00Z",
"period_end": "2017-12-27T10:00:00Z",
"event_location": "Heidelberg",
"attendee_name": null,
"gross_value": "23.00",
@@ -420,6 +417,8 @@ Fetching individual invoices
"fee_internal_type": null,
"event_date_from": "2017-12-27T10:00:00Z",
"event_date_to": null,
"period_start": "2017-12-27T10:00:00Z",
"period_end": "2017-12-27T10:00:00Z",
"event_location": "Heidelberg",
"attendee_name": null,
"gross_value": "23.00",
@@ -605,5 +604,5 @@ but in other cases transmission may need to be triggered manually.
:statuscode 409: The invoice is currently in transmission
.. _Peppol: https://en.wikipedia.org/wiki/PEPPOL
.. _PEPPOL: https://en.wikipedia.org/wiki/PEPPOL
.. _Sistema di Interscambio: https://it.wikipedia.org/wiki/Fattura_elettronica_in_Italia
-4
View File
@@ -418,7 +418,6 @@ List of all orders
"seat": null,
"checkins": [
{
"id": 1337,
"list": 44,
"type": "entry",
"gate": null,
@@ -663,7 +662,6 @@ Fetching individual orders
"seat": null,
"checkins": [
{
"id": 1337,
"list": 44,
"type": "entry",
"gate": null,
@@ -1634,7 +1632,6 @@ List of all order positions
"blocked": null,
"checkins": [
{
"id": 1337,
"list": 44,
"type": "entry",
"gate": null,
@@ -1763,7 +1760,6 @@ Fetching individual positions
"seat": null,
"checkins": [
{
"id": 1337,
"list": 44,
"type": "entry",
"gate": null,
+1 -1
View File
@@ -37,7 +37,7 @@ Frontend
--------
.. automodule:: pretix.presale.signals
:members: html_head, html_footer, footer_link, global_footer_link, front_page_top, front_page_bottom, front_page_bottom_widget, fee_calculation_for_cart, contact_form_fields, question_form_fields, contact_form_fields_overrides, question_form_fields_overrides, checkout_confirm_messages, checkout_confirm_page_content, checkout_all_optional, html_page_header, render_seating_plan, checkout_flow_steps, position_info, position_info_top, item_description, global_html_head, global_html_footer, global_html_page_header, seatingframe_html_head, filter_subevents
:members: html_head, html_footer, footer_link, global_footer_link, front_page_top, front_page_bottom, front_page_bottom_widget, fee_calculation_for_cart, contact_form_fields, question_form_fields, contact_form_fields_overrides, question_form_fields_overrides, checkout_confirm_messages, checkout_confirm_page_content, checkout_all_optional, html_page_header, render_seating_plan, checkout_flow_steps, position_info, position_info_top, item_description, global_html_head, global_html_footer, global_html_page_header, seatingframe_html_head
.. automodule:: pretix.presale.signals
+1 -1
View File
@@ -6,4 +6,4 @@ sphinxcontrib-images
sphinxcontrib-jquery
sphinxcontrib-spelling==8.*
sphinxemoji
pyenchant==3.3.*
pyenchant==3.2.*
+1 -1
View File
@@ -7,4 +7,4 @@ sphinxcontrib-images
sphinxcontrib-jquery
sphinxcontrib-spelling==8.*
sphinxemoji
pyenchant==3.3.*
pyenchant==3.2.*
+5 -5
View File
@@ -35,12 +35,12 @@ dependencies = [
"cryptography>=44.0.0",
"css-inline==0.17.*",
"defusedcsv>=1.1.0",
"Django[argon2]==4.2.*,>=4.2.24",
"Django[argon2]==4.2.*,>=4.2.15",
"django-bootstrap3==25.2",
"django-compressor==4.5.1",
"django-countries==7.6.*",
"django-filter==25.1",
"django-formset-js-improved==0.5.0.4",
"django-formset-js-improved==0.5.0.3",
"django-formtools==2.5.1",
"django-hierarkey==2.0.*,>=2.0.1",
"django-hijack==3.7.*",
@@ -79,7 +79,7 @@ dependencies = [
"protobuf==6.32.*",
"psycopg2-binary",
"pycountry",
"pycparser==2.23",
"pycparser==2.22",
"pycryptodome==3.23.*",
"pypdf==6.0.*",
"python-bidi==0.6.*", # Support for Arabic in reportlab
@@ -91,7 +91,7 @@ dependencies = [
"redis==6.4.*",
"reportlab==4.4.*",
"requests==2.32.*",
"sentry-sdk==2.38.*",
"sentry-sdk==2.37.*",
"sepaxml==2.6.*",
"stripe==7.9.*",
"text-unidecode==1.*",
@@ -120,7 +120,7 @@ dev = [
"pytest-cache",
"pytest-cov",
"pytest-django==4.*",
"pytest-mock==3.15.*",
"pytest-mock==3.14.*",
"pytest-sugar",
"pytest-xdist==3.8.*",
"pytest==8.4.*",
+2 -2
View File
@@ -25,8 +25,8 @@ coverage:
coverage run -m py.test
npminstall:
# keep this in sync with pretix/_build.py!
# keep this in sync with setup.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
npm install --prefix=pretix/static.dist/node_prefix
+1 -1
View File
@@ -19,4 +19,4 @@
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
__version__ = "2025.8.3"
__version__ = "2025.8.0.dev0"
+1 -1
View File
@@ -39,7 +39,7 @@ def npm_install():
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)
subprocess.check_call('npm install', shell=True, cwd=node_prefix)
npm_installed = True
+1
View File
@@ -805,6 +805,7 @@ class EventSettingsSerializer(SettingsSerializer):
'invoice_reissue_after_modify',
'invoice_include_free',
'invoice_generate',
'invoice_period',
'invoice_numbers_consecutive',
'invoice_numbers_prefix',
'invoice_numbers_prefix_cancellations',
+4 -2
View File
@@ -1757,12 +1757,14 @@ class LinePositionField(serializers.IntegerField):
class InlineInvoiceLineSerializer(I18nAwareModelSerializer):
position = LinePositionField(read_only=True)
event_date_from = serializers.DateTimeField(read_only=True, source="period_start")
event_date_to = serializers.DateTimeField(read_only=True, source="period_end")
class Meta:
model = InvoiceLine
fields = ('position', 'description', 'item', 'variation', 'subevent', 'attendee_name', 'event_date_from',
'event_date_to', 'gross_value', 'tax_value', 'tax_rate', 'tax_code', 'tax_name', 'fee_type',
'fee_internal_type', 'event_location')
'event_date_to', 'period_start', 'period_end', 'gross_value', 'tax_value', 'tax_rate', 'tax_code',
'tax_name', 'fee_type', 'fee_internal_type', 'event_location')
class InvoiceSerializer(I18nAwareModelSerializer):
-1
View File
@@ -484,7 +484,6 @@ class OrganizerSettingsSerializer(SettingsSerializer):
'reusable_media_type_nfc_mf0aes',
'reusable_media_type_nfc_mf0aes_autocreate_giftcard',
'reusable_media_type_nfc_mf0aes_autocreate_giftcard_currency',
'reusable_media_type_nfc_mf0aes_random_uid',
]
def __init__(self, *args, **kwargs):
+1 -7
View File
@@ -74,11 +74,6 @@ class ExportersMixin:
@action(detail=True, methods=['GET'], url_name='download', url_path='download/(?P<asyncid>[^/]+)/(?P<cfid>[^/]+)')
def download(self, *args, **kwargs):
cf = get_object_or_404(CachedFile, id=kwargs['cfid'])
if not cf.allowed_for_session(self.request, "exporters-api"):
return Response(
{'status': 'failed', 'message': 'Unknown file ID or export failed'},
status=status.HTTP_410_GONE
)
if cf.file:
resp = ChunkBasedFileResponse(cf.file.file, content_type=cf.type)
resp['Content-Disposition'] = 'attachment; filename="{}"'.format(cf.filename).encode("ascii", "ignore")
@@ -114,8 +109,7 @@ class ExportersMixin:
serializer = JobRunSerializer(exporter=instance, data=self.request.data, **self.get_serializer_kwargs())
serializer.is_valid(raise_exception=True)
cf = CachedFile(web_download=True)
cf.bind_to_session(self.request, "exporters-api")
cf = CachedFile(web_download=False)
cf.date = now()
cf.expires = now() + timedelta(hours=24)
cf.save()
+1 -2
View File
@@ -546,8 +546,7 @@ class DeviceViewSet(mixins.CreateModelMixin,
class OrganizerSettingsView(views.APIView):
permission = None
write_permission = 'can_change_organizer_settings'
permission = 'can_change_organizer_settings'
def get(self, request, *args, **kwargs):
s = OrganizerSettingsSerializer(instance=request.organizer.settings, organizer=request.organizer, context={
+5 -20
View File
@@ -24,7 +24,6 @@ from itertools import groupby
from smtplib import SMTPResponseException
from typing import TypeVar
import bleach
import css_inline
from django.conf import settings
from django.core.mail.backends.smtp import EmailBackend
@@ -35,10 +34,7 @@ from django.utils.translation import get_language, gettext_lazy as _
from pretix.base.models import Event
from pretix.base.signals import register_html_mail_renderers
from pretix.base.templatetags.rich_text import (
DEFAULT_CALLBACKS, EMAIL_RE, URL_RE, abslink_callback,
markdown_compile_email, truelink_callback,
)
from pretix.base.templatetags.rich_text import markdown_compile_email
from pretix.helpers.format import SafeFormatter, format_map
from pretix.base.services.placeholders import ( # noqa
@@ -137,24 +133,13 @@ class TemplateBasedMailRenderer(BaseHTMLMailRenderer):
def template_name(self):
raise NotImplementedError()
def compile_markdown(self, plaintext, context=None):
return markdown_compile_email(plaintext, context=context)
def compile_markdown(self, plaintext):
return markdown_compile_email(plaintext)
def render(self, plain_body: str, plain_signature: str, subject: str, order, position, context) -> str:
body_md = self.compile_markdown(plain_body, context)
body_md = self.compile_markdown(plain_body)
if context:
linker = bleach.Linker(
url_re=URL_RE,
email_re=EMAIL_RE,
callbacks=DEFAULT_CALLBACKS + [truelink_callback, abslink_callback],
parse_email=True
)
body_md = format_map(
body_md,
context=context,
mode=SafeFormatter.MODE_RICH_TO_HTML,
linkifier=linker
)
body_md = format_map(body_md, context=context, mode=SafeFormatter.MODE_RICH_TO_HTML)
htmlctx = {
'site': settings.PRETIX_INSTANCE_NAME,
'site_url': settings.SITE_URL,
+1 -10
View File
@@ -22,7 +22,7 @@
from django import forms
from django.core.validators import RegexValidator
from django.utils.translation import pgettext, pgettext_lazy
from django.utils.translation import pgettext_lazy
from django_countries.fields import Country
from localflavor.it.forms import ITSocialSecurityNumberField
@@ -73,12 +73,3 @@ class ItalianSdITransmissionType(TransmissionType):
if is_business:
return base | {"company", "vat_id", "transmission_it_sdi_pec", "transmission_it_sdi_recipient_code"}
return base | {"transmission_it_sdi_codice_fiscale"}
def pdf_info_text(self) -> str:
# Watermark is not necessary as this is a usual precaution in Italy
return pgettext(
"italian_invoice",
"This PDF document is a visual copy of the invoice and does not constitute an invoice for VAT "
"purposes. The invoice is issued in XML format, transmitted in accordance with the procedures and terms "
"set forth in No. 89757/2018 of April 30, 2018, issued by the Director of the Revenue Agency."
)
+99 -50
View File
@@ -19,8 +19,8 @@
# 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 datetime
import logging
import math
import re
import unicodedata
from collections import defaultdict
@@ -224,9 +224,6 @@ class BaseReportlabInvoiceRenderer(BaseInvoiceRenderer):
stylesheet.add(ParagraphStyle(name='FineprintHeading', fontName=self.font_bold, fontSize=8, leading=12))
stylesheet.add(ParagraphStyle(name='Fineprint', fontName=self.font_regular, fontSize=8, leading=10))
stylesheet.add(ParagraphStyle(name='FineprintRight', fontName=self.font_regular, fontSize=8, leading=10, alignment=TA_RIGHT))
stylesheet.add(ParagraphStyle(name='WarningBlock', fontName=self.font_bold, fontSize=10, leading=12,
alignment=TA_LEFT, borderWidth=1 * mm, borderColor=colors.black,
borderPadding=2 * mm, spaceBefore=5 * mm, spaceAfter=5 * mm))
return stylesheet
def _register_fonts(self):
@@ -526,6 +523,20 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
textobject.textLine(self._normalize(self._upper(pgettext('invoice', 'Event'))))
canvas.drawText(textobject)
def _date_range_in_header(self):
if self.invoice.event.has_subevents or not self.invoice.event.settings.show_dates_on_frontpage:
return None, None
tz = self.invoice.event.timezone
show_end_date = (
self.invoice.event.settings.show_date_to and
self.invoice.event.date_to and
self.invoice.event.date_to.astimezone(tz).date() != self.invoice.event.date_from.astimezone(tz).date()
)
if show_end_date:
return self.invoice.event.date_from.astimezone(tz).date(), self.invoice.event.date_to.astimezone(tz).date()
else:
return self.invoice.event.date_from.astimezone(tz).date(), None
def _draw_event(self, canvas):
def shorten(txt):
txt = str(txt)
@@ -539,25 +550,17 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
p_size = p.wrap(self.event_width, self.event_height)
return txt
if not self.invoice.event.has_subevents and self.invoice.event.settings.show_dates_on_frontpage:
tz = self.invoice.event.timezone
show_end_date = (
self.invoice.event.settings.show_date_to and
self.invoice.event.date_to and
self.invoice.event.date_to.astimezone(tz).date() != self.invoice.event.date_from.astimezone(tz).date()
d_from, d_to = self._date_range_in_header()
if d_from and d_to:
p_str = (
shorten(self.invoice.event.name) + '\n' +
pgettext('invoice', '{from_date}\nuntil {to_date}').format(
from_date=date_format(d_from, "DATE_FORMAT"),
to_date=date_format(d_to, "DATE_FORMAT"),
)
)
if show_end_date:
p_str = (
shorten(self.invoice.event.name) + '\n' +
pgettext('invoice', '{from_date}\nuntil {to_date}').format(
from_date=self.invoice.event.get_date_from_display(show_times=False),
to_date=self.invoice.event.get_date_to_display(show_times=False)
)
)
else:
p_str = (
shorten(self.invoice.event.name) + '\n' + self.invoice.event.get_date_from_display(show_times=False)
)
elif d_from:
p_str = shorten(self.invoice.event.name) + '\n' + date_format(d_from, "DATE_FORMAT")
else:
p_str = shorten(self.invoice.event.name)
@@ -580,28 +583,11 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
canvas.drawRightString(self.pagesize[0] - 20 * mm, (297 - 100) * mm, self._normalize(gettext('TEST MODE')))
canvas.restoreState()
def _draw_watermark(self, canvas):
watermark = self.invoice.transmission_type_instance.pdf_watermark()
if watermark:
canvas.saveState()
for font_size in range(200, 20, -10):
width = stringWidth(watermark, self.font_bold, font_size)
if width < self.pagesize[0]:
break
canvas.translate(self.pagesize[0] / 2, self.pagesize[1] / 2)
canvas.rotate(math.atan(self.pagesize[1] / self.pagesize[0]) / math.pi * 180)
canvas.setFont(self.font_bold, font_size)
canvas.setFillColorRGB(.92, .92, .92)
canvas.drawCentredString(0, - font_size / 2, self._normalize(watermark))
canvas.restoreState()
def _on_first_page(self, canvas: Canvas, doc):
canvas.setCreator('pretix.eu')
canvas.setTitle(pgettext('invoice', 'Invoice {num}').format(num=self.invoice.number))
canvas.saveState()
self._draw_watermark(canvas)
self._draw_footer(canvas)
self._draw_testmode(canvas)
self._draw_invoice_from_label(canvas)
@@ -631,14 +617,6 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
def _get_intro(self):
story = []
type_info_text = self.invoice.transmission_type_instance.pdf_info_text()
if type_info_text:
story.append(FontFallbackParagraph(
type_info_text,
self.stylesheet['WarningBlock']
))
if self.invoice.custom_field:
story.append(FontFallbackParagraph(
'{}: {}'.format(
@@ -686,6 +664,12 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
def _get_story(self, doc):
has_taxes = any(il.tax_value for il in self.invoice.lines.all()) or self.invoice.reverse_charge
header_dates = self._date_range_in_header()
tz = self.invoice.event.timezone
has_multiple_service_dates = len(set(
(il.period_start, il.period_end) for il in self.invoice.lines.all()
)) > 1
request_show_service_date = False
story = [
NextPageTemplate('FirstPage'),
@@ -729,15 +713,73 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
)]
def _group_key(line):
return (line.description, line.tax_rate, line.tax_name, line.net_value, line.gross_value, line.subevent_id,
line.event_date_from, line.event_date_to)
return (line.description, line.tax_rate, line.tax_name, line.net_value, line.gross_value, line.subevent,
line.period_start, line.period_end)
def day(dt: datetime.datetime) -> datetime.date:
if dt is None:
return None
return dt.astimezone(tz).date()
total = Decimal('0.00')
for (description, tax_rate, tax_name, net_value, gross_value, *ignored), lines in addon_aware_groupby(
for (description, tax_rate, tax_name, net_value, gross_value, subevent, period_start, period_end), lines in addon_aware_groupby(
self.invoice.lines.all(),
key=_group_key,
is_addon=lambda l: l.description.startswith(" +"),
):
# Try to be clever and figure out when organizers would want to show the period. This heuristic is
# not perfect and the only "fully correct" way would be to include the period on every line always,
# however this will cause confusion (a) due to useless repetition of the same date all over the invoice
# (b) due to not respecting the show_date_to setting of events in cases where we could have respected it.
# Still, we want to show the date explicitly if its different to the event or invoice date.
if period_start and period_end and day(period_end) != day(period_start):
# It's a multi-day period, such as the validity of the ticket or an event date period
if day(period_start) == header_dates[0] and day(period_end) == header_dates[1]:
# This is the exact event period we already printed in the header, no need to repeat it.
period_line = ""
elif (self.event.has_subevents and subevent and day(subevent.date_from) == day(period_start) and
day(subevent.date_to) == day(period_end)):
# For subevents, build_invoice already includes the date in the description in the event-default format.
period_line = ""
else:
period_line = f"{date_format(day(period_start), 'SHORT_DATE_FORMAT')} {date_format(day(period_end), 'SHORT_DATE_FORMAT')}"
elif period_start or period_end:
# It's a single-day period
delivery_day = day(period_end or period_start)
if delivery_day in (header_dates[0], header_dates[1]):
# This is the event date we already printed in the header, no need to repeat it.
period_line = ""
elif self.event.has_subevents and subevent and delivery_day in (day(subevent.date_from), day(subevent.date_to)):
# For subevents, build_invoice already includes the date in the description in the event-default format.
period_line = ""
elif (delivery_day == self.invoice.date) and header_dates[0] is None:
# This is a shop that doesn't show the date of the event in the header, and the period is the invoice
# date. We assume that this is an 'everything is executed immediately' situation and do not want to
# confuse with showing additional dates on the invoice. This is the case that is not guaranteed to be
# correct in all cases and might need to change in the future. If customers have legal concerns, a
# quick fix is including a sentence like "Delivery date is the invoice date unless otherwise indicated:"
# in a custom text on the invoice.
period_line = ""
else:
period_line = date_format(delivery_day, 'SHORT_DATE_FORMAT')
else:
# No period known
period_line = ""
if not has_multiple_service_dates and period_line:
# Group together at the end of the invoice
request_show_service_date = period_line
else:
description += "\n" + period_line
lines = list(lines)
if has_taxes:
if len(lines) > 1:
@@ -746,6 +788,7 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
gross_price=money_filter(gross_value, self.invoice.event.currency),
)
description = description + "\n" + single_price_line
tdata.append((
FontFallbackParagraph(
self._clean_text(description, tags=['br']),
@@ -850,6 +893,12 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
story.append(Spacer(1, 10 * mm))
if request_show_service_date:
story.append(FontFallbackParagraph(
self._normalize(pgettext('invoice', 'Invoice period: {daterange}').format(daterange=request_show_service_date)),
self.stylesheet['Normal']
))
if self.invoice.payment_provider_text:
story.append(FontFallbackParagraph(
self._normalize(self.invoice.payment_provider_text),
+6 -16
View File
@@ -23,7 +23,7 @@ import re
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _, pgettext
from django.utils.translation import gettext_lazy as _
from django_countries.fields import Country
from pretix.base.invoicing.transmission import (
@@ -125,15 +125,15 @@ class PeppolIdValidator:
def __call__(self, value):
if ":" not in value:
raise ValidationError(_("A Peppol participant ID always starts with a prefix, followed by a colon (:)."))
raise ValidationError(_("A PEPPOL participant ID always starts with a prefix, followed by a colon (:)."))
prefix, second = value.split(":", 1)
if prefix not in self.regex_rules:
raise ValidationError(_("The Peppol participant ID prefix %(number)s is not known to our system. Please "
raise ValidationError(_("The PEPPOL participant ID prefix %(number)s is not known to our system. Please "
"reach out to us if you are sure this ID is correct."), params={"number": prefix})
if not re.match(self.regex_rules[prefix], second):
raise ValidationError(_("The Peppol participant ID does not match the validation rules for the prefix "
raise ValidationError(_("The PEPPOL participant ID does not match the validation rules for the prefix "
"%(number)s. Please reach out to us if you are sure this ID is correct."),
params={"number": prefix})
return value
@@ -142,7 +142,7 @@ class PeppolIdValidator:
@transmission_types.new()
class PeppolTransmissionType(TransmissionType):
identifier = "peppol"
verbose_name = "Peppol"
verbose_name = "PEPPOL"
priority = 250
enforce_transmission = True
@@ -153,7 +153,7 @@ class PeppolTransmissionType(TransmissionType):
def invoice_address_form_fields(self) -> dict:
return {
"transmission_peppol_participant_id": forms.CharField(
label=_("Peppol participant ID"),
label=_("PEPPOL participant ID"),
validators=[
PeppolIdValidator(),
]
@@ -165,13 +165,3 @@ class PeppolTransmissionType(TransmissionType):
"company", "street", "zipcode", "city", "country",
}
return base | {"transmission_peppol_participant_id"}
def pdf_watermark(self) -> str:
return pgettext("peppol_invoice", "Visual copy")
def pdf_info_text(self) -> str:
return pgettext(
"peppol_invoice",
"This PDF document is a visual copy of the invoice and does not constitute an invoice for VAT "
"purposes. The original invoice is issued in XML format and transmitted through the Peppol network."
)
-12
View File
@@ -104,18 +104,6 @@ class TransmissionType:
def transmission_info_to_form_data(self, transmission_info: dict) -> dict:
return transmission_info
def pdf_watermark(self) -> Optional[str]:
"""
Return a watermark that should be rendered across the PDF file.
"""
return None
def pdf_info_text(self) -> Optional[str]:
"""
Return an info text that should be rendered on the PDF file.
"""
return None
class TransmissionProvider:
"""
@@ -0,0 +1,80 @@
# Generated by Django 4.2.17 on 2025-09-08 08:14
from django.core.cache import cache
from django.db import migrations
def set_invoice_period(apps, schema_editor):
EventSettingsStore = apps.get_model("pretixbase", "Event_SettingsStore")
ev_seen = set()
insert_queue = []
flush_queue = []
def store():
EventSettingsStore.objects.bulk_create(
insert_queue,
update_conflicts=True,
update_fields=["value"],
unique_fields=["object", "key"],
)
for f in flush_queue:
cache.delete(f)
flush_queue.clear()
insert_queue.clear()
# Existing events that use pretix-zugferd and have explicitly disabled delivery dates
for setting in EventSettingsStore.objects.filter(key="zugferd_include_delivery_date", value="False"):
flush_queue.append("hierarkey_{}_{}".format("event", setting.object_id))
insert_queue.append(
EventSettingsStore(
object_id=setting.object_id,
key="invoice_period",
value="invoice_date",
)
)
ev_seen.add(setting.object_id)
if len(insert_queue) > 1000:
store()
# Existing events that previously hid their date on invoices
for setting in EventSettingsStore.objects.filter(key="show_dates_on_frontpage", value="False"):
if setting.object_id in ev_seen:
continue
flush_queue.append("hierarkey_{}_{}".format("event", setting.object_id))
insert_queue.append(
EventSettingsStore(
object_id=setting.object_id,
key="invoice_period",
value="auto_no_event",
)
)
ev_seen.add(setting.object_id)
if len(insert_queue) > 1000:
store()
store()
class Migration(migrations.Migration):
dependencies = [
("pretixbase", "0288_invoice_transmission"),
]
operations = [
migrations.RenameField(
model_name="invoiceline",
old_name="event_date_to",
new_name="period_end",
),
migrations.RenameField(
model_name="invoiceline",
old_name="event_date_from",
new_name="period_start",
),
migrations.RunPython(
set_invoice_period,
migrations.RunPython.noop,
)
]
-31
View File
@@ -58,37 +58,6 @@ class CachedFile(models.Model):
web_download = models.BooleanField(default=True) # allow web download, True for backwards compatibility in plugins
session_key = models.TextField(null=True, blank=True) # only allow download in this session
def session_key_for_request(self, request, salt=None):
from ...api.models import OAuthAccessToken, OAuthApplication
from .devices import Device
from .organizer import TeamAPIToken
if hasattr(request, "auth") and isinstance(request.auth, OAuthAccessToken):
k = f'app:{request.auth.application.pk}'
elif hasattr(request, "auth") and isinstance(request.auth, OAuthApplication):
k = f'app:{request.auth.pk}'
elif hasattr(request, "auth") and isinstance(request.auth, TeamAPIToken):
k = f'token:{request.auth.pk}'
elif hasattr(request, "auth") and isinstance(request.auth, Device):
k = f'device:{request.auth.pk}'
elif request.session.session_key:
k = request.session.session_key
else:
raise ValueError("No auth method found to bind to")
if salt:
k = f"{k}!{salt}"
return k
def allowed_for_session(self, request, salt=None):
return (
not self.session_key or
self.session_key_for_request(request, salt) == self.session_key
)
def bind_to_session(self, request, salt=None):
self.session_key = self.session_key_for_request(request, salt)
@receiver(post_delete, sender=CachedFile)
def cached_file_delete(sender, instance, **kwargs):
+39 -23
View File
@@ -33,6 +33,7 @@
# License for the specific language governing permissions and limitations under the License.
import string
import warnings
from decimal import Decimal
import pycountry
@@ -42,7 +43,6 @@ from django.db.models.functions import Cast
from django.utils import timezone
from django.utils.crypto import get_random_string
from django.utils.functional import cached_property
from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _, pgettext
from django_scopes import ScopedManager
@@ -369,22 +369,6 @@ class Invoice(models.Model):
from pretix.base.invoicing.transmission import transmission_types
return transmission_types.get(identifier=self.transmission_type)[0]
def set_transmission_failed(self, provider, data):
self.transmission_status = Invoice.TRANSMISSION_STATUS_FAILED
self.transmission_date = now()
if not self.transmission_provider and provider:
self.transmission_provider = provider
self.save(update_fields=["transmission_status", "transmission_date", "transmission_provider"])
self.order.log_action(
"pretix.event.order.invoice.sending_failed",
data={
"full_invoice_no": self.full_invoice_no,
"transmission_provider": provider,
"transmission_type": self.transmission_type,
"data": data,
}
)
class InvoiceLine(models.Model):
"""
@@ -404,10 +388,10 @@ class InvoiceLine(models.Model):
:type tax_name: str
:param subevent: The subevent this line refers to
:type subevent: SubEvent
:param event_date_from: Event date of the (sub)event at the time the invoice was created
:type event_date_from: datetime
:param event_date_to: Event end date of the (sub)event at the time the invoice was created
:type event_date_to: datetime
:param period_start: Start if service period invoiced
:type period_start: datetime
:param period_end: End of service period invoiced
:type period_end: datetime
:param event_location: Event location of the (sub)event at the time the invoice was created
:type event_location: str
:param item: The item this line refers to
@@ -426,8 +410,8 @@ class InvoiceLine(models.Model):
tax_name = models.CharField(max_length=190)
tax_code = models.CharField(max_length=190, null=True, blank=True)
subevent = models.ForeignKey('SubEvent', null=True, blank=True, on_delete=models.PROTECT)
event_date_from = models.DateTimeField(null=True)
event_date_to = models.DateTimeField(null=True)
period_start = models.DateTimeField(null=True)
period_end = models.DateTimeField(null=True)
event_location = models.TextField(null=True, blank=True)
item = models.ForeignKey('Item', null=True, blank=True, on_delete=models.PROTECT)
variation = models.ForeignKey('ItemVariation', null=True, blank=True, on_delete=models.PROTECT)
@@ -444,3 +428,35 @@ class InvoiceLine(models.Model):
def __str__(self):
return 'Line {} of invoice {}'.format(self.position, self.invoice)
@property
def event_date_from(self):
warnings.warn(
'InvoiceLine.event_date_from is deprecated, use period_start instead,',
category=DeprecationWarning,
)
return self.period_start
@event_date_from.setter
def event_date_from(self, value):
warnings.warn(
'InvoiceLine.event_date_from is deprecated, use period_start instead,',
category=DeprecationWarning,
)
self.period_start = value
@property
def event_date_to(self):
warnings.warn(
'InvoiceLine.event_date_to is deprecated, use period_end instead,',
category=DeprecationWarning,
)
return self.period_end
@event_date_to.setter
def event_date_to(self, value):
warnings.warn(
'InvoiceLine.event_date_to is deprecated, use period_end instead,',
category=DeprecationWarning,
)
self.period_to = value
+1 -1
View File
@@ -126,7 +126,7 @@ class Organizer(LoggedModel):
self.settings.cookie_consent = True
plugins = [p for p in settings.PRETIX_PLUGINS_ORGANIZER_DEFAULT.split(",") if p]
if plugins and not self.get_plugins():
if plugins:
self.set_active_plugins(plugins, allow_restricted=plugins)
self.save()
+1 -1
View File
@@ -819,7 +819,7 @@ class Renderer:
# and does not deal with our default value here properly
content = op.secret
else:
content = self._get_text_content(op, order, o).strip()
content = self._get_text_content(op, order, o)
if len(content) == 0:
return
+113 -14
View File
@@ -82,6 +82,10 @@ def build_invoice(invoice: Invoice) -> Invoice:
lp = invoice.order.payments.last()
min_period_start = None
max_period_end = None
now_dt = now()
with (language(invoice.locale, invoice.event.settings.region)):
invoice.invoice_from = invoice.event.settings.get('invoice_address_from')
invoice.invoice_from_name = invoice.event.settings.get('invoice_address_from_name')
@@ -208,7 +212,9 @@ def build_invoice(invoice: Invoice) -> Invoice:
positions = list(
invoice.order.positions.select_related('addon_to', 'item', 'tax_rule', 'subevent', 'variation').annotate(
addon_c=Count('addons')
).prefetch_related('answers', 'answers__options', 'answers__question').order_by('positionid', 'id')
).prefetch_related(
'answers', 'answers__options', 'answers__question', 'granted_memberships',
).order_by('positionid', 'id')
)
reverse_charge = False
@@ -267,6 +273,10 @@ def build_invoice(invoice: Invoice) -> Invoice:
location=_location_oneliner(location)
)
period_start, period_end = _service_period_for_position(invoice, p, now_dt)
min_period_start = min(min_period_start or period_start, period_start)
max_period_end = min(max_period_end or period_end, period_end)
InvoiceLine.objects.create(
position=i,
invoice=invoice,
@@ -277,8 +287,8 @@ def build_invoice(invoice: Invoice) -> Invoice:
item=p.item,
variation=p.variation,
attendee_name=p.attendee_name if invoice.event.settings.invoice_attendee_name else None,
event_date_from=p.subevent.date_from if invoice.event.has_subevents else invoice.event.date_from,
event_date_to=p.subevent.date_to if invoice.event.has_subevents else invoice.event.date_to,
period_start=period_start,
period_end=period_end,
event_location=location if invoice.event.settings.invoice_event_location else None,
tax_rate=p.tax_rate,
tax_code=p.tax_code,
@@ -301,13 +311,29 @@ def build_invoice(invoice: Invoice) -> Invoice:
fee_title = _(fee.get_fee_type_display())
if fee.description:
fee_title += " - " + fee.description
if min_period_start and max_period_end:
# Consider fees to have the same service period as the products sold
period_start = min_period_start
period_end = max_period_end
else:
# Usually can only happen if everything except a cancellation fee is removed
if invoice.event.settings.invoice_period in ("auto", "auto_no_event", "event_date") and not invoice.event.has_subevents:
# Non-series event, let's be backwards-compatible and tag everything with the event period
period_start = invoice.event.date_from
period_end = invoice.event.date_to
else:
# We could try to work from the canceled positions, but it doesn't really make sense. A cancellation
# fee is not "delivered" at the event date, it is rather effective right now.
period_start = period_end = now()
InvoiceLine.objects.create(
position=i + offset,
invoice=invoice,
description=fee_title,
gross_value=fee.value,
event_date_from=None if invoice.event.has_subevents else invoice.event.date_from,
event_date_to=None if invoice.event.has_subevents else invoice.event.date_to,
period_start=period_start,
period_end=period_end,
event_location=(
None if invoice.event.has_subevents
else (str(invoice.event.location)
@@ -351,6 +377,49 @@ def build_cancellation(invoice: Invoice):
return invoice
def _service_period_for_position(invoice, position, invoice_dt):
if invoice.event.settings.invoice_period in ("auto", "auto_no_event"):
if position.valid_from or position.valid_until:
period_start = position.valid_from or now()
period_end = position.valid_until
elif memberships := list(position.granted_memberships.all()):
period_start = min(m.date_start for m in memberships)
period_end = max(m.date_end for m in memberships)
elif invoice.event.has_subevents:
if position.subevent:
period_start = position.subevent.date_from
period_end = position.subevent.date_to
else:
# Currently impossible case, but might not be in the future and never makes
# sense to use the event date here
period_start = invoice_dt
period_end = invoice_dt
elif invoice.event.settings.invoice_period == "auto_no_event":
period_start = invoice_dt
period_end = invoice_dt
else:
period_start = invoice.event.date_from
period_end = invoice.event.date_to
elif invoice.event.settings.invoice_period == "order_date":
period_start = invoice.order.datetime
period_end = invoice.order.datetime
elif invoice.event.settings.invoice_period == "event_date":
if position.subevent:
period_start = position.subevent.date_from
period_end = position.subevent.date_to
else:
period_start = invoice.event.date_from
period_end = invoice.event.date_to
elif invoice.event.settings.invoice_period == "invoice_date":
period_start = period_end = invoice_dt
else:
raise ValueError(f"Invalid invoice period setting '{invoice.event.settings.invoice_period}'")
if not period_end:
period_end = period_start
return period_start, period_end
def generate_cancellation(invoice: Invoice, trigger_pdf=True):
if invoice.canceled:
raise ValueError("Invoice should not be canceled twice.")
@@ -456,6 +525,12 @@ def build_preview_invoice_pdf(event):
if not locale or locale == '__user__':
locale = event.settings.locale
if event.settings.invoice_period in ("auto", "auto_no_event", "event_date"):
period_start = event.date_from
period_end = event.date_to or event.date_from
else:
period_start = period_end = timezone.now()
with rolledback_transaction(), language(locale, event.settings.region):
order = event.orders.create(
status=Order.STATUS_PENDING, datetime=timezone.now(),
@@ -506,8 +581,8 @@ def build_preview_invoice_pdf(event):
invoice=invoice, description=_("Sample product {}").format(i + 1),
gross_value=tax.gross, tax_value=tax.tax,
tax_rate=tax.rate, tax_name=tax.name, tax_code=tax.code,
event_date_from=event.date_from,
event_date_to=event.date_to,
period_start=period_start,
period_end=period_end,
event_location=event.settings.invoice_event_location,
)
else:
@@ -515,8 +590,8 @@ def build_preview_invoice_pdf(event):
InvoiceLine.objects.create(
invoice=invoice, description=_("Sample product A"),
gross_value=100, tax_value=0, tax_rate=0, tax_code=None,
event_date_from=event.date_from,
event_date_to=event.date_to,
period_start=period_start,
period_end=period_end,
event_location=event.settings.invoice_event_location,
)
@@ -664,7 +739,20 @@ def transmit_invoice(sender, invoice_id, allow_retransmission=True, **kwargs):
break
if not provider:
invoice.set_transmission_failed(provider=None, data={"reason": "no_provider"})
invoice.transmission_status = Invoice.TRANSMISSION_STATUS_FAILED
invoice.transmission_date = now()
invoice.save(update_fields=["transmission_status", "transmission_date"])
invoice.order.log_action(
"pretix.event.order.invoice.sending_failed",
data={
"full_invoice_no": invoice.full_invoice_no,
"transmission_provider": None,
"transmission_type": invoice.transmission_type,
"data": {
"reason": "no_provider",
},
}
)
return
if invoice.order.testmode and not provider.testmode_supported:
@@ -685,7 +773,18 @@ def transmit_invoice(sender, invoice_id, allow_retransmission=True, **kwargs):
provider.transmit(invoice)
except Exception as e:
logger.exception(f"Transmission of invoice {invoice.pk} failed with exception.")
invoice.set_transmission_failed(provider=provider.identifier, data={
"reason": "exception",
"exception": str(e),
})
invoice.transmission_status = Invoice.TRANSMISSION_STATUS_FAILED
invoice.transmission_date = now()
invoice.save(update_fields=["transmission_status", "transmission_date"])
invoice.order.log_action(
"pretix.event.order.invoice.sending_failed",
data={
"full_invoice_no": invoice.full_invoice_no,
"transmission_provider": None,
"transmission_type": invoice.transmission_type,
"data": {
"reason": "exception",
"exception": str(e),
},
}
)
+50 -80
View File
@@ -222,7 +222,7 @@ def mail(email: Union[str, Sequence[str]], subject: str, template: Union[str, La
'invoice_company': ''
})
renderer = ClassicMailRenderer(None, organizer)
body_plain = render_mail(template, context, placeholder_mode=SafeFormatter.MODE_RICH_TO_PLAIN)
content_plain = body_plain = render_mail(template, context)
subject = str(subject).format_map(TolerantDict(context))
sender = (
sender or
@@ -316,7 +316,6 @@ def mail(email: Union[str, Sequence[str]], subject: str, template: Union[str, La
with override(timezone):
try:
content_plain = render_mail(template, context, placeholder_mode=None)
if plain_text_only:
body_html = None
elif 'context' in inspect.signature(renderer.render).parameters:
@@ -496,7 +495,7 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
email = email_filter.send_chained(event, 'message', message=email, order=order, user=user)
invoices_to_mark_transmitted = []
invoices_sent = []
if invoices:
invoices = Invoice.objects.filter(pk__in=invoices)
for inv in invoices:
@@ -517,23 +516,7 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
inv.file.file.read(),
'application/pdf'
)
if inv.transmission_type == "email":
# Mark invoice as sent when it was sent to the requested address *either* at the time of
# invoice creation *or* as of right now.
expected_recipients = [
(inv.invoice_to_transmission_info or {}).get("transmission_email_address")
or inv.order.email,
]
try:
expected_recipients.append(
(inv.order.invoice_address.transmission_info or {}).get("transmission_email_address")
or inv.order.email
)
except InvoiceAddress.DoesNotExist:
pass
if any(t in expected_recipients for t in to):
invoices_to_mark_transmitted.append(inv)
invoices_sent.append(inv)
except:
logger.exception('Could not attach invoice to email')
pass
@@ -606,11 +589,6 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
'invoices': [],
}
)
for i in invoices_to_mark_transmitted:
i.set_transmission_failed(provider="email_pdf", data={
"reason": "exception",
"exception": "SMTP code {}, max retries exceeded".format(e.smtp_code),
})
raise e
logger.exception('Error sending email')
@@ -624,11 +602,6 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
'invoices': [],
}
)
for i in invoices_to_mark_transmitted:
i.set_transmission_failed(provider="email_pdf", data={
"reason": "exception",
"exception": "SMTP code {}".format(e.smtp_code),
})
raise SendMailException('Failed to send an email to {}.'.format(to))
except smtplib.SMTPRecipientsRefused as e:
@@ -660,11 +633,6 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
'invoices': [],
}
)
for i in invoices_to_mark_transmitted:
i.set_transmission_failed(provider="email_pdf", data={
"reason": "exception",
"exception": "SMTP error",
})
raise SendMailException('Failed to send an email to {}.'.format(to))
except Exception as e:
@@ -682,11 +650,6 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
'invoices': [],
}
)
for i in invoices_to_mark_transmitted:
i.set_transmission_failed(provider="email_pdf", data={
"reason": "exception",
"exception": "Internal error",
})
raise e
if log_target:
log_target.log_action(
@@ -698,63 +661,70 @@ def mail_send_task(self, *args, to: List[str], subject: str, body: str, html: st
'invoices': [],
}
)
for i in invoices_to_mark_transmitted:
i.set_transmission_failed(provider="email_pdf", data={
"reason": "exception",
"exception": "Internal error",
})
logger.exception('Error sending email')
raise SendMailException('Failed to send an email to {}.'.format(to))
else:
for i in invoices_to_mark_transmitted:
if i.transmission_status != Invoice.TRANSMISSION_STATUS_COMPLETED:
i.transmission_date = now()
i.transmission_status = Invoice.TRANSMISSION_STATUS_COMPLETED
i.transmission_provider = "email_pdf"
i.transmission_info = {
"sent": [
for i in invoices_sent:
if i.transmission_type == "email":
# Mark invoice as sent when it was sent to the requested address *either* at the time of invoice
# creation *or* as of right now.
expected_recipients = [
(i.invoice_to_transmission_info or {}).get("transmission_email_address") or i.order.email,
]
try:
expected_recipients.append((i.order.invoice_address.transmission_info or {}).get("transmission_email_address") or i.order.email)
except InvoiceAddress.DoesNotExist:
pass
if not any(t in expected_recipients for t in to):
continue
if i.transmission_status != Invoice.TRANSMISSION_STATUS_COMPLETED:
i.transmission_date = now()
i.transmission_status = Invoice.TRANSMISSION_STATUS_COMPLETED
i.transmission_provider = "email_pdf"
i.transmission_info = {
"sent": [
{
"recipients": to,
"datetime": now().isoformat(),
}
]
}
i.save(update_fields=[
"transmission_date", "transmission_provider", "transmission_status",
"transmission_info"
])
elif i.transmission_provider == "email_pdf":
i.transmission_info["sent"].append(
{
"recipients": to,
"datetime": now().isoformat(),
}
]
}
i.save(update_fields=[
"transmission_date", "transmission_provider", "transmission_status",
"transmission_info"
])
elif i.transmission_provider == "email_pdf":
i.transmission_info["sent"].append(
{
"recipients": to,
"datetime": now().isoformat(),
)
i.save(update_fields=[
"transmission_info"
])
i.order.log_action(
"pretix.event.order.invoice.sent",
data={
"full_invoice_no": i.full_invoice_no,
"transmission_provider": "email_pdf",
"transmission_type": "email",
"data": {
"recipients": [to],
},
}
)
i.save(update_fields=[
"transmission_info"
])
i.order.log_action(
"pretix.event.order.invoice.sent",
data={
"full_invoice_no": i.full_invoice_no,
"transmission_provider": "email_pdf",
"transmission_type": "email",
"data": {
"recipients": [to],
},
}
)
def mail_send(*args, **kwargs):
mail_send_task.apply_async(args=args, kwargs=kwargs)
def render_mail(template, context, placeholder_mode=SafeFormatter.MODE_RICH_TO_PLAIN):
def render_mail(template, context):
if isinstance(template, LazyI18nString):
body = str(template)
if context and placeholder_mode:
body = format_map(body, context, mode=placeholder_mode)
if context:
body = format_map(body, context, mode=SafeFormatter.MODE_IGNORE_RICH)
else:
tpl = get_template(template)
body = tpl.render(context)
+18 -52
View File
@@ -26,7 +26,7 @@ from decimal import Decimal
from django.dispatch import receiver
from django.utils.formats import date_format
from django.utils.html import escape, mark_safe
from django.utils.html import escape
from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _
@@ -123,10 +123,6 @@ class BaseRichTextPlaceholder(BaseTextPlaceholder):
def identifier(self):
return self._identifier
@property
def allowed_in_plain_content(self):
return False
@property
def required_context(self):
return self._args
@@ -198,33 +194,6 @@ class SimpleButtonPlaceholder(BaseRichTextPlaceholder):
return f'{text}: {url}'
class MarkdownTextPlaceholder(BaseRichTextPlaceholder):
def __init__(self, identifier, args, func, sample, inline):
super().__init__(identifier, args)
self._func = func
self._sample = sample
self._snippet = inline
@property
def allowed_in_plain_content(self):
return self._snippet
def render_plain(self, **context):
return self._func(**{k: context[k] for k in self._args})
def render_html(self, **context):
return mark_safe(markdown_compile_email(self.render_plain(**context), snippet=self._snippet))
def render_sample_plain(self, event):
if callable(self._sample):
return self._sample(event)
else:
return self._sample
def render_sample_html(self, event):
return mark_safe(markdown_compile_email(self.render_sample_plain(event), snippet=self._snippet))
class PlaceholderContext(SafeFormatter):
"""
Holds the contextual arguments and corresponding list of available placeholders for formatting
@@ -605,7 +574,7 @@ def base_placeholders(sender, **kwargs):
'invoice_company', ['invoice_address'], lambda invoice_address: invoice_address.company or '',
_('Sample Corporation')
),
MarkdownTextPlaceholder(
SimpleFunctionalTextPlaceholder(
'orders', ['event', 'orders'], lambda event, orders: '\n' + '\n\n'.join(
'* {} - {}'.format(
order.full_code,
@@ -635,7 +604,6 @@ def base_placeholders(sender, **kwargs):
{'code': 'OPKSB', 'secret': '09pjdksflosk3njd', 'hash': 'stuvwxy2z'}
]
),
inline=False,
),
SimpleFunctionalTextPlaceholder(
'hours', ['event', 'waiting_list_entry'], lambda event, waiting_list_entry:
@@ -650,13 +618,12 @@ def base_placeholders(sender, **kwargs):
'code', ['waiting_list_voucher'], lambda waiting_list_voucher: waiting_list_voucher.code,
'68CYU2H6ZTP3WLK5'
),
MarkdownTextPlaceholder(
SimpleFunctionalTextPlaceholder(
# join vouchers with two spaces at end of line so markdown-parser inserts a <br>
'voucher_list', ['voucher_list'], lambda voucher_list: ' \n'.join(voucher_list),
'68CYU2H6ZTP3WLK5 \n7MB94KKPVEPSMVF2',
inline=False,
' 68CYU2H6ZTP3WLK5\n 7MB94KKPVEPSMVF2'
),
MarkdownTextPlaceholder(
SimpleFunctionalTextPlaceholder(
# join vouchers with two spaces at end of line so markdown-parser inserts a <br>
'voucher_url_list', ['event', 'voucher_list'],
lambda event, voucher_list: ' \n'.join([
@@ -671,7 +638,6 @@ def base_placeholders(sender, **kwargs):
) + '?voucher=' + c
for c in ['68CYU2H6ZTP3WLK5', '7MB94KKPVEPSMVF2']
]),
inline=False,
),
SimpleFunctionalTextPlaceholder(
'url', ['event', 'voucher_list'], lambda event, voucher_list: build_absolute_uri(event, 'presale:event.index', kwargs={
@@ -690,13 +656,13 @@ def base_placeholders(sender, **kwargs):
'comment', ['comment'], lambda comment: comment,
_('An individual text with a reason can be inserted here.'),
),
MarkdownTextPlaceholder(
SimpleFunctionalTextPlaceholder(
'payment_info', ['order', 'payments'], _placeholder_payments,
_('The amount has been charged to your card.'), inline=False,
_('The amount has been charged to your card.'),
),
MarkdownTextPlaceholder(
SimpleFunctionalTextPlaceholder(
'payment_info', ['payment_info'], lambda payment_info: payment_info,
_('Please transfer money to this bank account: 9999-9999-9999-9999'), inline=False,
_('Please transfer money to this bank account: 9999-9999-9999-9999'),
),
SimpleFunctionalTextPlaceholder(
'attendee_name', ['position'], lambda position: position.attendee_name,
@@ -753,13 +719,13 @@ def base_placeholders(sender, **kwargs):
))
for k, v in sender.meta_data.items():
ph.append(MarkdownTextPlaceholder(
ph.append(SimpleFunctionalTextPlaceholder(
'meta_%s' % k, ['event'], lambda event, k=k: event.meta_data[k],
v, inline=True,
v
))
ph.append(MarkdownTextPlaceholder(
ph.append(SimpleFunctionalTextPlaceholder(
'meta_%s' % k, ['event_or_subevent'], lambda event_or_subevent, k=k: event_or_subevent.meta_data[k],
v, inline=True,
v
))
return ph
@@ -787,7 +753,7 @@ def get_available_placeholders(event, base_parameters, rich=False):
if not isinstance(val, (list, tuple)):
val = [val]
for v in val:
if isinstance(v, BaseRichTextPlaceholder) and not rich and not v.allowed_in_plain_content:
if isinstance(v, BaseRichTextPlaceholder) and not rich:
continue
if all(rp in base_parameters for rp in v.required_context):
params[v.identifier] = v
@@ -809,13 +775,13 @@ def get_sample_context(event, context_parameters, rich=True):
)
)
elif str(sample).strip().startswith('* ') or str(sample).startswith(' '):
context_dict[k] = mark_safe('<div class="placeholder" title="{}">{}</div>'.format(
context_dict[k] = '<div class="placeholder" title="{}">{}</div>'.format(
lbl,
markdown_compile_email(str(sample))
))
)
else:
context_dict[k] = mark_safe('<span class="placeholder" title="{}">{}</span>'.format(
context_dict[k] = '<span class="placeholder" title="{}">{}</span>'.format(
lbl,
escape(sample)
))
)
return context_dict
+3
View File
@@ -69,6 +69,9 @@ def generate_order(order: int, provider: str):
prov = response(order.event)
if prov.identifier == provider:
filename, ttype, data = prov.generate_order(order)
if ttype == 'text/uri-list':
continue
path, ext = os.path.splitext(filename)
for ct in CachedCombinedTicket.objects.filter(order=order, provider=provider):
ct.delete()
+29
View File
@@ -1098,6 +1098,35 @@ DEFAULTS = {
help_text=_("Invoices will never be automatically generated for free orders.")
)
},
'invoice_period': {
'default': 'auto',
'type': str,
'form_class': forms.ChoiceField,
'serializer_class': serializers.ChoiceField,
'serializer_kwargs': dict(
choices=(
('auto', _('Automatic based on ticket-specific validity, membership validity, event series date, or event date)')),
('auto_no_event', _('Automatic, but prefer invoice date over event date')),
('event_date', _('Event date')),
('order_date', _('Order date')),
('invoice_date', _('Invoice date')),
),
),
'form_kwargs': dict(
label=_("Date of service"),
widget=forms.RadioSelect,
choices=(
('auto', _('Automatic based on ticket-specific validity, membership validity, event series date, or event date)')),
('auto_no_event', _('Automatic, but prefer invoice date over event date')),
('event_date', _('Event date')),
('order_date', _('Order date')),
('invoice_date', _('Invoice date')),
),
help_text=_("This controls what dates are shown on the invoice, but is especially important for "
"electronic invoicing."),
required=True,
)
},
'invoice_reissue_after_modify': {
'default': 'False',
'type': bool,
+14 -34
View File
@@ -44,7 +44,6 @@ from django.conf import settings
from django.core import signing
from django.urls import reverse
from django.utils.functional import SimpleLazyObject
from django.utils.html import escape
from django.utils.http import url_has_allowed_host_and_scheme
from django.utils.safestring import mark_safe
from markdown import Extension
@@ -53,8 +52,6 @@ from markdown.postprocessors import Postprocessor
from markdown.treeprocessors import UnescapeTreeprocessor
from tlds import tld_set
from pretix.helpers.format import SafeFormatter, format_map
register = template.Library()
ALLOWED_TAGS_SNIPPET = {
@@ -297,44 +294,27 @@ class LinkifyAndCleanExtension(Extension):
)
def markdown_compile_email(source, allowed_tags=None, allowed_attributes=ALLOWED_ATTRIBUTES, snippet=False, context=None):
if allowed_tags is None:
allowed_tags = ALLOWED_TAGS_SNIPPET if snippet else ALLOWED_TAGS
context_callbacks = []
if context:
# This is a workaround to fix placeholders in URL targets
def context_callback(attrs, new=False):
if (None, "href") in attrs and "{" in attrs[None, "href"]:
# Do not use MODE_RICH_TO_HTML to avoid recursive linkification
attrs[None, "href"] = escape(format_map(attrs[None, "href"], context=context, mode=SafeFormatter.MODE_RICH_TO_PLAIN))
return attrs
context_callbacks.append(context_callback)
def markdown_compile_email(source, allowed_tags=ALLOWED_TAGS, allowed_attributes=ALLOWED_ATTRIBUTES):
linker = bleach.Linker(
url_re=URL_RE,
email_re=EMAIL_RE,
callbacks=context_callbacks + DEFAULT_CALLBACKS + [truelink_callback, abslink_callback],
callbacks=DEFAULT_CALLBACKS + [truelink_callback, abslink_callback],
parse_email=True
)
exts = [
'markdown.extensions.sane_lists',
'markdown.extensions.tables',
EmailNl2BrExtension(),
LinkifyAndCleanExtension(
linker,
tags=set(allowed_tags),
attributes=allowed_attributes,
protocols=ALLOWED_PROTOCOLS,
strip=snippet,
)
]
if snippet:
exts.append(SnippetExtension())
return markdown.markdown(
source,
extensions=exts
extensions=[
'markdown.extensions.sane_lists',
'markdown.extensions.tables',
EmailNl2BrExtension(),
LinkifyAndCleanExtension(
linker,
tags=set(allowed_tags),
attributes=allowed_attributes,
protocols=ALLOWED_PROTOCOLS,
strip=False,
)
]
)
+3 -2
View File
@@ -36,8 +36,9 @@ class DownloadView(TemplateView):
def object(self) -> CachedFile:
try:
o = get_object_or_404(CachedFile, id=self.kwargs['id'], web_download=True)
if not o.allowed_for_session(self.request):
raise Http404()
if o.session_key:
if o.session_key != self.request.session.session_key:
raise Http404()
return o
except (ValueError, ValidationError): # Invalid URLs
raise Http404()
+1
View File
@@ -857,6 +857,7 @@ class InvoiceSettingsForm(EventSettingsValidationMixin, SettingsForm):
'invoice_show_payments',
'invoice_reissue_after_modify',
'invoice_generate',
'invoice_period',
'invoice_attendee_name',
'invoice_event_location',
'invoice_include_expire_date',
+1 -2
View File
@@ -67,8 +67,7 @@ class RRuleForm(forms.Form):
)
count = forms.IntegerField(
label=_('Number of repetitions'),
initial=10,
min_value=1,
initial=10
)
until = forms.DateField(
widget=forms.DateInput(
+4 -4
View File
@@ -236,7 +236,7 @@ class VoucherForm(I18nModelForm):
try:
Voucher.clean_max_usages(data, self.instance.redeemed)
except ValidationError as e:
raise ValidationError({"max_usages": e})
raise ValidationError({"max_usages": e.message})
check_quota = Voucher.clean_quota_needs_checking(
data, self.initial_instance_data,
item_changed=data.get('itemvar') != self.initial.get('itemvar'),
@@ -308,8 +308,8 @@ class VoucherBulkForm(VoucherForm):
)
Recipient = namedtuple('Recipient', 'email number name tag')
def _set_field_placeholders(self, fn, base_parameters, rich=False):
placeholders = get_available_placeholders(self.instance.event, base_parameters, rich=rich)
def _set_field_placeholders(self, fn, base_parameters):
placeholders = get_available_placeholders(self.instance.event, base_parameters)
ht = format_placeholders_help_text(placeholders, self.instance.event)
if self.fields[fn].help_text:
@@ -345,7 +345,7 @@ class VoucherBulkForm(VoucherForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._set_field_placeholders('send_subject', ['event', 'name'])
self._set_field_placeholders('send_message', ['event', 'voucher_list', 'name'], rich=True)
self._set_field_placeholders('send_message', ['event', 'voucher_list', 'name'])
with language(self.instance.event.settings.locale, self.instance.event.settings.region):
for f in ("send_subject", "send_message"):
+1 -1
View File
@@ -581,7 +581,7 @@ class CoreOrderLogEntryType(OrderLogEntryType):
'The voucher has been set to expire because the recipient removed themselves from the waiting list.'),
'pretix.voucher.changed': _('The voucher has been changed.'),
'pretix.voucher.deleted': _('The voucher has been deleted.'),
'pretix.voucher.added.waitinglist': _('The voucher has been assigned to {email} through the waiting list.'),
'pretix.voucher.added.waitinglist': _('The voucher has been sent to {email} through the waiting list.'),
})
class CoreVoucherLogEntryType(VoucherLogEntryType):
pass
+3 -7
View File
@@ -310,13 +310,9 @@ an instance of a form class that you bind yourself when appropriate. Your form w
as part of the standard validation and rendering cycle and rendered using default bootstrap
styles. It is advisable to set a prefix for your form to avoid clashes with other plugins.
Your forms may also have special properties:
- ``template`` with a template that will be included to render the form. Your template will be passed a ``form``
variable with your form.
- ``title``, which will be used as a headline.
- ``ìs_layouts = True``, if your form should be grouped with the ticket layout settings (mutually exclusive with setting ``title``).
- ``group_with_formset = True``, if your form should be grouped with a formset of the same ``title``
Your forms may also have two special properties: ``template`` with a template that will be
included to render the form, and ``title``, which will be used as a headline. Your template
will be passed a ``form`` variable with your form.
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
"""
@@ -15,6 +15,19 @@
{% bootstrap_field form.invoice_email_attachment layout="control" %}
{% bootstrap_field form.invoice_email_organizer layout="control" %}
{% bootstrap_field form.invoice_language layout="control" %}
{% bootstrap_field form.invoice_period layout="control" %}
{% if not request.event.settings.show_dates_on_frontpage %}
<div data-display-dependency="input[name=invoice_period][value=auto],input[name=invoice_period][value=event_date]">
<div class="alert alert-warning dynamic">
{% blocktrans trimmed %}
You configured that your shop is not an event and the event date should not be shown.
Therefore, we recommend that you set the date of service to a different option.
{% endblocktrans %}
</div>
</div>
{% endif %}
{% bootstrap_field form.invoice_include_free layout="control" %}
{% bootstrap_field form.invoice_show_payments layout="control" %}
{% bootstrap_field form.invoice_reissue_after_modify layout="control" %}
@@ -177,18 +177,6 @@
{% for v in formsets.values %}
<fieldset>
<legend>{{ v.title }}</legend>
{% for f in plugin_forms %}
{% if f.group_with_formset and f.title == v.title %}
{% if f.template and not "template" in f.fields %}
{% include f.template with form=f %}
{% else %}
{% bootstrap_form f layout="control" %}
{% endif %}
<hr />
{% endif %}
{% endfor %}
{% include v.template with formset=v %}
</fieldset>
{% endfor %}
@@ -288,7 +276,7 @@
{% endfor %}
</fieldset>
{% for f in plugin_forms %}
{% if not f.is_layouts and not f.group_with_formset and f.title %}
{% if not f.is_layouts and f.title %}
<fieldset>
<legend>{{ f.title }}</legend>
{% if f.template and not "template" in f.fields %}
@@ -238,7 +238,7 @@
<div class="row control-group pdf-info">
<div class="col-sm-12">
<label for="pdf-info-name">{% trans "Layout name" %}</label><br>
<input type="text" id="pdf-info-name" class="input-block-level form-control" name="name" value="{{ name }}" maxlength="190">
<input type="text" id="pdf-info-name" class="input-block-level form-control" name="name" value="{{ name }}">
</div>
</div>
{% endif %}
+1 -6
View File
@@ -38,7 +38,6 @@ from datetime import timedelta
from django.conf import settings
from django.contrib import messages
from django.http import Http404
from django.shortcuts import get_object_or_404, redirect
from django.urls import reverse
from django.utils.functional import cached_property
@@ -86,7 +85,6 @@ class BaseImportView(TemplateView):
filename='import.csv',
type='text/csv',
)
cf.bind_to_session(request, "modelimport")
cf.file.save('import.csv', request.FILES['file'])
if self.request.POST.get("charset") in ENCODINGS:
@@ -139,10 +137,7 @@ class BaseProcessView(AsyncAction, FormView):
@cached_property
def file(self):
cf = get_object_or_404(CachedFile, pk=self.kwargs.get("file"), filename="import.csv")
if not cf.allowed_for_session(self.request, "modelimport"):
raise Http404()
return cf
return get_object_or_404(CachedFile, pk=self.kwargs.get("file"), filename="import.csv")
@cached_property
def parsed(self):
+7 -23
View File
@@ -711,15 +711,11 @@ class OrderDownload(AsyncAction, OrderView):
)
return resp
elif isinstance(value, CachedCombinedTicket):
if value.type == 'text/uri-list':
resp = HttpResponseRedirect(value.file.file.read())
return resp
else:
resp = FileResponse(value.file.file, content_type=value.type)
resp['Content-Disposition'] = 'attachment; filename="{}-{}-{}{}"'.format(
self.request.event.slug.upper(), self.order.code, self.output.identifier, value.extension
)
return resp
resp = FileResponse(value.file.file, content_type=value.type)
resp['Content-Disposition'] = 'attachment; filename="{}-{}-{}{}"'.format(
self.request.event.slug.upper(), self.order.code, self.output.identifier, value.extension
)
return resp
else:
return redirect(self.get_self_url())
@@ -2836,23 +2832,11 @@ class ExportView(EventPermissionRequiredMixin, ExportMixin, ListView):
def get_queryset(self):
return self.get_scheduled_queryset()
def has_permission(self):
return self.request.user.has_event_permission(self.request.organizer, self.request.event, "can_view_orders")
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
if "schedule" in self.request.POST or self.scheduled:
if "schedule" in self.request.POST and not self.has_permission():
messages.error(
self.request,
_(
"Your user account does not have sufficient permission to run this report, therefore "
"you cannot schedule it."
)
)
else:
ctx['schedule_form'] = self.schedule_form
ctx['rrule_form'] = self.rrule_form
ctx['schedule_form'] = self.schedule_form
ctx['rrule_form'] = self.rrule_form
elif not self.exporter:
for s in ctx['scheduled']:
try:
+2 -19
View File
@@ -2189,28 +2189,11 @@ class ExportView(OrganizerPermissionRequiredMixin, ExportMixin, ListView):
def get_queryset(self):
return self.get_scheduled_queryset()
def has_permission(self):
if isinstance(self.exporter, OrganizerLevelExportMixin):
if not self.request.user.has_organizer_permission(self.request.organizer, self.exporter.organizer_required_permission):
return False
if self.exporter and not self.exporter.available_for_user(self.request.user):
return False
return True
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
if "schedule" in self.request.POST or self.scheduled:
if "schedule" in self.request.POST and not self.has_permission():
messages.error(
self.request,
_(
"Your user account does not have sufficient permission to run this report, therefore "
"you cannot schedule it."
)
)
else:
ctx['schedule_form'] = self.schedule_form
ctx['rrule_form'] = self.rrule_form
ctx['schedule_form'] = self.schedule_form
ctx['rrule_form'] = self.rrule_form
elif not self.exporter:
for s in ctx['scheduled']:
try:
+1 -1
View File
@@ -242,7 +242,7 @@ class BaseEditorView(EventPermissionRequiredMixin, TemplateView):
cf = None
if request.POST.get("background", "").strip():
try:
cf = CachedFile.objects.get(id=request.POST.get("background"), web_download=True)
cf = CachedFile.objects.get(id=request.POST.get("background"))
except CachedFile.DoesNotExist:
pass
+2 -5
View File
@@ -38,8 +38,7 @@ from collections import OrderedDict
from zipfile import ZipFile
from django.contrib import messages
from django.http import Http404
from django.shortcuts import redirect
from django.shortcuts import get_object_or_404, redirect
from django.urls import reverse
from django.utils.functional import cached_property
from django.utils.translation import get_language, gettext_lazy as _
@@ -95,8 +94,6 @@ class ShredDownloadView(RecentAuthenticationRequiredMixin, EventPermissionRequir
cf = CachedFile.objects.get(pk=kwargs['file'])
except CachedFile.DoesNotExist:
raise ShredError(_("The download file could no longer be found on the server, please try to start again."))
if not cf.allowed_for_session(self.request):
raise Http404()
with ZipFile(cf.file.file, 'r') as zipfile:
indexdata = json.loads(zipfile.read('index.json').decode())
@@ -114,7 +111,7 @@ class ShredDownloadView(RecentAuthenticationRequiredMixin, EventPermissionRequir
ctx = super().get_context_data(**kwargs)
ctx['shredders'] = self.shredders
ctx['download_on_shred'] = any(shredder.require_download_confirmation for shredder in shredders)
ctx['file'] = cf
ctx['file'] = get_object_or_404(CachedFile, pk=kwargs.get("file"))
return ctx
+2 -2
View File
@@ -710,9 +710,9 @@ class UserNotificationsEditView(TemplateView):
messages.success(request, _('Your notification settings have been saved.'))
if request.user.notifications_send:
self.request.user.log_action('pretix.user.settings.notifications.enabled', user=self.request.user)
else:
self.request.user.log_action('pretix.user.settings.notifications.disabled', user=self.request.user)
else:
self.request.user.log_action('pretix.user.settings.notifications.enabled', user=self.request.user)
return redirect(
reverse('control:user.settings.notifications') +
('?event={}'.format(self.event.pk) if self.event else '')
-10
View File
@@ -64,16 +64,6 @@ def daterange(df, dt, as_html=False):
return format_html(base_format, _date(df, "j."), mark_safe(until.strip()), _date(dt, "j. F Y"))
elif df.year == dt.year:
return format_html(base_format, _date(df, "j. F"), until, _date(dt, "j. F Y"))
elif lng == "en-nz":
if df.year == dt.year and df.month == dt.month and df.day == dt.day:
# Mon, 15 January 2024
return format_html(base_format, _date(df, "D, j F Y"))
elif df.year == dt.year and df.month == dt.month:
# 1 3 January 2024
return format_html(base_format, _date(df, "j"), until, _date(dt, "j F Y"))
elif df.year == dt.year:
# 1 January 3 April 2024
return format_html(base_format, _date(df, "j F"), until, _date(dt, "j F Y"))
elif lng.startswith("en"):
if df.year == dt.year and df.month == dt.month and df.day == dt.day:
return format_html(base_format, _date(df, "D, N jS, Y"))
+13 -21
View File
@@ -22,8 +22,6 @@
import logging
from string import Formatter
from django.utils.html import conditional_escape
logger = logging.getLogger(__name__)
@@ -42,14 +40,14 @@ class SafeFormatter(Formatter):
Customized version of ``str.format`` that (a) behaves just like ``str.format_map`` and
(b) does not allow any unwanted shenanigans like attribute access or format specifiers.
"""
MODE_IGNORE_RICH = 0
MODE_RICH_TO_PLAIN = 1
MODE_RICH_TO_HTML = 2
def __init__(self, context, raise_on_missing=False, mode=MODE_RICH_TO_PLAIN, linkifier=None):
def __init__(self, context, raise_on_missing=False, mode=MODE_IGNORE_RICH):
self.context = context
self.raise_on_missing = raise_on_missing
self.mode = mode
self.linkifier = linkifier
def get_field(self, field_name, args, kwargs):
return self.get_value(field_name, args, kwargs), field_name
@@ -57,28 +55,22 @@ class SafeFormatter(Formatter):
def get_value(self, key, args, kwargs):
if not self.raise_on_missing and key not in self.context:
return '{' + str(key) + '}'
return self.context[key]
def _prepare_value(self, value):
if isinstance(value, PlainHtmlAlternativeString):
if self.mode == self.MODE_RICH_TO_PLAIN:
return value.plain
r = self.context[key]
if isinstance(r, PlainHtmlAlternativeString):
if self.mode == self.MODE_IGNORE_RICH:
return '{' + str(key) + '}'
elif self.mode == self.MODE_RICH_TO_PLAIN:
return r.plain
elif self.mode == self.MODE_RICH_TO_HTML:
return value.html
else:
value = str(value)
if self.mode == self.MODE_RICH_TO_HTML:
value = conditional_escape(value)
if self.linkifier:
value = self.linkifier.linkify(value)
return value
return r.html
return r
def format_field(self, value, format_spec):
# Ignore format_spec
return super().format_field(self._prepare_value(value), '')
return super().format_field(value, '')
def format_map(template, context, raise_on_missing=False, mode=SafeFormatter.MODE_RICH_TO_PLAIN, linkifier=None):
def format_map(template, context, raise_on_missing=False, mode=SafeFormatter.MODE_IGNORE_RICH):
if not isinstance(template, str):
template = str(template)
return SafeFormatter(context, raise_on_missing, mode=mode, linkifier=linkifier).format(template)
return SafeFormatter(context, raise_on_missing, mode=mode).format(template)
@@ -1,21 +0,0 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io 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/>.
#
@@ -1,50 +0,0 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-2021 rami.io 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/>.
#
# Date according to https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
# Following NZ government guidance from https://www.digital.govt.nz/standards-and-guidance/design-and-ux/content-design-guidance/writing-style/numbers
DATE_FORMAT = "j F Y" # 12 December 2015
DATETIME_FORMAT = "j F Y, g:ia" # 12 December 2015, 5:30pm
TIME_FORMAT = "g:ia" # 5:30pm
YEAR_MONTH_FORMAT = "F Y" # December 2015
MONTH_DAY_FORMAT = "j F" # 12 December
SHORT_DATE_FORMAT = "j F Y" # same as DATE_FORMAT per guidance
SHORT_DATETIME_FORMAT = "j F Y, g:ia"
WEEKDAY_FORMAT = "l" # Monday
WEEKDAY_DATE_FORMAT = "l, j F Y" # Friday, 23 November 2018
WEEK_FORMAT = "\\W W, o" # ISO week: "W 52, 2024"
WEEK_DAY_FORMAT = "D, j M" # Abbrev weekday and month: "Mon, 5 Feb"
SHORT_MONTH_DAY_FORMAT = "j/n" # Numeric day/month: "5/2"
# Parsing inputs; keep d/m/Y and ISO
DATE_INPUT_FORMATS = [
"%d/%m/%Y",
"%Y-%m-%d",
"%d/%m/%y",
]
TIME_INPUT_FORMATS = [
"%I:%M%p", # 5:30pm
"%H:%M:%S",
"%H:%M:%S.%f",
"%H:%M",
]
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+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"
@@ -344,68 +344,68 @@ msgstr ""
msgid "close"
msgstr ""
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: 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:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr ""
@@ -740,7 +740,7 @@ msgstr ""
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr ""
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+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/"
@@ -359,12 +359,12 @@ msgstr "لا"
msgid "close"
msgstr "إغلاق"
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr "مطلوب"
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
@@ -372,11 +372,11 @@ msgstr ""
"تتم معالجة طلبك حاليا. قد يستغرق الأمر بضع دقائق بناء على حجم الفعالية التي "
"اخترت."
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr "طلبك قيد الانتظار وستتم معالجته قريبا."
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -385,36 +385,36 @@ msgstr ""
"وصل طلبك للخادم وننتظر تنفيذه. إذا استغرق الأمر أكثر من دقيقتين تواصل معنا "
"أو عاود المحاولة مجددا."
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "حدث خطأ من نوع {code}."
#: pretix/static/pretixbase/js/asynctask.js:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr "لم نتمكن من الاتصال بالخادم، لكن سنواصل المحاولة، رمز آخر خطأ: {code}"
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "استغرقت الطلب فترة طويلة، الرجاء المحاولة مرة أخرى."
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: 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:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr "جاري معالجة طلبك …"
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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 "
@@ -423,11 +423,11 @@ msgstr ""
"نعمل الآن على ارسال طلبك إلى الخادم، إذا أستغرقت العملية أكثر من دقيقة، يرجى "
"التحقق من اتصالك بالإنترنت ثم أعد تحميل الصفحة مرة أخرى."
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr "أغلق الرسالة"
@@ -798,7 +798,7 @@ msgstr "ستسترد %(currency)%(amount)"
msgid "Please enter the amount the organizer can keep."
msgstr "الرجاء إدخال المبلغ الذي يمكن للمنظم الاحتفاظ به."
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr "التوقيت المحلي:"
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+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"
@@ -344,68 +344,68 @@ msgstr ""
msgid "close"
msgstr ""
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: 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:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr ""
@@ -740,7 +740,7 @@ msgstr ""
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr ""
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
"PO-Revision-Date: 2020-12-19 07:00+0000\n"
"Last-Translator: albert <albert.serra.monner@gmail.com>\n"
"Language-Team: Catalan <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -345,70 +345,70 @@ msgstr ""
msgid "close"
msgstr ""
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
#, fuzzy
#| msgid "Cart expired"
msgid "required"
msgstr "Cistella expirada"
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: 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:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr "Estem processant la vostra sol·licitud …"
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr ""
@@ -751,7 +751,7 @@ msgstr ""
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr ""
File diff suppressed because it is too large Load Diff
+35 -29
View File
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"PO-Revision-Date: 2025-09-08 18:57+0000\n"
"Last-Translator: Alois Pospíšil <alois.pospisil@gmail.com>\n"
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
"PO-Revision-Date: 2025-05-16 17:00+0000\n"
"Last-Translator: David <davemachala@gmail.com>\n"
"Language-Team: Czech <https://translate.pretix.eu/projects/pretix/pretix-js/"
"cs/>\n"
"Language: cs\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Weblate 5.13\n"
"X-Generator: Weblate 5.11.4\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -345,12 +345,12 @@ msgstr "Ne"
msgid "close"
msgstr "zavřít"
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr "povinný"
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
@@ -358,11 +358,11 @@ msgstr ""
"Váš požadavek je právě zpracováván. V závislosti na velikosti vaší udalosti, "
"to může trvat několik minut."
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr "Váš požadavek byl vložem do fronty serveru a brzy bude zpracován."
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -372,14 +372,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:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: 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:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -387,12 +387,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:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: 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:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -400,11 +400,11 @@ msgstr ""
"Momentálně nemůžeme kontaktovat server. Prosím zkuste to znovu. Chybový kód: "
"{code}"
#: pretix/static/pretixbase/js/asynctask.js:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr "Zpracováváme váš požadavek …"
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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 "
@@ -414,11 +414,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:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr "Zavřít zprávu"
@@ -640,15 +640,19 @@ msgid "Unknown error."
msgstr "Neznámá chyba."
#: pretix/static/pretixcontrol/js/ui/main.js:292
#, fuzzy
#| msgid "Your color has great contrast and is very easy to read!"
msgid "Your color has great contrast and will provide excellent accessibility."
msgstr "Tato barva má velmi dobrý kontrast a je velmi dobře čitelná."
msgstr "Tato barva má velmi dobrý kontrast a je velmi dobře čitelná!"
#: pretix/static/pretixcontrol/js/ui/main.js:296
#, fuzzy
#| msgid "Your color has decent contrast and is probably good-enough to read!"
msgid ""
"Your color has decent contrast and is sufficient for minimum accessibility "
"requirements."
msgstr ""
"Tato barva má slušný kontrast a pravděpodobně je dostatečně dobře čitelná."
"Tato barva má slušný kontrast a pravděpodobně je dostatečně dobře čitelná!"
#: pretix/static/pretixcontrol/js/ui/main.js:300
msgid ""
@@ -731,7 +735,7 @@ msgstr "Nákupní košík vypršel"
#: pretix/static/pretixpresale/js/ui/cart.js:58
#: pretix/static/pretixpresale/js/ui/cart.js:84
msgid "Your cart is about to expire."
msgstr "Nákupní košík brzy vyprší."
msgstr ""
#: pretix/static/pretixpresale/js/ui/cart.js:62
msgid "The items in your cart are reserved for you for one minute."
@@ -744,8 +748,10 @@ msgstr[2] ""
"Produkty v nákupním košíku jsou pro vás rezervovány na dalších {num} minut."
#: pretix/static/pretixpresale/js/ui/cart.js:83
#, fuzzy
#| msgid "Cart expired"
msgid "Your cart has expired."
msgstr "Nákupní košík vypršel."
msgstr "Nákupní košík vypršel"
#: pretix/static/pretixpresale/js/ui/cart.js:86
#, fuzzy
@@ -779,7 +785,7 @@ msgstr "Dostanete %(currency)s %(amount)s zpět"
msgid "Please enter the amount the organizer can keep."
msgstr "Zadejte částku, kterou si organizátor může ponechat."
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr "Místní čas:"
@@ -805,12 +811,12 @@ msgstr "Zvýšit počet"
#: pretix/static/pretixpresale/js/widget/widget.js:19
msgctxt "widget"
msgid "Filter events by"
msgstr "Filtrovat události"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:20
msgctxt "widget"
msgid "Filter"
msgstr "Filtrovat"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:21
msgctxt "widget"
@@ -927,7 +933,7 @@ msgstr "Již není k dispozici"
#: pretix/static/pretixpresale/js/widget/widget.js:42
msgctxt "widget"
msgid "Currently not available"
msgstr "Momentálně není k dispozici"
msgstr "Momentálně není k dispozici."
#: pretix/static/pretixpresale/js/widget/widget.js:44
#, javascript-format
@@ -962,7 +968,7 @@ msgstr "Obchod vstupenek otevřit"
#: pretix/static/pretixpresale/js/widget/widget.js:50
msgctxt "widget"
msgid "Checkout"
msgstr "Přejít k platbě"
msgstr "Checkout"
#: pretix/static/pretixpresale/js/widget/widget.js:51
msgctxt "widget"
@@ -1084,7 +1090,7 @@ msgstr "Předchozí týden"
#: pretix/static/pretixpresale/js/widget/widget.js:74
msgctxt "widget"
msgid "Open seat selection"
msgstr "Otevřete výběr míst"
msgstr "Otevřete výběr sedadla"
#: pretix/static/pretixpresale/js/widget/widget.js:75
msgctxt "widget"
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+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"
@@ -345,68 +345,68 @@ msgstr ""
msgid "close"
msgstr ""
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: 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:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr ""
@@ -741,7 +741,7 @@ msgstr ""
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr ""
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
"PO-Revision-Date: 2024-07-10 15:00+0000\n"
"Last-Translator: Nikolai <nikolai@lengefeldt.de>\n"
"Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -357,14 +357,14 @@ msgstr "Nej"
msgid "close"
msgstr "Luk"
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
#, fuzzy
#| msgid "Cart expired"
msgid "required"
msgstr "Kurv udløbet"
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
#, fuzzy
#| msgid ""
#| "Your request has been queued on the server and will now be processed. "
@@ -376,7 +376,7 @@ msgstr ""
"Din forespørgsel er under behandling. Alt efter størrelsen af din event kan "
"der gå op til et par minutter."
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
#, fuzzy
#| msgid ""
#| "Your request has been queued on the server and will now be processed. "
@@ -386,7 +386,7 @@ msgstr ""
"Din forespørgsel er under behandling. Alt efter størrelsen af din event kan "
"der gå op til et par minutter."
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -395,14 +395,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:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: 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:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -410,12 +410,12 @@ msgstr ""
"Vi kan ikke komme i kontakt med serveren, men prøver igen. Seneste fejlkode: "
"{code}"
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: 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:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -423,11 +423,11 @@ msgstr ""
"Vi kan i øjeblikket ikke komme i kontakt med serveren. Prøv igen. Fejlkode: "
"{code}"
#: pretix/static/pretixbase/js/asynctask.js:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr "Vi behandler din bestilling …"
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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 "
@@ -436,11 +436,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:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr "Luk besked"
@@ -810,7 +810,7 @@ msgstr "fra %(currency)s %(price)s"
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr "Din lokaltid:"
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
"PO-Revision-Date: 2025-05-30 11:08+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -345,12 +345,12 @@ msgstr "Nein"
msgid "close"
msgstr "schließen"
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr "erforderlich"
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
@@ -358,13 +358,13 @@ msgstr ""
"Ihre Anfrage wird nun verarbeitet. Je nach Größe der Veranstaltung kann dies "
"einige Minuten dauern."
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
"Ihre Anfrage befindet sich beim Server in der Warteschlange und wird bald "
"verarbeitet."
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -375,14 +375,14 @@ msgstr ""
"bitte oder gehen Sie in Ihrem Browser einen Schritt zurück und versuchen es "
"erneut."
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: 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:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -390,12 +390,12 @@ msgstr ""
"Wir können den Server aktuell nicht erreichen, versuchen es aber weiter. "
"Letzter Fehlercode: {code}"
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: 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:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -403,11 +403,11 @@ msgstr ""
"Wir können den Server aktuell nicht erreichen. Bitte versuchen Sie es noch "
"einmal. Fehlercode: {code}"
#: pretix/static/pretixbase/js/asynctask.js:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr "Wir verarbeiten Ihre Anfrage …"
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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 "
@@ -417,11 +417,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:276
#: pretix/static/pretixbase/js/asynctask.js:270
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:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr "Schließen"
@@ -771,7 +771,7 @@ msgstr "Sie erhalten %(currency)s %(amount)s zurück"
msgid "Please enter the amount the organizer can keep."
msgstr "Bitte geben Sie den Betrag ein, den der Veranstalter einbehalten darf."
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr "Deine lokale Zeit:"
+141 -257
View File
@@ -1,143 +1,125 @@
ABGEKÜNDIGT
2FA
ABN
AES
Absenderadresse
Absenderinformation
Absendername
ABGEKÜNDIGT
Admin
Adminbereich
Admin-Modus
Admin-Sitzung
Admin-Sitzungen
AES
Affirm
AGPL
AGPLv
Alipay
and
API-Meta-Informationen
APM
App
App-Gebühr
ApplePay
Apps
APM
as
Aufbuchungen
aufeinanderfolgenden
Aufteilungsliste
aufzubuchen
auschecken
Ausgangsscan
Ausgangsscans
ausgecheckt
ausgeklappt
ausgecheckt
auswahl
Auth
Authentication
Authenticator-App
Authenticator
Authentifizierungsmechanismus
Autorisierungs
Autorisierungscode
Autorisierungs-Endpunktes
Backend
Badge
Badge-Druck
Badge-Layout
Badge-Layouts
Badges
Bancontact
Bank-App
BankID
Banking-App
Banking
barcodes
Baskisch
Bcc
BCC-Adresse
Bcc-Kopie
BCC
Beispielevent
Beispielproduktvariantenbeschreibung
Belarus
Benachrichtigungs
Benachrichtigungsart
Benachrichtigungsarten
Benachrichtigungseinstellungen
Benachrichtigungs-Einstellungen
Benachrichtigungs-E-Mail
Benutzer-ID-Feld
Benutzer-ID-Felds
Bestätigungs-E-Mail
Bestellbestätigungs-E-Mail
Bestellbestätigungs-E-Mails
Berechtigungs
Bestätigungs
Bestellbestätigungs
Bestellungsänderungen
Bestellungs-Synchronisation
Bestellungs-Synchronisierung
Bestellungsstatus
Bestellungs
bez
BezahlCode
Bezahlmethode
Blackberry
BLIK
BN-Code
Blogpost
BN
Branding
Browsereinstellungen
BSD
bspw
Bokmål
Boleto
Branding-Informationen
Browsereinstellungen
BSD-Lizenz
bspw
Buchhaltungs
Bundles
Butterfly-Badge
Butterfly
bzw
ca
Cc
Ceuta
Cc
chardet
charge
Charge-ID
Checkbox
Check-in-App
Check-in-Apps
Check-in-QR-Code
Checkout
Chrome
Client-ID
Client-Secret
CODE.txt
Community-Übersetzungen
Choice
Community
CONFIRM
Connect
Cookie-Consent-Management
Cookie-Consent-Mechanismus
Consent
Copyleft
Cronjob
Cronjob-Komponente
Cross-Selling-Bedingung
Cross-Selling-Kategorie
Cross-Selling-Kategorien
Cross-Selling-Schritt
Cross
csv
CSV
CSV-Datei
CSV-Dateien
CSV-Eingabe
CSV-Eingabedaten
CSV-Import
CSV-Input
CSV-Lesen
CSV-Spalte
Customer
CZK
Debug-Modus
Dashboard
Datensynchronisation
Debug
dekodi
Desktop-Apps
deliverability
DNS
Di
Do
Doe
Downloadformat
Downloadseite
Dr
Drag-and-Drop-Interfaces
Drag
Droid
Drop
DSS
Edge
Eingangsscan
Einlassbuchung
Einlassdatum
Einlasskontrolle
Einlassuhrzeita
einzuchecken
email
E-Mail-Renderer
Enterprise-Lizenz
Enterprise-Lizenzen
Enterprise-Plugin
Enterprise-Plugins
eps
Enterprise
EPC
EPS
eps
Erstattungsbetrag
Erstattungsliste
Erstattungsmethode
@@ -145,231 +127,175 @@ Erstattungsoptionen
Erstattungsstatus
Erstattungsweg
erstmalig
Erweiterungs
etc
EU-USt-ID-Nr
Event
Event-Eigenschaft
Eventeingang
Event-Erstellung
Event-Setup-Tool
Event-Ticketing-Software
Event-Ticketshop
Event-Übersicht
Event-Website
Eventfirma
evtl
Explorer
FA
Favicon
F-Droid
Footer
Footer-Link
Footer-Text
Galicisch
Geocoding
Geocoding-Daten
Geo-Koordinaten
Geräte-ID
gehostete
geht's
GENEXAMPLE
Geo
geocoding
gescannt
ggf
Ggf
GiroCode
giropay
GPL
Grants
Gruppierungsspalte
Gruppierungswert
Gruppierungsspalte
Guide
Gutscheineinlöser
Händler-ID
Händler-PayPal-Konto
Hardware-Tokengenerator
herunterscrollen
hochlädst
HTML-E-Mail-Renderer
HTTPS
HTTPS-Verbindungen
HTTPS-Website
IBAN
IBANs
iCal
ics-Kalenderdatei
ics
ID
iDEAL
IDs
Inc
inkl
innen-Badges
innenname
innennamen
innergemeinschaftliche
Innergemeinschaftlicher
Installations-ID
Integrationen
Input
Installations
integrationen
intra
INV
invalidieren
invalidiert
iOS
ISU
iOS
Itaú
iTunes
JavaScript
JSON-Datei
JSON
Kategoriebeschreibung
Key
Klarna
Kombitickets
Kompatibilitätsmodus
Konfigurations
Kosovo
land
landesspezifische
Lead-Scanning
Leaflet-Kacheln
Lead
Leaflet
Linktext
lit
Log-ID
Logindaten
Lösch
loszulegen
Ltd
Macau
MapQuest-API-Key
max
Medien-ID
MariaDB
MapQuest
Melilla
Mercado
Merchandise
Meta
Metadaten
Meta-Eigenschaft
Meta-Eigenschaften
Meta-Informationen
Mi
Mifare
min
Mitgliedschafts
Mitgliedschaftsdauer
Mitgliedschafts-Typ
Mitgliedschafts-Typen
min
Mo
MobilePay
MOTO
MOTO-Zahlungen
Multibanco
Multiple-Choice-Fragen
MwSt
MyBank
name
NFC
NFC-basierte
NFC-Chip
NFC-Chips
NFC-Medien
NFC-Zahlungsmitteln
Nr
NREI
number
NXP
Objekt-IDs
Offline-Scan
OK
Online-Banking
Onlinebanking-Zugangsdaten
On
Onlinebanking
Open
OpenCage-API-Key
OpenCage
OpenID
OpenStreetMap
Opera
Output
OXXO
Pago
parsen
Pago
Pay
PayPal
PayPal-Account
PayPal-Accounts
PayPal-Konto
PayPal-Kontos
PayPal-Sandbox
PayPal-Sandbox-Account
PayPal-Seite
PayPal-Verkaufs-ID
PayPal-Webhook
PayPal-Zahlung
PayPal-Zahlungen
PayPal-Zahlungs-ID
PayPals
PayU
PCI-DSS-Formulare
Peppol-Netzwerk
Peppol-Teilnehmer-ID
Peppol-Teilnehmer-IDs
PCI
Personalisierung
PKCE-Erweiterung
PEPPOL
PKCE
Platzhalterzeichen
Play
Plugin
Plugins
POS
Postfix
PostgreSQL
PPRO
prefix
Prefix
pretix
pretix-Apps
pretix-Benutzerkennung
pretixdesk-Apps
pretixdesk
pretixdroid
pretix-Enterprise-Lizenz
pretix-Enterprise-Plugins
pretix-Entwickler
pretix-Entwicklern
pretix-Feld
pretix-Installation
pretix-Konto
pretix-Kontos
pretix-Logo
pretix-Logos
pretix-Plugins
pretixPOS
pretixPRINT
pretixPRINT-Version
pretixSCAN
pretix-Support
pretix-Team
pretix-Update
pretix-Version
pretix-Versionen
pretix-Widget
Produkt-ID
Produkt-Metadaten
Professional
Przelewy
pt
px
QR-Code
QR-Code-Bereich
QR-Code-Geheimnis
QR-Code-Inhalt
QR-Code-Reader
QR-Codes
QR-Farbe
Query-Parameter
Query
QR
rabattiert
Rabattiert
Rabattierung
Rechnungs-E-Mail
Reader
Rechnungs
Rechungsdatei
Reddit
Referer
Registrierungs
Registrierungsdatum
Registrierungs-Details
Registrierungsnummer
Registrierungsversuche
remote
Renderer
Request
Requests
Request-URL
Reservierungszeitraum
reverse
Reverse
Reverse-Proxy
Revisionssicherheit
Revolut
Revolut-App
rückabgewickelt
Rundungsdifferenzen
Sa
Saalplan
Sammlungsstücken
SAQ
SCA
Scan
Scanning-Apps
Scans
Scan-Terminals
Scan-Typ
Scan-Zeitpunkt
Scanergebnis
Scanning
schiefgeht
schiefgelaufen
Scope
@@ -378,37 +304,23 @@ SdI
sechsstelligen
Secret
Security
selbst-gehostete
SEPA-Bankeinzug
SEPA-Bankkonto
SEPA-Konten
SEPA-Lastschrift
SEPA-Lastschriften
SEPA-Mandat
SEPA-XML
Session-ID
Selling
SEPA
Shirts
Signaturverfahren
Single-Sign-On
Single-Sign-On-Dienste
Single-Sign-On-Methode
Single-Sign-On-Provider
Sign
Sitzplanmoduls
Sitzplatz-ID
Sitzplatz-IDs
Social-Media-Bild
Social
Sofort
SOFORT
Sorry
Source
Source-Codes
SPF-Eintrag
SPF
SSL
SSO
SSO-Client
SSO-Clients
SSO-Provider
STARTTLS
Steuer-Aufteilungsliste
Steuerregel-ID
Steuerschuldnerschaft
Store
Stornierungsanfrage
Stornobedingungen
Stornobeleg
@@ -418,75 +330,58 @@ Stornogebühren
Stornos
Strg
Stripe
Stripe-Account
Stripe-App
Stripe-Dashboard
Stripe-Konto
Stripe-Kontos
Stripe-Modul
Stripe-Support
Stripe-Test-API
Stripes
Strong
Swish
Synchronisations
systemweiten
Tab
tag
Teammitglied
Teamname
Teilnehmer-Badges
Telephone
Terminal-ID
Termin-ID
Ticketing
Ticketing-Firma
Ticket-Output
Ticket-QR-Code
Timeout
To
Tokengenerator
Toolbar
TODO
To-Do-Liste
TOTP
Trace-Nummer
Trace
Tracking
transaktionale
Trustly
T-Shirts
Turnover-Nummer
Turnover
TWINT
txt
überbuchen
überbucht
überbuchten
überzahlt
Überzahlt
ÜBERZAHLT
überzahlte
Überzahlte
Überzahlten
uhrzeit
UID
UID-Basis
UID-Schutzfunktion
Ultralight
umzubuchen
ungespeicherte
Unkategorisiert
unkategorisiert
Unkategorisierte
unlöschbar
unlöschbaren
untenstehende
untenstehenden
Unterzahlt
unterzahlt
UNTERZAHLT
unzugeordnete
Unzugeordnete
unzugeordneten
umzubuchen
URIs
Ursprüngl
USt
USt-ID
USt-ID-Nr
USt-ID-Nummer
Überweisungs
Überzahlten
Validierung
Validierungsregeln
Varianten-ID
Venmo
Veranstalterdomain
Veranstaltereinstellungen
@@ -499,50 +394,39 @@ Veranstalterseite
Veranstalterübersicht
veranstalterweiten
Veranstaltungs
Veranstaltungs-Metadaten
Veranstalterdomain
veranstaltungsweiten
Verfügbarkeitsberechnung
Verfügbarkeitsstatus
Verkaufs-ID
Verkkopankki
Veröffentlichbarer
Verwendungszweck-Postfix
VIP-Bereiches
Warenkorb-ID
Warenkorb-Timeout
VIP
WebAuthn
WebAuthn-Gerät
WebAuthn-kompatibler
WebAuthn-Token
WebAuthn-Unterstützung
Webhook
Webhooks
Webhook-Wiederholungsaufträge
Weiterleitungs
WeChat
WeChat-Zahlung
Weiterleitungs-URIs
Weiterleitungs-URL
Weiterleitungs-URLs
WhatsApp
Widget
Widget-Code
xlsx
XXX
XXXX
XXXXX
Yubikey
Zahlungs
Zahlungsbestätigungs-E-Mail
Zahlungserinnerungs-E-Mail
Zahlungs-ID
Zahlungspflichtig
Zahlungsbestätigungs
Zahlungserinnerungs
zahlungspflichtig
Zahlungsplugins
Zehnerkarten
Zeitbasiert
zeitbasiert
Zeitslotbuchung
Zimpler
ZIP-Datei
ZIP
zubuchbaren
zurückbuchen
zurückgeleitet
zurückwechseln
zutrittsberechtigt
ZVT-Terminal
zzgl
ZVT
File diff suppressed because it is too large Load Diff
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
"PO-Revision-Date: 2025-05-30 11:07+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
@@ -345,12 +345,12 @@ msgstr "Nein"
msgid "close"
msgstr "schließen"
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr "erforderlich"
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
@@ -358,13 +358,13 @@ msgstr ""
"Deine Anfrage wird nun verarbeitet. Je nach Größe der Veranstaltung kann "
"dies einige Minuten dauern."
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
"Deine Anfrage befindet sich beim Server in der Warteschlange und wird bald "
"verarbeitet."
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -374,14 +374,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:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: 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:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -389,12 +389,12 @@ msgstr ""
"Wir können den Server aktuell nicht erreichen, versuchen es aber weiter. "
"Letzter Fehlercode: {code}"
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: 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:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -402,11 +402,11 @@ msgstr ""
"Wir können den Server aktuell nicht erreichen. Bitte versuche es noch "
"einmal. Fehlercode: {code}"
#: pretix/static/pretixbase/js/asynctask.js:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr "Wir verarbeiten deine Anfrage …"
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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 "
@@ -416,12 +416,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:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
"Wenn dies länger als einige Minuten dauert, kontaktieren Sie uns bitte."
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr "Schließen"
@@ -771,7 +771,7 @@ msgstr "Du erhältst %(currency)s %(amount)s zurück"
msgid "Please enter the amount the organizer can keep."
msgstr "Bitte gib den Betrag ein, den der Veranstalter einbehalten darf."
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr "Deine lokale Zeit:"
+141 -257
View File
@@ -1,143 +1,125 @@
ABGEKÜNDIGT
2FA
ABN
AES
Absenderadresse
Absenderinformation
Absendername
ABGEKÜNDIGT
Admin
Adminbereich
Admin-Modus
Admin-Sitzung
Admin-Sitzungen
AES
Affirm
AGPL
AGPLv
Alipay
and
API-Meta-Informationen
APM
App
App-Gebühr
ApplePay
Apps
APM
as
Aufbuchungen
aufeinanderfolgenden
Aufteilungsliste
aufzubuchen
auschecken
Ausgangsscan
Ausgangsscans
ausgecheckt
ausgeklappt
ausgecheckt
auswahl
Auth
Authentication
Authenticator-App
Authenticator
Authentifizierungsmechanismus
Autorisierungs
Autorisierungscode
Autorisierungs-Endpunktes
Backend
Badge
Badge-Druck
Badge-Layout
Badge-Layouts
Badges
Bancontact
Bank-App
BankID
Banking-App
Banking
barcodes
Baskisch
Bcc
BCC-Adresse
Bcc-Kopie
BCC
Beispielevent
Beispielproduktvariantenbeschreibung
Belarus
Benachrichtigungs
Benachrichtigungsart
Benachrichtigungsarten
Benachrichtigungseinstellungen
Benachrichtigungs-Einstellungen
Benachrichtigungs-E-Mail
Benutzer-ID-Feld
Benutzer-ID-Felds
Bestätigungs-E-Mail
Bestellbestätigungs-E-Mail
Bestellbestätigungs-E-Mails
Berechtigungs
Bestätigungs
Bestellbestätigungs
Bestellungsänderungen
Bestellungs-Synchronisation
Bestellungs-Synchronisierung
Bestellungsstatus
Bestellungs
bez
BezahlCode
Bezahlmethode
Blackberry
BLIK
BN-Code
Blogpost
BN
Branding
Browsereinstellungen
BSD
bspw
Bokmål
Boleto
Branding-Informationen
Browsereinstellungen
BSD-Lizenz
bspw
Buchhaltungs
Bundles
Butterfly-Badge
Butterfly
bzw
ca
Cc
Ceuta
Cc
chardet
charge
Charge-ID
Checkbox
Check-in-App
Check-in-Apps
Check-in-QR-Code
Checkout
Chrome
Client-ID
Client-Secret
CODE.txt
Community-Übersetzungen
Choice
Community
CONFIRM
Connect
Cookie-Consent-Management
Cookie-Consent-Mechanismus
Consent
Copyleft
Cronjob
Cronjob-Komponente
Cross-Selling-Bedingung
Cross-Selling-Kategorie
Cross-Selling-Kategorien
Cross-Selling-Schritt
Cross
csv
CSV
CSV-Datei
CSV-Dateien
CSV-Eingabe
CSV-Eingabedaten
CSV-Import
CSV-Input
CSV-Lesen
CSV-Spalte
Customer
CZK
Debug-Modus
Dashboard
Datensynchronisation
Debug
dekodi
Desktop-Apps
deliverability
DNS
Di
Do
Doe
Downloadformat
Downloadseite
Dr
Drag-and-Drop-Interfaces
Drag
Droid
Drop
DSS
Edge
Eingangsscan
Einlassbuchung
Einlassdatum
Einlasskontrolle
Einlassuhrzeita
einzuchecken
email
E-Mail-Renderer
Enterprise-Lizenz
Enterprise-Lizenzen
Enterprise-Plugin
Enterprise-Plugins
eps
Enterprise
EPC
EPS
eps
Erstattungsbetrag
Erstattungsliste
Erstattungsmethode
@@ -145,231 +127,175 @@ Erstattungsoptionen
Erstattungsstatus
Erstattungsweg
erstmalig
Erweiterungs
etc
EU-USt-ID-Nr
Event
Event-Eigenschaft
Eventeingang
Event-Erstellung
Event-Setup-Tool
Event-Ticketing-Software
Event-Ticketshop
Event-Übersicht
Event-Website
Eventfirma
evtl
Explorer
FA
Favicon
F-Droid
Footer
Footer-Link
Footer-Text
Galicisch
Geocoding
Geocoding-Daten
Geo-Koordinaten
Geräte-ID
gehostete
geht's
GENEXAMPLE
Geo
geocoding
gescannt
ggf
Ggf
GiroCode
giropay
GPL
Grants
Gruppierungsspalte
Gruppierungswert
Gruppierungsspalte
Guide
Gutscheineinlöser
Händler-ID
Händler-PayPal-Konto
Hardware-Tokengenerator
herunterscrollen
hochlädst
HTML-E-Mail-Renderer
HTTPS
HTTPS-Verbindungen
HTTPS-Website
IBAN
IBANs
iCal
ics-Kalenderdatei
ics
ID
iDEAL
IDs
Inc
inkl
innen-Badges
innenname
innennamen
innergemeinschaftliche
Innergemeinschaftlicher
Installations-ID
Integrationen
Input
Installations
integrationen
intra
INV
invalidieren
invalidiert
iOS
ISU
iOS
Itaú
iTunes
JavaScript
JSON-Datei
JSON
Kategoriebeschreibung
Key
Klarna
Kombitickets
Kompatibilitätsmodus
Konfigurations
Kosovo
land
landesspezifische
Lead-Scanning
Leaflet-Kacheln
Lead
Leaflet
Linktext
lit
Log-ID
Logindaten
Lösch
loszulegen
Ltd
Macau
MapQuest-API-Key
max
Medien-ID
MariaDB
MapQuest
Melilla
Mercado
Merchandise
Meta
Metadaten
Meta-Eigenschaft
Meta-Eigenschaften
Meta-Informationen
Mi
Mifare
min
Mitgliedschafts
Mitgliedschaftsdauer
Mitgliedschafts-Typ
Mitgliedschafts-Typen
min
Mo
MobilePay
MOTO
MOTO-Zahlungen
Multibanco
Multiple-Choice-Fragen
MwSt
MyBank
name
NFC
NFC-basierte
NFC-Chip
NFC-Chips
NFC-Medien
NFC-Zahlungsmitteln
Nr
NREI
number
NXP
Objekt-IDs
Offline-Scan
OK
Online-Banking
Onlinebanking-Zugangsdaten
On
Onlinebanking
Open
OpenCage-API-Key
OpenCage
OpenID
OpenStreetMap
Opera
Output
OXXO
Pago
parsen
Pago
Pay
PayPal
PayPal-Account
PayPal-Accounts
PayPal-Konto
PayPal-Kontos
PayPal-Sandbox
PayPal-Sandbox-Account
PayPal-Seite
PayPal-Verkaufs-ID
PayPal-Webhook
PayPal-Zahlung
PayPal-Zahlungen
PayPal-Zahlungs-ID
PayPals
PayU
PCI-DSS-Formulare
Peppol-Netzwerk
Peppol-Teilnehmer-ID
Peppol-Teilnehmer-IDs
PCI
Personalisierung
PKCE-Erweiterung
PEPPOL
PKCE
Platzhalterzeichen
Play
Plugin
Plugins
POS
Postfix
PostgreSQL
PPRO
prefix
Prefix
pretix
pretix-Apps
pretix-Benutzerkennung
pretixdesk-Apps
pretixdesk
pretixdroid
pretix-Enterprise-Lizenz
pretix-Enterprise-Plugins
pretix-Entwickler
pretix-Entwicklern
pretix-Feld
pretix-Installation
pretix-Konto
pretix-Kontos
pretix-Logo
pretix-Logos
pretix-Plugins
pretixPOS
pretixPRINT
pretixPRINT-Version
pretixSCAN
pretix-Support
pretix-Team
pretix-Update
pretix-Version
pretix-Versionen
pretix-Widget
Produkt-ID
Produkt-Metadaten
Professional
Przelewy
pt
px
QR-Code
QR-Code-Bereich
QR-Code-Geheimnis
QR-Code-Inhalt
QR-Code-Reader
QR-Codes
QR-Farbe
Query-Parameter
Query
QR
rabattiert
Rabattiert
Rabattierung
Rechnungs-E-Mail
Reader
Rechnungs
Rechungsdatei
Reddit
Referer
Registrierungs
Registrierungsdatum
Registrierungs-Details
Registrierungsnummer
Registrierungsversuche
remote
Renderer
Request
Requests
Request-URL
Reservierungszeitraum
reverse
Reverse
Reverse-Proxy
Revisionssicherheit
Revolut
Revolut-App
rückabgewickelt
Rundungsdifferenzen
Sa
Saalplan
Sammlungsstücken
SAQ
SCA
Scan
Scanning-Apps
Scans
Scan-Terminals
Scan-Typ
Scan-Zeitpunkt
Scanergebnis
Scanning
schiefgeht
schiefgelaufen
Scope
@@ -378,37 +304,23 @@ SdI
sechsstelligen
Secret
Security
selbst-gehostete
SEPA-Bankeinzug
SEPA-Bankkonto
SEPA-Konten
SEPA-Lastschrift
SEPA-Lastschriften
SEPA-Mandat
SEPA-XML
Session-ID
Selling
SEPA
Shirts
Signaturverfahren
Single-Sign-On
Single-Sign-On-Dienste
Single-Sign-On-Methode
Single-Sign-On-Provider
Sign
Sitzplanmoduls
Sitzplatz-ID
Sitzplatz-IDs
Social-Media-Bild
Social
Sofort
SOFORT
Sorry
Source
Source-Codes
SPF-Eintrag
SPF
SSL
SSO
SSO-Client
SSO-Clients
SSO-Provider
STARTTLS
Steuer-Aufteilungsliste
Steuerregel-ID
Steuerschuldnerschaft
Store
Stornierungsanfrage
Stornobedingungen
Stornobeleg
@@ -418,75 +330,58 @@ Stornogebühren
Stornos
Strg
Stripe
Stripe-Account
Stripe-App
Stripe-Dashboard
Stripe-Konto
Stripe-Kontos
Stripe-Modul
Stripe-Support
Stripe-Test-API
Stripes
Strong
Swish
Synchronisations
systemweiten
Tab
tag
Teammitglied
Teamname
Teilnehmer-Badges
Telephone
Terminal-ID
Termin-ID
Ticketing
Ticketing-Firma
Ticket-Output
Ticket-QR-Code
Timeout
To
Tokengenerator
Toolbar
TODO
To-Do-Liste
TOTP
Trace-Nummer
Trace
Tracking
transaktionale
Trustly
T-Shirts
Turnover-Nummer
Turnover
TWINT
txt
überbuchen
überbucht
überbuchten
überzahlt
Überzahlt
ÜBERZAHLT
überzahlte
Überzahlte
Überzahlten
uhrzeit
UID
UID-Basis
UID-Schutzfunktion
Ultralight
umzubuchen
ungespeicherte
Unkategorisiert
unkategorisiert
Unkategorisierte
unlöschbar
unlöschbaren
untenstehende
untenstehenden
Unterzahlt
unterzahlt
UNTERZAHLT
unzugeordnete
Unzugeordnete
unzugeordneten
umzubuchen
URIs
Ursprüngl
USt
USt-ID
USt-ID-Nr
USt-ID-Nummer
Überweisungs
Überzahlten
Validierung
Validierungsregeln
Varianten-ID
Venmo
Veranstalterdomain
Veranstaltereinstellungen
@@ -499,50 +394,39 @@ Veranstalterseite
Veranstalterübersicht
veranstalterweiten
Veranstaltungs
Veranstaltungs-Metadaten
Veranstalterdomain
veranstaltungsweiten
Verfügbarkeitsberechnung
Verfügbarkeitsstatus
Verkaufs-ID
Verkkopankki
Veröffentlichbarer
Verwendungszweck-Postfix
VIP-Bereiches
Warenkorb-ID
Warenkorb-Timeout
VIP
WebAuthn
WebAuthn-Gerät
WebAuthn-kompatibler
WebAuthn-Token
WebAuthn-Unterstützung
Webhook
Webhooks
Webhook-Wiederholungsaufträge
Weiterleitungs
WeChat
WeChat-Zahlung
Weiterleitungs-URIs
Weiterleitungs-URL
Weiterleitungs-URLs
WhatsApp
Widget
Widget-Code
xlsx
XXX
XXXX
XXXXX
Yubikey
Zahlungs
Zahlungsbestätigungs-E-Mail
Zahlungserinnerungs-E-Mail
Zahlungs-ID
Zahlungspflichtig
Zahlungsbestätigungs
Zahlungserinnerungs
zahlungspflichtig
Zahlungsplugins
Zehnerkarten
Zeitbasiert
zeitbasiert
Zeitslotbuchung
Zimpler
ZIP-Datei
ZIP
zubuchbaren
zurückbuchen
zurückgeleitet
zurückwechseln
zutrittsberechtigt
ZVT-Terminal
zzgl
ZVT
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:36+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"
@@ -344,68 +344,68 @@ msgstr ""
msgid "close"
msgstr ""
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: 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:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr ""
@@ -740,7 +740,7 @@ msgstr ""
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr ""
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+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/"
@@ -361,14 +361,14 @@ msgstr "Όχι"
msgid "close"
msgstr "Κλείσιμο"
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
#, fuzzy
#| msgid "Cart expired"
msgid "required"
msgstr "Το καλάθι έληξε"
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
#, fuzzy
#| msgid ""
#| "Your request has been queued on the server and will now be processed. "
@@ -381,7 +381,7 @@ msgstr ""
"επεξεργασία. Ανάλογα με το μέγεθος του συμβάντος σας, αυτό μπορεί να "
"διαρκέσει μερικά λεπτά."
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
#, fuzzy
#| msgid ""
#| "Your request has been queued on the server and will now be processed. "
@@ -392,7 +392,7 @@ msgstr ""
"επεξεργασία. Ανάλογα με το μέγεθος του συμβάντος σας, αυτό μπορεί να "
"διαρκέσει μερικά λεπτά."
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -402,14 +402,14 @@ msgstr ""
"του. Αν αυτό διαρκεί περισσότερο από δύο λεπτά, επικοινωνήστε μαζί μας ή "
"επιστρέψτε στο πρόγραμμα περιήγησής σας και δοκιμάστε ξανά."
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Παρουσιάστηκε σφάλμα τύπου {code}."
#: pretix/static/pretixbase/js/asynctask.js:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -417,14 +417,14 @@ msgstr ""
"Αυτήν τη στιγμή δεν μπορούμε να φτάσουμε στο διακομιστή, αλλά συνεχίζουμε να "
"προσπαθούμε. Τελευταίος κωδικός σφάλματος: {code}"
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: 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:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -432,11 +432,11 @@ msgstr ""
"Αυτήν τη στιγμή δεν μπορούμε να συνδεθούμε με το διακομιστή. Παρακαλώ "
"προσπαθήστε ξανά. Κωδικός σφάλματος: {code}"
#: pretix/static/pretixbase/js/asynctask.js:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr "Επεξεργαζόμαστε το αίτημά σας …"
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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 "
@@ -446,11 +446,11 @@ msgstr ""
"περισσότερο από ένα λεπτό, ελέγξτε τη σύνδεσή σας στο διαδίκτυο και στη "
"συνέχεια επαναλάβετε τη φόρτωση αυτής της σελίδας και δοκιμάστε ξανά."
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr "Κλείσιμο μηνύματος"
@@ -820,7 +820,7 @@ msgstr "απο %(currency)s %(price)s"
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr ""
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+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"
@@ -344,68 +344,68 @@ msgstr ""
msgid "close"
msgstr ""
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: 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:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr ""
@@ -740,7 +740,7 @@ msgstr ""
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr ""
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
"PO-Revision-Date: 2025-05-30 11:15+0000\n"
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -345,12 +345,12 @@ msgstr "No"
msgid "close"
msgstr "cerrar"
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr "campo requerido"
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
@@ -358,11 +358,11 @@ msgstr ""
"Su solicitud está siendo procesada. Esto puede tardar varios minutos, "
"dependiendo del tamaño de su evento."
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr "Su solicitud ha sido enviada al servidor y será procesada en breve."
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -372,14 +372,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:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: 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:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -387,12 +387,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:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: 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:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -400,11 +400,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:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr "Estamos procesando su solicitud…"
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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 "
@@ -414,11 +414,11 @@ msgstr ""
"minuto, por favor, revise su conexión a Internet, recargue la página e "
"intente nuevamente."
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixbase/js/asynctask.js:270
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:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr "Cerrar mensaje"
@@ -768,7 +768,7 @@ msgstr "Obtienes %(currency)s %(price)s de vuelta"
msgid "Please enter the amount the organizer can keep."
msgstr "Por favor, ingrese el importe que el organizador puede quedarse."
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr "Su hora local:"
File diff suppressed because it is too large Load Diff
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
"PO-Revision-Date: 2025-08-04 14:16+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -345,68 +345,68 @@ msgstr ""
msgid "close"
msgstr ""
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: 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:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr ""
@@ -741,7 +741,7 @@ msgstr ""
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr ""
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+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"
@@ -344,68 +344,68 @@ msgstr ""
msgid "close"
msgstr ""
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: 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:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr ""
@@ -740,7 +740,7 @@ msgstr ""
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr ""
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+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/"
@@ -345,12 +345,12 @@ msgstr "Ez"
msgid "close"
msgstr "itxi"
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
@@ -358,11 +358,11 @@ msgstr ""
"Zure eskaera prozesatzen ari dira. Gertaeraren tamainaren arabera, baliteke "
"minutu batzuk behar izatea."
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr "Zure eskaera zerbitzarian gorde da eta laster prozesatuko da."
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -372,14 +372,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:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: 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:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -387,12 +387,12 @@ msgstr ""
"Orain bertan ezin gara zerbitzarira iritsi, baina saiatzen jarraitzen dugu. "
"Azken errore-kodea: {kodea}"
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: 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:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -400,11 +400,11 @@ msgstr ""
"Une honetan ezin gara zerbitzarira iritsi. Mesedez, saiatu berriro. Errore-"
"kodea: {kodea}"
#: pretix/static/pretixbase/js/asynctask.js:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr "Zure eskaera prozesatzen ari gara …"
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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 "
@@ -414,11 +414,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:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr "Mezua itxi"
@@ -766,7 +766,7 @@ msgstr ""
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr ""
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
"PO-Revision-Date: 2021-11-10 05:00+0000\n"
"Last-Translator: Jaakko Rinta-Filppula <jaakko@r-f.fi>\n"
"Language-Team: Finnish <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -363,49 +363,49 @@ msgstr "Ei"
msgid "close"
msgstr "Sulje"
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
#, fuzzy
#| msgid "Cart expired"
msgid "required"
msgstr "Ostoskori on vanhentunut"
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Tapahtui virhe. Virhekoodi: {code}."
#: pretix/static/pretixbase/js/asynctask.js:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "Pyyntö aikakatkaistiin. Ole hyvä ja yritä uudelleen."
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -413,22 +413,22 @@ msgstr ""
"Palvelimeen ei juuri nyt saatu yhteyttä. Ole hyvä ja yritä uudelleen. "
"Virhekoodi: {code}"
#: pretix/static/pretixbase/js/asynctask.js:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr "Pyyntöäsi käsitellään …"
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr "Sulje viesti"
@@ -783,7 +783,7 @@ msgstr ""
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr ""
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+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"
@@ -344,68 +344,68 @@ msgstr ""
msgid "close"
msgstr ""
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: 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:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr ""
@@ -740,7 +740,7 @@ msgstr ""
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr ""
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: French\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
"PO-Revision-Date: 2025-08-28 23:00+0000\n"
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -344,12 +344,12 @@ msgstr "Non"
msgid "close"
msgstr "fermer"
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr "obligatoire"
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
@@ -357,13 +357,13 @@ msgstr ""
"Votre demande est maintenant en cours de traitement. Selon la taille de "
"votre événement, cela peut prendre jusqu' à quelques minutes."
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
"Votre demande a été mise en attente sur le serveur et sera traitée "
"prochainement."
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -373,14 +373,14 @@ msgstr ""
"prend plus de deux minutes, veuillez nous contacter ou retourner dans votre "
"navigateur et réessayer."
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Une erreur de type {code} s'est produite."
#: pretix/static/pretixbase/js/asynctask.js:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -388,12 +388,12 @@ msgstr ""
"Nous ne pouvons actuellement pas atteindre le serveur, mais nous continuons "
"d'essayer. Dernier code d'erreur: {code}"
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "La requête a prit trop de temps. Veuillez réessayer."
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -401,11 +401,11 @@ msgstr ""
"Actuellement, nous ne pouvons pas atteindre le serveur. Veuillez réessayer. "
"Code d'erreur: {code}"
#: pretix/static/pretixbase/js/asynctask.js:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr "Nous traitons votre demande …"
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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 "
@@ -415,11 +415,11 @@ msgstr ""
"d'une minute, veuillez vérifier votre connexion Internet, puis recharger "
"cette page et réessayer."
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr "Si cela prend plus de quelques minutes, veuillez nous contacter."
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr "Fermer le message"
@@ -768,7 +768,7 @@ msgid "Please enter the amount the organizer can keep."
msgstr ""
"Veuillez indiquer le montant que l'organisateur est autorisé à retenir."
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr "Votre heure locale:"
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
"PO-Revision-Date: 2022-02-22 22:00+0000\n"
"Last-Translator: Ismael Menéndez Fernández <ismael.menendez@balidea.com>\n"
"Language-Team: Galician <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -351,12 +351,12 @@ msgstr "Non"
msgid "close"
msgstr "cerrar"
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr "campo requirido"
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
@@ -364,11 +364,11 @@ msgstr ""
"A súa solicitude estase procesando. Isto pode tardar varios minutos, "
"dependendo do tamaño do seu evento."
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr "A súa solicitude foi enviada ao servidor e será procesada en breve."
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -378,14 +378,14 @@ msgstr ""
"procesada. Se tarda máis de dous minutos, por favor, contacte con nós ou "
"volva á páxina anterior no seu navegador e inténteo de novo."
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Ocurreu un error de tipo {code}."
#: pretix/static/pretixbase/js/asynctask.js:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -393,12 +393,12 @@ msgstr ""
"Agora mesmo non podemos contactar co servidor, pero seguímolo intentando. O "
"último código de erro foi: {code}"
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "A petición levou demasiado tempo. Inténteo de novo."
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -406,11 +406,11 @@ msgstr ""
"Agora mesmo non podemos contactar co servidor. Por favor, inténteo de novo. "
"Código de erro: {code}"
#: pretix/static/pretixbase/js/asynctask.js:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr "Estamos procesando a súa solicitude…"
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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 "
@@ -420,11 +420,11 @@ msgstr ""
"dun minuto, por favor, revise a súa conexión a Internet, recargue a páxina e "
"inténteo de novo."
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr "Cerrar mensaxe"
@@ -791,7 +791,7 @@ msgstr "Obtés %(currency)s %(price)s de volta"
msgid "Please enter the amount the organizer can keep."
msgstr "Por favor, ingrese a cantidade que pode conservar o organizador."
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr "A súa hora local:"
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
"PO-Revision-Date: 2021-09-24 13:54+0000\n"
"Last-Translator: ofirtro <ofir.tro@gmail.com>\n"
"Language-Team: Hebrew <https://translate.pretix.eu/projects/pretix/pretix-js/"
@@ -350,22 +350,22 @@ msgstr ""
msgid "close"
msgstr ""
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
msgstr "הבקשה שלך מתבצעת ויכולה לקחת כמה דקות בהתאם לגודל האירוע."
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr "הבקשה שלך תבוצע בהקדם."
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -374,46 +374,46 @@ msgstr ""
"הבקשה שלך הגיעה לשרת אבל עדיין לא התחילה. אם זה לוקח יותר משתי דקות, אנא צור "
"איתנו קשר או נסה שנית."
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "שגיאה {code} התרחשה."
#: pretix/static/pretixbase/js/asynctask.js:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr "אנחנו לא מצליחים לגשת לשרת, אבל ממשיכים לנסות. שגיאה אחרונה: {code}"
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "הבקשה לקחה יותר מידי זמן. נסה שנית."
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: 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:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr "הבקשה שלך מתבצעת…"
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr ""
@@ -754,7 +754,7 @@ msgstr ""
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr ""
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
"PO-Revision-Date: 2025-03-16 10:17+0000\n"
"Last-Translator: Robert Rigo <kontakt@bicikli.hr>\n"
"Language-Team: Croatian <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -346,68 +346,68 @@ msgstr "Ne"
msgid "close"
msgstr "zatvori"
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
"browser and try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: 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:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr ""
@@ -743,7 +743,7 @@ msgstr ""
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr ""
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
"PO-Revision-Date: 2024-11-28 06:00+0000\n"
"Last-Translator: Patrick Chilton <chpatrick@gmail.com>\n"
"Language-Team: Hungarian <https://translate.pretix.eu/projects/pretix/pretix-"
@@ -360,14 +360,14 @@ msgstr "Nem"
msgid "close"
msgstr "Bezárás"
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
#, fuzzy
#| msgid "Cart expired"
msgid "required"
msgstr "A kosár lejárt"
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
#, fuzzy
#| msgid ""
#| "Your request has been queued on the server and will now be processed. "
@@ -379,7 +379,7 @@ msgstr ""
"A kérés várólistára került a kiszolgálón, és hamarosan feldolgozásra kerül. "
"Az esemény méretétől függően ez akár néhány percet is igénybe vehet."
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
#, fuzzy
#| msgid ""
#| "Your request has been queued on the server and will now be processed. "
@@ -389,7 +389,7 @@ msgstr ""
"A kérés várólistára került a kiszolgálón, és hamarosan feldolgozásra kerül. "
"Az esemény méretétől függően ez akár néhány percet is igénybe vehet."
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -399,14 +399,14 @@ msgstr ""
"folyamat két percnél hosszabb ideg tart, kérjük vegye fel velünk a "
"kapcsolatot, vagy lépjen vissza a böngészőjében és próbálja újra."
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "{code} típusú hiba jelentkezett."
#: pretix/static/pretixbase/js/asynctask.js:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -414,23 +414,23 @@ msgstr ""
"Jelen pillanatban a kiszolgáló nem elérhető, de továbbra is próbálkozunk. "
"Utolsó hibakód: {code}"
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "A kérés időtúllépés miatt leállt. Kérjük próbálja újra."
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
msgstr ""
"Jelen pillanatban a kiszolgáló nem elérhető. Próbálja újra. Hibakód: {code}"
#: pretix/static/pretixbase/js/asynctask.js:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr "A kérés feldolgozása folyamatban…"
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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 "
@@ -440,11 +440,11 @@ msgstr ""
"hosszabb időt vesz igénybe, kérjük ellenőrizze az internetkapcsolatát, "
"frissítse az oldalt és próbálkozzon újra."
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr "Üzenet bezárása"
@@ -813,7 +813,7 @@ msgstr "%(currency) %(price)-tól"
msgid "Please enter the amount the organizer can keep."
msgstr ""
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr ""
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-26 11:16+0000\n"
"POT-Creation-Date: 2025-08-19 16:02+0000\n"
"PO-Revision-Date: 2023-09-20 14:01+0000\n"
"Last-Translator: Mahdia Aliyy <mahdlyy.k@gmail.com>\n"
"Language-Team: Indonesian <https://translate.pretix.eu/projects/pretix/"
@@ -349,12 +349,12 @@ msgstr "Tidak"
msgid "close"
msgstr "menutup"
#: pretix/static/pretixbase/js/addressform.js:90
#: pretix/static/pretixpresale/js/ui/main.js:519
#: pretix/static/pretixbase/js/addressform.js:105
#: pretix/static/pretixpresale/js/ui/main.js:509
msgid "required"
msgstr "diperlukan"
#: pretix/static/pretixbase/js/asynctask.js:13
#: pretix/static/pretixbase/js/asynctask.js:12
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
@@ -362,13 +362,13 @@ msgstr ""
"Permintaan Anda sedang diproses. Tergantung pada besarnya acara Anda, proses "
"ini mungkin memerlukan waktu hingga beberapa menit."
#: pretix/static/pretixbase/js/asynctask.js:17
#: pretix/static/pretixbase/js/asynctask.js:16
msgid "Your request has been queued on the server and will soon be processed."
msgstr ""
"Permintaan Anda telah dimasukkan ke dalam antrian di server dan akan segera "
"diproses."
#: pretix/static/pretixbase/js/asynctask.js:21
#: pretix/static/pretixbase/js/asynctask.js:20
msgid ""
"Your request arrived on the server but we still wait for it to be processed. "
"If this takes longer than two minutes, please contact us or go back in your "
@@ -378,14 +378,14 @@ msgstr ""
"diproses. Jika proses ini memerlukan waktu lebih dari dua menit, harap "
"hubungi kami atau kembali ke browser Anda dan coba lagi."
#: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixbase/js/asynctask.js:119
#: pretix/static/pretixbase/js/asynctask.js:176
#: pretix/static/pretixbase/js/asynctask.js:180
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Terjadi kesalahan jenis {code}."
#: pretix/static/pretixbase/js/asynctask.js:128
#: pretix/static/pretixbase/js/asynctask.js:122
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
@@ -393,12 +393,12 @@ msgstr ""
"Saat ini kami tidak dapat menjangkau server, tetapi kami terus mencoba. Kode "
"kesalahan terakhir: {code}"
#: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixbase/js/asynctask.js:156
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "Permintaan terlalu lama. Silakan coba lagi."
#: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
@@ -406,11 +406,11 @@ msgstr ""
"Saat ini kami tidak dapat menjangkau server. Silakan coba lagi. Kode "
"kesalahan: {code}"
#: pretix/static/pretixbase/js/asynctask.js:216
#: pretix/static/pretixbase/js/asynctask.js:210
msgid "We are processing your request …"
msgstr "Kami sedang memproses permintaan Anda …"
#: pretix/static/pretixbase/js/asynctask.js:219
#: pretix/static/pretixbase/js/asynctask.js:213
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 "
@@ -420,11 +420,11 @@ msgstr ""
"lebih dari satu menit, silakan periksa koneksi internet Anda lalu muat ulang "
"halaman ini dan coba lagi."
#: pretix/static/pretixbase/js/asynctask.js:276
#: pretix/static/pretixbase/js/asynctask.js:270
msgid "If this takes longer than a few minutes, please contact us."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:331
#: pretix/static/pretixbase/js/asynctask.js:325
msgid "Close message"
msgstr "Tutup pesan"
@@ -787,7 +787,7 @@ msgstr "Anda mendapatkan %(currency)s %(amount)s kembali"
msgid "Please enter the amount the organizer can keep."
msgstr "Silakan masukkan jumlah yang dapat disimpan oleh penyelenggara."
#: pretix/static/pretixpresale/js/ui/main.js:564
#: pretix/static/pretixpresale/js/ui/main.js:554
msgid "Your local time:"
msgstr "Waktu setempat Anda:"
File diff suppressed because it is too large Load Diff

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