mirror of
https://github.com/pretix/pretix.git
synced 2025-12-09 00:42:28 +00:00
Compare commits
1 Commits
invoice-em
...
clean-docs
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b9c9f38bf0 |
@@ -1059,10 +1059,9 @@ Creating orders
|
||||
prices. Note that this will not include other fees and is calculated once during order generation and will not
|
||||
be respected automatically when the order changes later.)
|
||||
* ``_split_taxes_like_products`` (Optional convenience flag. If set to ``true``, your ``tax_rule`` will be ignored
|
||||
and the fee will be taxed like the products in the order *unless* the total amount of the positions is zero.
|
||||
If the products have multiple tax rates, multiple fees will be generated with weights adjusted to the net price
|
||||
of the products. Note that this will be calculated once during order generation and is not respected automatically
|
||||
when the order changes later.)
|
||||
and the fee will be taxed like the products in the order. If the products have multiple tax rates, multiple fees
|
||||
will be generated with weights adjusted to the net price of the products. Note that this will be calculated once
|
||||
during order generation and is not respected automatically when the order changes later.)
|
||||
|
||||
* ``force`` (optional). If set to ``true``, quotas will be ignored.
|
||||
* ``send_email`` (optional). If set to ``true``, the same emails will be sent as for a regular order, regardless of
|
||||
|
||||
@@ -81,8 +81,7 @@ Endpoints
|
||||
:query string ordering: Manually set the ordering of results. Valid fields to be used are ``id`` and ``position``.
|
||||
Default: ``position``
|
||||
:query integer subevent: Only return quotas of the sub-event with the given ID.
|
||||
:query integer subevent__in: Only return quotas of sub-events with one of the given IDs (comma-separated).
|
||||
:query integer items__in: Only return quotas that include a product with one of the given IDs (comma-separated).
|
||||
:query integer subevent__in: Only return quotas of sub-events with one the given IDs (comma-separated).
|
||||
:query string with_availability: Set to ``true`` to get availability information. Can lead to increased answer times.
|
||||
:param organizer: The ``slug`` field of the organizer to fetch
|
||||
:param event: The ``slug`` field of the event to fetch
|
||||
|
||||
177
doc/license/faq.rst
Normal file
177
doc/license/faq.rst
Normal file
@@ -0,0 +1,177 @@
|
||||
.. spelling:word-list::
|
||||
|
||||
AGPL
|
||||
AGPLv3
|
||||
GPL
|
||||
LGPL
|
||||
Apache
|
||||
BSD
|
||||
MIT
|
||||
CLA
|
||||
django
|
||||
i18nfields
|
||||
hierarkey
|
||||
rami.io
|
||||
rami
|
||||
io
|
||||
GmbH
|
||||
|
||||
License FAQ
|
||||
===========
|
||||
|
||||
.. warning::
|
||||
|
||||
This FAQ tries to explain in simpler terms what the license of the pretix open source project does and does not
|
||||
allow. It is based on our interpretation of the license and is not legal advice. The contents of this page are not
|
||||
legally binding, only the original text of the license in the `license file`_ is legally binding.
|
||||
|
||||
How is pretix licensed?
|
||||
-----------------------
|
||||
|
||||
pretix follows the popular dual licensing model. It is available under the `GNU Affero General Public License 3`_ (AGPL)
|
||||
plus some additional terms, as well as under a proprietary license ("pretix Enterprise license") on request.
|
||||
|
||||
How can it be AGPL if there are additional terms?
|
||||
-------------------------------------------------
|
||||
|
||||
Even though it is fairly unknown, the AGPL's section 7 is titled "Additional Terms" and outlines specific conditions
|
||||
under which additional terms can be imposed on an AGPL-licensed work. In our case, we add three additional terms.
|
||||
|
||||
The first additional term for pretix is an additional **permission**. It allows you to do something that the AGPL would
|
||||
generally not allow. As it doesn't restrict your freedoms granted by AGPL, if you don't like it, you can ignore it, and
|
||||
if you distribute pretix further, you can remove it.
|
||||
|
||||
The second and third additional term for pretix are additional terms that restrict or specify other provisions of the
|
||||
license. AGPL specifically requires that these terms can only restrict or specify very specific things and we believe
|
||||
our additional terms are in compliance with that and are thus valid and may not be removed.
|
||||
|
||||
Why did you choose this license model?
|
||||
--------------------------------------
|
||||
|
||||
pretix was born in the open source community and we're deeply committed to building the best open source ticketing
|
||||
solution in the world. It is important to us that pretix is available with a comprehensive feature set under term that
|
||||
are compatible with the `Open Source Definition`_. This enables event organizers from all industries and regions
|
||||
to have access to a self-hosted, privacy-friendly and secure option to host their events.
|
||||
|
||||
However, developing and maintaining pretix is a lot of work. Between 2014 and 2021, we've received external
|
||||
contributions from more than 150 individuals. Not counting translations over 90 % of the development was
|
||||
done by staff engineers of rami.io GmbH, the company that started pretix. While we're very happy to receive many more
|
||||
contributions in the future, we also want to ensure that we continue to be able to pay people working on pretix
|
||||
full-time.
|
||||
|
||||
We believe our model creates a good balance between ensuring pretix is available freely as well as protecting our
|
||||
business interests. Unlike licenses chosen by other projects recently, such as the Server-Side Public License, our
|
||||
choice does not restrict using pretix for any possible use case, it just sets a few rules that you have to play by
|
||||
if you do.
|
||||
|
||||
What do I need to do if I use pretix unmodified?
|
||||
------------------------------------------------
|
||||
|
||||
If you use pretix without any modifications or plugins, you can use it for whatever you want, as long as you keep
|
||||
all copyright notices (including the link to pretix at the bottom of the site) intact.
|
||||
|
||||
You are also allowed to make copies of the unmodified source code and distribute them to others as long as you keep
|
||||
all copyright and license information intact.
|
||||
|
||||
If you install **plugins**, you must follow the same terms as when using a **modified** version (see below).
|
||||
|
||||
What do I need to do if I modify pretix?
|
||||
----------------------------------------
|
||||
|
||||
If you want to modify pretix, you have the right to do so. However, you need to follow the following rules:
|
||||
|
||||
* If you **run it for your own events** (events run by you or your company as well as companies from the same
|
||||
corporate groups) our additional permission allows you to do so **without needing to share your source code
|
||||
modifications** as long as you keep the link to pretix at the bottom of the site intact.
|
||||
|
||||
* If you **run it for others**, for example as part of a Software-as-a-Service offering or a managed hosting service
|
||||
you **must** make the source code **including all your modifications and all installed plugins** available under the
|
||||
same license as pretix to every visitor of your site. You need to do so in a prominent place such as a link at the bottom of the
|
||||
site. You also **must** keep the existing link intact.
|
||||
You **may not** add additional restrictions on the result as a whole. You **may** add additional permissions, but
|
||||
only on the parts you added. You **must** make clear which changes you made and you must not give the impression that
|
||||
your modified version is an official version of pretix.
|
||||
|
||||
* If you **distribute** the modified version, for example as a source code or software package, you **must** license it
|
||||
under the AGPL license with the same additional terms. You **may not** add additional restrictions on the result as a
|
||||
whole. You **may** add additional permissions, but only on the parts you added. You **must** make clear which changes
|
||||
you made and you must not give the impression that your modified version is an official version of pretix.
|
||||
|
||||
Does the AGPL copyleft mechanism extend to plugins?
|
||||
---------------------------------------------------
|
||||
|
||||
Yes. pretix plugins are tightly integrated with pretix, so when running pretix together with a plugin in the same
|
||||
environment they form a `combined work`_ and the copyleft mechanism of AGPL applies.
|
||||
|
||||
Can I create proprietary or secret plugins?
|
||||
-------------------------------------------
|
||||
|
||||
Yes, you can create a proprietary or secret plugin, but it may only ever be **used** in an environment that is covered
|
||||
by the additional permission from our license. As soon as the plugin is installed in an installation that is not covered
|
||||
by our additional permission (e.g. when it is used in a SaaS environment) or covered by an active pretix Enterprise
|
||||
license it **must** be released to the visitors of the site under the same license as pretix (like a modified version
|
||||
of pretix).
|
||||
|
||||
What licenses can plugins use?
|
||||
------------------------------
|
||||
|
||||
Technically, you can distribute a plugin under any free or proprietary license as long as it is distributed separately.
|
||||
However, once it is either **distributed together with pretix or used in an environment not covered by our
|
||||
additional permission** or an active pretix Enterprise license, you **must** release it to all recipients of the
|
||||
distribution or all visitors of your site under the same license as pretix (like a modified version of pretix).
|
||||
|
||||
If you release a plugin publicly, it is therefore most practical to use a license that is `compatible to AGPL`_.
|
||||
This includes most open source licenses such as AGPL, GPL, Apache, 3-clause BSD or MIT.
|
||||
|
||||
Note however that when you license a plugin with pure AGPL, it will be incompatible with our additional permission.
|
||||
Therefore, if you want to use an AGPL-licensed plugin, you'll need to publish the source code of **all** your plugins
|
||||
under AGPL terms **even if you only use it for your own events**. A plugin would add its `own additional permission`_
|
||||
to its license to allow combining it with pretix for this use case.
|
||||
|
||||
To make things less complicated, if you want to distribute a plugin freely, we therefore recommend distributing the
|
||||
plugin under **Apache License 2.0**, like we do for most plugins we distribute as open source.
|
||||
|
||||
What do I need to do if I want to contribute my changes back?
|
||||
-------------------------------------------------------------
|
||||
|
||||
In order to retain the possibility for us to offer pretix in a dual licensing model, we unfortunately need you to sign
|
||||
a Contributor License Agreement (CLA) that gives us permission to use your contribution in all present and future
|
||||
distributions of pretix. We know the bureaucracy sucks. Sorry.
|
||||
|
||||
What if I want to re-use a minor part of pretix in my project?
|
||||
--------------------------------------------------------------
|
||||
|
||||
This is the main part we dislike about AGPL: If you see a specific thing in pretix that you'd like to use in another
|
||||
project, you'll need to distribute your other project under AGPL terms as well which is often not practical.
|
||||
|
||||
In this case, feel free to get in touch with us! We're happy to grant you special permission or pull the component
|
||||
out into a separately, permissively licensed repository. We already did that with `django-hierarkey`_ and
|
||||
`django-i18nfield`_ which have previously been parts of pretix.
|
||||
|
||||
What can I use the name "pretix" for?
|
||||
-------------------------------------
|
||||
|
||||
The name pretix is a registered trademark by rami.io GmbH.
|
||||
|
||||
* You **may** use it to **indicate copyright**, such as in the "powered by pretix" or "based on pretix" line, or when
|
||||
indicating that a distribution is based on pretix.
|
||||
|
||||
* You **may** use it to **indicate compatibility**, for example you are allowed to name your plugin "<name> for pretix"
|
||||
or you may state that an external service is compatible with pretix.
|
||||
|
||||
* You **may not** give the impression that your modified version, plugin or compatible service is official or authorized
|
||||
by rami.io GmbH or pretix unless we specifically allowed you to do so.
|
||||
|
||||
* You **may not** use it to name your modified version of pretix. End-users must be able to easily identify whether
|
||||
a version of pretix is distributed by us.
|
||||
|
||||
* You **may not** use any variations of the name, such as "MyPretix".
|
||||
|
||||
.. _license file: https://github.com/pretix/pretix/blob/master/LICENSE
|
||||
.. _GNU Affero General Public License 3: https://www.gnu.org/licenses/agpl-3.0.en.html
|
||||
.. _compatible to AGPL: https://www.gnu.org/licenses/license-list.en.html#GPLCompatibleLicenses
|
||||
.. _Open Source Definition: https://opensource.org/osd
|
||||
.. _combined work: https://www.gnu.org/licenses/gpl-faq.html#GPLPlugins
|
||||
.. _own additional permission: https://www.gnu.org/licenses/gpl-faq.html#GPLIncompatibleLibs
|
||||
.. _django-hierarkey: https://github.com/raphaelm/django-hierarkey
|
||||
.. _django-i18nfield: https://github.com/raphaelm/django-i18nfield
|
||||
@@ -46,7 +46,7 @@ dependencies = [
|
||||
"django-hijack==3.7.*",
|
||||
"django-i18nfield==1.10.*",
|
||||
"django-libsass==0.9",
|
||||
"django-localflavor==5.0",
|
||||
"django-localflavor==4.0",
|
||||
"django-markup",
|
||||
"django-oauth-toolkit==2.3.*",
|
||||
"django-otp==1.6.*",
|
||||
@@ -67,7 +67,7 @@ dependencies = [
|
||||
"markdown==3.8", # 3.3.5 requires importlib-metadata>=4.4, but django-bootstrap3 requires importlib-metadata<3.
|
||||
# We can upgrade markdown again once django-bootstrap3 upgrades or once we drop Python 3.6 and 3.7
|
||||
"mt-940==4.30.*",
|
||||
"oauthlib==3.3.*",
|
||||
"oauthlib==3.2.*",
|
||||
"openpyxl==3.1.*",
|
||||
"packaging",
|
||||
"paypalrestsdk==1.13.*",
|
||||
@@ -76,12 +76,12 @@ dependencies = [
|
||||
"phonenumberslite==9.0.*",
|
||||
"Pillow==11.2.*",
|
||||
"pretix-plugin-build",
|
||||
"protobuf==6.31.*",
|
||||
"protobuf==6.30.*",
|
||||
"psycopg2-binary",
|
||||
"pycountry",
|
||||
"pycparser==2.22",
|
||||
"pycryptodome==3.23.*",
|
||||
"pypdf==5.6.*",
|
||||
"pypdf==5.4.*",
|
||||
"python-bidi==0.6.*", # Support for Arabic in reportlab
|
||||
"python-dateutil==2.9.*",
|
||||
"pytz",
|
||||
@@ -123,7 +123,7 @@ dev = [
|
||||
"pytest-mock==3.14.*",
|
||||
"pytest-sugar",
|
||||
"pytest-xdist==3.7.*",
|
||||
"pytest==8.4.*",
|
||||
"pytest==8.3.*",
|
||||
"responses",
|
||||
]
|
||||
|
||||
|
||||
@@ -1600,7 +1600,7 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
|
||||
self.context['event'].currency)
|
||||
is_split_taxes = fee_data.pop('_split_taxes_like_products', False)
|
||||
|
||||
if is_split_taxes and order.total:
|
||||
if is_split_taxes:
|
||||
d = defaultdict(lambda: Decimal('0.00'))
|
||||
trz = TaxRule.zero()
|
||||
for p in pos_map.values():
|
||||
|
||||
@@ -485,17 +485,8 @@ class QuestionOptionViewSet(viewsets.ModelViewSet):
|
||||
super().perform_destroy(instance)
|
||||
|
||||
|
||||
class NumberInFilter(django_filters.BaseInFilter, django_filters.NumberFilter):
|
||||
pass
|
||||
|
||||
|
||||
with scopes_disabled():
|
||||
class QuotaFilter(FilterSet):
|
||||
items__in = NumberInFilter(
|
||||
field_name='items__id',
|
||||
lookup_expr='in',
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Quota
|
||||
fields = {
|
||||
@@ -517,7 +508,7 @@ class QuotaViewSet(ConditionalListView, viewsets.ModelViewSet):
|
||||
return self.request.event.quotas.all()
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
queryset = self.filter_queryset(self.get_queryset()).distinct()
|
||||
queryset = self.filter_queryset(self.get_queryset())
|
||||
|
||||
page = self.paginate_queryset(queryset)
|
||||
|
||||
|
||||
@@ -182,13 +182,7 @@ class NamePartsWidget(forms.MultiWidget):
|
||||
if self.field.required:
|
||||
these_attrs['required'] = 'required'
|
||||
these_attrs.pop('data-no-required-attr', None)
|
||||
|
||||
autofill_section = self.attrs.get('autocomplete', '')
|
||||
autofill_by_name_scheme = self.autofill_map.get(self.scheme['fields'][i][0], 'off')
|
||||
if autofill_by_name_scheme == "off" or autofill_section.strip() == "off":
|
||||
these_attrs['autocomplete'] = "off"
|
||||
else:
|
||||
these_attrs['autocomplete'] = (autofill_section + ' ' + autofill_by_name_scheme).strip()
|
||||
these_attrs['autocomplete'] = (self.attrs.get('autocomplete', '') + ' ' + self.autofill_map.get(self.scheme['fields'][i][0], 'off')).strip()
|
||||
these_attrs['data-size'] = self.scheme['fields'][i][2]
|
||||
these_attrs['aria-label'] = self.scheme['fields'][i][1]
|
||||
else:
|
||||
@@ -308,10 +302,7 @@ class WrappedPhonePrefixSelect(Select):
|
||||
self.initial = "+%d" % prefix
|
||||
break
|
||||
choices += get_phone_prefixes_sorted_and_localized()
|
||||
super().__init__(choices=choices, attrs={
|
||||
'aria-label': pgettext_lazy('phonenumber', 'International area code'),
|
||||
'autocomplete': 'tel-country-code',
|
||||
})
|
||||
super().__init__(choices=choices, attrs={'aria-label': pgettext_lazy('phonenumber', 'International area code')})
|
||||
|
||||
def render(self, name, value, *args, **kwargs):
|
||||
return super().render(name, value or self.initial, *args, **kwargs)
|
||||
@@ -334,11 +325,11 @@ class WrappedPhonePrefixSelect(Select):
|
||||
class WrappedPhoneNumberPrefixWidget(PhoneNumberPrefixWidget):
|
||||
|
||||
def __init__(self, attrs=None, initial=None):
|
||||
widgets = (WrappedPhonePrefixSelect(initial), forms.TextInput(attrs={
|
||||
'aria-label': pgettext_lazy('phonenumber', 'Phone number (without international area code)'),
|
||||
'autocomplete': 'tel-national',
|
||||
}))
|
||||
super(PhoneNumberPrefixWidget, self).__init__(widgets)
|
||||
attrs = {
|
||||
'aria-label': pgettext_lazy('phonenumber', 'Phone number (without international area code)')
|
||||
}
|
||||
widgets = (WrappedPhonePrefixSelect(initial), forms.TextInput(attrs=attrs))
|
||||
super(PhoneNumberPrefixWidget, self).__init__(widgets, attrs)
|
||||
|
||||
def render(self, name, value, attrs=None, renderer=None):
|
||||
output = super().render(name, value, attrs, renderer)
|
||||
@@ -995,19 +986,8 @@ class BaseQuestionsForm(forms.Form):
|
||||
value.initial = data.get('question_form_data', {}).get(key)
|
||||
|
||||
for k, v in self.fields.items():
|
||||
if isinstance(v.widget, forms.MultiWidget):
|
||||
for w in v.widget.widgets:
|
||||
autocomplete = w.attrs.get('autocomplete', '')
|
||||
if autocomplete.strip() == "off":
|
||||
w.attrs['autocomplete'] = 'off'
|
||||
else:
|
||||
w.attrs['autocomplete'] = 'section-{} '.format(self.prefix) + autocomplete
|
||||
if v.widget.attrs.get('autocomplete') or k == 'attendee_name_parts':
|
||||
autocomplete = v.widget.attrs.get('autocomplete', '')
|
||||
if autocomplete.strip() == "off":
|
||||
v.widget.attrs['autocomplete'] = 'off'
|
||||
else:
|
||||
v.widget.attrs['autocomplete'] = 'section-{} '.format(self.prefix) + autocomplete
|
||||
v.widget.attrs['autocomplete'] = 'section-{} '.format(self.prefix) + v.widget.attrs.get('autocomplete', '')
|
||||
|
||||
def clean(self):
|
||||
from pretix.base.addressvalidation import \
|
||||
@@ -1221,11 +1201,7 @@ class BaseInvoiceAddressForm(forms.ModelForm):
|
||||
|
||||
for k, v in self.fields.items():
|
||||
if v.widget.attrs.get('autocomplete') or k == 'name_parts':
|
||||
autocomplete = v.widget.attrs.get('autocomplete', '')
|
||||
if autocomplete.strip() == "off":
|
||||
v.widget.attrs['autocomplete'] = 'off'
|
||||
else:
|
||||
v.widget.attrs['autocomplete'] = 'section-invoice billing ' + autocomplete
|
||||
v.widget.attrs['autocomplete'] = 'section-invoice billing ' + v.widget.attrs.get('autocomplete', '')
|
||||
|
||||
def clean(self):
|
||||
from pretix.base.addressvalidation import \
|
||||
|
||||
@@ -26,7 +26,7 @@ from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||
|
||||
from pretix.base.models import (
|
||||
Discount, Item, ItemCategory, Order, Question, Quota, SubEvent, TaxRule,
|
||||
Voucher, WaitingListEntry,
|
||||
Voucher,
|
||||
)
|
||||
|
||||
from .logentrytype_registry import ( # noqa
|
||||
@@ -145,15 +145,3 @@ class TaxRuleLogEntryType(EventLogEntryType):
|
||||
object_link_viewname = 'control:event.settings.tax.edit'
|
||||
object_link_argname = 'rule'
|
||||
content_type = TaxRule
|
||||
|
||||
|
||||
class WaitingListEntryLogEntryType(EventLogEntryType):
|
||||
object_link_wrapper = _('{val}')
|
||||
object_link_viewname = 'control:event.orders.waitinglist'
|
||||
content_type = WaitingListEntry
|
||||
|
||||
def get_object_link_info(self, logentry) -> Optional[dict]:
|
||||
info = super().get_object_link_info(logentry)
|
||||
if info and 'href' in info:
|
||||
info['href'] += '?status=a&entry=' + str(logentry.content_object.pk)
|
||||
return info
|
||||
|
||||
@@ -1084,7 +1084,6 @@ class Event(EventMixin, LoggedModel):
|
||||
s.product = item_map[s.product_id]
|
||||
s.save(force_insert=True)
|
||||
|
||||
valid_sales_channel_identifers = set(self.organizer.sales_channels.values_list("identifier", flat=True))
|
||||
skip_settings = (
|
||||
'ticket_secrets_pretix_sig1_pubkey',
|
||||
'ticket_secrets_pretix_sig1_privkey',
|
||||
@@ -1120,11 +1119,6 @@ class Event(EventMixin, LoggedModel):
|
||||
settings_to_save.append(s)
|
||||
except ValueError:
|
||||
pass
|
||||
elif s.key.startswith('payment_') and s.key.endswith('__restrict_to_sales_channels'):
|
||||
data = other.settings._unserialize(s.value, as_type=list)
|
||||
data = [ident for ident in data if ident in valid_sales_channel_identifers]
|
||||
s.value = other.settings._serialize(data)
|
||||
settings_to_save.append(s)
|
||||
else:
|
||||
settings_to_save.append(s)
|
||||
other.settings._objects.bulk_create(settings_to_save)
|
||||
|
||||
@@ -793,7 +793,7 @@ class Item(LoggedModel):
|
||||
class Meta:
|
||||
verbose_name = _("Product")
|
||||
verbose_name_plural = _("Products")
|
||||
ordering = ("category__position", "category", "position", "pk")
|
||||
ordering = ("category__position", "category", "position")
|
||||
|
||||
def __str__(self):
|
||||
return str(self.internal_name or self.name)
|
||||
|
||||
@@ -218,6 +218,7 @@ class WaitingListEntry(LoggedModel):
|
||||
'waitinglistentry': self.pk,
|
||||
'subevent': self.subevent.pk if self.subevent else None,
|
||||
}, user=user, auth=auth)
|
||||
self.log_action('pretix.event.orders.waitinglist.voucher_assigned', user=user, auth=auth)
|
||||
self.voucher = v
|
||||
self.save()
|
||||
|
||||
@@ -233,7 +234,6 @@ class WaitingListEntry(LoggedModel):
|
||||
),
|
||||
user=user,
|
||||
auth=auth,
|
||||
log_entry_type='pretix.event.orders.waitinglist.voucher_assigned',
|
||||
)
|
||||
|
||||
def send_mail(self, subject: Union[str, LazyI18nString], template: Union[str, LazyI18nString],
|
||||
|
||||
@@ -96,19 +96,12 @@ class SendMailException(Exception):
|
||||
|
||||
|
||||
def clean_sender_name(sender_name: str) -> str:
|
||||
# Even though we try to properly escape sender names, some characters seem to cause problems when the escaping
|
||||
# fails due to some forwardings, etc.
|
||||
|
||||
# Emails with @ in their sender name are rejected by some mailservers (e.g. Microsoft) because it looks like
|
||||
# a phishing attempt.
|
||||
sender_name = sender_name.replace("@", " ")
|
||||
# Emails with : in their sender name are treated by Microsoft like emails with no From header at all, leading
|
||||
# to a higher spam likelihood.
|
||||
sender_name = sender_name.replace(":", " ")
|
||||
# Emails with , in their sender name look like multiple senders
|
||||
sender_name = sender_name.replace(",", "")
|
||||
# Emails with " in their sender name could be escaped, but somehow create issues in reality
|
||||
sender_name = sender_name.replace("\"", "")
|
||||
|
||||
# Emails with excessively long sender names are rejected by some mailservers
|
||||
if len(sender_name) > 75:
|
||||
|
||||
@@ -58,7 +58,7 @@ def timeline_for_event(event, subevent=None):
|
||||
event=event, subevent=subevent,
|
||||
datetime=ev.date_from,
|
||||
description=pgettext_lazy('timeline', 'Your event starts'),
|
||||
edit_url=ev_edit_url + '#id_date_from_0'
|
||||
edit_url=ev_edit_url
|
||||
))
|
||||
|
||||
if ev.date_to:
|
||||
@@ -66,7 +66,7 @@ def timeline_for_event(event, subevent=None):
|
||||
event=event, subevent=subevent,
|
||||
datetime=ev.date_to,
|
||||
description=pgettext_lazy('timeline', 'Your event ends'),
|
||||
edit_url=ev_edit_url + '#id_date_to_0'
|
||||
edit_url=ev_edit_url
|
||||
))
|
||||
|
||||
if ev.date_admission:
|
||||
@@ -74,7 +74,7 @@ def timeline_for_event(event, subevent=None):
|
||||
event=event, subevent=subevent,
|
||||
datetime=ev.date_admission,
|
||||
description=pgettext_lazy('timeline', 'Admissions for your event start'),
|
||||
edit_url=ev_edit_url + '#id_date_admission_0'
|
||||
edit_url=ev_edit_url
|
||||
))
|
||||
|
||||
if ev.presale_start:
|
||||
@@ -82,7 +82,7 @@ def timeline_for_event(event, subevent=None):
|
||||
event=event, subevent=subevent,
|
||||
datetime=ev.presale_start,
|
||||
description=pgettext_lazy('timeline', 'Start of ticket sales'),
|
||||
edit_url=ev_edit_url + '#id_presale_start_0'
|
||||
edit_url=ev_edit_url
|
||||
))
|
||||
|
||||
tl.append(TimelineEvent(
|
||||
@@ -95,7 +95,7 @@ def timeline_for_event(event, subevent=None):
|
||||
pgettext_lazy('timeline', 'End of ticket sales'),
|
||||
pgettext_lazy('timeline', 'automatically because the event is over and no end of presale has been configured') if not ev.presale_end else ""
|
||||
),
|
||||
edit_url=ev_edit_url + '#id_presale_end_0'
|
||||
edit_url=ev_edit_url
|
||||
))
|
||||
|
||||
rd = event.settings.get('last_order_modification_date', as_type=RelativeDateWrapper)
|
||||
@@ -104,7 +104,7 @@ def timeline_for_event(event, subevent=None):
|
||||
event=event, subevent=subevent,
|
||||
datetime=rd.datetime(ev),
|
||||
description=pgettext_lazy('timeline', 'Customers can no longer modify their order information'),
|
||||
edit_url=ev_edit_url + '#id_settings-last_order_modification_date_0_0'
|
||||
edit_url=ev_edit_url
|
||||
))
|
||||
|
||||
rd = event.settings.get('payment_term_last', as_type=RelativeDateWrapper)
|
||||
@@ -281,7 +281,7 @@ def timeline_for_event(event, subevent=None):
|
||||
'event': event.slug,
|
||||
'organizer': event.organizer.slug,
|
||||
'item': p.pk,
|
||||
}) + '#id_available_from_0'
|
||||
})
|
||||
))
|
||||
if p.available_until:
|
||||
tl.append(TimelineEvent(
|
||||
@@ -292,7 +292,7 @@ def timeline_for_event(event, subevent=None):
|
||||
'event': event.slug,
|
||||
'organizer': event.organizer.slug,
|
||||
'item': p.pk,
|
||||
}) + '#id_available_until_0'
|
||||
})
|
||||
))
|
||||
|
||||
for v in ItemVariation.objects.filter(
|
||||
@@ -311,7 +311,7 @@ def timeline_for_event(event, subevent=None):
|
||||
'event': event.slug,
|
||||
'organizer': event.organizer.slug,
|
||||
'item': v.item.pk,
|
||||
}) + '#tab-0-3-open'
|
||||
})
|
||||
))
|
||||
if v.available_until:
|
||||
tl.append(TimelineEvent(
|
||||
@@ -325,7 +325,7 @@ def timeline_for_event(event, subevent=None):
|
||||
'event': event.slug,
|
||||
'organizer': event.organizer.slug,
|
||||
'item': v.item.pk,
|
||||
}) + '#tab-0-3-open'
|
||||
})
|
||||
))
|
||||
|
||||
pprovs = event.get_payment_providers()
|
||||
@@ -339,24 +339,6 @@ def timeline_for_event(event, subevent=None):
|
||||
continue
|
||||
except:
|
||||
pass
|
||||
availability_start = pprov.settings.get('_availability_start', as_type=RelativeDateWrapper)
|
||||
if availability_start:
|
||||
d = make_aware(datetime.combine(
|
||||
availability_start.date(ev),
|
||||
time(hour=0, minute=0, second=0)
|
||||
), event.timezone)
|
||||
tl.append(TimelineEvent(
|
||||
event=event, subevent=subevent,
|
||||
datetime=d,
|
||||
description=pgettext_lazy('timeline', 'Payment provider "{name}" becomes active').format(
|
||||
name=str(pprov.verbose_name)
|
||||
),
|
||||
edit_url=reverse('control:event.settings.payment.provider', kwargs={
|
||||
'event': event.slug,
|
||||
'organizer': event.organizer.slug,
|
||||
'provider': pprov.identifier,
|
||||
})
|
||||
))
|
||||
availability_date = pprov.settings.get('_availability_date', as_type=RelativeDateWrapper)
|
||||
if availability_date:
|
||||
d = make_aware(datetime.combine(
|
||||
|
||||
@@ -665,9 +665,9 @@ class EventSettingsForm(EventSettingsValidationMixin, FormPlaceholderMixin, Sett
|
||||
del self.fields['event_list_available_only']
|
||||
del self.fields['event_list_filters']
|
||||
del self.fields['event_calendar_future_only']
|
||||
self.fields['primary_font'].choices = [('Open Sans', 'Open Sans')] + sorted([
|
||||
self.fields['primary_font'].choices += [
|
||||
(a, {"title": a, "data": v}) for a, v in get_fonts(self.event, pdf_support_required=False).items()
|
||||
], key=lambda a: a[0])
|
||||
]
|
||||
|
||||
# create "virtual" fields for better UX when editing <name>_asked and <name>_required fields
|
||||
self.virtual_keys = []
|
||||
|
||||
@@ -50,7 +50,7 @@ from pretix.base.logentrytypes import (
|
||||
DiscountLogEntryType, EventLogEntryType, ItemCategoryLogEntryType,
|
||||
ItemLogEntryType, LogEntryType, OrderLogEntryType, QuestionLogEntryType,
|
||||
QuotaLogEntryType, TaxRuleLogEntryType, VoucherLogEntryType,
|
||||
WaitingListEntryLogEntryType, log_entry_types,
|
||||
log_entry_types,
|
||||
)
|
||||
from pretix.base.models import (
|
||||
Checkin, CheckinList, Event, ItemVariation, LogEntry, OrderPosition,
|
||||
@@ -697,7 +697,11 @@ class CoreUserImpersonatedLogEntryType(UserImpersonatedLogEntryType):
|
||||
'the last request was less than 24 hours ago.'),
|
||||
'pretix.organizer.deleted': _('The organizer "{name}" has been deleted.'),
|
||||
'pretix.waitinglist.voucher': _('A voucher has been sent to a person on the waiting list.'), # legacy
|
||||
'pretix.event.orders.waitinglist.voucher_assigned': _('A voucher has been sent to a person on the waiting list.'),
|
||||
'pretix.event.orders.waitinglist.deleted': _('An entry has been removed from the waiting list.'),
|
||||
'pretix.event.order.waitinglist.transferred': _('An entry has been transferred to another waiting list.'), # legacy
|
||||
'pretix.event.orders.waitinglist.changed': _('An entry has been changed on the waiting list.'),
|
||||
'pretix.event.orders.waitinglist.added': _('An entry has been added to the waiting list.'),
|
||||
'pretix.team.created': _('The team has been created.'),
|
||||
'pretix.team.changed': _('The team settings have been changed.'),
|
||||
'pretix.team.deleted': _('The team has been deleted.'),
|
||||
@@ -899,13 +903,3 @@ class LegacyCheckinLogEntryType(OrderLogEntryType):
|
||||
datetime=dt_formatted,
|
||||
list=checkin_list
|
||||
)
|
||||
|
||||
|
||||
@log_entry_types.new_from_dict({
|
||||
'pretix.event.orders.waitinglist.voucher_assigned': _('A voucher has been sent to a person on the waiting list.'),
|
||||
'pretix.event.orders.waitinglist.deleted': _('An entry has been removed from the waiting list.'),
|
||||
'pretix.event.orders.waitinglist.changed': _('An entry has been changed on the waiting list.'),
|
||||
'pretix.event.orders.waitinglist.added': _('An entry has been added to the waiting list.'),
|
||||
})
|
||||
class CoreWaitingListEntryLogEntryType(WaitingListEntryLogEntryType):
|
||||
pass
|
||||
|
||||
@@ -247,17 +247,6 @@
|
||||
{% bootstrap_field sform.show_variations_expanded layout="control" %}
|
||||
{% bootstrap_field sform.hide_sold_out layout="control" %}
|
||||
|
||||
<div data-display-dependency="#id_settings-waiting_list_enabled">
|
||||
<div data-display-dependency="#id_settings-hide_sold_out">
|
||||
<div class="alert alert-danger dynamic">
|
||||
<h4>{% trans "Incompatible settings" %}</h4>
|
||||
{% blocktrans trimmed %}
|
||||
Customers won't be able to add themselves to the waiting list, because "Hide all products that are sold out" is enabled.
|
||||
{% endblocktrans %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h4>{% trans "Calendar and list views" context "subevents" %}</h4>
|
||||
{% if sform.frontpage_subevent_ordering %}
|
||||
{% bootstrap_field sform.frontpage_subevent_ordering layout="control" %}
|
||||
@@ -383,16 +372,6 @@
|
||||
</strong>
|
||||
</div>
|
||||
{% bootstrap_field sform.waiting_list_enabled layout="control" %}
|
||||
<div data-display-dependency="#id_settings-hide_sold_out">
|
||||
<div data-display-dependency="#id_settings-waiting_list_enabled">
|
||||
<div class="alert alert-danger dynamic">
|
||||
<h4>{% trans "Incompatible settings" %}</h4>
|
||||
{% blocktrans trimmed %}
|
||||
Customers won't be able to add themselves to the waiting list, because "Hide all products that are sold out" is enabled.
|
||||
{% endblocktrans %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% bootstrap_field sform.waiting_list_auto layout="control" %}
|
||||
<div class="form-group">
|
||||
<label class="control-label col-md-3">
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="row" id="question-stats">
|
||||
{% if not stats %}
|
||||
<div class="empty-collection col-md-10 col-xs-12">
|
||||
<p>
|
||||
@@ -81,7 +81,7 @@
|
||||
<div class="chart" id="question_chart" data-type="{{ question.type }}">
|
||||
|
||||
</div>
|
||||
{{ stats|json_script:"question-chart-data" }}
|
||||
<script type="application/json" id="question-chart-data">{{ stats_json|escapejson }}</script>
|
||||
</div>
|
||||
<div class="col-md-5 col-xs-12">
|
||||
<table class="table table-bordered table-hover">
|
||||
@@ -89,8 +89,7 @@
|
||||
<tr>
|
||||
<th>{% trans "Answer" %}</th>
|
||||
<th class="text-right">{% trans "Count" %}</th>
|
||||
<th class="text-right">{% trans "% of answers" %}</th>
|
||||
<th class="text-right">{% trans "% of tickets" %}</th>
|
||||
<th class="text-right">{% trans "Percentage" %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -103,7 +102,6 @@
|
||||
</td>
|
||||
<td class="text-right">{{ stat.count }}</td>
|
||||
<td class="text-right">{{ stat.percentage|floatformat:1 }} %</td>
|
||||
<td class="text-right">{{ stat.percentage_attendees|floatformat:1 }} %</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
@@ -112,7 +110,6 @@
|
||||
<td><strong>{% trans "Sum" %}</strong></td>
|
||||
<td class="text-right"><strong>{{ total }}</strong></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
{% load captureas %}
|
||||
{% load static %}
|
||||
{% load eventsignal %}
|
||||
{% load dialog %}
|
||||
{% block title %}{% trans "Change multiple dates" context "subevent" %}{% endblock %}
|
||||
{% block content %}
|
||||
<h1>
|
||||
@@ -183,22 +182,21 @@
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>{% trans "Quotas" %}</legend>
|
||||
<div class="bulk-edit-field-group"
|
||||
{% if sampled_quotas|default_if_none:"NONE" == "NONE" %}
|
||||
data-confirm-dialog="#confirm-override-quotas"
|
||||
{% endif %}>
|
||||
{% if sampled_quotas|default_if_none:"NONE" == "NONE" %}
|
||||
<div class="alert alert-warning">
|
||||
{% blocktrans trimmed %}
|
||||
You selected a set of dates that currently have different quota setups. You can therefore
|
||||
not change their quotas in bulk. If you want, you can set up a new set of quotas to
|
||||
<strong>replace</strong> the quota setup of all selected dates.
|
||||
{% endblocktrans %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="bulk-edit-field-group">
|
||||
<label class="field-toggle">
|
||||
<input type="checkbox" name="_bulk" value="__quotas" {% if "__quotas" in bulk_selected %}checked{% endif %}>
|
||||
{% trans "change" context "form_bulk" %}
|
||||
</label>
|
||||
<div class="field-content">
|
||||
{% if sampled_quotas|default_if_none:"NONE" == "NONE" %}
|
||||
<div class="alert alert-warning">
|
||||
{% trans "You selected a set of dates that currently have different quota setups." %}
|
||||
{% trans "Using this option will <strong>delete all current quotas</strong> from <strong>all selected dates</strong>." %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="formset" data-formset data-formset-prefix="{{ formset.prefix }}">
|
||||
{{ formset.management_form }}
|
||||
{% bootstrap_formset_errors formset %}
|
||||
@@ -273,7 +271,7 @@
|
||||
<fieldset>
|
||||
<legend>{% trans "Check-in lists" %}</legend>
|
||||
{% if sampled_lists|default_if_none:"NONE" == "NONE" %}
|
||||
<div class="alert alert-info">
|
||||
<div class="alert alert-warning">
|
||||
{% blocktrans trimmed %}
|
||||
You selected a set of dates that currently have different check-in list setups. You can
|
||||
therefore not change their check-in lists in bulk.
|
||||
@@ -369,17 +367,4 @@
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
{% trans "Delete existing quotas" as dialog_title %}
|
||||
{% trans "Using this option will <strong>delete all current quotas</strong> from <strong>all selected dates</strong>." as dialog_text %}
|
||||
{% trans "This cannot be reverted. Are you sure to proceed?" as dialog_text2 %}
|
||||
{% dialog "confirm-override-quotas" dialog_title dialog_text|add:" "|add:dialog_text2 icon="trash" %}
|
||||
<p class="modal-card-confirm modal-card-confirm-spread">
|
||||
<button class="btn btn-lg btn-default" value="no">
|
||||
{% trans "Cancel" %}
|
||||
</button>
|
||||
<button class="btn btn-lg btn-danger" value="yes">
|
||||
{% trans "Proceed" %}
|
||||
</button>
|
||||
</p>
|
||||
{% enddialog %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -64,9 +64,8 @@ from pretix.api.serializers.item import (
|
||||
)
|
||||
from pretix.base.forms import I18nFormSet
|
||||
from pretix.base.models import (
|
||||
CartPosition, Item, ItemCategory, ItemVariation, Order, OrderPosition,
|
||||
Question, QuestionAnswer, QuestionOption, Quota, SeatCategoryMapping,
|
||||
Voucher,
|
||||
CartPosition, Item, ItemCategory, ItemVariation, Order, Question,
|
||||
QuestionAnswer, QuestionOption, Quota, SeatCategoryMapping, Voucher,
|
||||
)
|
||||
from pretix.base.models.event import SubEvent
|
||||
from pretix.base.models.items import ItemAddOn, ItemBundle, ItemMetaValue
|
||||
@@ -666,41 +665,36 @@ class QuestionView(EventPermissionRequiredMixin, QuestionMixin, ChartContainingV
|
||||
template_name_field = 'question'
|
||||
|
||||
def get_answer_statistics(self):
|
||||
opqs = OrderPosition.objects.filter(
|
||||
order__event=self.request.event,
|
||||
)
|
||||
qs = QuestionAnswer.objects.filter(
|
||||
question=self.object, orderposition__isnull=False,
|
||||
orderposition__order__event=self.request.event
|
||||
)
|
||||
|
||||
if self.request.GET.get("subevent", "") != "":
|
||||
opqs = opqs.filter(subevent=self.request.GET["subevent"])
|
||||
qs = qs.filter(orderposition__subevent=self.request.GET["subevent"])
|
||||
|
||||
s = self.request.GET.get("status", "np")
|
||||
if s != "":
|
||||
if s == 'o':
|
||||
opqs = opqs.filter(order__status=Order.STATUS_PENDING,
|
||||
order__expires__lt=now().replace(hour=0, minute=0, second=0))
|
||||
qs = qs.filter(orderposition__order__status=Order.STATUS_PENDING,
|
||||
orderposition__order__expires__lt=now().replace(hour=0, minute=0, second=0))
|
||||
elif s == 'np':
|
||||
opqs = opqs.filter(order__status__in=[Order.STATUS_PENDING, Order.STATUS_PAID])
|
||||
qs = qs.filter(orderposition__order__status__in=[Order.STATUS_PENDING, Order.STATUS_PAID])
|
||||
elif s == 'pv':
|
||||
opqs = opqs.filter(
|
||||
Q(order__status=Order.STATUS_PAID) |
|
||||
Q(order__status=Order.STATUS_PENDING, order__valid_if_pending=True)
|
||||
qs = qs.filter(
|
||||
Q(orderposition__order__status=Order.STATUS_PAID) |
|
||||
Q(orderposition__order__status=Order.STATUS_PENDING, orderposition__order__valid_if_pending=True)
|
||||
)
|
||||
elif s == 'ne':
|
||||
opqs = opqs.filter(order__status__in=[Order.STATUS_PENDING, Order.STATUS_EXPIRED])
|
||||
qs = qs.filter(orderposition__order__status__in=[Order.STATUS_PENDING, Order.STATUS_EXPIRED])
|
||||
else:
|
||||
opqs = opqs.filter(order__status=s)
|
||||
qs = qs.filter(orderposition__order__status=s)
|
||||
|
||||
if s not in (Order.STATUS_CANCELED, ""):
|
||||
opqs = opqs.filter(canceled=False)
|
||||
qs = qs.filter(orderposition__canceled=False)
|
||||
if self.request.GET.get("item", "") != "":
|
||||
i = self.request.GET.get("item", "")
|
||||
opqs = opqs.filter(item_id__in=(i,))
|
||||
|
||||
qs = qs.filter(orderposition__in=opqs)
|
||||
op_cnt = opqs.filter(item__in=self.object.items.all()).count()
|
||||
qs = qs.filter(orderposition__item_id__in=(i,))
|
||||
|
||||
if self.object.type == Question.TYPE_FILE:
|
||||
qs = [
|
||||
@@ -740,7 +734,6 @@ class QuestionView(EventPermissionRequiredMixin, QuestionMixin, ChartContainingV
|
||||
total = sum(a['count'] for a in r)
|
||||
for a in r:
|
||||
a['percentage'] = (a['count'] / total * 100.) if total else 0
|
||||
a['percentage_attendees'] = (a['count'] / op_cnt * 100.) if op_cnt else 0
|
||||
return r, total
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
@@ -748,6 +741,7 @@ class QuestionView(EventPermissionRequiredMixin, QuestionMixin, ChartContainingV
|
||||
ctx['items'] = self.object.items.all()
|
||||
stats = self.get_answer_statistics()
|
||||
ctx['stats'], ctx['total'] = stats
|
||||
ctx['stats_json'] = json.dumps(stats)
|
||||
return ctx
|
||||
|
||||
def get_object(self, queryset=None) -> Question:
|
||||
|
||||
@@ -548,24 +548,23 @@ class OrderDetail(OrderView):
|
||||
|
||||
unsent_invoices = [ii.pk for ii in ctx['invoices'] if not ii.sent_to_customer]
|
||||
if unsent_invoices:
|
||||
with language(self.order.locale):
|
||||
ctx['invoices_send_link'] = reverse('control:event.order.sendmail', kwargs={
|
||||
'event': self.request.event.slug,
|
||||
'organizer': self.request.event.organizer.slug,
|
||||
'code': self.order.code
|
||||
}) + '?' + urlencode({
|
||||
'subject': ngettext('Your invoice', 'Your invoices', len(unsent_invoices)),
|
||||
'message': ngettext(
|
||||
'Hello,\n\nplease find your invoice attached to this email.\n\n'
|
||||
'Your {event} team',
|
||||
'Hello,\n\nplease find your invoices attached to this email.\n\n'
|
||||
'Your {event} team',
|
||||
len(unsent_invoices)
|
||||
).format(
|
||||
event="{event}",
|
||||
),
|
||||
'attach_invoices': unsent_invoices
|
||||
}, doseq=True)
|
||||
ctx['invoices_send_link'] = reverse('control:event.order.sendmail', kwargs={
|
||||
'event': self.request.event.slug,
|
||||
'organizer': self.request.event.organizer.slug,
|
||||
'code': self.order.code
|
||||
}) + '?' + urlencode({
|
||||
'subject': ngettext('Your invoice', 'Your invoices', len(unsent_invoices)),
|
||||
'message': ngettext(
|
||||
'Hello,\n\nplease find your invoice attached to this email.\n\n'
|
||||
'Your {event} team',
|
||||
'Hello,\n\nplease find your invoices attached to this email.\n\n'
|
||||
'Your {event} team',
|
||||
len(unsent_invoices)
|
||||
).format(
|
||||
event="{event}",
|
||||
),
|
||||
'attach_invoices': unsent_invoices
|
||||
}, doseq=True)
|
||||
|
||||
return ctx
|
||||
|
||||
|
||||
@@ -5,8 +5,8 @@ msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:35+0000\n"
|
||||
"PO-Revision-Date: 2025-06-12 17:00+0000\n"
|
||||
"Last-Translator: Richard Schreiber <schreiber@rami.io>\n"
|
||||
"PO-Revision-Date: 2025-05-30 11:15+0000\n"
|
||||
"Last-Translator: Raphael Michel <michel@rami.io>\n"
|
||||
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix/de/"
|
||||
">\n"
|
||||
"Language: de\n"
|
||||
@@ -33401,7 +33401,7 @@ msgstr "Übersicht über die bestellten Produkte"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart_box.html:50
|
||||
msgid "Continue with order process"
|
||||
msgstr "Fortfahren mit dem Bestellprozess"
|
||||
msgstr "Mit dem Bestellprozess fortfahren"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart_box.html:55
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:232
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:36+0000\n"
|
||||
"PO-Revision-Date: 2025-06-04 06:32+0000\n"
|
||||
"PO-Revision-Date: 2025-05-28 08:00+0000\n"
|
||||
"Last-Translator: 조정화 <junghwa.jo@om.org>\n"
|
||||
"Language-Team: Korean <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||
"ko/>\n"
|
||||
@@ -733,7 +733,7 @@ msgstr "카트가 만료되었습니다"
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:59
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:87
|
||||
msgid "Your cart is about to expire."
|
||||
msgstr "카트가 곧 만료됩니다."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:64
|
||||
msgid "The items in your cart are reserved for you for one minute."
|
||||
@@ -764,11 +764,11 @@ msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:90
|
||||
msgid "Do you want to renew the reservation period?"
|
||||
msgstr "예약 기간을 갱신하시겠습니까?"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:93
|
||||
msgid "Renew reservation"
|
||||
msgstr "예약 갱신"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:194
|
||||
msgid "The organizer keeps %(currency)s %(amount)s"
|
||||
@@ -811,13 +811,12 @@ msgstr "수량 증가"
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:19
|
||||
msgctxt "widget"
|
||||
msgid "Filter events by"
|
||||
msgstr "이벤트를 걸러내다(이벤트 중에서 특정 조건에 맞는 것만 골라서 보여주거나, "
|
||||
"나머지를 숨기는 것을 의미)"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:20
|
||||
msgctxt "widget"
|
||||
msgid "Filter"
|
||||
msgstr "걸러내다(데이터나 목록, 정보에서 조건에 맞는 것만 보여주기라는 의미)"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:21
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:19
|
||||
@@ -1076,7 +1075,7 @@ msgstr "체크아웃 재개"
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:63
|
||||
msgctxt "widget"
|
||||
msgid "You cannot cancel this operation. Please wait for loading to finish."
|
||||
msgstr "이 작업은 취소할 수 없습니다. 로딩이 끝날 때까지 기다려 주세요"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:64
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:60
|
||||
|
||||
@@ -7,16 +7,16 @@ msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:35+0000\n"
|
||||
"PO-Revision-Date: 2025-06-10 04:00+0000\n"
|
||||
"Last-Translator: Tim Maurizio Dullaart <Tim.maurizio@gmail.com>\n"
|
||||
"Language-Team: Dutch <https://translate.pretix.eu/projects/pretix/pretix/nl/>"
|
||||
"\n"
|
||||
"PO-Revision-Date: 2025-05-01 02:00+0000\n"
|
||||
"Last-Translator: Foxy Hunter <matthias.vancoillie@outlook.com>\n"
|
||||
"Language-Team: Dutch <https://translate.pretix.eu/projects/pretix/pretix/nl/"
|
||||
">\n"
|
||||
"Language: nl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.11.4\n"
|
||||
"X-Generator: Weblate 5.11.1\n"
|
||||
|
||||
#: pretix/_base_settings.py:87
|
||||
msgid "English"
|
||||
@@ -88,7 +88,7 @@ msgstr "Grieks"
|
||||
|
||||
#: pretix/_base_settings.py:104
|
||||
msgid "Hebrew"
|
||||
msgstr "Hebreeuws"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:105
|
||||
msgid "Indonesian"
|
||||
@@ -694,16 +694,16 @@ msgstr ""
|
||||
"gebruikt worden door integraties."
|
||||
|
||||
#: pretix/base/context.py:38
|
||||
#, python-brace-format
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "powered by {name} based on <a {a_attr}>pretix</a>"
|
||||
msgid "<a {a_name_attr}>powered by {name}</a> <a {a_attr}>based on pretix</a>"
|
||||
msgstr ""
|
||||
"<a {a_name_attr}>mogelijk gemaakt door {name}</a> <a {a_attr}> gebaseerd op "
|
||||
"pretix</a>"
|
||||
msgstr "mogelijk gemaakt door {name}, gebaseerd op <a {a_attr}>pretix</a>"
|
||||
|
||||
#: pretix/base/context.py:48
|
||||
#, python-brace-format
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "powered by {name} based on <a {a_attr}>pretix</a>"
|
||||
msgid "<a {a_attr}>powered by {name} based on pretix</a>"
|
||||
msgstr "<a {a_attr}>medemogelijk gemaakt door {name} gebasseerd op pretix</a>"
|
||||
msgstr "mogelijk gemaakt door {name}, gebaseerd op <a {a_attr}>pretix</a>"
|
||||
|
||||
#: pretix/base/context.py:55
|
||||
#, python-format
|
||||
@@ -4362,15 +4362,13 @@ msgstr "Optioneel. Er worden geen producten verkocht vóór deze datum."
|
||||
|
||||
#: pretix/base/models/event.py:621
|
||||
msgid "This event is remote or partially remote."
|
||||
msgstr "Dit evenement is afgelegen of gedeeltelijk afgelegen."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/models/event.py:622
|
||||
msgid ""
|
||||
"This will be used to let users know if the event is in a different timezone "
|
||||
"and let’s us calculate users’ local times."
|
||||
msgstr ""
|
||||
"Dit wordt gebruikt om gebruikers te laten weten of het evenement in een "
|
||||
"andere tijdzone is en laat het ons de gebruikers lokale tijdzone berekenen."
|
||||
|
||||
#: pretix/base/models/event.py:642 pretix/control/navigation.py:65
|
||||
msgid "Plugins"
|
||||
@@ -6066,8 +6064,10 @@ msgid "Cart ID (e.g. session key)"
|
||||
msgstr "Winkelwagen-ID (bijv. sessiesleutel)"
|
||||
|
||||
#: pretix/base/models/orders.py:3102
|
||||
#, fuzzy
|
||||
#| msgid "Gift card: Expiration date"
|
||||
msgid "Limit for extending expiration date"
|
||||
msgstr "Limiet voor het uitstellen van de vervaldatum"
|
||||
msgstr "Cadeaubon: Verloopdatum"
|
||||
|
||||
#: pretix/base/models/orders.py:3131
|
||||
msgid "Cart position"
|
||||
@@ -7262,8 +7262,10 @@ msgid "You cannot pay with gift cards when buying a gift card."
|
||||
msgstr "U kunt niet met cadeaubonnen betalen wanneer u een cadeaubon koopt."
|
||||
|
||||
#: pretix/base/payment.py:1467
|
||||
#, fuzzy
|
||||
#| msgid "Please enter the correct result."
|
||||
msgid "Please enter the code of your gift card."
|
||||
msgstr "Vul alstublieft de code van jouw cadeaukaart in."
|
||||
msgstr "Vul alstublieft het correcte resultaat in."
|
||||
|
||||
#: pretix/base/payment.py:1483 pretix/base/payment.py:1526
|
||||
msgid ""
|
||||
@@ -10656,16 +10658,22 @@ msgstr ""
|
||||
"hoe uw de in uw ticketwinkel verzamelde gegevens gebruikt."
|
||||
|
||||
#: pretix/base/settings.py:2071
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information URL"
|
||||
msgstr "Toegankelijkheids informatie URL"
|
||||
msgstr "Accountinformatie"
|
||||
|
||||
#: pretix/base/settings.py:2072
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "This should point e.g. to a part of your website that explains how you "
|
||||
#| "use data gathered in your ticket shop."
|
||||
msgid ""
|
||||
"This should point e.g. to a part of your website that explains how your "
|
||||
"ticket shop complies with accessibility regulation."
|
||||
msgstr ""
|
||||
"Dit zou bijvoorbeeld naar een deel van uw website moeten wijzen dat uitlegt "
|
||||
"hoe uw ticketwinkel omgaat met de toegankelijkheids wetgevingen."
|
||||
"hoe uw de in uw ticketwinkel verzamelde gegevens gebruikt."
|
||||
|
||||
#: pretix/base/settings.py:2079
|
||||
#: pretix/presale/templates/pretixpresale/event/base.html:228
|
||||
@@ -10673,16 +10681,22 @@ msgstr ""
|
||||
#: pretix/presale/templates/pretixpresale/organizers/accessibility.html:6
|
||||
#: pretix/presale/templates/pretixpresale/organizers/base.html:106
|
||||
#: pretix/presale/templates/pretixpresale/organizers/base.html:111
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information"
|
||||
msgstr "Toegankelijkheids informatie"
|
||||
msgstr "Accountinformatie"
|
||||
|
||||
#: pretix/base/settings.py:2083
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information title"
|
||||
msgstr "Toegankelijkheids informatie titel"
|
||||
msgstr "Accountinformatie"
|
||||
|
||||
#: pretix/base/settings.py:2093
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information text"
|
||||
msgstr "Toegankelijkheids informatie tekst"
|
||||
msgstr "Accountinformatie"
|
||||
|
||||
#: pretix/base/settings.py:2114
|
||||
msgid "Attach ticket files"
|
||||
@@ -17753,9 +17767,7 @@ msgstr "draaiend in ontwikkelmodus"
|
||||
#: pretix/presale/templates/pretixpresale/postmessage.html:27
|
||||
#: pretix/presale/templates/pretixpresale/waiting.html:42
|
||||
msgid "If this takes longer than a few minutes, please contact us."
|
||||
msgstr ""
|
||||
"Als dit langer dan een paar minuten duurt, neem dan alstublieft contact met "
|
||||
"ons op."
|
||||
msgstr "Neem contact met ons op als dit langer dan een aantal minuten duurt."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:4
|
||||
#: pretix/control/templates/pretixcontrol/organizers/devices.html:71
|
||||
@@ -21241,11 +21253,13 @@ msgstr "Product met varianten"
|
||||
#: pretix/control/templates/pretixcontrol/items/index.html:118
|
||||
msgctxt "subevent"
|
||||
msgid "Product assigned to seating plan for one or more dates"
|
||||
msgstr "Product toegewezen tot een zittingsschema voor een of meerdere data"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/index.html:118
|
||||
#, fuzzy
|
||||
#| msgid "Product settings"
|
||||
msgid "Product assigned to seating plan"
|
||||
msgstr "Product toegewezen tot een zittingsplan"
|
||||
msgstr "Productinstellingen"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/index.html:126
|
||||
msgid "Only available as an add-on product"
|
||||
@@ -23772,8 +23786,10 @@ msgstr ""
|
||||
"trackingaanbieders niet kennen."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:204
|
||||
#, fuzzy
|
||||
#| msgid "Availability"
|
||||
msgid "Accessibility"
|
||||
msgstr "Toegankelijkheid"
|
||||
msgstr "Beschikbaarheid"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:206
|
||||
msgid ""
|
||||
@@ -23782,19 +23798,12 @@ msgid ""
|
||||
"template in <a href=\"https://docs.pretix.eu/trust/accessibility/\" "
|
||||
"target=\"_blank\">our documentation</a>."
|
||||
msgstr ""
|
||||
"Sommige rechtsgebieden, waaronder de Europeese Unie, vereist jou om "
|
||||
"informatie te publiceren over de toegankelijkheid van je ticket winkel. Je "
|
||||
"kan een template vinden in <a href="
|
||||
"\"https://docs.pretix.eu/trust/accessibility/\" target=\"_blank\">onze "
|
||||
"documentatie</a>."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:216
|
||||
msgid ""
|
||||
"Instead of an URL, you can also configure a text that will be shown within "
|
||||
"pretix. This will be ignored if a URL is configured."
|
||||
msgstr ""
|
||||
"In plaats van een URL, kan je ook een tekst instellen, dat wordt laten zien "
|
||||
"binnen pretix. Dit wordt genegeerd als een URL is ingesteld."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:228
|
||||
msgid "Barcode media"
|
||||
@@ -29082,8 +29091,10 @@ msgid "Open BezahlCode in your banking app to start the payment process."
|
||||
msgstr "Open BezahlCode in uw bank-app om het betalingsproces te starten."
|
||||
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:129
|
||||
#, fuzzy
|
||||
#| msgid "Scan the qr-code with your banking app"
|
||||
msgid "Scan the QR code with your banking app"
|
||||
msgstr "Scan de QR-code met uw bankapplicatie"
|
||||
msgstr "Scan de qr-code met uw bankapplicatie"
|
||||
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:141
|
||||
#, python-format
|
||||
@@ -32261,12 +32272,17 @@ msgid "You need to fill out all fields."
|
||||
msgstr "Vul alle velden in."
|
||||
|
||||
#: pretix/presale/forms/customer.py:69
|
||||
#, fuzzy
|
||||
#| msgid "Please enter a valid email address."
|
||||
msgid "You need to enter an email address."
|
||||
msgstr "U moet een e-mailadres invullen."
|
||||
msgstr "Vul alstublieft een geldig e-mailadres in."
|
||||
|
||||
#: pretix/presale/forms/customer.py:70
|
||||
#, fuzzy
|
||||
#| msgctxt "subevent"
|
||||
#| msgid "You need to select a date."
|
||||
msgid "You need to enter a password."
|
||||
msgstr "U moet een wachtwoord invullen."
|
||||
msgstr "U moet een datum selecteren."
|
||||
|
||||
#: pretix/presale/forms/customer.py:72
|
||||
msgid "We have not found an account with this email address and password."
|
||||
@@ -32275,18 +32291,27 @@ msgstr ""
|
||||
"wachtwoord vinden."
|
||||
|
||||
#: pretix/presale/forms/customer.py:74
|
||||
#, fuzzy
|
||||
#| msgid "Please enter the same email address twice."
|
||||
msgid "Please verify that you entered the correct email address."
|
||||
msgstr "Alstublieft controleer of u het juiste emailadress heeft ingevuld."
|
||||
msgstr "Voer twee keer hetzelfde e-mailadres in."
|
||||
|
||||
#: pretix/presale/forms/customer.py:75
|
||||
#, fuzzy
|
||||
#| msgid "Please enter the correct result."
|
||||
msgid "Please enter the correct password."
|
||||
msgstr "Vul alstublieft het correcte wachtwoord in."
|
||||
msgstr "Vul alstublieft het correcte resultaat in."
|
||||
|
||||
#: pretix/presale/forms/customer.py:76
|
||||
msgid "This account is disabled."
|
||||
msgstr "Dit account is uitgeschakeld."
|
||||
|
||||
#: pretix/presale/forms/customer.py:77
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "You have not yet activated your account and set a password. Please click "
|
||||
#| "the link in the email we sent you. Click \"Reset password\" to receive a "
|
||||
#| "new email in case you cannot find it again."
|
||||
msgid ""
|
||||
"You have not yet activated your account and set a password. Please click the "
|
||||
"link in the email we sent you. In case you cannot find it, click \"Forgot "
|
||||
@@ -32298,8 +32323,10 @@ msgstr ""
|
||||
"te klikken."
|
||||
|
||||
#: pretix/presale/forms/customer.py:90
|
||||
#, fuzzy
|
||||
#| msgid "Your password"
|
||||
msgid "Forgot your password?"
|
||||
msgstr "Wachtwoord vergeten?"
|
||||
msgstr "Uw wachtwoord"
|
||||
|
||||
#: pretix/presale/forms/customer.py:146
|
||||
msgid ""
|
||||
@@ -32404,13 +32431,17 @@ msgid "Organizer: {organizer}"
|
||||
msgstr "Organisator: {organizer}"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/base.html:47
|
||||
#, fuzzy
|
||||
#| msgid "Send links"
|
||||
msgctxt "skip-to-main-nav"
|
||||
msgid "Skip link"
|
||||
msgstr "Sla over link"
|
||||
msgstr "Verstuur links"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/base.html:48
|
||||
#, fuzzy
|
||||
#| msgid "Email content"
|
||||
msgid "Skip to main content"
|
||||
msgstr "Overslaan naar de hoofd-inhoud"
|
||||
msgstr "E-mailinhoud"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/base.html:76
|
||||
msgid "Footer Navigation"
|
||||
@@ -33255,8 +33286,10 @@ msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:509
|
||||
#: pretix/presale/templates/pretixpresale/fragment_modals.html:48
|
||||
#, fuzzy
|
||||
#| msgid "Event description"
|
||||
msgid "Renew reservation"
|
||||
msgstr "Vernieuw reservering"
|
||||
msgstr "Evenementomschrijving"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:514
|
||||
msgid "Overview of your ordered products."
|
||||
@@ -33610,6 +33643,8 @@ msgstr "Toon vorige maand, %(month)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar.html:24
|
||||
#: pretix/presale/templates/pretixpresale/organizers/calendar.html:52
|
||||
#, fuzzy
|
||||
#| msgid "Select month to show"
|
||||
msgid "Select a month to display"
|
||||
msgstr "Kies maand om te tonen"
|
||||
|
||||
@@ -33621,8 +33656,11 @@ msgstr "Maand"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar.html:39
|
||||
#: pretix/presale/templates/pretixpresale/organizers/calendar.html:67
|
||||
#, fuzzy
|
||||
#| msgctxt "reporting_timeframe"
|
||||
#| msgid "by month"
|
||||
msgid "Show month"
|
||||
msgstr "Weergeven per maand"
|
||||
msgstr "per maand"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar.html:50
|
||||
#, python-format
|
||||
@@ -33637,8 +33675,10 @@ msgstr "Toon vorige week, %(week)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar_week.html:24
|
||||
#: pretix/presale/templates/pretixpresale/organizers/calendar_week.html:52
|
||||
#, fuzzy
|
||||
#| msgid "Select week to show"
|
||||
msgid "Select a week to display"
|
||||
msgstr "Kies een week om te weer te geven"
|
||||
msgstr "Kies week om te tonen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar_week.html:26
|
||||
#: pretix/presale/templates/pretixpresale/fragment_calendar_nav.html:12
|
||||
@@ -33652,8 +33692,11 @@ msgstr "Kies week om te tonen"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar_week.html:43
|
||||
#: pretix/presale/templates/pretixpresale/organizers/calendar_week.html:71
|
||||
#, fuzzy
|
||||
#| msgctxt "reporting_timeframe"
|
||||
#| msgid "by week"
|
||||
msgid "Show week"
|
||||
msgstr "Weergeef per week"
|
||||
msgstr "per week"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar_week.html:54
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_subevent_calendar_week.html:73
|
||||
@@ -34579,6 +34622,8 @@ msgstr ""
|
||||
"gaan."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/fragment_modals.html:58
|
||||
#, fuzzy
|
||||
#| msgid "Closed"
|
||||
msgid "Close"
|
||||
msgstr "Gesloten"
|
||||
|
||||
@@ -34623,6 +34668,8 @@ msgid "Save selection"
|
||||
msgstr "Selectie opslaan"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/fragment_modals.html:141
|
||||
#, fuzzy
|
||||
#| msgid "You did not select any products."
|
||||
msgid "You didn't select any ticket."
|
||||
msgstr "U heeft geen producten geselecteerd."
|
||||
|
||||
@@ -34631,8 +34678,6 @@ msgid ""
|
||||
"Please tick a checkbox or enter a quantity for one of the ticket types to "
|
||||
"add to the cart."
|
||||
msgstr ""
|
||||
"Alstublieft klik op een selectievak of voeg een quantiteit toe voor een van "
|
||||
"de ticket types in de winkelwagen."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:82
|
||||
#, python-format
|
||||
@@ -34684,9 +34729,10 @@ msgid "Event overview"
|
||||
msgstr "Evenementenoverzicht"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/calendar.html:21
|
||||
#, python-format
|
||||
#, fuzzy, python-format
|
||||
#| msgid "Show next month, %(month)s"
|
||||
msgid "Events in %(month)s"
|
||||
msgstr "Evenementen in %(month)s"
|
||||
msgstr "Toon volgende maand, %(month)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/calendar.html:91
|
||||
#: pretix/presale/templates/pretixpresale/organizers/calendar_day.html:104
|
||||
@@ -34696,22 +34742,28 @@ msgstr ""
|
||||
"Merk op dat de evenementen in dit overzicht in verschillende tijdzones zijn."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/calendar_day.html:21
|
||||
#, python-format
|
||||
#, fuzzy, python-format
|
||||
#| msgid "Entry scan: %(date)s"
|
||||
msgid "Events on %(day)s"
|
||||
msgstr "Evenementen op %(day)s"
|
||||
msgstr "Ingangsscan: %(date)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/calendar_day.html:52
|
||||
#, fuzzy
|
||||
#| msgctxt "subevents"
|
||||
#| msgid "Select date"
|
||||
msgid "Select a date to display"
|
||||
msgstr "Kies een datum om weer te geven"
|
||||
msgstr "Kies een datum"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/calendar_day.html:59
|
||||
#, fuzzy
|
||||
#| msgid "Show start date"
|
||||
msgid "Show date"
|
||||
msgstr "Weergeef startdatum"
|
||||
msgstr "Toon startdatum"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/calendar_week.html:21
|
||||
#, python-format
|
||||
msgid "Events in %(week)s (%(week_day_from)s – %(week_day_to)s)"
|
||||
msgstr "Evenementen in %(week)s (%(week_day_from)s – %(week_day_to)s)"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_address_delete.html:5
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_address_delete.html:10
|
||||
@@ -34945,8 +34997,10 @@ msgid "Your cart is now empty."
|
||||
msgstr "Uw winkelwagen is nu leeg."
|
||||
|
||||
#: pretix/presale/views/cart.py:553
|
||||
#, fuzzy
|
||||
#| msgid "Your cart has been updated."
|
||||
msgid "Your cart timeout was extended."
|
||||
msgstr "Uw winkelwagens tijdslimiet is verlengt."
|
||||
msgstr "Uw winkelwagen is bijgewerkt."
|
||||
|
||||
#: pretix/presale/views/cart.py:568
|
||||
msgid "The products have been successfully added to your cart."
|
||||
|
||||
@@ -7,8 +7,8 @@ msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:36+0000\n"
|
||||
"PO-Revision-Date: 2025-06-10 04:00+0000\n"
|
||||
"Last-Translator: Tim Maurizio Dullaart <Tim.maurizio@gmail.com>\n"
|
||||
"PO-Revision-Date: 2025-05-01 02:00+0000\n"
|
||||
"Last-Translator: Foxy Hunter <matthias.vancoillie@outlook.com>\n"
|
||||
"Language-Team: Dutch <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||
"nl/>\n"
|
||||
"Language: nl\n"
|
||||
@@ -16,7 +16,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.11.4\n"
|
||||
"X-Generator: Weblate 5.11.1\n"
|
||||
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
|
||||
@@ -415,8 +415,6 @@ msgstr ""
|
||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
||||
msgid "If this takes longer than a few minutes, please contact us."
|
||||
msgstr ""
|
||||
"Als dit langer dan een paar minuten duurt, neem dan alstublieft contact met "
|
||||
"ons op."
|
||||
|
||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
||||
msgid "Close message"
|
||||
@@ -628,26 +626,25 @@ msgid "Unknown error."
|
||||
msgstr "Onbekende fout."
|
||||
|
||||
#: 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 ""
|
||||
"Uw kleur heeft een goed contrast, en zal zorgen voor een uitstekende "
|
||||
"toegankelijkheid."
|
||||
msgstr "Uw kleur heeft een goed contrast, en is gemakkelijk te lezen!"
|
||||
|
||||
#: 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 ""
|
||||
"Uw kleur heeft een redelijk contrast, en is voldoende voor de minimale "
|
||||
"toegankelijkheids eisen."
|
||||
"Uw kleur heeft een redelijk contrast, en is waarschijnlijk goed te lezen!"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/main.js:300
|
||||
msgid ""
|
||||
"Your color has insufficient contrast to white. Accessibility of your site "
|
||||
"will be impacted."
|
||||
msgstr ""
|
||||
"Uw kleur heeft een te weinig contrast met wit. De toegankelijkheid van jouw "
|
||||
"site wordt beïnvloed."
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/main.js:416
|
||||
#: pretix/static/pretixcontrol/js/ui/main.js:436
|
||||
@@ -723,7 +720,7 @@ msgstr "Winkelwagen is verlopen"
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:59
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:87
|
||||
msgid "Your cart is about to expire."
|
||||
msgstr "Uw winkelwagen staat op het punt om te verlopen."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:64
|
||||
msgid "The items in your cart are reserved for you for one minute."
|
||||
@@ -733,10 +730,16 @@ msgstr[1] ""
|
||||
"De items in uw winkelwagen zijn nog {num} minuten voor u gereserveerd."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:86
|
||||
#, fuzzy
|
||||
#| msgid "Cart expired"
|
||||
msgid "Your cart has expired."
|
||||
msgstr "Uw winkelwagen is verlopen."
|
||||
msgstr "Winkelwagen is verlopen"
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:89
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "The items in your cart are no longer reserved for you. You can still "
|
||||
#| "complete your order as long as they’re available."
|
||||
msgid ""
|
||||
"The items in your cart are no longer reserved for you. You can still "
|
||||
"complete your order as long as they're available."
|
||||
@@ -746,11 +749,11 @@ msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:90
|
||||
msgid "Do you want to renew the reservation period?"
|
||||
msgstr "Wilt u de reservererings periode vernieuwen?"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:93
|
||||
msgid "Renew reservation"
|
||||
msgstr "Vernieuw reservering"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:194
|
||||
msgid "The organizer keeps %(currency)s %(amount)s"
|
||||
@@ -793,12 +796,12 @@ msgstr "Verhoog aantal"
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:19
|
||||
msgctxt "widget"
|
||||
msgid "Filter events by"
|
||||
msgstr "Filter evenementen op"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:20
|
||||
msgctxt "widget"
|
||||
msgid "Filter"
|
||||
msgstr "Filter"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:21
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:19
|
||||
@@ -1047,15 +1050,17 @@ msgid "Close"
|
||||
msgstr "Sluiten"
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:62
|
||||
#, fuzzy
|
||||
#| msgctxt "widget"
|
||||
#| msgid "Resume checkout"
|
||||
msgctxt "widget"
|
||||
msgid "Close checkout"
|
||||
msgstr "Stoppen met afrekenen"
|
||||
msgstr "Doorgaan met afrekenen"
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:63
|
||||
msgctxt "widget"
|
||||
msgid "You cannot cancel this operation. Please wait for loading to finish."
|
||||
msgstr ""
|
||||
"U kan niet deze actie annuleren. Alstublieft wacht tot het laden is voltooid."
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:64
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:60
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:35+0000\n"
|
||||
"PO-Revision-Date: 2025-06-02 23:00+0000\n"
|
||||
"PO-Revision-Date: 2025-04-28 01:00+0000\n"
|
||||
"Last-Translator: Anarion Dunedain <anarion80@gmail.com>\n"
|
||||
"Language-Team: Polish <https://translate.pretix.eu/projects/pretix/pretix/pl/"
|
||||
">\n"
|
||||
@@ -18,7 +18,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.11.4\n"
|
||||
"X-Generator: Weblate 5.11\n"
|
||||
|
||||
#: pretix/_base_settings.py:87
|
||||
msgid "English"
|
||||
@@ -11070,7 +11070,7 @@ msgstr ""
|
||||
#: pretix/base/settings.py:2434
|
||||
#, python-brace-format
|
||||
msgid "Your order is about to expire: {code}"
|
||||
msgstr "Twoje zamówienie wkrótce wygaśnie: {code}"
|
||||
msgstr "Twoje zamówienie ma wygasa: {code}"
|
||||
|
||||
#: pretix/base/settings.py:2438
|
||||
#, python-brace-format
|
||||
@@ -11090,7 +11090,7 @@ msgstr ""
|
||||
"Witaj,\n"
|
||||
"\n"
|
||||
"Nie otrzymaliśmy jeszcze pełnej płatności za zamówienie na {event}.\n"
|
||||
"Pamiętaj, że Twoje zamówienie będzie pewne tylko wtedy, jeżeli otrzymamy\n"
|
||||
"Pamiętaj, że Twoje zamówienie będzi pewne tylko wtedy, jeżeli otrzymamy\n"
|
||||
"Twoją płatność przed {expire_date}.\n"
|
||||
"\n"
|
||||
"Możesz wyświetlić informacje o płatności i status Twojego zamówienia pod "
|
||||
|
||||
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:35+0000\n"
|
||||
"PO-Revision-Date: 2025-06-05 04:00+0000\n"
|
||||
"Last-Translator: Francisco Rosa <francisco@comm7.net>\n"
|
||||
"PO-Revision-Date: 2025-02-03 16:07+0000\n"
|
||||
"Last-Translator: Cornelius Kibelka <ckibelka-ctr@wikimedia.org>\n"
|
||||
"Language-Team: Portuguese <https://translate.pretix.eu/projects/pretix/"
|
||||
"pretix/pt/>\n"
|
||||
"Language: pt\n"
|
||||
@@ -17,59 +17,59 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Weblate 5.11.4\n"
|
||||
"X-Generator: Weblate 5.9.2\n"
|
||||
|
||||
#: pretix/_base_settings.py:87
|
||||
msgid "English"
|
||||
msgstr "Inglês"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:88
|
||||
msgid "German"
|
||||
msgstr "Alemão"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:89
|
||||
msgid "German (informal)"
|
||||
msgstr "Alemão (informal)"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:90
|
||||
msgid "Arabic"
|
||||
msgstr "Arabe"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:91
|
||||
msgid "Basque"
|
||||
msgstr "Basco"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:92
|
||||
msgid "Catalan"
|
||||
msgstr "Catalão"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:93
|
||||
msgid "Chinese (simplified)"
|
||||
msgstr "Chinês (simplificado)"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:94
|
||||
msgid "Chinese (traditional)"
|
||||
msgstr "chinês (tradicional)"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:95
|
||||
msgid "Czech"
|
||||
msgstr "Tcheco"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:96
|
||||
msgid "Croatian"
|
||||
msgstr "Croata"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:97
|
||||
msgid "Danish"
|
||||
msgstr "Dinamarquês"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:98
|
||||
msgid "Dutch"
|
||||
msgstr "Holandês"
|
||||
msgstr "Alemão"
|
||||
|
||||
#: pretix/_base_settings.py:99
|
||||
msgid "Dutch (informal)"
|
||||
msgstr "Holandês (informal)"
|
||||
msgstr "Alemão (informal)"
|
||||
|
||||
#: pretix/_base_settings.py:100
|
||||
msgid "French"
|
||||
@@ -81,7 +81,7 @@ msgstr "Finlandês"
|
||||
|
||||
#: pretix/_base_settings.py:102
|
||||
msgid "Galician"
|
||||
msgstr "Galego"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:103
|
||||
msgid "Greek"
|
||||
@@ -89,11 +89,11 @@ msgstr "Grego"
|
||||
|
||||
#: pretix/_base_settings.py:104
|
||||
msgid "Hebrew"
|
||||
msgstr "Hebraico"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:105
|
||||
msgid "Indonesian"
|
||||
msgstr "Indonésio"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:106
|
||||
msgid "Italian"
|
||||
@@ -101,15 +101,15 @@ msgstr "Italiano"
|
||||
|
||||
#: pretix/_base_settings.py:107
|
||||
msgid "Japanese"
|
||||
msgstr "Japonês"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:108
|
||||
msgid "Latvian"
|
||||
msgstr "Letão"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:109
|
||||
msgid "Norwegian Bokmål"
|
||||
msgstr "Bokmål norueguês"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:110
|
||||
msgid "Polish"
|
||||
@@ -125,7 +125,7 @@ msgstr "Português (Brasil)"
|
||||
|
||||
#: pretix/_base_settings.py:113
|
||||
msgid "Romanian"
|
||||
msgstr "Romano"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:114
|
||||
msgid "Russian"
|
||||
@@ -133,11 +133,11 @@ msgstr "Russo"
|
||||
|
||||
#: pretix/_base_settings.py:115
|
||||
msgid "Slovak"
|
||||
msgstr "Eslovaco"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:116
|
||||
msgid "Swedish"
|
||||
msgstr "Suéco"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/_base_settings.py:117
|
||||
msgid "Spanish"
|
||||
@@ -149,7 +149,7 @@ msgstr "Turco"
|
||||
|
||||
#: pretix/_base_settings.py:119
|
||||
msgid "Ukrainian"
|
||||
msgstr "Ucraniano"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/api/auth/devicesecurity.py:58
|
||||
msgid ""
|
||||
@@ -184,8 +184,10 @@ msgid "Allowed URIs list, space separated"
|
||||
msgstr "Lista de URIs permitidos, separados por espaço"
|
||||
|
||||
#: pretix/api/models.py:47
|
||||
#, fuzzy
|
||||
#| msgid "Allowed URIs list, space separated"
|
||||
msgid "Allowed Post Logout URIs list, space separated"
|
||||
msgstr "Lista de URIs de saída de postagem permitidas, separadas por espaços"
|
||||
msgstr "Lista de URIs permitidos, separados por espaço"
|
||||
|
||||
#: pretix/api/models.py:51 pretix/base/models/customers.py:406
|
||||
#: pretix/plugins/paypal/payment.py:113 pretix/plugins/paypal2/payment.py:110
|
||||
@@ -231,7 +233,7 @@ msgstr "Comentário"
|
||||
|
||||
#: pretix/api/serializers/cart.py:168 pretix/api/serializers/order.py:1414
|
||||
msgid "The product \"{}\" is not assigned to a quota."
|
||||
msgstr "O produto \"{}\" não está atribuído a uma cota."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/api/serializers/checkin.py:65 pretix/base/models/event.py:1685
|
||||
#: pretix/base/models/items.py:1917 pretix/base/models/items.py:2184
|
||||
@@ -249,8 +251,6 @@ msgid ""
|
||||
"Events cannot be created as 'live'. Quotas and payment must be added to the "
|
||||
"event before sales can go live."
|
||||
msgstr ""
|
||||
"Eventos não podem ser criados como \"ao vivo\". Cotas e pagamentos devem ser "
|
||||
"adicionados ao evento antes que as vendas sejam publicadas."
|
||||
|
||||
#: pretix/api/serializers/event.py:246 pretix/api/serializers/event.py:555
|
||||
#, python-brace-format
|
||||
@@ -281,23 +281,21 @@ msgstr "A propriedade de metadados do item '{name}' não existe."
|
||||
|
||||
#: pretix/api/serializers/item.py:207 pretix/control/forms/item.py:1267
|
||||
msgid "The bundled item must not be the same item as the bundling one."
|
||||
msgstr "O item agrupado não deve ser o mesmo item que o do pacote."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/api/serializers/item.py:210 pretix/control/forms/item.py:1269
|
||||
msgid "The bundled item must not have bundles on its own."
|
||||
msgstr "O item agrupado não deve ter pacotes próprios."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/api/serializers/item.py:298
|
||||
msgid ""
|
||||
"Updating add-ons, bundles, or variations via PATCH/PUT is not supported. "
|
||||
"Please use the dedicated nested endpoint."
|
||||
msgstr ""
|
||||
"Não há suporte para atualização de complementos, pacotes ou variações via "
|
||||
"PATCH/PUT. Use o endpoint aninhado dedicado."
|
||||
|
||||
#: pretix/api/serializers/item.py:306
|
||||
msgid "Only admission products can currently be personalized."
|
||||
msgstr "Atualmente, somente produtos de admissão podem ser personalizados."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/api/serializers/item.py:317
|
||||
msgid ""
|
||||
@@ -319,8 +317,6 @@ msgid ""
|
||||
"Updating options via PATCH/PUT is not supported. Please use the dedicated "
|
||||
"nested endpoint."
|
||||
msgstr ""
|
||||
"A atualização de opções via PATCH/PUT não é suportada. Use o endpoint "
|
||||
"aninhado dedicado."
|
||||
|
||||
#: pretix/api/serializers/item.py:533 pretix/control/forms/item.py:178
|
||||
msgid "Question cannot depend on a question asked during check-in."
|
||||
@@ -355,7 +351,7 @@ msgstr ""
|
||||
#: pretix/api/serializers/order.py:79
|
||||
#, python-brace-format
|
||||
msgid "\"{input}\" is not a valid choice."
|
||||
msgstr "\"{input}\" não é uma escolha válida."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/api/serializers/order.py:1375 pretix/api/views/cart.py:224
|
||||
#: pretix/base/services/orders.py:1533
|
||||
@@ -371,12 +367,11 @@ msgstr "O produto \"{}\" não está disponível nesta data."
|
||||
msgid ""
|
||||
"There is not enough quota available on quota \"{}\" to perform the operation."
|
||||
msgstr ""
|
||||
"Não há cota suficiente disponível na cota \"{}\" para executar a operação."
|
||||
|
||||
#: pretix/api/serializers/organizer.py:105
|
||||
#: pretix/control/forms/organizer.py:892 pretix/presale/forms/customer.py:456
|
||||
msgid "An account with this email address is already registered."
|
||||
msgstr "Uma conta com este endereço de e-mail já está registrada."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/api/serializers/organizer.py:238
|
||||
#: pretix/control/forms/organizer.py:741
|
||||
@@ -405,11 +400,11 @@ msgstr "Este usuário já tem permissões para esta equipe."
|
||||
#: pretix/api/views/cart.py:209
|
||||
msgid ""
|
||||
"The specified voucher has already been used the maximum number of times."
|
||||
msgstr "O voucher especificado já foi utilizado o número máximo de vezes."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/api/views/checkin.py:611 pretix/api/views/checkin.py:618
|
||||
msgid "Medium connected to other event"
|
||||
msgstr "Meio conectado a outro evento"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/api/views/oauth.py:107 pretix/control/logdisplay.py:692
|
||||
#, python-brace-format
|
||||
@@ -467,8 +462,9 @@ msgid "Order expired"
|
||||
msgstr "Pedido expirado"
|
||||
|
||||
#: pretix/api/webhooks.py:261
|
||||
#, fuzzy
|
||||
msgid "Order expiry date changed"
|
||||
msgstr "Data de validade do pedido alterada"
|
||||
msgstr "Informações de pedido alteradas"
|
||||
|
||||
#: pretix/api/webhooks.py:265 pretix/base/notifications.py:269
|
||||
msgid "Order information changed"
|
||||
@@ -484,8 +480,9 @@ msgid "Order changed"
|
||||
msgstr "Pedido alterado"
|
||||
|
||||
#: pretix/api/webhooks.py:277
|
||||
#, fuzzy
|
||||
msgid "Refund of payment created"
|
||||
msgstr "Reembolso de pagamento criado"
|
||||
msgstr "Reembolso externo de pagamento"
|
||||
|
||||
#: pretix/api/webhooks.py:281 pretix/base/notifications.py:293
|
||||
msgid "External refund of payment"
|
||||
@@ -493,23 +490,28 @@ msgstr "Reembolso externo de pagamento"
|
||||
|
||||
#: pretix/api/webhooks.py:285
|
||||
msgid "Refund of payment requested by customer"
|
||||
msgstr "Reembolso do pagamento solicitado pelo cliente"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/api/webhooks.py:289
|
||||
#, fuzzy
|
||||
msgid "Refund of payment completed"
|
||||
msgstr "Reembolso de pagamento concluído"
|
||||
msgstr "Reembolso externo de pagamento"
|
||||
|
||||
#: pretix/api/webhooks.py:293
|
||||
#, fuzzy
|
||||
msgid "Refund of payment canceled"
|
||||
msgstr "Reembolso de pagamento cancelado"
|
||||
msgstr "Reembolso externo de pagamento"
|
||||
|
||||
#: pretix/api/webhooks.py:297
|
||||
#, fuzzy
|
||||
msgid "Refund of payment failed"
|
||||
msgstr "Falha no reembolso do pagamento"
|
||||
msgstr "Reembolso externo de pagamento"
|
||||
|
||||
#: pretix/api/webhooks.py:301
|
||||
#, fuzzy
|
||||
#| msgid "Payment provider"
|
||||
msgid "Payment confirmed"
|
||||
msgstr "Pagamento confirmado"
|
||||
msgstr "Provedor de pagamento"
|
||||
|
||||
#: pretix/api/webhooks.py:305
|
||||
msgid "Order approved"
|
||||
@@ -520,16 +522,18 @@ msgid "Order denied"
|
||||
msgstr "Pedido negado"
|
||||
|
||||
#: pretix/api/webhooks.py:313
|
||||
#, fuzzy
|
||||
#| msgid "Order denied"
|
||||
msgid "Order deleted"
|
||||
msgstr "Pedido excluído"
|
||||
msgstr "Pedido negado"
|
||||
|
||||
#: pretix/api/webhooks.py:317
|
||||
msgid "Ticket checked in"
|
||||
msgstr "Check-in do bilhete"
|
||||
msgstr "Ingresso registrado"
|
||||
|
||||
#: pretix/api/webhooks.py:321
|
||||
msgid "Ticket check-in reverted"
|
||||
msgstr "O check-in do bilhete foi revertido"
|
||||
msgstr "Ingresso revertido"
|
||||
|
||||
#: pretix/api/webhooks.py:325
|
||||
msgid "Event created"
|
||||
@@ -540,13 +544,14 @@ msgid "Event details changed"
|
||||
msgstr "Detalhes do evento alterados"
|
||||
|
||||
#: pretix/api/webhooks.py:333
|
||||
#, fuzzy
|
||||
msgid "Event deleted"
|
||||
msgstr "Evento excluído"
|
||||
msgstr "Evento criado"
|
||||
|
||||
#: pretix/api/webhooks.py:337
|
||||
msgctxt "subevent"
|
||||
msgid "Event series date added"
|
||||
msgstr "Data de adição da série de eventos"
|
||||
msgstr "Data da série de eventos adicionada"
|
||||
|
||||
#: pretix/api/webhooks.py:341
|
||||
msgctxt "subevent"
|
||||
@@ -556,59 +561,64 @@ msgstr "Data da série de eventos alterada"
|
||||
#: pretix/api/webhooks.py:345
|
||||
msgctxt "subevent"
|
||||
msgid "Event series date deleted"
|
||||
msgstr "Data da série de eventos excluída"
|
||||
msgstr "Data da série de eventos apagada"
|
||||
|
||||
#: pretix/api/webhooks.py:349
|
||||
msgid ""
|
||||
"Product changed (including product added or deleted and including changes to "
|
||||
"nested objects like variations or bundles)"
|
||||
msgstr ""
|
||||
"Produto alterado (incluindo produtos adicionados ou excluídos e incluindo "
|
||||
"alterações em objetos aninhados, como variações ou pacotes)"
|
||||
|
||||
#: pretix/api/webhooks.py:354
|
||||
msgid "Shop taken live"
|
||||
msgstr "Loja ao vivo"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/api/webhooks.py:358
|
||||
msgid "Shop taken offline"
|
||||
msgstr "Loja offline"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/api/webhooks.py:362
|
||||
#, fuzzy
|
||||
msgid "Test-Mode of shop has been activated"
|
||||
msgstr "O modo de teste da loja foi ativado"
|
||||
msgstr "A equipe selecionada não pode ser deletada."
|
||||
|
||||
#: pretix/api/webhooks.py:366
|
||||
#, fuzzy
|
||||
msgid "Test-Mode of shop has been deactivated"
|
||||
msgstr "O modo de teste da loja foi desativado"
|
||||
msgstr "A equipe selecionada não pode ser deletada."
|
||||
|
||||
#: pretix/api/webhooks.py:370
|
||||
msgid "Waiting list entry added"
|
||||
msgstr "Adicionado em aguardando na lista de espera"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/api/webhooks.py:374
|
||||
#, fuzzy
|
||||
msgid "Waiting list entry changed"
|
||||
msgstr "Entrada na lista de espera alterada"
|
||||
msgstr "O valor foi creditado no seu cartão."
|
||||
|
||||
#: pretix/api/webhooks.py:378
|
||||
#, fuzzy
|
||||
msgid "Waiting list entry deleted"
|
||||
msgstr "Entrada na lista de espera excluída"
|
||||
msgstr "O valor foi creditado no seu cartão."
|
||||
|
||||
#: pretix/api/webhooks.py:382
|
||||
msgid "Waiting list entry received voucher"
|
||||
msgstr "Inscrição na lista de espera recebeu voucher"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/api/webhooks.py:386
|
||||
#, fuzzy
|
||||
msgid "Customer account created"
|
||||
msgstr "Conta de cliente criada"
|
||||
msgstr "País"
|
||||
|
||||
#: pretix/api/webhooks.py:390
|
||||
#, fuzzy
|
||||
msgid "Customer account changed"
|
||||
msgstr "Conta do cliente alterada"
|
||||
msgstr "País"
|
||||
|
||||
#: pretix/api/webhooks.py:394
|
||||
#, fuzzy
|
||||
msgid "Customer account anonymized"
|
||||
msgstr "Conta de cliente anonimizada"
|
||||
msgstr "País"
|
||||
|
||||
#: pretix/base/addressvalidation.py:100 pretix/base/addressvalidation.py:103
|
||||
#: pretix/base/addressvalidation.py:108 pretix/base/forms/questions.py:1004
|
||||
@@ -621,15 +631,15 @@ msgstr "Conta de cliente anonimizada"
|
||||
#: pretix/plugins/banktransfer/payment.py:679
|
||||
#: pretix/presale/forms/customer.py:151
|
||||
msgid "This field is required."
|
||||
msgstr "Este campo é obrigatório."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/addressvalidation.py:213
|
||||
msgid "Enter a postal code in the format XXX."
|
||||
msgstr "Digite um código postal no formato XXX."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/addressvalidation.py:222 pretix/base/addressvalidation.py:224
|
||||
msgid "Enter a postal code in the format XXXX."
|
||||
msgstr "Digite um código postal no formato XXXX."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/auth.py:146
|
||||
#, python-brace-format
|
||||
@@ -670,7 +680,7 @@ msgstr "Senha"
|
||||
|
||||
#: pretix/base/auth.py:176 pretix/base/auth.py:183
|
||||
msgid "Your password must contain both numeric and alphabetic characters."
|
||||
msgstr "Sua senha deve conter caracteres numéricos e alfabéticos."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/auth.py:202 pretix/base/auth.py:212
|
||||
#, python-format
|
||||
@@ -678,10 +688,8 @@ msgid "Your password may not be the same as your previous password."
|
||||
msgid_plural ""
|
||||
"Your password may not be the same as one of your %(history_length)s previous "
|
||||
"passwords."
|
||||
msgstr[0] "Sua senha pode não ser a mesma que sua senha anterior."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
"Sua senha pode não ser a mesma que uma das suas senhas anteriores de "
|
||||
"%(history_length)s."
|
||||
|
||||
#: pretix/base/channels.py:168
|
||||
msgid "Online shop"
|
||||
@@ -689,15 +697,13 @@ msgstr "Loja online"
|
||||
|
||||
#: pretix/base/channels.py:174
|
||||
msgid "API"
|
||||
msgstr "API"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/channels.py:175
|
||||
msgid ""
|
||||
"API sales channels come with no built-in functionality, but may be used for "
|
||||
"custom integrations."
|
||||
msgstr ""
|
||||
"API de canais de vendas de não vêm com nenhuma funcionalidade integrada, "
|
||||
"mas podem ser usados para integrações personalizadas."
|
||||
|
||||
#: pretix/base/context.py:38
|
||||
#, fuzzy, python-brace-format
|
||||
@@ -723,27 +729,25 @@ msgstr "código-fonte"
|
||||
#: pretix/base/customersso/oidc.py:61
|
||||
#, python-brace-format
|
||||
msgid "Configuration option \"{name}\" is missing."
|
||||
msgstr "A opção de configuração \"{name}\" está ausente."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/customersso/oidc.py:69 pretix/base/customersso/oidc.py:74
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Unable to retrieve configuration from \"{url}\". Error message: \"{error}\"."
|
||||
msgstr ""
|
||||
"Não foi possível recuperar a configuração de \"{url}\". Mensagem de erro: "
|
||||
"\"{error}\"."
|
||||
|
||||
#: pretix/base/customersso/oidc.py:80 pretix/base/customersso/oidc.py:85
|
||||
#: pretix/base/customersso/oidc.py:90 pretix/base/customersso/oidc.py:95
|
||||
#: pretix/base/customersso/oidc.py:100 pretix/base/customersso/oidc.py:105
|
||||
#, python-brace-format
|
||||
msgid "Incompatible SSO provider: \"{error}\"."
|
||||
msgstr "Provedor SSO incompatível: \"{error}\"."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/customersso/oidc.py:111
|
||||
#, python-brace-format
|
||||
msgid "You are not requesting \"{scope}\"."
|
||||
msgstr "Você não está solicitando \"{scope}\"."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/customersso/oidc.py:117
|
||||
#, python-brace-format
|
||||
@@ -751,8 +755,6 @@ msgid ""
|
||||
"You are requesting scope \"{scope}\" but provider only supports these: "
|
||||
"{scopes}."
|
||||
msgstr ""
|
||||
"Você está solicitando o escopo \"{scope}\", mas o provedor só oferece "
|
||||
"suporte a estes: {scopes}."
|
||||
|
||||
#: pretix/base/customersso/oidc.py:127
|
||||
#, python-brace-format
|
||||
@@ -760,8 +762,6 @@ msgid ""
|
||||
"You are requesting field \"{field}\" but provider only supports these: "
|
||||
"{fields}."
|
||||
msgstr ""
|
||||
"Você está solicitando o campo \"{field}\", mas o provedor suporta somente "
|
||||
"estes: {fields}."
|
||||
|
||||
#: pretix/base/customersso/oidc.py:219 pretix/base/customersso/oidc.py:226
|
||||
#: pretix/base/customersso/oidc.py:245 pretix/base/customersso/oidc.py:262
|
||||
@@ -770,15 +770,13 @@ msgstr ""
|
||||
#: pretix/presale/views/customer.py:866
|
||||
#, python-brace-format
|
||||
msgid "Login was not successful. Error message: \"{error}\"."
|
||||
msgstr "O login não foi bem-sucedido. Mensagem de erro: \"{error}\"."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/customersso/oidc.py:252
|
||||
msgid ""
|
||||
"The email address on this account is not yet verified. Please first confirm "
|
||||
"the email address in your customer account."
|
||||
msgstr ""
|
||||
"O endereço de e-mail desta conta ainda não foi verificado. Primeiro, "
|
||||
"confirme o endereço de e-mail na sua conta de cliente."
|
||||
|
||||
#: pretix/base/email.py:203 pretix/base/exporters/items.py:157
|
||||
#: pretix/base/exporters/items.py:205 pretix/control/views/main.py:322
|
||||
@@ -832,17 +830,17 @@ msgstr "Respostas para perguntas sobre o upload de arquivos"
|
||||
#: pretix/base/exporters/orderlist.py:1241
|
||||
#: pretix/plugins/reports/exporters.py:478
|
||||
#: pretix/plugins/reports/exporters.py:651
|
||||
#, fuzzy
|
||||
#| msgid "Order data"
|
||||
msgctxt "export_category"
|
||||
msgid "Order data"
|
||||
msgstr "Data do pedido"
|
||||
msgstr "Dia do pedido"
|
||||
|
||||
#: pretix/base/exporters/answers.py:56
|
||||
msgid ""
|
||||
"Download a ZIP file including all files that have been uploaded by your "
|
||||
"customers while creating an order."
|
||||
msgstr ""
|
||||
"Baixe um arquivo ZIP incluindo todos os arquivos que foram enviados pelos "
|
||||
"seus clientes ao criar um pedido."
|
||||
|
||||
#: pretix/base/exporters/answers.py:66 pretix/base/models/items.py:1767
|
||||
#: pretix/control/navigation.py:172
|
||||
@@ -883,7 +881,7 @@ msgstr "Perguntas"
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_change_form.html:20
|
||||
msgctxt "subevent"
|
||||
msgid "Date"
|
||||
msgstr "Data"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/answers.py:79 pretix/base/exporters/answers.py:88
|
||||
#: pretix/control/forms/checkin.py:83 pretix/control/forms/event.py:1611
|
||||
@@ -901,22 +899,22 @@ msgstr "Data"
|
||||
#: pretix/plugins/sendmail/forms.py:351
|
||||
msgctxt "subevent"
|
||||
msgid "All dates"
|
||||
msgstr "Todas as datas"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/customers.py:49 pretix/control/navigation.py:606
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:132
|
||||
msgid "Customer accounts"
|
||||
msgstr "Contas de clientes"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/customers.py:51
|
||||
#, fuzzy
|
||||
msgctxt "export_category"
|
||||
msgid "Customer accounts"
|
||||
msgstr "Contas de clientes"
|
||||
msgstr "País"
|
||||
|
||||
#: pretix/base/exporters/customers.py:52
|
||||
msgid "Download a spreadsheet of all currently registered customer accounts."
|
||||
msgstr ""
|
||||
"Baixe uma planilha de todas as contas de clientes registradas atualmente."
|
||||
|
||||
#: pretix/base/exporters/customers.py:64 pretix/base/models/customers.py:82
|
||||
#: pretix/control/templates/pretixcontrol/organizers/customer.html:29
|
||||
@@ -924,19 +922,20 @@ msgstr ""
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_customer.html:36
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_base.html:37
|
||||
msgid "Customer ID"
|
||||
msgstr "ID do cliente"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/customers.py:65
|
||||
#: pretix/control/templates/pretixcontrol/organizers/customer.html:32
|
||||
#, fuzzy
|
||||
msgid "SSO provider"
|
||||
msgstr "Provedor de SSO"
|
||||
msgstr "Provedor de pagamento"
|
||||
|
||||
#: pretix/base/exporters/customers.py:66 pretix/base/models/customers.py:108
|
||||
#: pretix/control/templates/pretixcontrol/organizers/customer.html:36
|
||||
#: pretix/control/templates/pretixcontrol/organizers/customers.html:65
|
||||
#: pretix/control/templates/pretixcontrol/users/form.html:49
|
||||
msgid "External identifier"
|
||||
msgstr "Identificador externo"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/customers.py:68 pretix/base/exporters/orderlist.py:262
|
||||
#: pretix/base/exporters/orderlist.py:445
|
||||
@@ -961,7 +960,7 @@ msgstr "Número de telefone"
|
||||
#: pretix/base/settings.py:3640 pretix/base/settings.py:3652
|
||||
#: pretix/control/templates/pretixcontrol/users/index.html:47
|
||||
msgid "Full name"
|
||||
msgstr "Nome Completo"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/customers.py:74 pretix/base/exporters/invoices.py:206
|
||||
#: pretix/base/exporters/invoices.py:214 pretix/base/exporters/invoices.py:332
|
||||
@@ -1009,21 +1008,21 @@ msgstr "Nome"
|
||||
|
||||
#: pretix/base/exporters/customers.py:77 pretix/base/models/customers.py:99
|
||||
msgid "Account active"
|
||||
msgstr "Conta ativa"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/customers.py:78 pretix/base/models/customers.py:100
|
||||
msgid "Verified email address"
|
||||
msgstr "Endereço de e-mail verificado"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/customers.py:79 pretix/base/models/customers.py:101
|
||||
#: pretix/control/templates/pretixcontrol/organizers/customer.html:68
|
||||
msgid "Last login"
|
||||
msgstr "Último login"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/customers.py:80 pretix/base/models/customers.py:102
|
||||
#: pretix/control/templates/pretixcontrol/organizers/customer.html:66
|
||||
msgid "Registration date"
|
||||
msgstr "Data de inscrição"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/customers.py:81 pretix/base/exporters/invoices.py:205
|
||||
#: pretix/base/exporters/waitinglist.py:120 pretix/base/models/auth.py:258
|
||||
@@ -1039,7 +1038,7 @@ msgstr "Idioma"
|
||||
#: pretix/control/templates/pretixcontrol/organizers/customer.html:72
|
||||
#: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:68
|
||||
msgid "Notes"
|
||||
msgstr "Notas"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/customers.py:100
|
||||
#: pretix/base/exporters/customers.py:101 pretix/base/exporters/events.py:83
|
||||
@@ -1116,8 +1115,6 @@ msgid ""
|
||||
"Download invoices in a format that can be used by the dekodi NREI conversion "
|
||||
"software."
|
||||
msgstr ""
|
||||
"Baixe faturas em um formato que possa ser usado pelo software de conversão "
|
||||
"de NREI dekodi."
|
||||
|
||||
#: pretix/base/exporters/dekodi.py:105
|
||||
#, python-brace-format
|
||||
@@ -1135,7 +1132,7 @@ msgstr "Ingresso do evento {event}-{code}"
|
||||
#: pretix/plugins/reports/exporters.py:698
|
||||
#: pretix/plugins/ticketoutputpdf/exporters.py:85
|
||||
msgid "Date range"
|
||||
msgstr "Intervalo de datas"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/dekodi.py:237 pretix/base/exporters/invoices.py:77
|
||||
#, fuzzy
|
||||
@@ -1150,21 +1147,21 @@ msgstr ""
|
||||
"fatura nem sempre corresponde à data do pedido ou do pagamento."
|
||||
|
||||
#: pretix/base/exporters/events.py:47
|
||||
#, fuzzy
|
||||
msgid "Event data"
|
||||
msgstr "Dados do evento"
|
||||
msgstr "Data final do evento"
|
||||
|
||||
#: pretix/base/exporters/events.py:48
|
||||
#, fuzzy
|
||||
msgctxt "export_category"
|
||||
msgid "Event data"
|
||||
msgstr "Dados do evento"
|
||||
msgstr "Data final do evento"
|
||||
|
||||
#: pretix/base/exporters/events.py:49
|
||||
msgid ""
|
||||
"Download a spreadsheet with information on all events in this organizer "
|
||||
"account."
|
||||
msgstr ""
|
||||
"Baixe uma planilha com informações sobre todos os eventos nesta conta do "
|
||||
"organizador."
|
||||
|
||||
#: pretix/base/exporters/events.py:57 pretix/base/exporters/orderlist.py:261
|
||||
#: pretix/base/exporters/orderlist.py:441
|
||||
@@ -1176,17 +1173,17 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/events/index.html:68
|
||||
#: pretix/control/templates/pretixcontrol/organizers/detail.html:64
|
||||
msgid "Event name"
|
||||
msgstr "Nome do evento"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/events.py:58 pretix/base/models/event.py:588
|
||||
#: pretix/base/models/organizer.py:91
|
||||
#: pretix/control/templates/pretixcontrol/organizers/index.html:47
|
||||
msgid "Short form"
|
||||
msgstr "Forma abreviada"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/events.py:59 pretix/base/models/event.py:590
|
||||
msgid "Shop is live"
|
||||
msgstr "A loja está no ar"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/events.py:60 pretix/base/models/event.py:592
|
||||
msgid "Event currency"
|
||||
@@ -1195,59 +1192,59 @@ msgstr "Moeda do evento"
|
||||
#: pretix/base/exporters/events.py:61 pretix/base/models/auth.py:261
|
||||
#: pretix/base/models/exports.py:133 pretix/control/forms/exports.py:93
|
||||
msgid "Timezone"
|
||||
msgstr "Fuso horário"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/events.py:62 pretix/base/models/event.py:595
|
||||
#: pretix/base/models/event.py:1489 pretix/base/settings.py:3263
|
||||
#: pretix/base/settings.py:3273 pretix/control/forms/subevents.py:480
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:268
|
||||
msgid "Event start time"
|
||||
msgstr "Hora de início do evento"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/events.py:63 pretix/base/models/event.py:597
|
||||
#: pretix/base/models/event.py:1491 pretix/base/pdf.py:286
|
||||
#: pretix/control/forms/subevents.py:485
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:270
|
||||
msgid "Event end time"
|
||||
msgstr "Horário de término do evento"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/events.py:64 pretix/base/models/event.py:599
|
||||
#: pretix/base/models/event.py:1493 pretix/control/forms/subevents.py:490
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:274
|
||||
msgid "Admission time"
|
||||
msgstr "Horário de entrada"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/events.py:65 pretix/base/models/event.py:611
|
||||
#: pretix/base/models/event.py:1502 pretix/control/forms/subevents.py:93
|
||||
msgid "Start of presale"
|
||||
msgstr "Início da pré-venda"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/events.py:66 pretix/base/models/event.py:605
|
||||
#: pretix/base/models/event.py:1496 pretix/control/forms/subevents.py:99
|
||||
msgid "End of presale"
|
||||
msgstr "Fim da pré-venda"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/events.py:67 pretix/base/exporters/invoices.py:351
|
||||
#: pretix/base/models/event.py:617 pretix/base/models/event.py:1508
|
||||
msgid "Location"
|
||||
msgstr "Localização"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/events.py:68 pretix/base/models/event.py:625
|
||||
#: pretix/base/models/event.py:1511
|
||||
msgid "Latitude"
|
||||
msgstr "Latitude"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/events.py:69 pretix/base/models/event.py:633
|
||||
#: pretix/base/models/event.py:1519
|
||||
msgid "Longitude"
|
||||
msgstr "Longitude"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/events.py:70 pretix/base/models/event.py:645
|
||||
#: pretix/base/models/event.py:1534
|
||||
#: pretix/control/templates/pretixcontrol/event/index.html:128
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:991
|
||||
msgid "Internal comment"
|
||||
msgstr "Comentário interno"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/invoices.py:82 pretix/base/models/orders.py:1753
|
||||
#: pretix/base/models/orders.py:2162 pretix/control/forms/filter.py:204
|
||||
@@ -1287,7 +1284,7 @@ msgstr "Todas faturas"
|
||||
|
||||
#: pretix/base/exporters/invoices.py:127
|
||||
msgid "Download all invoices created by the system as a ZIP file of PDF files."
|
||||
msgstr "Baixe todas as faturas criadas pelo sistema como um arquivo ZIP ou PDF."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/invoices.py:178
|
||||
msgid "Invoice data"
|
||||
@@ -1299,9 +1296,6 @@ msgid ""
|
||||
"The spreadsheet includes two sheets, one with a line for every invoice, and "
|
||||
"one with a line for every position of every invoice."
|
||||
msgstr ""
|
||||
"Baixe uma planilha com os dados de todas as faturas criadas pelo sistema. A "
|
||||
"planilha inclui duas folhas, uma com uma linha para cada fatura e outra com "
|
||||
"uma linha para cada posição de cada fatura."
|
||||
|
||||
#: pretix/base/exporters/invoices.py:191 pretix/base/shredder.py:576
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:268
|
||||
@@ -1361,7 +1355,7 @@ msgstr "Data"
|
||||
#: pretix/plugins/reports/exporters.py:884
|
||||
#: pretix/plugins/ticketoutputpdf/exporters.py:96
|
||||
msgid "Order code"
|
||||
msgstr "Código do pedido"
|
||||
msgstr "Código de pedido"
|
||||
|
||||
#: pretix/base/exporters/invoices.py:202 pretix/base/exporters/invoices.py:329
|
||||
#: pretix/base/forms/auth.py:160 pretix/base/modelimport_orders.py:59
|
||||
@@ -26324,7 +26318,7 @@ msgstr ""
|
||||
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:80
|
||||
msgid "Comment:"
|
||||
msgstr "Comentário:"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:98
|
||||
msgid "No order code detected"
|
||||
@@ -26597,7 +26591,7 @@ msgstr ""
|
||||
#: pretix/plugins/paypal2/payment.py:1096
|
||||
#: pretix/plugins/paypal2/payment.py:1097 pretix/plugins/stripe/payment.py:1816
|
||||
msgid "PayPal"
|
||||
msgstr "PayPal"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal/apps.py:53
|
||||
msgid ""
|
||||
@@ -28081,7 +28075,7 @@ msgstr ""
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:342 pretix/plugins/stripe/payment.py:1527
|
||||
msgid "iDEAL"
|
||||
msgstr "iDEAL"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:344 pretix/plugins/stripe/payment.py:352
|
||||
#: pretix/plugins/stripe/payment.py:360 pretix/plugins/stripe/payment.py:395
|
||||
@@ -28101,11 +28095,11 @@ msgstr ""
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:358 pretix/plugins/stripe/payment.py:1564
|
||||
msgid "Bancontact"
|
||||
msgstr "Contato bancário"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:366
|
||||
msgid "SEPA Direct Debit"
|
||||
msgstr "Débito Direto SEPA"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:369
|
||||
msgid ""
|
||||
@@ -28141,7 +28135,7 @@ msgstr ""
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:409 pretix/plugins/stripe/payment.py:1730
|
||||
msgid "Przelewy24"
|
||||
msgstr "Przelewy24"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:417 pretix/plugins/stripe/payment.py:1769
|
||||
msgid "WeChat Pay"
|
||||
@@ -28290,7 +28284,7 @@ msgstr ""
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1480
|
||||
msgid "giropay"
|
||||
msgstr "giropay"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1483
|
||||
msgid ""
|
||||
@@ -31723,17 +31717,14 @@ msgid ""
|
||||
"while we are processing your current payment. Please check back after your "
|
||||
"current payment has been accepted."
|
||||
msgstr ""
|
||||
"Você não pode alterar seu pedido de forma que exija pagamento adicional "
|
||||
"enquanto estivermos processando seu pagamento atual. Verifique novamente "
|
||||
"após a aceitação do seu pagamento atual."
|
||||
|
||||
#: pretix/presale/views/order.py:1662 pretix/presale/views/order.py:1693
|
||||
msgid "You cannot change this order."
|
||||
msgstr "Você não pode alterar este pedido."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/views/user.py:61
|
||||
msgid "We had difficulties processing your input."
|
||||
msgstr "Tivemos dificuldades em processar sua entrada."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/views/user.py:70
|
||||
#, python-brace-format
|
||||
@@ -31743,43 +31734,32 @@ msgid ""
|
||||
"{number} hours. If the email did not arrive, please check your spam folder "
|
||||
"and also double check that you used the correct email address."
|
||||
msgstr ""
|
||||
"Se o endereço de e-mail informado for válido e estiver associado a um "
|
||||
"ingresso, já enviamos um e-mail com um link para o seu ingresso nas últimas "
|
||||
"{number} horas. Se o e-mail não chegou, verifique sua caixa de spam e "
|
||||
"verifique se você usou o endereço de e-mail correto."
|
||||
|
||||
#: pretix/presale/views/user.py:91
|
||||
msgid "We have trouble sending emails right now, please check back later."
|
||||
msgstr ""
|
||||
"Estamos com problemas para enviar e-mails neste momento. Volte mais tarde."
|
||||
|
||||
#: pretix/presale/views/user.py:94
|
||||
msgid ""
|
||||
"If there were any orders by this user, they will receive an email with their "
|
||||
"order codes."
|
||||
msgstr ""
|
||||
"Se houver algum pedido deste usuário, ele receberá um e-mail com seus "
|
||||
"códigos de pedido."
|
||||
|
||||
#: pretix/presale/views/waiting.py:127
|
||||
msgid ""
|
||||
"No ticket types are available for the waiting list, have a look at the "
|
||||
"ticket shop instead."
|
||||
msgstr ""
|
||||
"Não há tipos de ingressos disponíveis para a lista de espera; em vez disso, "
|
||||
"dê uma olhada na loja de ingressos."
|
||||
|
||||
#: pretix/presale/views/waiting.py:137 pretix/presale/views/waiting.py:161
|
||||
msgid "Waiting lists are disabled for this event."
|
||||
msgstr "As listas de espera estão desativadas para este evento."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/views/waiting.py:173
|
||||
msgid ""
|
||||
"You cannot add yourself to the waiting list as this product is currently "
|
||||
"available."
|
||||
msgstr ""
|
||||
"Você não pode se adicionar à lista de espera, pois este produto ainda não "
|
||||
"está disponível."
|
||||
|
||||
#: pretix/presale/views/waiting.py:180
|
||||
#, python-brace-format
|
||||
@@ -31787,40 +31767,35 @@ msgid ""
|
||||
"We've added you to the waiting list. We will send an email to {email} as "
|
||||
"soon as this product gets available again."
|
||||
msgstr ""
|
||||
"Adicionamos você à lista de espera. Enviaremos um e-mail para {email} assim "
|
||||
"que este produto estiver disponível novamente."
|
||||
|
||||
#: pretix/presale/views/waiting.py:208
|
||||
msgid "We could not find you on our waiting list."
|
||||
msgstr "Não conseguimos encontrá-lo em nossa lista de espera."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/views/waiting.py:212
|
||||
msgid ""
|
||||
"Your waiting list spot is no longer valid or already used. There's nothing "
|
||||
"more to do here."
|
||||
msgstr ""
|
||||
"Sua vaga na lista de espera não é mais válida ou já foi usada. Não há mais "
|
||||
"nada a fazer aqui."
|
||||
|
||||
#: pretix/presale/views/waiting.py:222
|
||||
msgid ""
|
||||
"Thank you very much! We will assign your spot on the waiting list to someone "
|
||||
"else."
|
||||
msgstr ""
|
||||
"Muito obrigado! Vamos atribuir a sua vaga na lista de espera a outra pessoa."
|
||||
|
||||
#: pretix/presale/views/widget.py:397
|
||||
msgid "This ticket shop is currently disabled."
|
||||
msgstr "Esta bilheteria está desativada no momento."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/views/widget.py:411
|
||||
msgid "The selected date does not exist in this event series."
|
||||
msgstr "A data selecionada não existe nesta série de eventos."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/views/widget.py:474
|
||||
#, python-format
|
||||
msgid "from %(start_date)s"
|
||||
msgstr "a partir de %(start_date)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/settings.py:789
|
||||
msgid "User profile only"
|
||||
@@ -31828,15 +31803,15 @@ msgstr "Somente perfil de usuário"
|
||||
|
||||
#: pretix/settings.py:790
|
||||
msgid "Read access"
|
||||
msgstr "Acesso de leitura"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/settings.py:791
|
||||
msgid "Write access"
|
||||
msgstr "Acesso de escrita"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/settings.py:802
|
||||
msgid "Kosovo"
|
||||
msgstr "Kosovo"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
#~| msgid "Email"
|
||||
|
||||
@@ -3,80 +3,79 @@
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:36+0000\n"
|
||||
"PO-Revision-Date: 2025-06-05 04:00+0000\n"
|
||||
"Last-Translator: Francisco Rosa <francisco@comm7.net>\n"
|
||||
"Language-Team: Portuguese <https://translate.pretix.eu/projects/pretix/"
|
||||
"pretix-js/pt/>\n"
|
||||
"Language: pt\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"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Weblate 5.11.4\n"
|
||||
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:68
|
||||
msgid "Marked as paid"
|
||||
msgstr "Marcado como pago"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:76
|
||||
msgid "Comment:"
|
||||
msgstr "Comentário:"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:34
|
||||
msgid "PayPal"
|
||||
msgstr "PayPal"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35
|
||||
msgid "Venmo"
|
||||
msgstr "Venmo"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36
|
||||
#: pretix/static/pretixpresale/js/walletdetection.js:38
|
||||
msgid "Apple Pay"
|
||||
msgstr "Apple Pay"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37
|
||||
msgid "Itaú"
|
||||
msgstr "Itaú"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:38
|
||||
msgid "PayPal Credit"
|
||||
msgstr "Crédito PayPal"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39
|
||||
msgid "Credit Card"
|
||||
msgstr "Cartão de crédito"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40
|
||||
msgid "PayPal Pay Later"
|
||||
msgstr "PayPal Pagar Depois"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41
|
||||
msgid "iDEAL"
|
||||
msgstr "iDEAL"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42
|
||||
msgid "SEPA Direct Debit"
|
||||
msgstr "Débito Direto SEPA"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43
|
||||
msgid "Bancontact"
|
||||
msgstr "Contato bancário"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:44
|
||||
msgid "giropay"
|
||||
msgstr "giropay"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:45
|
||||
msgid "SOFORT"
|
||||
msgstr "SOFORT"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46
|
||||
msgid "eps"
|
||||
@@ -84,15 +83,15 @@ msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
|
||||
msgid "MyBank"
|
||||
msgstr "MyBank"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48
|
||||
msgid "Przelewy24"
|
||||
msgstr "Przelewy24"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49
|
||||
msgid "Verkkopankki"
|
||||
msgstr "Verkkopankki"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50
|
||||
msgid "PayU"
|
||||
@@ -128,7 +127,7 @@ msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58
|
||||
msgid "Mercado Pago"
|
||||
msgstr "Mercado Pago"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:35+0000\n"
|
||||
"PO-Revision-Date: 2025-06-04 06:32+0000\n"
|
||||
"PO-Revision-Date: 2025-05-28 08:00+0000\n"
|
||||
"Last-Translator: Renne Rocha <renne@rocha.dev.br>\n"
|
||||
"Language-Team: Portuguese (Brazil) <https://translate.pretix.eu/projects/"
|
||||
"pretix/pretix/pt_BR/>\n"
|
||||
@@ -10604,8 +10604,10 @@ msgstr ""
|
||||
"você usa os dados coletados em sua loja de ingressos."
|
||||
|
||||
#: pretix/base/settings.py:2071
|
||||
#, fuzzy
|
||||
#| msgid "Account information"
|
||||
msgid "Accessibility information URL"
|
||||
msgstr "URL de informação de acessibilidade"
|
||||
msgstr "Informações da conta"
|
||||
|
||||
#: pretix/base/settings.py:2072
|
||||
#, fuzzy
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-05-30 10:36+0000\n"
|
||||
"PO-Revision-Date: 2025-06-06 06:09+0000\n"
|
||||
"Last-Translator: Michael Dao <garudong89@gmail.com>\n"
|
||||
"PO-Revision-Date: 2024-05-30 17:00+0000\n"
|
||||
"Last-Translator: Luan Thien <vanthienluan@gmail.com>\n"
|
||||
"Language-Team: Vietnamese <https://translate.pretix.eu/projects/pretix/"
|
||||
"pretix-js/vi/>\n"
|
||||
"Language: vi\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.11.4\n"
|
||||
"X-Generator: Weblate 5.5.5\n"
|
||||
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
|
||||
@@ -35,16 +35,16 @@ msgstr "PayPal"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35
|
||||
msgid "Venmo"
|
||||
msgstr "Nền tảng Venmo"
|
||||
msgstr "Venmo"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36
|
||||
#: pretix/static/pretixpresale/js/walletdetection.js:38
|
||||
msgid "Apple Pay"
|
||||
msgstr "Nền tảng Apple Pay"
|
||||
msgstr "Apple Pay"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37
|
||||
msgid "Itaú"
|
||||
msgstr "Nền tảng Itaú"
|
||||
msgstr "Itaú"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:38
|
||||
msgid "PayPal Credit"
|
||||
@@ -56,11 +56,11 @@ msgstr "Thẻ tín dụng"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40
|
||||
msgid "PayPal Pay Later"
|
||||
msgstr "Nền tảng PayPal Pay Later"
|
||||
msgstr "PayPal Pay Later"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41
|
||||
msgid "iDEAL"
|
||||
msgstr "Nền tảng iDEAL"
|
||||
msgstr "iDEAL"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42
|
||||
msgid "SEPA Direct Debit"
|
||||
@@ -68,11 +68,11 @@ msgstr "Ghi nợ trực tiếp SEPA"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43
|
||||
msgid "Bancontact"
|
||||
msgstr "Nền tảng Bancontact"
|
||||
msgstr "Bancontact"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:44
|
||||
msgid "giropay"
|
||||
msgstr "Nền tảng giropay"
|
||||
msgstr "giropay"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:45
|
||||
msgid "SOFORT"
|
||||
@@ -80,55 +80,55 @@ msgstr "SOFORT"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46
|
||||
msgid "eps"
|
||||
msgstr "Nền tảng eps"
|
||||
msgstr "eps"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
|
||||
msgid "MyBank"
|
||||
msgstr "Nền tảng MyBank"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48
|
||||
msgid "Przelewy24"
|
||||
msgstr "Nền tảng Przelewy24"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49
|
||||
msgid "Verkkopankki"
|
||||
msgstr "Nền tảng Verkkopankki"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50
|
||||
msgid "PayU"
|
||||
msgstr "Nền tảng PayU"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:51
|
||||
msgid "BLIK"
|
||||
msgstr "Nền tảng BLIK"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:52
|
||||
msgid "Trustly"
|
||||
msgstr "Nền tảng Trustly"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:53
|
||||
msgid "Zimpler"
|
||||
msgstr "Nền tảng Zimpler"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:54
|
||||
msgid "Maxima"
|
||||
msgstr "Nền tảng Maxima"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:55
|
||||
msgid "OXXO"
|
||||
msgstr "?? OXXO"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:56
|
||||
msgid "Boleto"
|
||||
msgstr "Nền tảng Boleto"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:57
|
||||
msgid "WeChat Pay"
|
||||
msgstr "Nền tảng WeChat Pay"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58
|
||||
msgid "Mercado Pago"
|
||||
msgstr "Nền tảng Mercado Pago"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
|
||||
@@ -238,11 +238,11 @@ msgstr "Đã huỷ"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
|
||||
msgid "Confirmed"
|
||||
msgstr "Đã Xác Nhận"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
|
||||
msgid "Approval pending"
|
||||
msgstr "Đang chờ phê duyệt"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||
msgid "Redeemed"
|
||||
@@ -307,7 +307,7 @@ msgstr "Vé không hợp lệ tại thời điểm này"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
|
||||
msgid "Order canceled"
|
||||
msgstr "Đơn hàng đã bị hủy"
|
||||
msgstr "Đã huỷ đơn hàng"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
|
||||
msgid "Ticket code is ambiguous on list"
|
||||
@@ -348,7 +348,7 @@ msgstr "đóng"
|
||||
#: pretix/static/pretixbase/js/addressform.js:59
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:513
|
||||
msgid "required"
|
||||
msgstr "bắt buộc"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixbase/js/asynctask.js:12
|
||||
msgid ""
|
||||
@@ -411,8 +411,6 @@ msgstr ""
|
||||
#: pretix/static/pretixbase/js/asynctask.js:270
|
||||
msgid "If this takes longer than a few minutes, please contact us."
|
||||
msgstr ""
|
||||
"Yêu cầu của bạn hiện đang được xử lý. Tùy theo quy mô sự kiện, quá trình này "
|
||||
"có thể mất đến vài phút."
|
||||
|
||||
#: pretix/static/pretixbase/js/asynctask.js:325
|
||||
msgid "Close message"
|
||||
@@ -482,27 +480,27 @@ msgstr "Số mục trước từ khi"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
|
||||
msgid "Number of previous entries before"
|
||||
msgstr "Số lượt nhập trước đó"
|
||||
msgstr "Số mục trước trước lúc"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
|
||||
msgid "Number of days with a previous entry"
|
||||
msgstr "Số ngày có lượt nhập trước đó"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
|
||||
msgid "Number of days with a previous entry since"
|
||||
msgstr "Số ngày có lượt nhập trước đó kể từ khi"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
|
||||
msgid "Number of days with a previous entry before"
|
||||
msgstr "Số ngày có lượt nhập trước đó trước"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
|
||||
msgid "Minutes since last entry (-1 on first entry)"
|
||||
msgstr "Số phút kể từ lượt nhập cuối cùng (-1 đối với lượt nhập đầu tiên)"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
|
||||
msgid "Minutes since first entry (-1 on first entry)"
|
||||
msgstr "Số phút kể từ lượt nhập đầu tiên (-1 đối với lượt nhập đầu tiên)"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
|
||||
msgid "All of the conditions below (AND)"
|
||||
@@ -571,12 +569,16 @@ msgid "Group of objects"
|
||||
msgstr "Nhóm các đối tượng"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/editor.js:908
|
||||
#, fuzzy
|
||||
#| msgid "Text object"
|
||||
msgid "Text object (deprecated)"
|
||||
msgstr "Đối tượng văn bản (đã lỗi thời)"
|
||||
msgstr "Văn bản"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/editor.js:910
|
||||
#, fuzzy
|
||||
#| msgid "Text object"
|
||||
msgid "Text box"
|
||||
msgstr "Văn bản chữ"
|
||||
msgstr "Văn bản"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/editor.js:912
|
||||
msgid "Barcode area"
|
||||
@@ -624,26 +626,24 @@ msgid "Unknown error."
|
||||
msgstr "Lỗi không xác định."
|
||||
|
||||
#: 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 ""
|
||||
"Màu sắc của bạn có độ tương phản cao và sẽ mang lại khả năng tiếp cận tuyệt "
|
||||
"vời."
|
||||
msgstr "Bạn đã chọn màu có độ tương phản tốt và dễ đọc!"
|
||||
|
||||
#: 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 ""
|
||||
"Màu sắc của bạn có độ tương phản khá và đủ đáp ứng yêu cầu tối thiểu về khả "
|
||||
"năng tiếp cận."
|
||||
msgstr "Bạn đã giảm độ tương phản và có lẽ khá tốt để đọc!"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/main.js:300
|
||||
msgid ""
|
||||
"Your color has insufficient contrast to white. Accessibility of your site "
|
||||
"will be impacted."
|
||||
msgstr ""
|
||||
"Màu sắc của bạn có độ tương phản không đủ so với màu trắng. Khả năng tiếp "
|
||||
"cận của trang web bạn sẽ bị ảnh hưởng."
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/main.js:416
|
||||
#: pretix/static/pretixcontrol/js/ui/main.js:436
|
||||
@@ -672,246 +672,246 @@ msgstr "Số trang không hợp lệ."
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/main.js:943
|
||||
msgid "Use a different name internally"
|
||||
msgstr "Sử dụng tên khác ở bên trong"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/main.js:983
|
||||
msgid "Click to close"
|
||||
msgstr "Nhấn để đóng"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/main.js:1064
|
||||
msgid "You have unsaved changes!"
|
||||
msgstr "Bạn có những thay đổi chưa được lưu!"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/orderchange.js:25
|
||||
msgid "Calculating default price…"
|
||||
msgstr "Đang tính giá mặc định…"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/plugins.js:69
|
||||
#, fuzzy
|
||||
#| msgid "Search results"
|
||||
msgid "No results"
|
||||
msgstr "Không có kết quả"
|
||||
msgstr "Kết quả tìm kiếm"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/question.js:42
|
||||
msgid "Others"
|
||||
msgstr "Khác"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/question.js:82
|
||||
msgid "Count"
|
||||
msgstr "Số lượng"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/subevent.js:111
|
||||
msgid "(one more date)"
|
||||
msgid_plural "({num} more dates)"
|
||||
msgstr[0] "{num} ngày còn lại"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:48
|
||||
msgid ""
|
||||
"The items in your cart are no longer reserved for you. You can still "
|
||||
"complete your order as long as they’re available."
|
||||
msgstr ""
|
||||
"Các mặt hàng trong giỏ của bạn không còn được giữ chỗ nữa. Bạn vẫn có thể "
|
||||
"hoàn tất đơn hàng miễn là chúng còn hàng."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:50
|
||||
msgid "Cart expired"
|
||||
msgstr "Giỏ hàng đã hết hạn"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:59
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:87
|
||||
msgid "Your cart is about to expire."
|
||||
msgstr "Giỏ hàng của bạn sắp hết hạn."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:64
|
||||
msgid "The items in your cart are reserved for you for one minute."
|
||||
msgid_plural "The items in your cart are reserved for you for {num} minutes."
|
||||
msgstr[0] "Các mặt hàng trong giỏ của bạn được giữ trong vòng {num} phút."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:86
|
||||
msgid "Your cart has expired."
|
||||
msgstr "Giỏ hàng của bạn đã hết hạn."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:89
|
||||
msgid ""
|
||||
"The items in your cart are no longer reserved for you. You can still "
|
||||
"complete your order as long as they're available."
|
||||
msgstr ""
|
||||
"Các mặt hàng trong giỏ của bạn không còn được giữ chỗ nữa. Bạn vẫn có thể "
|
||||
"hoàn tất đơn hàng miễn là chúng còn hàng."
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:90
|
||||
msgid "Do you want to renew the reservation period?"
|
||||
msgstr "Bạn có muốn gia hạn thời gian giữ chỗ không?"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:93
|
||||
msgid "Renew reservation"
|
||||
msgstr "Gia hạn giữ chỗ"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:194
|
||||
msgid "The organizer keeps %(currency)s %(amount)s"
|
||||
msgstr "Người tổ chức giữ lại %(currency)s %(amount)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:202
|
||||
msgid "You get %(currency)s %(amount)s back"
|
||||
msgstr "Bạn nhận lại %(currency)s %(amount)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:218
|
||||
msgid "Please enter the amount the organizer can keep."
|
||||
msgstr "Vui lòng nhập số tiền người tổ chức được giữ lại."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:558
|
||||
msgid "Your local time:"
|
||||
msgstr "Thời gian địa phương của bạn:"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/walletdetection.js:39
|
||||
msgid "Google Pay"
|
||||
msgstr "Nền tảng Google Pay"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:16
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:16
|
||||
msgctxt "widget"
|
||||
msgid "Quantity"
|
||||
msgstr "Số lượng"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:17
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:17
|
||||
msgctxt "widget"
|
||||
msgid "Decrease quantity"
|
||||
msgstr "Giảm số lượng"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:18
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:18
|
||||
msgctxt "widget"
|
||||
msgid "Increase quantity"
|
||||
msgstr "Tăng số lượng"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:19
|
||||
msgctxt "widget"
|
||||
msgid "Filter events by"
|
||||
msgstr "Lọc sự kiện bởi"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:20
|
||||
msgctxt "widget"
|
||||
msgid "Filter"
|
||||
msgstr "Lọc"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:21
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:19
|
||||
msgctxt "widget"
|
||||
msgid "Price"
|
||||
msgstr "Giá"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:22
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:20
|
||||
#, javascript-format
|
||||
msgctxt "widget"
|
||||
msgid "Original price: %s"
|
||||
msgstr "Giá gốc: %s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:23
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:21
|
||||
#, javascript-format
|
||||
msgctxt "widget"
|
||||
msgid "New price: %s"
|
||||
msgstr "Giá mới: %s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:24
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:22
|
||||
msgctxt "widget"
|
||||
msgid "Select"
|
||||
msgstr "Chọn"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:25
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:23
|
||||
#, javascript-format
|
||||
msgctxt "widget"
|
||||
msgid "Select %s"
|
||||
msgstr "Chọn %s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:26
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:24
|
||||
#, javascript-format
|
||||
msgctxt "widget"
|
||||
msgid "Select variant %s"
|
||||
msgstr "Chọn biến thể %s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:27
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:25
|
||||
msgctxt "widget"
|
||||
msgid "Sold out"
|
||||
msgstr "Bán hết"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:28
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:26
|
||||
msgctxt "widget"
|
||||
msgid "Buy"
|
||||
msgstr "Mua"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:29
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:27
|
||||
msgctxt "widget"
|
||||
msgid "Register"
|
||||
msgstr "Đăng ký"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:30
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:28
|
||||
msgctxt "widget"
|
||||
msgid "Reserved"
|
||||
msgstr "Đã đặt"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:31
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:29
|
||||
msgctxt "widget"
|
||||
msgid "FREE"
|
||||
msgstr "MIỄN PHÍ"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:32
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:30
|
||||
msgctxt "widget"
|
||||
msgid "from %(currency)s %(price)s"
|
||||
msgstr "từ %(currency)s %(price)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:33
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:31
|
||||
#, javascript-format
|
||||
msgctxt "widget"
|
||||
msgid "Image of %s"
|
||||
msgstr "Hình của %s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:34
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:32
|
||||
msgctxt "widget"
|
||||
msgid "incl. %(rate)s% %(taxname)s"
|
||||
msgstr "đã bao gồm %(rate)s% %(taxname)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:35
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:33
|
||||
msgctxt "widget"
|
||||
msgid "plus %(rate)s% %(taxname)s"
|
||||
msgstr "cộng thêm %(rate)s% %(taxname)s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:36
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:34
|
||||
msgctxt "widget"
|
||||
msgid "incl. taxes"
|
||||
msgstr "đã bao gồm thuế"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:37
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:35
|
||||
msgctxt "widget"
|
||||
msgid "plus taxes"
|
||||
msgstr "cộng thêm thuế"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:38
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:36
|
||||
#, javascript-format
|
||||
msgctxt "widget"
|
||||
msgid "currently available: %s"
|
||||
msgstr "hiện có sẵn: %s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:39
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:37
|
||||
msgctxt "widget"
|
||||
msgid "Only available with a voucher"
|
||||
msgstr "Chỉ áp dụng với phiếu giảm giá"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:40
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:43
|
||||
@@ -919,38 +919,38 @@ msgstr "Chỉ áp dụng với phiếu giảm giá"
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:41
|
||||
msgctxt "widget"
|
||||
msgid "Not yet available"
|
||||
msgstr "Chưa có sẵn"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:41
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:39
|
||||
msgctxt "widget"
|
||||
msgid "Not available anymore"
|
||||
msgstr "Không có nữa"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:42
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:40
|
||||
msgctxt "widget"
|
||||
msgid "Currently not available"
|
||||
msgstr "Hiện tại không có sẵn"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:44
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:42
|
||||
#, javascript-format
|
||||
msgctxt "widget"
|
||||
msgid "minimum amount to order: %s"
|
||||
msgstr "Số lượng đặt hàng tối thiểu: %s"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:45
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:43
|
||||
msgctxt "widget"
|
||||
msgid "Close ticket shop"
|
||||
msgstr "Đóng cửa hàng vé"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:46
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:44
|
||||
msgctxt "widget"
|
||||
msgid "The ticket shop could not be loaded."
|
||||
msgstr "Không thể tải cửa hàng vé."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:47
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:45
|
||||
@@ -959,26 +959,24 @@ msgid ""
|
||||
"There are currently a lot of users in this ticket shop. Please open the shop "
|
||||
"in a new tab to continue."
|
||||
msgstr ""
|
||||
"Hiện có rất nhiều người dùng trong cửa hàng vé này. Vui lòng mở cửa hàng ở "
|
||||
"tab mới để tiếp tục."
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:49
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:47
|
||||
msgctxt "widget"
|
||||
msgid "Open ticket shop"
|
||||
msgstr "Mở cửa hàng vé"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:50
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:48
|
||||
msgctxt "widget"
|
||||
msgid "Checkout"
|
||||
msgstr "Thanh toán"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:51
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:49
|
||||
msgctxt "widget"
|
||||
msgid "The cart could not be created. Please try again later"
|
||||
msgstr "Không thể tạo giỏ hàng. Vui lòng thử lại sau"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:52
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:50
|
||||
@@ -987,14 +985,12 @@ msgid ""
|
||||
"We could not create your cart, since there are currently too many users in "
|
||||
"this ticket shop. Please click \"Continue\" to retry in a new tab."
|
||||
msgstr ""
|
||||
"Chúng tôi không thể tạo giỏ hàng của bạn do hiện có quá nhiều người dùng "
|
||||
"trong cửa hàng vé này. Vui lòng nhấn \"Tiếp tục\" để thử lại trong tab mới."
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:54
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:52
|
||||
msgctxt "widget"
|
||||
msgid "Waiting list"
|
||||
msgstr "Danh sách chờ"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:55
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:53
|
||||
@@ -1003,114 +999,112 @@ msgid ""
|
||||
"You currently have an active cart for this event. If you select more "
|
||||
"products, they will be added to your existing cart."
|
||||
msgstr ""
|
||||
"Hiện bạn đang có một giỏ hàng còn hiệu lực cho sự kiện này. Nếu bạn chọn "
|
||||
"thêm sản phẩm, chúng sẽ được thêm vào giỏ hàng hiện tại của bạn."
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:57
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:55
|
||||
msgctxt "widget"
|
||||
msgid "Resume checkout"
|
||||
msgstr "Tiếp tục thanh toán"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:58
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:56
|
||||
msgctxt "widget"
|
||||
msgid "Redeem a voucher"
|
||||
msgstr "Sử dụng phiếu giảm giá"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:59
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:57
|
||||
msgctxt "widget"
|
||||
msgid "Redeem"
|
||||
msgstr "Đổi mã"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:60
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:58
|
||||
msgctxt "widget"
|
||||
msgid "Voucher code"
|
||||
msgstr "Mã giảm giá"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:61
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:59
|
||||
msgctxt "widget"
|
||||
msgid "Close"
|
||||
msgstr "Đóng"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:62
|
||||
msgctxt "widget"
|
||||
msgid "Close checkout"
|
||||
msgstr "Đóng trang thanh toán"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:63
|
||||
msgctxt "widget"
|
||||
msgid "You cannot cancel this operation. Please wait for loading to finish."
|
||||
msgstr "Bạn không thể hủy thao tác này. Vui lòng chờ quá trình tải hoàn tất."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:64
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:60
|
||||
msgctxt "widget"
|
||||
msgid "Continue"
|
||||
msgstr "Tiếp tục"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:65
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:61
|
||||
msgctxt "widget"
|
||||
msgid "Show variants"
|
||||
msgstr "Hiển thị các biến thể"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:66
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:62
|
||||
msgctxt "widget"
|
||||
msgid "Hide variants"
|
||||
msgstr "Ẩn các biến thể"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:67
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:63
|
||||
msgctxt "widget"
|
||||
msgid "Choose a different event"
|
||||
msgstr "Chọn sự kiện khác"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:68
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:64
|
||||
msgctxt "widget"
|
||||
msgid "Choose a different date"
|
||||
msgstr "Chọn ngày khác"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:69
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:65
|
||||
msgctxt "widget"
|
||||
msgid "Back"
|
||||
msgstr "Quay về"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:70
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:66
|
||||
msgctxt "widget"
|
||||
msgid "Next month"
|
||||
msgstr "Tháng sau"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:71
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:67
|
||||
msgctxt "widget"
|
||||
msgid "Previous month"
|
||||
msgstr "Tháng trước"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:72
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:68
|
||||
msgctxt "widget"
|
||||
msgid "Next week"
|
||||
msgstr "Tuần sau"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:73
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:69
|
||||
msgctxt "widget"
|
||||
msgid "Previous week"
|
||||
msgstr "Tuần trước"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:74
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:70
|
||||
msgctxt "widget"
|
||||
msgid "Open seat selection"
|
||||
msgstr "Mở chọn chỗ ngồi"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:75
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:71
|
||||
@@ -1120,144 +1114,142 @@ msgid ""
|
||||
"add yourself to the waiting list. We will then notify if seats are available "
|
||||
"again."
|
||||
msgstr ""
|
||||
"Một số hoặc tất cả các loại vé hiện đã bán hết. Nếu bạn muốn, bạn có thể "
|
||||
"thêm tên vào danh sách chờ. Chúng tôi sẽ thông báo khi có chỗ ngồi lại."
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:76
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:72
|
||||
msgctxt "widget"
|
||||
msgid "Load more"
|
||||
msgstr "Tải thêm"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:78
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:74
|
||||
msgid "Mo"
|
||||
msgstr "T2"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:79
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:75
|
||||
msgid "Tu"
|
||||
msgstr "T3"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:80
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:76
|
||||
msgid "We"
|
||||
msgstr "T4"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:81
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:77
|
||||
msgid "Th"
|
||||
msgstr "T5"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:82
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:78
|
||||
msgid "Fr"
|
||||
msgstr "T6"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:83
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:79
|
||||
msgid "Sa"
|
||||
msgstr "T7"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:84
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:80
|
||||
msgid "Su"
|
||||
msgstr "CN"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:85
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:81
|
||||
msgid "Monday"
|
||||
msgstr "Thứ Hai"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:86
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:82
|
||||
msgid "Tuesday"
|
||||
msgstr "Thứ Ba"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:87
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:83
|
||||
msgid "Wednesday"
|
||||
msgstr "Thứ Tư"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:88
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:84
|
||||
msgid "Thursday"
|
||||
msgstr "Thứ Năm"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:89
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:85
|
||||
msgid "Friday"
|
||||
msgstr "Thứ Sáu"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:90
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:86
|
||||
msgid "Saturday"
|
||||
msgstr "Thứ Bảy"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:91
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:87
|
||||
msgid "Sunday"
|
||||
msgstr "Chủ Nhật"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:94
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:90
|
||||
msgid "January"
|
||||
msgstr "Tháng 1"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:95
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:91
|
||||
msgid "February"
|
||||
msgstr "Tháng 2"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:96
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:92
|
||||
msgid "March"
|
||||
msgstr "Tháng 3"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:97
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:93
|
||||
msgid "April"
|
||||
msgstr "Tháng 4"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:98
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:94
|
||||
msgid "May"
|
||||
msgstr "Tháng 5"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:99
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:95
|
||||
msgid "June"
|
||||
msgstr "Tháng 6"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:100
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:96
|
||||
msgid "July"
|
||||
msgstr "Tháng 7"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:101
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:97
|
||||
msgid "August"
|
||||
msgstr "Tháng 8"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:102
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:98
|
||||
msgid "September"
|
||||
msgstr "Tháng 9"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:103
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:99
|
||||
msgid "October"
|
||||
msgstr "Tháng 10"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:104
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:100
|
||||
msgid "November"
|
||||
msgstr "Tháng 11"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/widget/widget.js:105
|
||||
#: pretix/static/pretixpresale/js/widget/widget.v1.js:101
|
||||
msgid "December"
|
||||
msgstr "Tháng 12"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Your color has bad contrast for text on white background, please choose a "
|
||||
|
||||
@@ -47,8 +47,7 @@ from django.utils.translation import gettext_lazy as _
|
||||
from django_scopes import scope, scopes_disabled
|
||||
|
||||
from pretix.base.logentrytypes import (
|
||||
EventLogEntryType, OrderLogEntryType, WaitingListEntryLogEntryType,
|
||||
log_entry_types,
|
||||
EventLogEntryType, OrderLogEntryType, log_entry_types,
|
||||
)
|
||||
from pretix.base.models import SubEvent
|
||||
from pretix.base.signals import (
|
||||
@@ -131,11 +130,6 @@ class SendmailPluginOrderLogEntryType(OrderLogEntryType):
|
||||
pass
|
||||
|
||||
|
||||
@log_entry_types.new('pretix.plugins.sendmail.waitinglist.email.sent', _('The person on the waiting list received a mass email.'))
|
||||
class SendmailPluginWaitingListLogEntryType(WaitingListEntryLogEntryType):
|
||||
pass
|
||||
|
||||
|
||||
@log_entry_types.new('pretix.plugins.sendmail.rule.added', _('An email rule was created'))
|
||||
@log_entry_types.new('pretix.plugins.sendmail.rule.changed', _('An email rule was updated'))
|
||||
@log_entry_types.new('pretix.plugins.sendmail.rule.order.email.sent', _('A scheduled email was sent to the order'))
|
||||
|
||||
@@ -201,5 +201,4 @@ def send_mails_to_waitinglist(event: Event, user: int, subject: dict, message: d
|
||||
),
|
||||
user=user,
|
||||
attach_cached_files=attachments,
|
||||
log_entry_type='pretix.plugins.sendmail.waitinglist.email.sent',
|
||||
)
|
||||
|
||||
@@ -55,7 +55,7 @@ class AuthenticationForm(forms.Form):
|
||||
required_css_class = 'required'
|
||||
email = forms.EmailField(
|
||||
label=_("Email"),
|
||||
widget=forms.EmailInput(attrs={'autocomplete': 'email'})
|
||||
widget=forms.EmailInput()
|
||||
)
|
||||
password = forms.CharField(
|
||||
label=_("Password"),
|
||||
@@ -140,7 +140,6 @@ class RegistrationForm(forms.Form):
|
||||
name_parts = forms.CharField()
|
||||
email = forms.EmailField(
|
||||
label=_("Email"),
|
||||
widget=forms.EmailInput(attrs={'autocomplete': 'email'})
|
||||
)
|
||||
|
||||
error_messages = {
|
||||
@@ -342,7 +341,6 @@ class ResetPasswordForm(forms.Form):
|
||||
}
|
||||
email = forms.EmailField(
|
||||
label=_('Email'),
|
||||
widget=forms.EmailInput(attrs={'autocomplete': 'email'}),
|
||||
)
|
||||
|
||||
def __init__(self, request=None, *args, **kwargs):
|
||||
@@ -390,12 +388,12 @@ class ChangePasswordForm(forms.Form):
|
||||
)
|
||||
password_current = forms.CharField(
|
||||
label=_('Your current password'),
|
||||
widget=forms.PasswordInput(attrs={'autocomplete': 'current-password'}),
|
||||
widget=forms.PasswordInput,
|
||||
required=True
|
||||
)
|
||||
password = forms.CharField(
|
||||
label=_('New password'),
|
||||
widget=forms.PasswordInput(attrs={'minlength': '8', 'autocomplete': 'new-password'}),
|
||||
widget=forms.PasswordInput,
|
||||
max_length=4096,
|
||||
required=True
|
||||
)
|
||||
@@ -459,7 +457,7 @@ class ChangeInfoForm(forms.ModelForm):
|
||||
}
|
||||
password_current = forms.CharField(
|
||||
label=_('Your current password'),
|
||||
widget=forms.PasswordInput(attrs={'autocomplete': 'current-password'}),
|
||||
widget=forms.PasswordInput,
|
||||
help_text=_('Only required if you change your email address'),
|
||||
max_length=4096,
|
||||
required=False
|
||||
@@ -473,8 +471,6 @@ class ChangeInfoForm(forms.ModelForm):
|
||||
self.request = request
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
self.fields['email'].widget.attrs['autocomplete'] = 'email'
|
||||
|
||||
self.fields['name_parts'] = NamePartsFormField(
|
||||
max_length=255,
|
||||
required=True,
|
||||
|
||||
@@ -57,8 +57,6 @@ class WaitingListForm(forms.ModelForm):
|
||||
|
||||
event = self.event
|
||||
|
||||
self.fields['email'].widget.attrs['autocomplete'] = 'email'
|
||||
|
||||
if event.settings.waiting_list_names_asked:
|
||||
self.fields['name_parts'] = NamePartsFormField(
|
||||
max_length=255,
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
<div class="panel-body questions-form">
|
||||
{% if form.position.seat %}
|
||||
<div class="form-group">
|
||||
<div class="col-md-3 control-label">
|
||||
<strong role="heading" aria-level="5">{% trans "Seat" %}</strong>
|
||||
</div>
|
||||
<label class="col-md-3 control-label">
|
||||
{% trans "Seat" %}
|
||||
</label>
|
||||
<div class="col-md-9 form-control-text">
|
||||
{% include "icons/seat.svg" with cls="svg-icon" %}
|
||||
{{ form.position.seat }}
|
||||
@@ -30,9 +30,9 @@
|
||||
{% endif %}
|
||||
{% if form.position.addons.all %}
|
||||
<div class="form-group">
|
||||
<div class="col-md-3 control-label">
|
||||
<strong role="heading" aria-level="5">{% trans "Selected add-ons" %}</strong>
|
||||
</div>
|
||||
<label class="col-md-3 control-label">
|
||||
{% trans "Selected add-ons" %}
|
||||
</label>
|
||||
<div class="col-md-9 form-control-text">
|
||||
<ul class="addon-list">
|
||||
{% for a in form.position.addons.all %}
|
||||
@@ -44,13 +44,13 @@
|
||||
{% endif %}
|
||||
{% if form.position.subevent %}
|
||||
<div class="form-group">
|
||||
<div class="col-md-3 control-label">
|
||||
<strong role="heading" aria-level="5">{% trans "Date" context "subevent" %}</strong>
|
||||
</div>
|
||||
<label class="col-md-3 control-label">
|
||||
{% trans "Date" context "subevent" %}
|
||||
</label>
|
||||
<div class="col-md-9 form-control-text">
|
||||
<p class="addon-list">
|
||||
<ul class="addon-list">
|
||||
{{ form.position.subevent.name }} · {{ form.position.subevent.get_date_range_display_with_times_as_html }}
|
||||
</p>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{% extends "pretixpresale/event/checkout_base.html" %}
|
||||
{% load i18n %}
|
||||
{% load icon %}
|
||||
{% load bootstrap3 %}
|
||||
{% load rich_text %}
|
||||
{% load lists %}
|
||||
@@ -75,6 +74,14 @@
|
||||
{% if pos.variation %}
|
||||
– {{ pos.variation }}
|
||||
{% endif %}</strong>
|
||||
{% if forloop.counter > 1 %}
|
||||
<span class="text-right flip">
|
||||
{% if event.settings.checkout_show_copy_answers_button %}
|
||||
<button type="button" data-id="{{ forloop.counter0 }}" name="copy"
|
||||
class="js-copy-answers btn btn-default btn-xs">{% trans "Copy answers from above" %}</button>
|
||||
{% endif %}
|
||||
</span>
|
||||
{% endif %}
|
||||
</h3>
|
||||
</summary>
|
||||
<div>
|
||||
@@ -82,22 +89,11 @@
|
||||
{% if event.settings.attendee_data_explanation_text and pos.item.ask_attendee_data %}
|
||||
{{ event.settings.attendee_data_explanation_text|rich_text }}
|
||||
{% endif %}
|
||||
{% if forloop.counter > 1 and event.settings.checkout_show_copy_answers_button %}
|
||||
<div class="form-group">
|
||||
<div class="col-md-9 col-md-offset-3">
|
||||
<button type="button" data-id="{{ forloop.counter0 }}" name="copy"
|
||||
class="js-copy-answers btn btn-default btn-sm">
|
||||
{% icon "files-o" %}
|
||||
{% trans "Copy answers from above" %}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if pos.seat %}
|
||||
<div class="form-group">
|
||||
<div class="col-md-3 control-label">
|
||||
<strong role="heading" aria-level="4">{% trans "Seat" %}</strong>
|
||||
</div>
|
||||
<label class="col-md-3 control-label">
|
||||
{% trans "Seat" %}
|
||||
</label>
|
||||
<div class="col-md-9 form-control-text">
|
||||
{% include "icons/seat.svg" with cls="svg-icon" %}
|
||||
{{ pos.seat }}
|
||||
@@ -106,9 +102,9 @@
|
||||
{% endif %}
|
||||
{% if pos.addons_without_bundled %}
|
||||
<div class="form-group">
|
||||
<div class="col-md-3 control-label">
|
||||
<strong role="heading" aria-level="4">{% trans "Selected add-ons" %}</strong>
|
||||
</div>
|
||||
<label class="col-md-3 control-label">
|
||||
{% trans "Selected add-ons" %}
|
||||
</label>
|
||||
<div class="col-md-9 form-control-text">
|
||||
<ul class="addon-list">
|
||||
{% regroup pos.addons_without_bundled by item_and_variation as addons_by_itemvar %}
|
||||
@@ -121,24 +117,25 @@
|
||||
{% endif %}
|
||||
{% if pos.subevent %}
|
||||
<div class="form-group">
|
||||
<div class="col-md-3 control-label">
|
||||
<strong role="heading" aria-level="4">{% trans "Date" context "subevent" %}</strong>
|
||||
</div>
|
||||
<label class="col-md-3 control-label">
|
||||
{% trans "Date" context "subevent" %}
|
||||
</label>
|
||||
<div class="col-md-9 form-control-text">
|
||||
<p class="addon-list">
|
||||
<ul class="addon-list">
|
||||
{{ pos.subevent.name }} · {{ pos.subevent.get_date_range_display_with_times_as_html }}
|
||||
</p>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<fieldset>
|
||||
<legend class="sr-only">{{ pos.item.name }}{% if pos.variation %} – {{ pos.variation }}{% endif %}</legend>
|
||||
{% for form in forms %}
|
||||
{% if form.pos.item != pos.item %}
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
{# Add-Ons #}
|
||||
<legend{% if profiles_data %} class="profile-add-on-legend"{% endif %}>
|
||||
{% if form.show_copy_answers_to_addon_button and event.settings.checkout_show_copy_answers_button %}
|
||||
<span class="pull-right flip">
|
||||
<button type="button" data-id="{{ forloop.parentloop.counter0 }}" data-addonid="{{ forloop.counter0 }}" name="copy" class="js-copy-answers-addon btn btn-default btn-xs">{% trans "Copy answers" %}</button>
|
||||
</span>
|
||||
{% endif %}
|
||||
+ {{ form.pos.item.name }}{% if form.pos.variation %} – {{ form.pos.variation.value }}{% endif %}
|
||||
</legend>
|
||||
{% endif %}
|
||||
@@ -160,20 +157,8 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if form.show_copy_answers_to_addon_button and event.settings.checkout_show_copy_answers_button %}
|
||||
<div class="form-group">
|
||||
<div class="col-md-9 col-md-offset-3">
|
||||
<button type="button" data-id="{{ forloop.parentloop.counter0 }}" data-addonid="{{ forloop.counter0 }}" name="copy" class="js-copy-answers-addon btn btn-default btn-sm">
|
||||
{% icon "files-o" %}
|
||||
{% trans "Copy answers from above" %}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% bootstrap_form form layout="checkout" %}
|
||||
</div>
|
||||
</fieldset>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -96,8 +96,8 @@
|
||||
{% if not event.settings.show_variations_expanded %}
|
||||
<button type="button" data-toggle="variations" class="btn btn-default btn-block js-only"
|
||||
data-label-alt="{% trans "Hide variants" %}"
|
||||
aria-expanded="false" aria-controls="cp-{{ form.pos.pk }}-item-{{ item.pk }}-variations"
|
||||
aria-describedby="cp-{{ form.pos.pk }}-item-{{ item.pk }}-legend">
|
||||
aria-expanded="false"
|
||||
aria-label="{% blocktrans trimmed with item=item.name count=item.available_variations|length %}Show {{count}} variants of {{item}}{% endblocktrans %}">
|
||||
<i class="fa fa-angle-down collapse-indicator" aria-hidden="true"></i>
|
||||
<span>{% trans "Show variants" %}</span>
|
||||
</button>
|
||||
@@ -105,7 +105,7 @@
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
<div class="variations {% if not event.settings.show_variations_expanded %}variations-collapsed{% endif %}" id="cp-{{ form.pos.pk }}-item-{{ item.pk }}-variations">
|
||||
<div class="variations {% if not event.settings.show_variations_expanded %}variations-collapsed{% endif %}">
|
||||
{% for var in item.available_variations %}
|
||||
<article aria-labelledby="cp-{{ form.pos.pk }}-item-{{ item.pk }}-{{ var.pk }}-legend"{% if var.description %} aria-describedby="cp-{{ form.pos.pk }}-item-{{ item.pk }}-{{ var.pk }}-description"{% endif %} class="row-fluid product-row variation"
|
||||
{% if not item.free_price %}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
{% load i18n %}
|
||||
{% load icon %}
|
||||
{% load eventurl %}
|
||||
{% load daterange %}
|
||||
{% load safelink %}
|
||||
@@ -25,7 +24,7 @@
|
||||
</div>
|
||||
<div role="rowgroup" class="firstchild-in-panel">
|
||||
{% for line in cart.positions %}
|
||||
<div role="row" class="row cart-row {% if hide_prices %}hide-prices{% endif %} {% if download %}has-downloads{% endif %}{% if editable %}editable{% endif %}" data-article-id="item-{{ line.item.id }}{% if line.variation %}-{{ line.variation.id }}{% endif %}">
|
||||
<div role="row" class="row cart-row {% if hide_prices %}hide-prices{% endif %} {% if download %}has-downloads{% endif %}{% if editable %}editable{% endif %}">
|
||||
<div role="cell" class="product">
|
||||
<p>
|
||||
{% if line.addon_to %}
|
||||
@@ -507,23 +506,10 @@
|
||||
</p>
|
||||
<p>
|
||||
<button class="btn btn-default" type="submit" id="cart-extend-button" aria-describedby="cart-deadline">
|
||||
{% icon "refresh" %} {% trans "Renew reservation" %}
|
||||
<i class="fa fa-refresh" aria-hidden="true"></i> {% trans "Renew reservation" %}
|
||||
</button>
|
||||
</p>
|
||||
</form>
|
||||
|
||||
<dialog role="alertdialog" id="cart-extend-confirmation-dialog" class="inline-dialog" aria-labelledby="cart-deadline">
|
||||
<form method="dialog">
|
||||
<p>
|
||||
<button class="btn btn-success" autofocus value="OK">
|
||||
<span role="img" aria-label="{% trans "OK" %}.">
|
||||
{% icon "check" %}
|
||||
</span>
|
||||
{% trans "Reservation renewed" %}
|
||||
</button>
|
||||
</p>
|
||||
</form>
|
||||
</dialog>
|
||||
{% else %}
|
||||
<p class="sr-only" id="cart-description">{% trans "Overview of your ordered products." %}</p>
|
||||
{% endif %}
|
||||
|
||||
@@ -16,13 +16,13 @@
|
||||
<div class="form-order-change-main">
|
||||
{% if position.subevent %}
|
||||
<div class="form-group">
|
||||
<div class="col-md-3 control-label">
|
||||
<strong role="heading" aria-level="4">{% trans "Date" context "subevent" %}</strong>
|
||||
</div>
|
||||
<label class="col-md-3 control-label">
|
||||
{% trans "Date" context "subevent" %}
|
||||
</label>
|
||||
<div class="col-md-9 form-control-text">
|
||||
<p class="addon-list">
|
||||
<ul class="addon-list">
|
||||
{{ position.subevent.name }} · {{ position.subevent.get_date_range_display_with_times_as_html }}
|
||||
</p>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
@@ -101,8 +101,8 @@
|
||||
{% endif %}
|
||||
<button type="button" data-toggle="variations" class="btn btn-default btn-block js-only"
|
||||
data-label-alt="{% trans "Hide variants" %}"
|
||||
aria-expanded="false" aria-controls="{{ form_prefix }}item-{{ item.pk }}-variations"
|
||||
aria-describedby="{{ form_prefix }}item-{{ item.pk }}-legend">
|
||||
aria-expanded="false"
|
||||
aria-label="{% blocktrans trimmed with item=item.name count=item.available_variations|length %}Show {{count}} variants of {{ item }}{% endblocktrans %}">
|
||||
<i class="fa fa-angle-down collapse-indicator" aria-hidden="true"></i>
|
||||
<span>{% trans "Show variants" %}</span>
|
||||
</button>
|
||||
@@ -110,7 +110,7 @@
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
<div class="variations {% if not event.settings.show_variations_expanded %}variations-collapsed{% endif %}" id="{{ form_prefix }}item-{{ item.pk }}-variations">
|
||||
<div class="variations {% if not event.settings.show_variations_expanded %}variations-collapsed{% endif %}">
|
||||
{% for var in item.available_variations %}
|
||||
<article aria-labelledby="{{ form_prefix }}item-{{ item.pk }}-{{ var.pk }}-legend"{% if var.description %} aria-describedby="{{ form_prefix }}item-{{ item.pk }}-{{ var.pk }}-description"{% endif %} class="row product-row variation" id="{{ form_prefix }}item-{{ item.pk }}-{{ var.pk }}"
|
||||
{% if not item.free_price %}
|
||||
|
||||
@@ -15,9 +15,8 @@
|
||||
<div class="input-group{% if "voucher_invalid" in request.GET %} has-error{% endif %}">
|
||||
<span class="input-group-addon"><i class="fa fa-ticket fa-fw" aria-hidden="true"></i></span>
|
||||
<input type="text" class="form-control{% if "voucher_invalid" in request.GET %} has-error{% endif %}" name="voucher" id="voucher"
|
||||
{% if "voucher_invalid" in request.GET %} aria-describedby="error-message"{% endif %}
|
||||
autocomplete="off"
|
||||
placeholder="{% trans "Voucher code" %}" required="required">
|
||||
{% if "voucher_invalid" in request.GET %} aria-describedby="error-message"{% endif %}
|
||||
placeholder="{% trans "Voucher code" %}" required="required">
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="subevent" value="{{ subevent.id|default_if_none:"" }}" />
|
||||
|
||||
@@ -34,13 +34,13 @@
|
||||
{% endblocktrans %}
|
||||
{% endif %}
|
||||
</p>
|
||||
<p class="help-block" id="add-to-list-description">
|
||||
<p class="help-block">
|
||||
{% blocktrans trimmed %}
|
||||
You will <strong>not</strong> receive a confirmation email after you have been added to the waiting list. We will only contact you once a spot opens up.
|
||||
{% endblocktrans %}
|
||||
</p>
|
||||
<p>
|
||||
<button type="submit" class="btn btn-primary" aria-describedby="add-to-list-description">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{% trans "Add me to the list" %}
|
||||
</button>
|
||||
</p>
|
||||
|
||||
@@ -48,10 +48,6 @@
|
||||
<p class="modal-card-confirm"><button class="btn btn-lg btn-primary">{% trans "Renew reservation" %}</button></p>
|
||||
{% enddialog %}
|
||||
|
||||
{% dialog "dialog-cart-extended" "" "" icon="clock-o" alert=true %}
|
||||
<p class="modal-card-confirm"><button class="btn btn-lg btn-primary">{% trans "OK" %}</button></p>
|
||||
{% enddialog %}
|
||||
|
||||
<dialog id="lightbox-dialog" class="modal-card" role="alertdialog" aria-labelledby="lightbox-label">
|
||||
<form method="dialog" class="modal-card-inner form-horizontal">
|
||||
<div class="modal-card-content">
|
||||
|
||||
@@ -64,7 +64,6 @@ from pretix.base.models import (
|
||||
Event, EventMetaValue, Organizer, Quota, SubEvent, SubEventMetaValue,
|
||||
)
|
||||
from pretix.base.services.quotas import QuotaAvailability
|
||||
from pretix.base.timemachine import time_machine_now
|
||||
from pretix.helpers.compat import date_fromisocalendar
|
||||
from pretix.helpers.daterange import daterange
|
||||
from pretix.helpers.formats.en.formats import (
|
||||
@@ -229,7 +228,7 @@ class EventListMixin:
|
||||
|
||||
def _set_month_to_next_subevent(self):
|
||||
tz = self.request.event.timezone
|
||||
now_dt = time_machine_now()
|
||||
now_dt = now()
|
||||
next_sev = self.request.event.subevents.using(settings.DATABASE_REPLICA).annotate(
|
||||
effective_date=Case(
|
||||
When(date_from__lt=now_dt, date_to__isnull=False, date_to__gte=now_dt, then=Value(now_dt)),
|
||||
@@ -246,8 +245,8 @@ class EventListMixin:
|
||||
self.year = datetime_from.astimezone(tz).year
|
||||
self.month = datetime_from.astimezone(tz).month
|
||||
else:
|
||||
self.year = now_dt.year
|
||||
self.month = now_dt.month
|
||||
self.year = now().year
|
||||
self.month = now().month
|
||||
|
||||
def _set_month_to_next_event(self):
|
||||
now_dt = now()
|
||||
@@ -297,7 +296,7 @@ class EventListMixin:
|
||||
try:
|
||||
date = dateutil.parser.isoparse(self.request.GET.get('date')).date()
|
||||
except ValueError:
|
||||
date = time_machine_now().date()
|
||||
date = now().date()
|
||||
self.year = date.year
|
||||
self.month = date.month
|
||||
else:
|
||||
@@ -307,7 +306,7 @@ class EventListMixin:
|
||||
self._set_month_to_next_event()
|
||||
|
||||
def _set_week_to_next_subevent(self):
|
||||
now_dt = time_machine_now()
|
||||
now_dt = now()
|
||||
tz = self.request.event.timezone
|
||||
next_sev = self.request.event.subevents.using(settings.DATABASE_REPLICA).annotate(
|
||||
effective_date=Case(
|
||||
@@ -325,8 +324,8 @@ class EventListMixin:
|
||||
self.year = datetime_from.astimezone(tz).isocalendar()[0]
|
||||
self.week = datetime_from.astimezone(tz).isocalendar()[1]
|
||||
else:
|
||||
self.year = now_dt.isocalendar()[0]
|
||||
self.week = now_dt.isocalendar()[1]
|
||||
self.year = now().isocalendar()[0]
|
||||
self.week = now().isocalendar()[1]
|
||||
|
||||
def _set_week_to_next_event(self):
|
||||
now_dt = now()
|
||||
@@ -376,7 +375,7 @@ class EventListMixin:
|
||||
try:
|
||||
iso = dateutil.parser.isoparse(self.request.GET.get('date')).isocalendar()
|
||||
except ValueError:
|
||||
iso = time_machine_now().isocalendar()
|
||||
iso = now().isocalendar()
|
||||
self.year = iso[0]
|
||||
self.week = iso[1]
|
||||
else:
|
||||
|
||||
@@ -12,12 +12,10 @@ setup_collapsible_details = function (el) {
|
||||
return;
|
||||
}
|
||||
content.setAttribute('aria-hidden', 'true');
|
||||
content.setAttribute('inert', true);
|
||||
button.setAttribute('aria-expanded', 'false');
|
||||
button.addEventListener('click', function (e) {
|
||||
button.setAttribute('aria-expanded', 'true');
|
||||
content.setAttribute('aria-hidden', 'false');
|
||||
content.removeAttribute('inert');
|
||||
|
||||
content.addEventListener('transitionend', function() {
|
||||
content.classList.remove('sneak-peek-content');
|
||||
@@ -49,7 +47,6 @@ setup_collapsible_details = function (el) {
|
||||
container.removeEventListener("toggle", removeSneekPeakWhenClosed);
|
||||
trigger.remove();
|
||||
content.removeAttribute('aria-hidden');
|
||||
content.removeAttribute('inert');
|
||||
content.classList.remove('sneak-peek-content');
|
||||
}
|
||||
}
|
||||
@@ -117,7 +114,7 @@ setup_collapsible_details = function (el) {
|
||||
el.find("article button[data-toggle=variations]").click(function (e) {
|
||||
var $button = $(this);
|
||||
var $details = $button.closest("article");
|
||||
var $detailsNotSummary = $button.attr("aria-controls") ? $('#' + $button.attr("aria-controls")) : $(".variations", $details);
|
||||
var $detailsNotSummary = $(".variations", $details);
|
||||
var isOpen = !$detailsNotSummary.prop("hidden");
|
||||
if ($detailsNotSummary.is(':animated')) {
|
||||
e.preventDefault();
|
||||
@@ -125,7 +122,7 @@ setup_collapsible_details = function (el) {
|
||||
}
|
||||
|
||||
var altLabel = $button.attr("data-label-alt");
|
||||
$button.attr("data-label-alt", $button.text().trim());
|
||||
$button.attr("data-label-alt", $button.text());
|
||||
$button.find("span").text(altLabel);
|
||||
$button.attr("aria-expanded", !isOpen);
|
||||
|
||||
|
||||
@@ -1,10 +1,3 @@
|
||||
dialog.inline-dialog {
|
||||
position: static;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* Modal dialogs using HTML5 dialog tags for accessibility */
|
||||
dialog.modal-card {
|
||||
border: none;
|
||||
@@ -15,6 +8,9 @@ dialog.modal-card {
|
||||
box-shadow: 0 7px 14px 0 rgba(78, 50, 92, 0.1),0 3px 6px 0 rgba(0,0,0,.07);
|
||||
background: white;
|
||||
border-radius: $border-radius-large;
|
||||
|
||||
opacity: 0;
|
||||
transition: opacity .5s allow-discrete;
|
||||
}
|
||||
.modal-card-inner {
|
||||
display: flex;
|
||||
@@ -56,8 +52,18 @@ dialog.modal-card .modal-card-content {
|
||||
|
||||
dialog::backdrop {
|
||||
background-color: rgba(255, 255, 255, .5);
|
||||
opacity: 0;
|
||||
transition: opacity .5s allow-discrete;
|
||||
backdrop-filter: blur(2px);
|
||||
}
|
||||
dialog[open], dialog[open]::backdrop {
|
||||
opacity: 1;
|
||||
}
|
||||
@starting-style {
|
||||
dialog[open], dialog[open]::backdrop {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: $screen-sm-min) {
|
||||
dialog.modal-card:has(.modal-card-icon) .modal-card-inner {
|
||||
|
||||
@@ -648,47 +648,18 @@ var form_handlers = function (el) {
|
||||
var $checkbox = $(this).find("input[type=checkbox][name=_bulk]");
|
||||
var $content = $(this).find(".field-content");
|
||||
var $fields = $content.find("input, select, textarea, button");
|
||||
var $dialog = $(this).attr("data-confirm-dialog") ? $($(this).attr("data-confirm-dialog")) : null;
|
||||
var warningShown = false;
|
||||
|
||||
if ($dialog) {
|
||||
$dialog.on("close", function () {
|
||||
if ($dialog.get(0).returnValue === "yes") {
|
||||
$checkbox.prop("checked", true);
|
||||
} else {
|
||||
$checkbox.prop("checked", false);
|
||||
warningShown = false;
|
||||
}
|
||||
update();
|
||||
});
|
||||
}
|
||||
|
||||
var update = function () {
|
||||
var isChecked = $checkbox.prop("checked");
|
||||
|
||||
$content.toggleClass("enabled", isChecked);
|
||||
$fields.attr("tabIndex", isChecked ? 0 : -1);
|
||||
}
|
||||
$content.on("focusin change click", function () {
|
||||
if ($checkbox.prop("checked")) return;
|
||||
if ($dialog && !warningShown) {
|
||||
warningShown = true;
|
||||
$dialog.get(0).showModal();
|
||||
} else {
|
||||
$checkbox.prop("checked", true);
|
||||
update();
|
||||
}
|
||||
});
|
||||
$checkbox.on('change', function () {
|
||||
var isChecked = $checkbox.prop("checked");
|
||||
if (isChecked && $dialog && !warningShown) {
|
||||
warningShown = true;
|
||||
$dialog.get(0).showModal();
|
||||
} else if (!isChecked) {
|
||||
warningShown = false;
|
||||
}
|
||||
$checkbox.prop("checked", true);
|
||||
update();
|
||||
})
|
||||
});
|
||||
$checkbox.on('change', update)
|
||||
update();
|
||||
});
|
||||
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
/*global $, Morris, gettext*/
|
||||
$(function () {
|
||||
// Question view
|
||||
if (!$("#question_chart").length) {
|
||||
if (!$("#question-stats").length) {
|
||||
return;
|
||||
}
|
||||
|
||||
$(".chart").css("height", "250px");
|
||||
var data_type = $("#question_chart").attr("data-type"),
|
||||
data = JSON.parse($("#question-chart-data").text() || "[]"),
|
||||
data = JSON.parse($("#question-chart-data").html()),
|
||||
others_sum = 0,
|
||||
max_num = 8;
|
||||
|
||||
data = data.map(function (d) {
|
||||
return {
|
||||
'value': d.count,
|
||||
'label': d.answer.length > 20 ? d.answer.substring(0, 20) + '…' : d.answer,
|
||||
for (var i in data) {
|
||||
data[i].value = data[i].count;
|
||||
data[i].label = data[i].answer;
|
||||
if (data[i].label.length > 20) {
|
||||
data[i].label = data[i].label.substring(0, 20) + '…';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (data_type == 'N') {
|
||||
// Sort
|
||||
@@ -35,7 +36,7 @@ $(function () {
|
||||
// Limit shown options
|
||||
if (data.length > max_num) {
|
||||
for (var i = max_num; i < data.length; i++) {
|
||||
others_sum += data[i].value;
|
||||
others_sum += data[i].count;
|
||||
}
|
||||
data = data.slice(0, max_num);
|
||||
data.push({'value': others_sum, 'label': gettext('Others')});
|
||||
@@ -77,7 +78,7 @@ $(function () {
|
||||
data: data,
|
||||
resize: true,
|
||||
xkey: 'label',
|
||||
ykeys: ['value'],
|
||||
ykeys: ['count'],
|
||||
labels: [gettext('Count')]
|
||||
});
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ $(function () {
|
||||
.attr("href", "#" + tid)
|
||||
.text($fieldset.find("legend").text())
|
||||
.appendTo($tabli);
|
||||
if ($fieldset.find(".has-error, .alert-danger:not(.dynamic)").length > 0) {
|
||||
if ($fieldset.find(".has-error, .alert-danger").length > 0) {
|
||||
$tablink.append(" ");
|
||||
$tablink.append($("<span>").addClass("fa fa-warning text-danger"));
|
||||
if (preselect === null) {
|
||||
|
||||
@@ -5,6 +5,7 @@ var cart = {
|
||||
_deadline_call: 0,
|
||||
_time_offset: 0,
|
||||
_prev_diff_minutes: 0,
|
||||
_renewed_message: "",
|
||||
|
||||
_get_now: function () {
|
||||
return moment().add(cart._time_offset, 'ms');
|
||||
@@ -58,6 +59,7 @@ var cart = {
|
||||
$("#cart-deadline").text(gettext("Your cart is about to expire."))
|
||||
} else {
|
||||
$("#cart-deadline").text(
|
||||
cart._renewed_message + " " +
|
||||
ngettext(
|
||||
"The items in your cart are reserved for you for one minute.",
|
||||
"The items in your cart are reserved for you for {num} minutes.",
|
||||
@@ -72,6 +74,7 @@ var cart = {
|
||||
pad(diff_minutes.toString(), 2) + ':' + pad(diff_seconds.toString(), 2)
|
||||
);
|
||||
|
||||
cart._renewed_message = "";
|
||||
cart._deadline_timeout = window.setTimeout(cart.draw_deadline, 500);
|
||||
}
|
||||
var already_expired = diff_total_seconds <= 0;
|
||||
@@ -109,6 +112,7 @@ var cart = {
|
||||
}
|
||||
cart._deadline_timeout = null;
|
||||
cart._max_extend = moment(max_extend);
|
||||
cart._renewed_message = renewed_message || "";
|
||||
cart.draw_deadline();
|
||||
}
|
||||
};
|
||||
@@ -118,41 +122,22 @@ $(function () {
|
||||
|
||||
if ($("#cart-deadline").length) {
|
||||
cart.init();
|
||||
$("#cart-extend-confirmation-button").hide().on("blur", function() {
|
||||
$(this).hide();
|
||||
});
|
||||
}
|
||||
|
||||
$("#cart-extend-form").on("pretix:async-task-success", function(e, data) {
|
||||
if (data.success) {
|
||||
cart.set_deadline(data.expiry, data.max_expiry_extend);
|
||||
cart.set_deadline(data.expiry, data.max_expiry_extend, data.message);
|
||||
var cart_panel_heading = $(this).closest(".panel").find(".panel-heading").get(0);
|
||||
if (cart_panel_heading) {
|
||||
cart_panel_heading.focus();
|
||||
}
|
||||
} else {
|
||||
alert(data.message);
|
||||
}
|
||||
});
|
||||
// renew-button in cart-panel is clicked, show inline dialog
|
||||
$("#cart-extend-button").on("click", function() {
|
||||
$("#cart-extend-form").one("pretix:async-task-success", function(e, data) {
|
||||
if (data.success) {
|
||||
document.getElementById("cart-extend-confirmation-dialog").show();
|
||||
}
|
||||
});
|
||||
});
|
||||
$("#cart-extend-confirmation-dialog").on("keydown", function (e) {
|
||||
if(e.key === "Escape") {
|
||||
this.close();
|
||||
}
|
||||
});
|
||||
|
||||
// renew-button in modal dialog is clicked, show modal dialog
|
||||
$("#dialog-cart-extend form").submit(function() {
|
||||
$("#cart-extend-form").one("pretix:async-task-success", function(e, data) {
|
||||
if (data.success) {
|
||||
$("#dialog-cart-extended-title").text(data.message);
|
||||
$("#dialog-cart-extended-description").text($("#cart-deadline").text());
|
||||
document.getElementById("dialog-cart-extended").showModal();
|
||||
}
|
||||
}).submit();
|
||||
$("#cart-extend-form").submit();
|
||||
});
|
||||
|
||||
$(".toggle-container").each(function() {
|
||||
|
||||
@@ -7,12 +7,4 @@ var inIframe = function () {
|
||||
};
|
||||
if (inIframe()) {
|
||||
document.documentElement.classList.add('in-iframe');
|
||||
try {
|
||||
window.parent.postMessage({
|
||||
type: "pretix:widget:title",
|
||||
title: document.title,
|
||||
}, "*");
|
||||
} catch (e) {
|
||||
console.error("Could not post message to parent.", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -252,7 +252,7 @@ Vue.component('availbox', {
|
||||
variation: Object
|
||||
},
|
||||
mounted: function() {
|
||||
if (this.$root.itemnum === 1 && (!this.$root.categories[0].items[0].has_variations || this.$root.categories[0].items[0].variations.length < 2) && !this.$root.has_seating_plan ? 1 : 0) {
|
||||
if (this.$root.itemnum === 1 && !this.$root.has_seating_plan ? 1 : 0) {
|
||||
this.$refs.quantity.value = 1;
|
||||
if (this.order_max === 1) {
|
||||
this.$refs.quantity.checked = true;
|
||||
@@ -823,7 +823,7 @@ var shared_loading_fragment = (
|
||||
);
|
||||
|
||||
var shared_iframe_fragment = (
|
||||
'<dialog :class="frameClasses" aria-label="'+strings.checkout+'" @close="close" @cancel="cancel">'
|
||||
'<dialog :class="frameClasses" role="alertdialog" aria-label="'+strings.checkout+'" @close="close" @cancel="cancel">'
|
||||
+ '<div class="pretix-widget-frame-loading" v-show="$root.frame_loading">'
|
||||
+ '<svg width="256" height="256" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path class="pretix-widget-primary-color" d="M1152 896q0-106-75-181t-181-75-181 75-75 181 75 181 181 75 181-75 75-181zm512-109v222q0 12-8 23t-20 13l-185 28q-19 54-39 91 35 50 107 138 10 12 10 25t-9 23q-27 37-99 108t-94 71q-12 0-26-9l-138-108q-44 23-91 38-16 136-29 186-7 28-36 28h-222q-14 0-24.5-8.5t-11.5-21.5l-28-184q-49-16-90-37l-141 107q-10 9-25 9-14 0-25-11-126-114-165-168-7-10-7-23 0-12 8-23 15-21 51-66.5t54-70.5q-27-50-41-99l-183-27q-13-2-21-12.5t-8-23.5v-222q0-12 8-23t19-13l186-28q14-46 39-92-40-57-107-138-10-12-10-24 0-10 9-23 26-36 98.5-107.5t94.5-71.5q13 0 26 10l138 107q44-23 91-38 16-136 29-186 7-28 36-28h222q14 0 24.5 8.5t11.5 21.5l28 184q49 16 90 37l142-107q9-9 24-9 13 0 25 10 129 119 165 170 7 8 7 22 0 12-8 23-15 21-51 66.5t-54 70.5q26 50 41 98l183 28q13 2 21 12.5t8 23.5z"/></svg>'
|
||||
+ '<p :class="cancelBlockedClasses"><strong>'+strings.cancel_blocked+'</strong></p>'
|
||||
@@ -903,14 +903,6 @@ Vue.component('pretix-overlay', {
|
||||
}
|
||||
}
|
||||
},
|
||||
'$root.frame_shown': function (newValue) {
|
||||
if (newValue) {
|
||||
var btn = this.$el?.querySelector('.pretix-widget-frame-close button');
|
||||
this.$nextTick(function() {
|
||||
btn.focus();
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
frameClasses: function () {
|
||||
@@ -939,18 +931,7 @@ Vue.component('pretix-overlay', {
|
||||
}
|
||||
},
|
||||
},
|
||||
mounted () {
|
||||
window.addEventListener('message', this.onMessage, false);
|
||||
},
|
||||
unmounted () {
|
||||
window.removeEventListener('message', this.onMessage, false);
|
||||
},
|
||||
methods: {
|
||||
onMessage: function(e) {
|
||||
if (e.data.type && e.data.type == "pretix:widget:title") {
|
||||
this.$el.querySelector("iframe").title = e.data.title;
|
||||
}
|
||||
},
|
||||
lightboxClose: function () {
|
||||
this.$root.lightbox = null;
|
||||
},
|
||||
@@ -1582,14 +1563,14 @@ Vue.component('pretix-widget-event-calendar', {
|
||||
+ '<a class="pretix-widget-event-calendar-previous-month" href="#" @click.prevent.stop="prevmonth">« '
|
||||
+ strings['previous_month']
|
||||
+ '</a> '
|
||||
+ '<strong :id="aria_labelledby">{{ monthname }}</strong> '
|
||||
+ '<strong>{{ monthname }}</strong> '
|
||||
+ '<a class="pretix-widget-event-calendar-next-month" href="#" @click.prevent.stop="nextmonth">'
|
||||
+ strings['next_month']
|
||||
+ ' »</a>'
|
||||
+ '</div>'
|
||||
|
||||
// Calendar
|
||||
+ '<table class="pretix-widget-event-calendar-table" :id="id" tabindex="0" v-bind:aria-labelledby="aria_labelledby">'
|
||||
+ '<table class="pretix-widget-event-calendar-table" :id="id" tabindex="0" v-bind:aria-label="monthname">'
|
||||
+ '<thead>'
|
||||
+ '<tr>'
|
||||
+ '<th aria-label="' + strings['days']['MONDAY'] + '">' + strings['days']['MO'] + '</th>'
|
||||
@@ -1616,9 +1597,6 @@ Vue.component('pretix-widget-event-calendar', {
|
||||
id: function () {
|
||||
return this.$root.html_id + "-event-calendar-table";
|
||||
},
|
||||
aria_labelledby: function () {
|
||||
return this.$root.html_id + "-event-calendar-table-label";
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
back_to_list: function () {
|
||||
@@ -2204,22 +2182,11 @@ var create_overlay = function (app) {
|
||||
// show loading spinner only when previously no frame_src was set
|
||||
if (newValue && !oldValue) {
|
||||
this.frame_loading = true;
|
||||
this.$el?.querySelector('dialog.pretix-widget-frame-holder').showModal();
|
||||
}
|
||||
// to close and unload the iframe, frame_src can be empty -> make it valid HTML with about:blank
|
||||
this.$el.querySelector("iframe").src = newValue || "about:blank";
|
||||
},
|
||||
frame_loading: function (newValue) {
|
||||
var dialog = this.$el?.querySelector('dialog.pretix-widget-frame-holder');
|
||||
if (newValue) {
|
||||
if (!dialog.open) {
|
||||
dialog.showModal();
|
||||
}
|
||||
} else {
|
||||
if (!this.frame_src && dialog.open) {// finished loading, but no iframe to display => close
|
||||
dialog.close();
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
});
|
||||
app.$root.overlay = framechild;
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
line-height: normal;
|
||||
border: 1px solid $input-border;
|
||||
border-radius: $input-border-radius;
|
||||
min-height: $input-height-base;
|
||||
height: $input-height-base;
|
||||
padding: $padding-base-vertical $padding-base-horizontal;
|
||||
color: $input-color;
|
||||
background-color: $input-bg;
|
||||
|
||||
@@ -1901,11 +1901,10 @@ TEST_QUOTA_RES = {
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_quota_list(token_client, organizer, event, quota, item, item3, subevent):
|
||||
quota.items.add(item3)
|
||||
def test_quota_list(token_client, organizer, event, quota, item, subevent):
|
||||
res = dict(TEST_QUOTA_RES)
|
||||
res["id"] = quota.pk
|
||||
res["items"] = [item.pk, item3.pk]
|
||||
res["items"] = [item.pk]
|
||||
|
||||
resp = token_client.get('/api/v1/organizers/{}/events/{}/quotas/'.format(organizer.slug, event.slug))
|
||||
assert resp.status_code == 200
|
||||
@@ -1923,13 +1922,6 @@ def test_quota_list(token_client, organizer, event, quota, item, item3, subevent
|
||||
'/api/v1/organizers/{}/events/{}/quotas/?subevent={}'.format(organizer.slug, event.slug, se2.pk))
|
||||
assert [] == resp.data['results']
|
||||
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/quotas/?items__in={},{},0'.format(organizer.slug, event.slug, item.pk, item3.pk))
|
||||
assert [res] == resp.data['results']
|
||||
resp = token_client.get(
|
||||
'/api/v1/organizers/{}/events/{}/quotas/?items__in=0'.format(organizer.slug, event.slug))
|
||||
assert [] == resp.data['results']
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_quota_detail(token_client, organizer, event, quota, item):
|
||||
|
||||
@@ -961,42 +961,6 @@ def test_order_create_fee_as_percentage(token_client, organizer, event, item, qu
|
||||
assert o.total == Decimal('25.30')
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_order_create_fee_as_percentage_with_zero(token_client, organizer, event, item, quota, question):
|
||||
with scopes_disabled():
|
||||
voucher = event.vouchers.create(price_mode="set", value=Decimal("0.00"))
|
||||
res = copy.deepcopy(ORDER_CREATE_PAYLOAD)
|
||||
res['fees'][0]['_treat_value_as_percentage'] = True
|
||||
res['fees'][0]['_split_taxes_like_products'] = True
|
||||
res['fees'][0]['value'] = '10.00'
|
||||
res['positions'][0]['item'] = item.pk
|
||||
res['positions'][0]['answers'][0]['question'] = question.pk
|
||||
res['positions'][0]['voucher'] = voucher.code
|
||||
del res['positions'][0]['price']
|
||||
|
||||
res['simulate'] = True
|
||||
resp = token_client.post(
|
||||
'/api/v1/organizers/{}/events/{}/orders/'.format(
|
||||
organizer.slug, event.slug
|
||||
), format='json', data=res
|
||||
)
|
||||
assert resp.status_code == 201
|
||||
assert resp.data["total"] == "0.00"
|
||||
|
||||
res['simulate'] = False
|
||||
resp = token_client.post(
|
||||
'/api/v1/organizers/{}/events/{}/orders/'.format(
|
||||
organizer.slug, event.slug
|
||||
), format='json', data=res
|
||||
)
|
||||
assert resp.status_code == 201
|
||||
with scopes_disabled():
|
||||
o = Order.objects.get(code=resp.data['code'])
|
||||
fee = o.fees.first()
|
||||
assert fee.value == Decimal('0.00')
|
||||
assert o.total == Decimal('0.00')
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_order_create_fee_with_auto_tax(token_client, organizer, event, item, quota, question, taxrule):
|
||||
res = copy.deepcopy(ORDER_CREATE_PAYLOAD)
|
||||
|
||||
@@ -225,11 +225,8 @@ def test_full_clone_cross_organizer_differences():
|
||||
organizer2 = Organizer.objects.create(name='Dummy2', slug='dummy2')
|
||||
membership_type = organizer.membership_types.create(name="Membership")
|
||||
plan = SeatingPlan.objects.create(name="Plan", organizer=organizer, layout="{}")
|
||||
sc1_a = organizer.sales_channels.get(identifier="web")
|
||||
sc1_b = organizer.sales_channels.create(identifier="b")
|
||||
sc1_c = organizer.sales_channels.create(identifier="c")
|
||||
sc2_a = organizer2.sales_channels.get(identifier="web")
|
||||
sc2_c = organizer2.sales_channels.create(identifier="c")
|
||||
sc = organizer.sales_channels.get(identifier="web")
|
||||
sc2 = organizer2.sales_channels.get(identifier="web")
|
||||
|
||||
event = Event.objects.create(
|
||||
organizer=organizer, name='Dummy', slug='dummy',
|
||||
@@ -240,20 +237,15 @@ def test_full_clone_cross_organizer_differences():
|
||||
seating_plan=plan,
|
||||
all_sales_channels=False,
|
||||
)
|
||||
event.limit_sales_channels.add(sc1_a)
|
||||
event.limit_sales_channels.add(sc1_b)
|
||||
event.limit_sales_channels.add(sc1_c)
|
||||
event.limit_sales_channels.add(sc)
|
||||
|
||||
item1 = event.items.create(name="Ticket", default_price=23,
|
||||
grant_membership_type=membership_type,
|
||||
all_sales_channels=False)
|
||||
item1.limit_sales_channels.add(sc1_a)
|
||||
item1.limit_sales_channels.add(sc)
|
||||
item2 = event.items.create(name="T-shirt", default_price=15)
|
||||
item2.require_membership_types.add(membership_type)
|
||||
|
||||
event.settings.payment_giftcard__enabled = True
|
||||
event.settings.payment_giftcard__restrict_to_sales_channels = ['web', 'b', 'c']
|
||||
|
||||
copied_event = Event.objects.create(
|
||||
organizer=organizer2, name='Dummy2', slug='dummy2',
|
||||
date_from=datetime.datetime(2022, 4, 15, 9, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
@@ -265,14 +257,11 @@ def test_full_clone_cross_organizer_differences():
|
||||
assert organizer2.seating_plans.count() == 1
|
||||
assert organizer2.seating_plans.get().layout == plan.layout
|
||||
assert copied_event.seating_plan.organizer == organizer2
|
||||
assert set(copied_event.limit_sales_channels.all()) == {sc2_a, sc2_c}
|
||||
assert copied_event.limit_sales_channels.get() == sc2
|
||||
assert event.seating_plan.organizer == organizer
|
||||
|
||||
copied_item1 = copied_event.items.get(name=item1.name)
|
||||
copied_item2 = copied_event.items.get(name=item2.name)
|
||||
assert copied_item1.grant_membership_type is None
|
||||
assert copied_item2.require_membership_types.count() == 0
|
||||
assert copied_item1.limit_sales_channels.get() == sc2_a
|
||||
|
||||
assert event.settings.get('payment_giftcard__restrict_to_sales_channels', as_type=list) == ['web', 'b', 'c']
|
||||
assert copied_event.settings.get('payment_giftcard__restrict_to_sales_channels', as_type=list) == ['web', 'c']
|
||||
assert copied_item1.limit_sales_channels.get() == sc2
|
||||
|
||||
@@ -23,7 +23,6 @@ import inspect
|
||||
import os
|
||||
|
||||
import pytest
|
||||
from django.core.cache import cache
|
||||
from django.test import override_settings
|
||||
from django.utils import translation
|
||||
from django_scopes import scopes_disabled
|
||||
@@ -116,7 +115,6 @@ def fakeredis_client(monkeypatch):
|
||||
},
|
||||
}
|
||||
):
|
||||
cache.clear()
|
||||
redis = get_redis_connection("default", True)
|
||||
redis.flushall()
|
||||
monkeypatch.setattr('django_redis.get_redis_connection', get_redis_connection, raising=False)
|
||||
|
||||
Reference in New Issue
Block a user