Compare commits

..

1 Commits

Author SHA1 Message Date
Richard Schreiber
eb61bcdd4e Fix email preview curly brackets mismatch 2024-05-29 16:11:05 +02:00
45 changed files with 2520 additions and 2235 deletions

View File

@@ -1,30 +1,29 @@
before_script:
tests:
image:
name: pretix/ci-image
stage: test
before_script:
- pip install -U pip uv
- uv pip install --system -U wheel setuptools
script:
- uv pip install --system -e ".[dev]"
- virtualenv env
- source env/bin/activate
- pip install -U pip wheel setuptools
- XDG_CACHE_HOME=/cache pip3 install -e ".[dev]"
- cd src
- python manage.py check
- make all compress
- PRETIX_CONFIG_FILE=tests/travis_sqlite.cfg py.test --reruns 3 -n 3 tests --maxfail=100
- py.test --reruns 3 -n 3 tests
tags:
- python3
except:
- pypi
pypi:
stage: release
image:
name: pretix/ci-image
before_script:
- cat $PYPIRC > ~/.pypirc
- pip install -U pip uv
- uv pip install --system -U wheel setuptools twine build pretix-plugin-build check-manifest
script:
- uv pip install --system -e ".[dev]"
- cp /keys/.pypirc ~/.pypirc
- virtualenv env
- source env/bin/activate
- pip install -U pip wheel setuptools check-manifest twine
- XDG_CACHE_HOME=/cache pip3 install -e ".[dev]"
- python setup.py sdist
- uv pip install --system dist/pretix-*.tar.gz
- pip install dist/pretix-*.tar.gz
- python -m pretix migrate
- python -m pretix check
- cd src
@@ -34,12 +33,13 @@ pypi:
- python -m build
- twine check dist/*
- twine upload dist/*
tags:
- python3
only:
- pypi
artifacts:
paths:
- src/dist/
stages:
- test
- build

View File

@@ -103,10 +103,10 @@ pretix_celery_tasks_queued_count
pretix_celery_tasks_queued_age_seconds
The age of the longest-waiting in the worker queue in seconds, labeled with ``queue``.
pretix_logins_successful
pretix_successful_logins
Counter. The number of successful backend logins.
pretix_logins_failed
pretix_failed_logins
Counter. The number of failed backend logins, labeled with ``reason``.
.. _metric types: https://prometheus.io/docs/concepts/metric_types/

View File

@@ -44,7 +44,7 @@ dependencies = [
"django-formset-js-improved==0.5.0.3",
"django-formtools==2.5.1",
"django-hierarkey==1.2.*",
"django-hijack==3.5.*",
"django-hijack==3.4.*",
"django-i18nfield==1.9.*,>=1.9.4",
"django-libsass==0.9",
"django-localflavor==4.0",
@@ -92,7 +92,7 @@ dependencies = [
"redis==5.0.*",
"reportlab==4.2.*",
"requests==2.31.*",
"sentry-sdk==2.5.*",
"sentry-sdk==1.45.*",
"sepaxml==2.6.*",
"slimit",
"static3==0.7.*",

View File

@@ -564,8 +564,6 @@ class CheckinListOrderPositionSerializer(OrderPositionSerializer):
attendee_name = AttendeeNameField(source='*')
attendee_name_parts = AttendeeNamePartsField(source='*')
order__status = serializers.SlugRelatedField(read_only=True, slug_field='status', source='order')
order__valid_if_pending = serializers.SlugRelatedField(read_only=True, slug_field='valid_if_pending', source='order')
order__require_approval = serializers.SlugRelatedField(read_only=True, slug_field='require_approval', source='order')
class Meta:
model = OrderPosition
@@ -573,8 +571,7 @@ class CheckinListOrderPositionSerializer(OrderPositionSerializer):
'company', 'street', 'zipcode', 'city', 'country', 'state',
'attendee_email', 'voucher', 'tax_rate', 'tax_value', 'secret', 'addon_to', 'subevent', 'checkins',
'downloads', 'answers', 'tax_rule', 'pseudonymization_id', 'pdf_data', 'seat', 'require_attention',
'order__status', 'order__valid_if_pending', 'order__require_approval', 'valid_from', 'valid_until',
'blocked')
'order__status', 'valid_from', 'valid_until', 'blocked')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

View File

@@ -32,13 +32,13 @@
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under the License.
import re
from django.core.exceptions import ValidationError
from django.core.validators import BaseValidator
from django.utils.translation import gettext_lazy as _
from i18nfield.strings import LazyI18nString
from pretix.helpers.format import format_map
class PlaceholderValidator(BaseValidator):
"""
@@ -47,12 +47,6 @@ class PlaceholderValidator(BaseValidator):
which are not presented in taken list.
"""
error_message = _(
'There is an error with your placeholder syntax. Please check that the opening "{" and closing "}" curly '
'brackets on your placeholders match up. '
'Please note: to use literal "{" or "}", you need to double them as "{{" and "}}".'
)
def __init__(self, limit_value):
super().__init__(limit_value)
self.limit_value = limit_value
@@ -63,15 +57,22 @@ class PlaceholderValidator(BaseValidator):
self.__call__(v)
return
try:
format_map(value, {key.strip('{}'): "" for key in self.limit_value}, raise_on_missing=True)
except ValueError:
raise ValidationError(self.error_message, code='invalid_placeholder_syntax')
except KeyError as e:
if value.count('{') != value.count('}'):
raise ValidationError(
_('Invalid placeholder: {%(value)s}'),
_('Invalid placeholder syntax: You used a different number of "{" than of "}".'),
code='invalid_placeholder_syntax',
)
data_placeholders = list(re.findall(r'({[^}]*})', value, re.X))
invalid_placeholders = []
for placeholder in data_placeholders:
if placeholder not in self.limit_value:
invalid_placeholders.append(placeholder)
if invalid_placeholders:
raise ValidationError(
_('Invalid placeholder(s): %(value)s'),
code='invalid_placeholders',
params={'value': e.args[0]})
params={'value': ", ".join(invalid_placeholders,)})
def clean(self, x):
return x

View File

@@ -1468,6 +1468,8 @@ class SubEvent(EventMixin, LoggedModel):
seating_plan = models.ForeignKey('SeatingPlan', on_delete=models.PROTECT, null=True, blank=True,
related_name='subevents', verbose_name=_('Seating plan'))
items = models.ManyToManyField('Item', through='SubEventItem')
variations = models.ManyToManyField('ItemVariation', through='SubEventItemVariation')
comment = models.TextField(
verbose_name=_("Internal comment"),
null=True, blank=True

View File

@@ -444,8 +444,7 @@ class Item(LoggedModel):
free_price_suggestion = models.DecimalField(
verbose_name=_("Suggested price"),
help_text=_("This price will be used as the default value of the input field. The user can choose a lower "
"value, but not lower than the price this product would have without the free price option. This "
"will be ignored if a voucher is used that lowers the price."),
"value, but not lower than the price this product would have without the free price option."),
max_digits=13, decimal_places=2, null=True, blank=True,
)
tax_rule = models.ForeignKey(
@@ -1087,8 +1086,7 @@ class ItemVariation(models.Model):
free_price_suggestion = models.DecimalField(
verbose_name=_("Suggested price"),
help_text=_("This price will be used as the default value of the input field. The user can choose a lower "
"value, but not lower than the price this product would have without the free price option. This "
"will be ignored if a voucher is used that lowers the price."),
"value, but not lower than the price this product would have without the free price option."),
max_digits=13, decimal_places=2, null=True, blank=True,
)
require_approval = models.BooleanField(

View File

@@ -698,14 +698,6 @@ class ItemUpdateForm(I18nModelForm):
'tax_rule',
_("Gift card products should use a tax rule with a rate of 0 percent since sales tax will be applied when the gift card is redeemed.")
)
if d.get('validity_mode'):
self.add_error(
'validity_mode',
_(
"Do not set a specific validity for gift card products as it will not restrict the validity "
"of the gift card. A validity of gift cards can be set in your organizer settings."
)
)
if d.get('admission'):
self.add_error(
'admission',

View File

@@ -373,7 +373,7 @@ class VoucherBulkForm(VoucherForm):
res.append(self.Recipient(
name=row.get('name', ''),
email=row['email'].strip(),
number=int(row.get('number', 1) or ""),
number=int(row.get('number', 1)),
tag=row.get('tag', None)
))
except ValueError as err:

View File

@@ -327,7 +327,8 @@
{% endblocktrans %}
{% blocktrans trimmed %}
Internet Explorer is an old browser that does not support lots of recent web-based
technologies and is no longer supported by this website.
technologies. While some features might already not work properly, we plan on no longer
supporting Internet Explorer in our administrative backend in the next months.
{% endblocktrans %}
{% blocktrans trimmed %}
We kindly ask you to move to one of our supported browsers, such as Microsoft Edge,

View File

@@ -73,7 +73,6 @@ from i18nfield.utils import I18nJSONEncoder
from pretix.base.channels import get_all_sales_channels
from pretix.base.email import get_available_placeholders
from pretix.base.forms import PlaceholderValidator
from pretix.base.models import Event, LogEntry, Order, TaxRule, Voucher
from pretix.base.models.event import EventMetaValue
from pretix.base.services import tickets
@@ -714,6 +713,11 @@ class MailSettingsSetup(EventPermissionRequiredMixin, MailSettingsSetupView):
class MailSettingsPreview(EventPermissionRequiredMixin, View):
permission = 'can_change_event_settings'
# return the origin text if key is missing in dict
class SafeDict(dict):
def __missing__(self, key):
return '{' + key + '}'
# create index-language mapping
@cached_property
def supported_locale(self):
@@ -738,37 +742,47 @@ class MailSettingsPreview(EventPermissionRequiredMixin, View):
_('This value will be replaced based on dynamic parameters.'),
s
)
return ctx
return self.SafeDict(ctx)
def post(self, request, *args, **kwargs):
preview_item = request.POST.get('item', '')
if preview_item not in MailSettingsForm.base_context:
return HttpResponseBadRequest(_('invalid item'))
regex = r"^" + re.escape(preview_item) + r"_(?P<idx>[\d]+)$"
re_escape_single_bracket = r"((\{)[^\}]+\{|\}[^\{]+(\})|(\{)[^\}]*$|^[^\{]*(\}))"
msgs = {}
for k, v in request.POST.items():
# only accept allowed fields
matched = re.search(regex, k)
if matched is not None:
idx = matched.group('idx')
if idx in self.supported_locale:
with language(self.supported_locale[idx], self.request.event.settings.region):
try:
if k.startswith('mail_subject_'):
msgs[self.supported_locale[idx]] = format_map(
bleach.clean(v), self.placeholders(preview_item), raise_on_missing=True
)
else:
msgs[self.supported_locale[idx]] = markdown_compile_email(
format_map(v, self.placeholders(preview_item), raise_on_missing=True)
)
except ValueError:
msgs[self.supported_locale[idx]] = '<div class="alert alert-danger">{}</div>'.format(
PlaceholderValidator.error_message)
except KeyError as e:
msgs[self.supported_locale[idx]] = '<div class="alert alert-danger">{}</div>'.format(
_('Invalid placeholder: {%(value)s}') % {'value': e.args[0]})
if not k.startswith(preview_item + "_"):
continue
idx = k[len(preview_item)+1:]
if idx in self.supported_locale:
cleaned_v = ""
test_v = v.replace("{{", "__").replace("}}", "__")
while True:
match = re.search(re_escape_single_bracket, test_v)
if not match:
cleaned_v += v
break
if "{" in match.groups():
# replace first occurrence of { with {{, but keep trailing { in testing string
match_end = match.end()-1
cleaned_v += v[:match_end].replace("{", "{{", 1)
else:
# replace last occurrence of } with }}
match_end = match.end()
cleaned_v += "}}".join(v[:match_end].rsplit("}", 1))
v = v[match_end:]
test_v = test_v[match_end:]
with language(self.supported_locale[idx], self.request.event.settings.region):
if k.startswith('mail_subject_'):
msgs[self.supported_locale[idx]] = format_map(bleach.clean(cleaned_v), self.placeholders(preview_item))
else:
msgs[self.supported_locale[idx]] = markdown_compile_email(
format_map(cleaned_v, self.placeholders(preview_item))
)
return JsonResponse({
'item': preview_item,

View File

@@ -30,15 +30,17 @@ class SafeFormatter(Formatter):
Customized version of ``str.format`` that (a) behaves just like ``str.format_map`` and
(b) does not allow any unwanted shenanigans like attribute access or format specifiers.
"""
def __init__(self, context, raise_on_missing=False):
def __init__(self, context):
self.context = context
self.raise_on_missing = raise_on_missing
def get_field(self, field_name, args, kwargs):
return self.get_value(field_name, args, kwargs), field_name
if '.' in field_name or '[' in field_name:
logger.warning(f'Ignored invalid field name "{field_name}"')
return ('{' + str(field_name) + '}', field_name)
return super().get_field(field_name, args, kwargs)
def get_value(self, key, args, kwargs):
if not self.raise_on_missing and key not in self.context:
if key not in self.context:
return '{' + str(key) + '}'
return self.context[key]
@@ -47,7 +49,7 @@ class SafeFormatter(Formatter):
return super().format_field(value, '')
def format_map(template, context, raise_on_missing=False):
def format_map(template, context):
if not isinstance(template, str):
template = str(template)
return SafeFormatter(context, raise_on_missing).format(template)
return SafeFormatter(context).format(template)

View File

@@ -72,13 +72,9 @@ def remove_invalid_excel_chars(val):
return val
def SafeCell(worksheet, row=None, column=None, value=None, **kwargs):
def SafeCell(*args, value=None, **kwargs):
value = remove_invalid_excel_chars(value)
if not column:
column = 1
if not row:
row = 1
c = Cell(worksheet, row=row, column=column, value=value, **kwargs)
c = Cell(*args, value=value, **kwargs)
if c.data_type == TYPE_FORMULA:
c.data_type = TYPE_STRING
return c

View File

@@ -180,11 +180,7 @@ def create_thumbnail(source, size, formats=None):
except:
raise ThumbnailError('Could not load image')
frames = []
durations = []
for f in ImageSequence.Iterator(image):
durations.append(f.info.get("duration", 1000))
frames.append(resize_image(f, size))
frames = [resize_image(frame, size) for frame in ImageSequence.Iterator(image)]
image_out = frames[0]
save_kwargs = {}
source_ext = os.path.splitext(source_name)[1].lower()
@@ -202,8 +198,6 @@ def create_thumbnail(source, size, formats=None):
'loop': image.info.get('loop', 0),
'save_all': True,
}
if len(frames) > 1 and 'duration' in image.info:
save_kwargs['duration'] = durations
else:
target_ext = 'png'
quality = None

View File

@@ -4,7 +4,7 @@ msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-24 08:47+0000\n"
"PO-Revision-Date: 2024-05-30 17:00+0000\n"
"PO-Revision-Date: 2024-05-01 01:00+0000\n"
"Last-Translator: Nikolai <nikolai@lengefeldt.de>\n"
"Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix/da/"
">\n"
@@ -13,7 +13,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.5.5\n"
"X-Generator: Weblate 5.4.3\n"
#: pretix/_base_settings.py:78
msgid "English"
@@ -844,7 +844,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/organizers/customer_profile.html:20
#, fuzzy
msgid "Customer ID"
msgstr "Kunde ID"
msgstr "Kundehandlinger"
#: pretix/base/exporters/customers.py:65
#: pretix/control/templates/pretixcontrol/organizers/customer.html:31
@@ -2816,7 +2816,7 @@ msgstr "Udløbsdato"
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:136
#, fuzzy
msgid "Customer account"
msgstr "Kundekonto"
msgstr "Kundehandlinger"
#: pretix/base/exporters/reusablemedia.py:51 pretix/base/models/media.py:97
#, fuzzy
@@ -8316,7 +8316,7 @@ msgstr "Produkterne er lagt i kurven."
#: pretix/base/services/placeholders.py:525
msgid "Please transfer money to this bank account: 9999-9999-9999-9999"
msgstr "Overfør venligst beløbet til denne bankkonto: 9999-9999-9999-9999"
msgstr ""
#: pretix/base/services/seating.py:61 pretix/base/services/seating.py:128
#, python-format
@@ -11791,6 +11791,7 @@ msgid "All time"
msgstr "Alle"
#: pretix/base/timeline.py:60
#, fuzzy
msgctxt "timeline"
msgid "Your event starts"
msgstr "Arrangements starttidspunkt"
@@ -11813,6 +11814,7 @@ msgid "Start of ticket sales"
msgstr "Start af forsalg"
#: pretix/base/timeline.py:95
#, fuzzy
msgctxt "timeline"
msgid "End of ticket sales"
msgstr "Slut af forsalg"
@@ -12828,8 +12830,9 @@ msgstr "Forsalg slut"
#: pretix/control/forms/filter.py:1629 pretix/control/forms/filter.py:1632
#: pretix/control/forms/filter.py:2265
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:84
#, fuzzy
msgid "Date from"
msgstr "Dato fra"
msgstr "Dato"
#: pretix/control/forms/filter.py:1137 pretix/control/forms/filter.py:1140
#: pretix/control/forms/filter.py:1636 pretix/control/forms/filter.py:1639
@@ -15978,8 +15981,9 @@ msgid "Payments"
msgstr "Betaling"
#: pretix/control/navigation.py:374
#, fuzzy
msgid "User settings"
msgstr "Brugerindstillinger"
msgstr "Basisindstillinger"
#: pretix/control/navigation.py:385
#: pretix/control/templates/pretixcontrol/user/settings.html:16
@@ -15991,8 +15995,9 @@ msgid "2FA"
msgstr ""
#: pretix/control/navigation.py:395
#, fuzzy
msgid "Authorized apps"
msgstr "Autoriserede apps"
msgstr "Kundehandlinger"
#: pretix/control/navigation.py:400
#: pretix/control/templates/pretixcontrol/user/history.html:4
@@ -17111,7 +17116,7 @@ msgstr "Gå til arrangement"
#: pretix/control/templates/pretixcontrol/dashboard.html:15
msgid "Your upcoming events"
msgstr "Dine kommende arrangementer"
msgstr ""
#: pretix/control/templates/pretixcontrol/dashboard.html:20
#: pretix/control/templates/pretixcontrol/events/create_base.html:4
@@ -17125,15 +17130,15 @@ msgstr "Opret arrangement"
#: pretix/control/templates/pretixcontrol/dashboard.html:39
msgid "View all upcoming events"
msgstr "Vis alle kommende arrangementer"
msgstr ""
#: pretix/control/templates/pretixcontrol/dashboard.html:44
msgid "Your most recent events"
msgstr "Dine fornylig afsluttede arrangementer"
msgstr ""
#: pretix/control/templates/pretixcontrol/dashboard.html:60
msgid "View all recent events"
msgstr "Vis alle afsluttede arrangementer"
msgstr ""
#: pretix/control/templates/pretixcontrol/dashboard.html:65
msgid "Your event series"
@@ -18711,8 +18716,8 @@ msgid ""
"The list below shows all events you have administrative access to. Click on "
"the event name to access event details."
msgstr ""
"I listen vises alle arrangementer, som du har administratoradgang til. Klik "
"navnet for at se flere informationer."
"Listen vises alle arrangementer som du har administratoradgang til. Klik "
"navnet for at se detaljer."
#: pretix/control/templates/pretixcontrol/events/index.html:12
#: pretix/control/templates/pretixcontrol/organizers/detail.html:18
@@ -19818,12 +19823,13 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/oauth/authorized.html:4
#: pretix/control/templates/pretixcontrol/oauth/authorized.html:6
#: pretix/control/templates/pretixcontrol/user/settings.html:61
#, fuzzy
msgid "Authorized applications"
msgstr "Autoriserede applikationer"
msgstr "Kundehandlinger"
#: pretix/control/templates/pretixcontrol/oauth/authorized.html:9
msgid "Manage your own apps"
msgstr "Styr dine egne apps"
msgstr ""
#: pretix/control/templates/pretixcontrol/oauth/authorized.html:18
msgid "Permissions"
@@ -19831,7 +19837,7 @@ msgstr "Tilladelser"
#: pretix/control/templates/pretixcontrol/oauth/authorized.html:59
msgid "No applications have access to your pretix account."
msgstr "Der er ingen applikationer, der har adgang til din Pretix-konto."
msgstr ""
#: pretix/control/templates/pretixcontrol/order/approve.html:4
#: pretix/control/templates/pretixcontrol/order/approve.html:8
@@ -23490,8 +23496,9 @@ msgid "Change two-factor settings"
msgstr "Ændr tofaktor-indstillinger"
#: pretix/control/templates/pretixcontrol/user/settings.html:65
#, fuzzy
msgid "Show applications"
msgstr "Vis applikationer"
msgstr "Vis information"
#: pretix/control/templates/pretixcontrol/user/settings.html:74
msgid "Show account history"
@@ -29400,6 +29407,7 @@ msgid "Step"
msgstr ""
#: pretix/presale/checkoutflow.py:248
#, fuzzy
msgctxt "checkoutflow"
msgid "Customer account"
msgstr "Kundekonto"
@@ -29538,9 +29546,8 @@ msgid "Save address in my customer account for future purchases"
msgstr ""
#: pretix/presale/forms/checkout.py:158
#, fuzzy
msgid "Save answers to my customer profiles for future purchases"
msgstr "Gem mine svar i min kundekonto, for at genbruge dem i fremtiden."
msgstr ""
#: pretix/presale/forms/checkout.py:165
#, fuzzy
@@ -29854,8 +29861,9 @@ msgid "Cart expired"
msgstr "Kurv udløbet"
#: pretix/presale/templates/pretixpresale/event/checkout_base.html:36
#, fuzzy
msgid "Show full cart"
msgstr "Vis hele indkøbskurven"
msgstr "Vis information"
#: pretix/presale/templates/pretixpresale/event/checkout_base.html:48
#: pretix/presale/templates/pretixpresale/event/index.html:78
@@ -31234,6 +31242,7 @@ msgid "Request invoice"
msgstr "Anmod om faktura"
#: pretix/presale/templates/pretixpresale/event/order.html:286
#, fuzzy
msgid "Your information"
msgstr "Dine oplysninger"
@@ -31257,6 +31266,7 @@ msgid "Change your order"
msgstr "Ret din ordre"
#: pretix/presale/templates/pretixpresale/event/order.html:353
#, fuzzy
msgctxt "action"
msgid "Cancel your order"
msgstr "Annuller bestilling"
@@ -31893,7 +31903,7 @@ msgstr "Er du sikker på at du vil slette gruppen?"
#: pretix/presale/templates/pretixpresale/organizers/customer_profile.html:15
#, fuzzy
msgid "Account information"
msgstr "Kontoinformationer"
msgstr "Kontoindstillinger ændret"
#: pretix/presale/templates/pretixpresale/organizers/customer_info.html:11
#, fuzzy
@@ -31935,7 +31945,7 @@ msgstr "Angiv ny adgangskode"
#: pretix/presale/templates/pretixpresale/organizers/customer_profile.html:10
#, fuzzy
msgid "Your account"
msgstr "Din konto"
msgstr "Din kurv"
#: pretix/presale/templates/pretixpresale/organizers/customer_profile.html:23
#, fuzzy

View File

@@ -7,8 +7,8 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-08 13:19+0000\n"
"PO-Revision-Date: 2024-05-30 17:00+0000\n"
"Last-Translator: Nikolai <nikolai@lengefeldt.de>\n"
"PO-Revision-Date: 2022-12-01 17:00+0000\n"
"Last-Translator: Mie Frydensbjerg <mif@aarhus.dk>\n"
"Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix-js/"
"da/>\n"
"Language: da\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.5.5\n"
"X-Generator: Weblate 4.14.2\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -724,6 +724,10 @@ msgid "Cart expired"
msgstr "Kurv udløbet"
#: pretix/static/pretixpresale/js/ui/cart.js:50
#, fuzzy
#| 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."
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] "Varerne i din kurv er reserveret for dig i et minut."

View File

@@ -5,8 +5,8 @@ msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-24 08:47+0000\n"
"PO-Revision-Date: 2024-06-06 19:00+0000\n"
"Last-Translator: Mira <weller@rami.io>\n"
"PO-Revision-Date: 2024-05-24 08:53+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"
@@ -14050,7 +14050,7 @@ msgid ""
"people over 65. This ticket includes access to all parts of the event, "
"except the VIP area."
msgstr ""
"z.B. Dieses reduzierte Ticket ist erhältlich für Vollzeitstudent*innen, "
"z.B. Dieses reduzierte Ticket ist erhältlich für Vollzeitstudenten, "
"Arbeitslose und Menschen über 65. Das Ticket enthält Zugang zu allen Teilen "
"der Veranstaltung außer des VIP-Bereiches."
@@ -28810,7 +28810,7 @@ msgstr ""
msgid ""
"Please click the \"Pay with PayPal\" button below to start your payment."
msgstr ""
"Bitte klicken Sie auf den \"Mit PayPal bezahlen\" Knopf, um mit der Zahlung "
"Bitte klicken Sie auf den \"Mit PayPal bezahlen\" Knopf um mit der Zahlung "
"zu beginnen."
#: pretix/plugins/paypal2/templates/pretixplugins/paypal2/checkout_payment_form.html:13

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-24 08:47+0000\n"
"PO-Revision-Date: 2024-06-06 19:00+0000\n"
"Last-Translator: Mira <weller@rami.io>\n"
"PO-Revision-Date: 2024-05-24 08:53+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German (informal) <https://translate.pretix.eu/projects/"
"pretix/pretix/de_Informal/>\n"
"Language: de_Informal\n"
@@ -14025,7 +14025,7 @@ msgid ""
"people over 65. This ticket includes access to all parts of the event, "
"except the VIP area."
msgstr ""
"z.B. Dieses reduzierte Ticket ist erhältlich für Vollzeitstudent*innen, "
"z.B. Dieses reduzierte Ticket ist erhältlich für Vollzeitstudenten, "
"Arbeitslose und Menschen über 65. Das Ticket enthält Zugang zu allen Teilen "
"der Veranstaltung außer des VIP-Bereiches."
@@ -28759,7 +28759,7 @@ msgstr ""
msgid ""
"Please click the \"Pay with PayPal\" button below to start your payment."
msgstr ""
"Bitte klicke auf den \"Mit PayPal bezahlen\" Knopf, um mit der Zahlung zu "
"Bitte klicke auf den \"Mit PayPal bezahlen\" Knopf um mit der Zahlung zu "
"beginnen."
#: pretix/plugins/paypal2/templates/pretixplugins/paypal2/checkout_payment_form.html:13

View File

@@ -8,16 +8,16 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-24 08:47+0000\n"
"PO-Revision-Date: 2024-05-31 15:52+0000\n"
"Last-Translator: danijossnet <danijoss@yahoo.com>\n"
"Language-Team: Greek <https://translate.pretix.eu/projects/pretix/pretix/el/>"
"\n"
"PO-Revision-Date: 2023-07-11 11:38+0000\n"
"Last-Translator: hara metaxa <metaxahara@gmail.com>\n"
"Language-Team: Greek <https://translate.pretix.eu/projects/pretix/pretix/el/"
">\n"
"Language: el\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.5.5\n"
"X-Generator: Weblate 4.17\n"
#: pretix/_base_settings.py:78
msgid "English"
@@ -34388,7 +34388,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/fragment_event_info.html:20
#, python-format
msgid "Begin: %(time)s"
msgstr "Έναρξη: %(time)s"
msgstr "Ξεκινήστε: %(time)s"
#: pretix/presale/templates/pretixpresale/event/fragment_event_info.html:29
#, python-format

View File

@@ -4,8 +4,8 @@ msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-24 08:47+0000\n"
"PO-Revision-Date: 2024-06-08 18:00+0000\n"
"Last-Translator: alemairebe <adrien@alemaire.be>\n"
"PO-Revision-Date: 2024-05-23 14:03+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix/fr/"
">\n"
"Language: fr\n"
@@ -28861,8 +28861,8 @@ msgstr "Le processus de paiement a commencé dans une nouvelle fenêtre."
#: pretix/plugins/stripe/templates/pretixplugins/stripe/redirect.html:20
msgid "The window to enter your payment data was not opened or was closed?"
msgstr ""
"La fenêtre de saisie de vos données de paiement a-t-elle été fermée ou ne "
"s'est pas ouverte ?"
"La fenêtre de saisie de vos données de paiement na pas été ouverte ou a été "
"fermée ?"
#: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:25
#: pretix/plugins/paypal2/templates/pretixplugins/paypal2/redirect.html:25

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-24 08:47+0000\n"
"PO-Revision-Date: 2024-05-27 21:00+0000\n"
"Last-Translator: mathbrito <mathbrito@users.noreply.translate.pretix.eu>\n"
"PO-Revision-Date: 2024-02-27 02:00+0000\n"
"Last-Translator: Adriano Lima <adrianocardoso1991@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://translate.pretix.eu/projects/"
"pretix/pretix/pt_BR/>\n"
"Language: pt_BR\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.5.5\n"
"X-Generator: Weblate 5.4\n"
#: pretix/_base_settings.py:78
msgid "English"
@@ -9152,20 +9152,18 @@ msgid ""
"The part of your invoice number after your prefix will be filled up with "
"leading zeros up to this length, e.g. INV-001 or INV-00001."
msgstr ""
"A parte do seu número de fatura após o seu prefixo será preenchido com zeros "
"até este comprimento, p.ex. INV-001 ou INV-00001."
#: pretix/base/settings.py:661
msgid "Generate invoices with consecutive numbers"
msgstr "Gerar faturas com números consecutivos"
msgstr ""
#: pretix/base/settings.py:662
msgid "If deactivated, the order code will be used in the invoice number."
msgstr "Se desativado, o número de pedido será usado como número de fatura."
msgstr ""
#: pretix/base/settings.py:671
msgid "Invoice number prefix"
msgstr "Prefixo do número de fatura"
msgstr ""
#: pretix/base/settings.py:672
msgid ""
@@ -24635,19 +24633,19 @@ msgstr ""
#: pretix/plugins/sendmail/views.py:674 pretix/plugins/stripe/views.py:679
#: pretix/plugins/ticketoutputpdf/views.py:132
msgid "We could not save your changes. See below for details."
msgstr "Não conseguimos salvar suas alterações. Veja detalhes abaixo."
msgstr ""
#: pretix/control/views/checkin.py:416 pretix/control/views/checkin.py:453
msgid "The requested list does not exist."
msgstr "A lista solicitada não existe."
msgstr ""
#: pretix/control/views/checkin.py:462
msgid "The selected list has been deleted."
msgstr "A lista selecionada foi apagada."
msgstr ""
#: pretix/control/views/dashboards.py:114
msgid "Attendees (ordered)"
msgstr "Participantes (com pedidos)"
msgstr ""
#: pretix/control/views/dashboards.py:124
msgid "Attendees (paid)"

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-24 08:47+0000\n"
"PO-Revision-Date: 2024-06-08 18:00+0000\n"
"Last-Translator: David Vaz <davidmgvaz@gmail.com>\n"
"PO-Revision-Date: 2023-04-24 19:00+0000\n"
"Last-Translator: Vasco Baleia <vb2003.12@gmail.com>\n"
"Language-Team: Portuguese (Portugal) <https://translate.pretix.eu/projects/"
"pretix/pretix/pt_PT/>\n"
"Language: pt_PT\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.5.5\n"
"X-Generator: Weblate 4.16.4\n"
#: pretix/_base_settings.py:78
msgid "English"
@@ -41,7 +41,7 @@ msgstr "Chinês (simplificado)"
#: pretix/_base_settings.py:83
msgid "Chinese (traditional)"
msgstr "Chinês (tradicional)"
msgstr ""
#: pretix/_base_settings.py:84
msgid "Czech"
@@ -77,7 +77,7 @@ msgstr "Grego"
#: pretix/_base_settings.py:92
msgid "Indonesian"
msgstr "Indonésia"
msgstr ""
#: pretix/_base_settings.py:93
msgid "Italian"
@@ -89,7 +89,7 @@ msgstr "Letão"
#: pretix/_base_settings.py:95
msgid "Norwegian Bokmål"
msgstr "Norueguês Bokmål"
msgstr ""
#: pretix/_base_settings.py:96
msgid "Polish"
@@ -160,8 +160,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 pós-logout permitidos, separados por espaço"
msgstr "Lista de URIs permitidos, separados por espaço"
#: pretix/api/models.py:51 pretix/base/models/customers.py:395
#: pretix/plugins/paypal/payment.py:113 pretix/plugins/paypal2/payment.py:108
@@ -308,16 +310,21 @@ msgid "This type of question cannot be asked during check-in."
msgstr "Este tipo de pergunta não pode ser efetuado durante o check-in."
#: pretix/api/serializers/item.py:493 pretix/control/forms/item.py:143
#, fuzzy
#| msgid "This type of question cannot be asked during check-in."
msgid "This type of question cannot be shown during check-in."
msgstr "Este tipo de pergunta não pode ser apresentado durante o check-in."
msgstr "Este tipo de pergunta não pode ser efetuado durante o check-in."
#: pretix/api/serializers/media.py:108
#, fuzzy
#| msgid ""
#| "A gift card with the same secret already exists in your or an affiliated "
#| "organizer account."
msgid ""
"A medium with the same identifier and type already exists in your organizer "
"account."
msgstr ""
"Já existe um meio com o mesmo identificador e tipo nesta conta de "
"organizador."
"Um identificador com o mesmo ID e tipo já existe nesta conta de organizador."
#: pretix/api/serializers/order.py:79
#, python-brace-format
@@ -377,7 +384,7 @@ msgstr ""
#: pretix/api/views/checkin.py:604 pretix/api/views/checkin.py:611
msgid "Medium connected to other event"
msgstr "Meio ligado a outro evento"
msgstr ""
#: pretix/api/views/oauth.py:107 pretix/control/logdisplay.py:472
#, python-brace-format
@@ -389,7 +396,7 @@ msgstr "A aplicação \"{application_name}\" foi autorizada a aceder sua conta."
#: pretix/api/views/order.py:589 pretix/control/views/orders.py:1588
#: pretix/presale/views/order.py:741 pretix/presale/views/order.py:814
msgid "You cannot generate an invoice for this order."
msgstr "Não é possível gerar uma fatura para esta encomenda."
msgstr "Não pode gerar uma factura para este pedido"
#: pretix/api/views/order.py:594 pretix/control/views/orders.py:1590
#: pretix/presale/views/order.py:743 pretix/presale/views/order.py:816
@@ -547,32 +554,46 @@ msgid "Test-Mode of shop has been deactivated"
msgstr "O modo de teste da loja foi desativado"
#: pretix/api/webhooks.py:355
#, fuzzy
#| msgid "Waiting list entry"
msgid "Waiting list entry added"
msgstr "Entrada em fila de espera adicionada"
msgstr "Entrada em fila de espera"
#: pretix/api/webhooks.py:359
#, fuzzy
#| msgid "Waiting list entry"
msgid "Waiting list entry changed"
msgstr "Entrada em fila de espera alterada"
msgstr "Entrada em fila de espera"
#: pretix/api/webhooks.py:363
#, fuzzy
#| msgid "Waiting list entry"
msgid "Waiting list entry deleted"
msgstr "Entrada em fila de espera removida"
msgstr "Entrada em fila de espera"
#: pretix/api/webhooks.py:367
#, fuzzy
#| msgid "Waiting list entries"
msgid "Waiting list entry received voucher"
msgstr "Entrada em fila de espera recebeu voucher"
msgstr "Entradas em fila de espera"
#: pretix/api/webhooks.py:371
#, fuzzy
#| msgid "Customer account"
msgid "Customer account created"
msgstr "Conta de cliente criada"
msgstr "Conta de cliente"
#: pretix/api/webhooks.py:375
#, fuzzy
#| msgid "Customer account email change"
msgid "Customer account changed"
msgstr "Conta do cliente alterada"
msgstr "Alteração de e -mail da conta do cliente"
#: pretix/api/webhooks.py:379
#, fuzzy
#| msgid "The customer account has been anonymized."
msgid "Customer account anonymized"
msgstr "Conta do cliente anonimizada"
msgstr "A conta do cliente foi anonimizada."
#: pretix/base/addressvalidation.py:100 pretix/base/addressvalidation.py:103
#: pretix/base/addressvalidation.py:108 pretix/base/forms/questions.py:953
@@ -748,9 +769,11 @@ msgstr "Carregamento de Ficheiros de Resposta às Perguntas"
#: pretix/base/exporters/orderlist.py:1213
#: pretix/plugins/reports/exporters.py:478
#: pretix/plugins/reports/exporters.py:651
#, fuzzy
#| msgid "Order data"
msgctxt "export_category"
msgid "Order data"
msgstr "Dados da encomenda"
msgstr "Dados das encomendas"
#: pretix/base/exporters/answers.py:56
msgid ""
@@ -1064,6 +1087,8 @@ msgid "Event data"
msgstr "Dados do evento"
#: pretix/base/exporters/events.py:48
#, fuzzy
#| msgid "Event data"
msgctxt "export_category"
msgid "Event data"
msgstr "Dados do evento"
@@ -1728,8 +1753,10 @@ msgstr "Requer atenção especial"
#: pretix/base/exporters/items.py:91 pretix/base/exporters/orderlist.py:282
#: pretix/base/models/items.py:590 pretix/base/models/items.py:1155
#: pretix/base/models/orders.py:288
#, fuzzy
#| msgid "Check-in list"
msgid "Check-in text"
msgstr "Texto de check-in"
msgstr "Lista de check-in"
#: pretix/base/exporters/items.py:92 pretix/base/models/items.py:595
#: pretix/base/models/items.py:1080
@@ -2264,8 +2291,10 @@ msgid "Invoice address state"
msgstr "Endereço de fatura: estado"
#: pretix/base/exporters/orderlist.py:794
#, fuzzy
#| msgid "Server Transaction Code"
msgid "Order transaction data"
msgstr "Dados de transação de pedidos"
msgstr "Código Transaction Servidor"
#: pretix/base/exporters/orderlist.py:796
msgid ""
@@ -2273,14 +2302,12 @@ msgid ""
"changes to products, prices or tax rates. The information is only accurate "
"for changes made with pretix versions released after October 2021."
msgstr ""
"Descarregue uma folha de cálculo de todas as alterações substanciais às "
"encomendas, ou seja, todas as alterações aos produtos, preços ou taxas de "
"imposto. As informações são precisas apenas para alterações feitas com "
"versões pretix lançadas após outubro de 2021."
#: pretix/base/exporters/orderlist.py:812
#, fuzzy
#| msgid "Only include orders created within this date range."
msgid "Only include transactions created within this date range."
msgstr "Apenas incluir pedidos criados neste intervalo de datas."
msgstr "Apenas incluir pedidos criados a partir deste intervalo de datas."
#: pretix/base/exporters/orderlist.py:847 pretix/base/models/event.py:640
#: pretix/base/models/items.py:401 pretix/base/models/items.py:1937
@@ -2312,16 +2339,22 @@ msgid "Currency"
msgstr "Moeda"
#: pretix/base/exporters/orderlist.py:855
#, fuzzy
#| msgid "Transaction Code"
msgid "Transaction date"
msgstr "Data da transação"
msgstr "Código de transação"
#: pretix/base/exporters/orderlist.py:856
#, fuzzy
#| msgid "Transaction Code"
msgid "Transaction time"
msgstr "Hora de transação"
msgstr "Código de transação"
#: pretix/base/exporters/orderlist.py:857
#, fuzzy
#| msgid "Order data"
msgid "Old data"
msgstr "Dados antigos"
msgstr "Dados dos pedidos"
#: pretix/base/exporters/orderlist.py:860 pretix/base/models/items.py:1460
#: pretix/control/templates/pretixcontrol/order/transactions.html:22
@@ -2329,39 +2362,48 @@ msgid "Quantity"
msgstr "Quantidade"
#: pretix/base/exporters/orderlist.py:867
#, fuzzy
#| msgid "Internal reference"
msgid "Internal fee type"
msgstr "Tipo de taxa interna"
msgstr "Referência interna"
#: pretix/base/exporters/orderlist.py:869
#, fuzzy
#| msgid "Date"
msgctxt "subevent"
msgid "Date ID"
msgstr "ID de data"
msgstr "Data"
#: pretix/base/exporters/orderlist.py:874
#, fuzzy
#| msgid "Tax rule"
msgid "Tax rule ID"
msgstr "ID de regra de Tributação"
msgstr "Regra fiscal"
#: pretix/base/exporters/orderlist.py:877
#: pretix/plugins/reports/accountingreport.py:319
#, fuzzy
#| msgctxt "invoice"
#| msgid "Gross value"
msgid "Gross total"
msgstr "Total bruto"
msgstr "Valor bruto"
#: pretix/base/exporters/orderlist.py:878
#: pretix/plugins/reports/accountingreport.py:318
#, fuzzy
#| msgid "Total"
msgid "Tax total"
msgstr "Total de impostos"
msgstr "Total"
#: pretix/base/exporters/orderlist.py:888
msgid ""
"This value is supplied for informational purposes, it is not part of the "
"original transaction data and might have changed since the transaction."
msgstr ""
"Este valor é fornecido para fins informativos, não faz parte dos dados "
"originais da transação e pode ter sido alterado desde a transação."
#: pretix/base/exporters/orderlist.py:911
msgid "Converted from legacy version"
msgstr "Convertido de versão antiga"
msgstr ""
#: pretix/base/exporters/orderlist.py:973
msgid "Payments and refunds"
@@ -2639,8 +2681,9 @@ msgid "Show value at"
msgstr "Mostrar valor em"
#: pretix/base/exporters/orderlist.py:1271
#, fuzzy
msgid "Defaults to the time of report."
msgstr "Predefinido para o tempo do relatório."
msgstr "Predefine para o tempo do relatório."
#: pretix/base/exporters/orderlist.py:1276
#: pretix/base/exporters/orderlist.py:1286 pretix/control/forms/filter.py:517
@@ -2731,29 +2774,39 @@ msgstr "Data da última fatura do pedido"
#: pretix/control/templates/pretixcontrol/organizers/reusable_media.html:6
#: pretix/control/templates/pretixcontrol/organizers/reusable_media.html:9
msgid "Reusable media"
msgstr "Media reutilizável"
msgstr ""
#: pretix/base/exporters/reusablemedia.py:35
#, fuzzy
#| msgid "Reusable media type"
msgctxt "export_category"
msgid "Reusable media"
msgstr "Média reutilizável"
msgstr "Tipo de identificador reutilizável"
#: pretix/base/exporters/reusablemedia.py:36
#, fuzzy
#| msgid ""
#| "Download a spreadsheet with information on all events in this organizer "
#| "account."
msgid ""
"Download a spread sheet with the data of all reusable medias on your account."
msgstr ""
"Descarregue uma folha de cálculo com os dados de todos os suportes "
"reutilizáveis da sua conta."
"Descarregar uma folha de cálculo com informação de todos os eventos nesta "
"conta de organizador."
#: pretix/base/exporters/reusablemedia.py:46 pretix/base/models/media.py:67
#, fuzzy
#| msgid "Fee type"
msgctxt "reusable_medium"
msgid "Media type"
msgstr "Tipo de suporte"
msgstr "Tipo de taxa"
#: pretix/base/exporters/reusablemedia.py:47 pretix/base/models/media.py:73
#, fuzzy
#| msgid "Internal identifier"
msgctxt "reusable_medium"
msgid "Identifier"
msgstr "Identificador"
msgstr "Identificador interno"
#: pretix/base/exporters/reusablemedia.py:49 pretix/base/models/media.py:81
#: pretix/base/models/orders.py:264 pretix/base/models/orders.py:3007
@@ -2769,12 +2822,16 @@ msgid "Customer account"
msgstr "Conta de cliente"
#: pretix/base/exporters/reusablemedia.py:51 pretix/base/models/media.py:97
#, fuzzy
#| msgid "Link text"
msgid "Linked ticket"
msgstr "Bilhete associado"
msgstr "Texto do link"
#: pretix/base/exporters/reusablemedia.py:52 pretix/base/models/media.py:104
#, fuzzy
#| msgid "Issued gift cards"
msgid "Linked gift card"
msgstr "Cartão-presente associado"
msgstr "Cartões-presente emitidos"
#: pretix/base/exporters/waitinglist.py:42
msgctxt "export_category"
@@ -2856,7 +2913,7 @@ msgstr "Código do voucher"
#: pretix/base/forms/__init__.py:118
#, python-brace-format
msgid "You can use {markup_name} in this field."
msgstr "Pode utilizar {markup_name} neste campo."
msgstr ""
#: pretix/base/forms/__init__.py:178
#, python-format
@@ -3079,9 +3136,10 @@ msgid "Invalid placeholder(s): %(value)s"
msgstr "Placeholder(s) inválido(s): %(value)s"
#: pretix/base/forms/widgets.py:67
#, python-format
#, fuzzy, python-format
#| msgid "Sample city"
msgid "Sample: %s"
msgstr "Exemplo: %s"
msgstr "Exemplo de cidade"
#: pretix/base/forms/widgets.py:70
#, python-brace-format
@@ -3322,22 +3380,25 @@ msgstr ""
#: pretix/base/invoice.py:858
msgid "Default invoice renderer (European-style letter)"
msgstr "Renderizador de facturas por defeito (Carta estilo europeu)"
msgstr ""
#: pretix/base/invoice.py:947
#, fuzzy
#| msgid "Please enter a valid state."
msgctxt "invoice"
msgid "(Please quote at all times.)"
msgstr "(Por favor, cite sempre.)"
msgstr "Por favor, indique um estado válido."
#: pretix/base/invoice.py:994
msgid "Simplified invoice renderer"
msgstr "Renderizador de facturas simplificado"
msgstr ""
#: pretix/base/invoice.py:1013
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid "Event date range"
msgctxt "invoice"
msgid "Event date: {date_range}"
msgstr "Data do evento: {date_range}"
msgstr "Datas limite do evento"
#: pretix/base/media.py:61
msgid "Barcode / QR-Code"
@@ -3345,6 +3406,7 @@ msgstr "Código de Barras / Código QR"
#: pretix/base/media.py:77
#: pretix/control/templates/pretixcontrol/organizers/edit.html:237
#, fuzzy
msgid "NFC UID-based"
msgstr "NFC Baseado em UID"
@@ -3365,12 +3427,12 @@ msgstr "Definição inválida para a coluna \"{header}\"."
#: pretix/base/modelimport.py:199
#, python-brace-format
msgid "Could not parse {value} as a yes/no value."
msgstr "Não foi possível analisar {value} como um valor sim/não."
msgstr ""
#: pretix/base/modelimport.py:216
#, python-brace-format
msgid "Could not parse {value} as a date and time."
msgstr "Não foi possível analisar {value} como uma data e hora."
msgstr ""
#: pretix/base/modelimport.py:226 pretix/control/views/orders.py:1162
#: pretix/control/views/orders.py:1191 pretix/control/views/orders.py:1235
@@ -3545,8 +3607,10 @@ msgid "Customer"
msgstr "Comprador"
#: pretix/base/modelimport_orders.py:685
#, fuzzy
#| msgid "No matching seat was found."
msgid "No matching customer was found."
msgstr "Não foi encontrado nenhum cliente correspondente."
msgstr "Nenhum lugar correspondente foi encontrado."
#: pretix/base/modelimport_vouchers.py:50 pretix/base/models/vouchers.py:488
msgid "A voucher with this code already exists."
@@ -3559,8 +3623,10 @@ msgid "Maximum usages"
msgstr "Usos máximos"
#: pretix/base/modelimport_vouchers.py:79
#, fuzzy
#| msgid "Maximum number of items per order"
msgid "The maximum number of usages must be set."
msgstr "O número máximo de utilizações deve ser definido."
msgstr "Número máximo de itens por pedido"
#: pretix/base/modelimport_vouchers.py:88 pretix/base/models/vouchers.py:205
msgid "Minimum usages"
@@ -3587,8 +3653,6 @@ msgstr "Modo de preço"
#, python-brace-format
msgid "Could not parse {value} as a price mode, use one of {options}."
msgstr ""
"Não foi possível analisar {value} como um modo de preço, utilizar uma das "
"{options}."
#: pretix/base/modelimport_vouchers.py:160 pretix/base/models/vouchers.py:245
msgid "Voucher value"
@@ -4487,8 +4551,10 @@ msgstr "Nenhum valor pode conter o caracter delimitador."
#: pretix/base/models/giftcards.py:81
#: pretix/control/templates/pretixcontrol/organizers/giftcard.html:50
#, fuzzy
#| msgid "Download your ticket here:"
msgid "Owned by ticket holder"
msgstr "Propriedade do titular do bilhete"
msgstr "Descarregue o seu bilhete aqui:"
#: pretix/base/models/giftcards.py:93
msgid "The gift card code may only contain letters, numbers, dots and dashes."
@@ -5948,10 +6014,10 @@ msgid "Team members"
msgstr "Membros da equipa"
#: pretix/base/models/organizer.py:267
#, fuzzy
#| msgid "Do you really want to disable two-factor authentication?"
msgid "Require all members of this team to use two-factor authentication"
msgstr ""
"Exigir que todos os membros desta equipa utilizem autenticação de dois "
"fatores"
msgstr "Quer mesmo desativar a autenticação de dois fatores?"
#: pretix/base/models/organizer.py:268
msgid ""
@@ -6523,7 +6589,7 @@ msgstr "Pedido {order.code} foi pago em excesso."
#: pretix/base/notifications.py:294
#, python-brace-format
msgid "An external refund for {order.code} has occurred."
msgstr "Foi efetuado um reembolso externo para o pedido {order.code}."
msgstr "Foi efetuado um reembolso externo para o pedido {order.code}"
#: pretix/base/notifications.py:299
msgid "Refund requested"
@@ -7447,24 +7513,29 @@ msgstr ""
"quantidade selecionada. Por favor, veja abaixo para mais detalhes."
#: pretix/base/services/cart.py:118
#, python-format
#, fuzzy, python-format
#| msgid ""
#| "Some of the products you selected are no longer available in the quantity "
#| "you selected. Please see below for details."
msgid ""
"Some of the products you selected are no longer available. The following "
"products are affected and have not been added to your cart: %s"
msgstr ""
"Alguns dos produtos que selecionou não estão disponíveis. Os seguintes "
"produtos foram afetados e não foram adicionados ao seu carrinho: %s"
"Alguns dos produtos que você selecionou não estão mais disponíveis na "
"quantidade selecionada. Por favor, veja abaixo para mais detalhes."
#: pretix/base/services/cart.py:122
#, python-format
#, fuzzy, python-format
#| msgid ""
#| "Some of the products you selected are no longer available in the quantity "
#| "you selected. Please see below for details."
msgid ""
"Some of the products you selected are no longer available in the quantity "
"you selected. The following products are affected and have not been added to "
"your cart: %s"
msgstr ""
"Alguns dos produtos que selecionou não estão disponíveis na quantidade "
"que selecionou. Os seguintes produtos foram afetados e não foram adicionados "
"ao seu carrinho: %s"
"Alguns dos produtos que você selecionou não estão mais disponíveis na "
"quantidade selecionada. Por favor, veja abaixo para mais detalhes."
#: pretix/base/services/cart.py:127
#, fuzzy, python-format
@@ -8405,12 +8476,15 @@ msgstr ""
"do seu carrinho."
#: pretix/base/services/orders.py:202
#, python-format
#, fuzzy, python-format
#| msgid ""
#| "You cannot delete the product <strong>%(item)s</strong> because it "
#| "already has been ordered."
msgid ""
"You cannot remove the position %(addon)s since it has already been checked "
"in."
msgstr ""
"Não é possível remover a posição %(addon)s uma vez que já foi feito check-in."
"Não pode excluir o produto <strong>%(item)s</strong> porque já foi pedido."
#: pretix/base/services/orders.py:203
#, fuzzy
@@ -10756,12 +10830,13 @@ msgstr ""
"Olá,\n"
"\n"
"Ainda não recebemos o pagamento total para o seu pedido {event}.\n"
"Tenha em atenção que tem de pagar antes de {expire_date}.\n"
"Tenha em mente que só garantimos o pedido se recebermos\n"
"o seu pagamento antes de {expire_date}.\n"
"\n"
"Pode ver as informações de pagamento e o estado da sua encomenda em\n"
"Pode visualizar as informações de pagamento e o estado do pedido em\n"
"{url}\n"
"\n"
"Com os melhores cumprimentos\n"
"Cumprimentos,\n"
"A sua equipa {event}"
#: pretix/base/settings.py:2409
@@ -12070,16 +12145,21 @@ msgid "Your export failed."
msgstr "Criar novo ficheiro de exportação"
#: pretix/base/templates/pretixbase/email/export_failed.txt:4
#, fuzzy
#| msgid "Refund reason"
msgid "Reason:"
msgstr "Razão:"
msgstr "Motivo do reembolso"
#: pretix/base/templates/pretixbase/email/export_failed.txt:7
msgid "If your export fails five times in a row, it will no longer be sent."
msgstr ""
#: pretix/base/templates/pretixbase/email/export_failed.txt:10
#, fuzzy
#| msgctxt "order state"
#| msgid "Confirmation pending"
msgid "Configuration link:"
msgstr "Link de Configuração:"
msgstr "Confirmação pendente"
#: pretix/base/templates/pretixbase/email/notification.html:55
#: pretix/base/templates/pretixbase/email/notification.txt:14
@@ -12318,9 +12398,11 @@ msgid "Next week"
msgstr ""
#: pretix/base/timeframes.py:148
#, fuzzy
#| msgid "Current:"
msgctxt "reporting_timeframe"
msgid "Current month"
msgstr "Mês Corrente"
msgstr "Corrente:"
#: pretix/base/timeframes.py:152 pretix/base/timeframes.py:161
#: pretix/base/timeframes.py:170 pretix/base/timeframes.py:179
@@ -12645,17 +12727,22 @@ msgid "Community translations"
msgstr "Tradução não oficial"
#: pretix/control/forms/__init__.py:332
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid ""
#| "This translation is not maintained by the pretix team. We cannot vouch "
#| "for its correctness and new or recently changed features might not be "
#| "translated and will show in English instead. You can help translating at "
#| "translate.pretix.eu."
msgid ""
"These translations are not maintained by the pretix team. We cannot vouch "
"for their correctness and new or recently changed features might not be "
"translated and will show in English instead. You can <a "
"href=\"{translate_url}\" target=\"_blank\">help translating</a>."
msgstr ""
"Esta tradução não é mantida pela equipa pretix. Não podemos garantir a sua "
"exatidão e funcionalidades novas ou recentemente alteradas podem não ser "
"traduzidas e vão aparecer em Inglês em alternativa. Pode <a href=\""
"{translate_url}\" target=\"_blank\">ajudar na tradução </a>."
"Esta tradução não é mantida pela equipa pretix. Não podemos atestar sua "
"veracidade e recursos novos ou recentemente alterados podem não ser "
"traduzido e vão aparecer em Inglês em alternativa. Pode ajudar a traduzir em "
"translate.pretix.eu."
#: pretix/control/forms/__init__.py:343
msgid "Development only"
@@ -15102,7 +15189,21 @@ msgid "Your voucher for {event}"
msgstr "Seu voucher para {event}"
#: pretix/control/forms/vouchers.py:278
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid ""
#| "Hello,\n"
#| "\n"
#| "with this email, we're sending you one or more vouchers for {event}:\n"
#| "\n"
#| "{voucher_list}\n"
#| "\n"
#| "You can redeem them here in our ticket shop:\n"
#| "\n"
#| "{url}\n"
#| "\n"
#| "Best regards, \n"
#| "\n"
#| "Your {event} team"
msgid ""
"Hello,\n"
"\n"
@@ -15119,15 +15220,16 @@ msgid ""
msgstr ""
"Olá,\n"
"\n"
"com este e-mail, estamos a enviar-lhe um ou mais vouchers para {event}:\n"
"com este e-mail, estamos enviando-lhe um ou mais vouchers para {event}:\n"
"\n"
"{voucher_list}\n"
"\n"
"Pode trocá-los aqui na nossa bilheteira:\n"
"Pode trocá-los aqui em nossa bilheteira:\n"
"\n"
"{url}\n"
"\n"
"Cumprimentos,\n"
"\n"
"A sua equipa {event}"
#: pretix/control/forms/vouchers.py:284
@@ -17877,8 +17979,10 @@ msgid "Valid check-in"
msgstr "Todos os check-ins"
#: pretix/control/templates/pretixcontrol/checkin/simulator.html:68
#, fuzzy
#| msgid "Additional information"
msgid "Additional information required"
msgstr "Informação adicional necessária"
msgstr "Informação adicional"
#: pretix/control/templates/pretixcontrol/checkin/simulator.html:70
msgid ""
@@ -19777,10 +19881,11 @@ msgid "Currently available: %(num)s"
msgstr "Actualmente disponíveis: %(num)s"
#: pretix/control/templates/pretixcontrol/giftcards/checkout_confirm.html:4
#, python-format
#, fuzzy, python-format
msgid "Your gift card %(card)s will be used to pay for this order."
msgstr ""
"O seu cartão presente %(card)s será utilizado para pagar esta encomenda."
"O cartão-presente pode ser usado para comprar bilhetes para todos os eventos "
"deste organizador."
#: pretix/control/templates/pretixcontrol/global_license.html:8
msgid ""
@@ -21968,8 +22073,10 @@ msgid ""
msgstr ""
#: pretix/control/templates/pretixcontrol/orders/bulk_action.html:71
#, fuzzy
#| msgid "You will not be able to continue."
msgid "Do you want to continue?"
msgstr "Quer continuar?"
msgstr "Você não poderá continuar."
#: pretix/control/templates/pretixcontrol/orders/bulk_action.html:77
#, fuzzy
@@ -22145,13 +22252,13 @@ msgstr "Apagar seleção"
#: pretix/control/templates/pretixcontrol/orders/export_delete.html:9
#: pretix/control/templates/pretixcontrol/organizers/export_delete.html:9
#, python-format
#, fuzzy, python-format
#| msgid ""
#| "Are you sure you want to delete the quota <strong>%(quota)s</strong>?"
msgid ""
"Are you sure you want to delete the scheduled export <strong>%(export)s</"
"strong>?"
msgstr ""
"Tem certeza de que deseja excluir a exportação agendada "
"<strong>%(export)s</strong>?"
msgstr "Tem certeza de que deseja excluir a quota <strong>%(quota)s</strong>?"
#: pretix/control/templates/pretixcontrol/orders/export_form.html:26
#: pretix/control/templates/pretixcontrol/organizers/export_form.html:27
@@ -22190,9 +22297,10 @@ msgid "Repetition schedule"
msgstr "Regra de repetição"
#: pretix/control/templates/pretixcontrol/orders/fragment_export_schedule_form.html:46
#, python-format
#, fuzzy, python-format
#| msgid "Repeat every %(interval)s %(freq)s, starting at %(start)s."
msgid "Repeat every %(interval)s %(freq)s"
msgstr "Repetir a cada %(interval)s %(freq)s"
msgstr "Repetir a cada %(interval)s %(freq)s, a partir de %(start)s."
#: pretix/control/templates/pretixcontrol/orders/fragment_export_schedule_form.html:54
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:89
@@ -22246,8 +22354,10 @@ msgid ""
msgstr ""
#: pretix/control/templates/pretixcontrol/orders/fragment_export_schedule_form.html:111
#, fuzzy
#| msgid "Please confirm the following payment details."
msgid "Please note the following limitations:"
msgstr "Tenha em atenção as seguintes limitações:"
msgstr "Por favor, confirme os seguintes detalhes de pagamento."
#: pretix/control/templates/pretixcontrol/orders/fragment_export_schedule_form.html:114
msgid ""
@@ -25229,7 +25339,11 @@ msgid "Quota unlimited"
msgstr "Nome da quota"
#: pretix/control/templates/pretixcontrol/waitinglist/index.html:229
#, python-format
#, fuzzy, python-format
#| msgid ""
#| "\n"
#| " Waiting, product %(num)sx available\n"
#| " "
msgid ""
"\n"
" Waiting, product %(num)sx "
@@ -25237,9 +25351,8 @@ msgid ""
" "
msgstr ""
"\n"
" Em espera, produto %(num)sx "
"disponível\n"
" "
" Esperando, produto %(num)sx disponíveis\n"
" "
#: pretix/control/templates/pretixcontrol/waitinglist/index.html:235
msgid "Waiting, product unavailable"
@@ -26956,8 +27069,10 @@ msgstr ""
"verifique se a data e hora do seu telefone está configurado corretamente."
#: pretix/control/views/user.py:583
#, fuzzy
#| msgid "Do you really want to enable two-factor authentication?"
msgid "You have left all teams that require two-factor authentication."
msgstr "Deixou todas as equipas que requerem autenticação de dois factores."
msgstr "Deseja mesmo ativar a autenticação de dois fatores?"
#: pretix/control/views/user.py:597
msgid ""
@@ -27612,8 +27727,10 @@ msgid ""
msgstr ""
#: pretix/plugins/banktransfer/payment.py:334
#, fuzzy
#| msgid "Invoice recipient:"
msgid "Invoice recipient e-mail"
msgstr "E-mail do destinatário da fatura"
msgstr "destinatário da factura:"
#: pretix/plugins/banktransfer/payment.py:336
msgid ""
@@ -27774,12 +27891,16 @@ msgstr ""
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_confirm.html:36
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html:36
#, fuzzy
#| msgid ""
#| "After completing your purchase, we will ask you to transfer the money to "
#| "the following bank account, using a personal reference code:"
msgid ""
"After completing your purchase, we will ask you to transfer the money to our "
"bank account, using a personal reference code."
msgstr ""
"Após concluir a sua compra, iremos pedir-lhe para transferir o dinheiro para "
"a nossa conta bancária, usando um código de referência pessoal."
"Após a conclusão da sua compra, pediremos-lhe que transfira o dinheiro para "
"a seguinte conta bancária, utilizando um código de referência pessoal:"
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_confirm.html:43
#, python-format
@@ -28011,8 +28132,10 @@ msgid ""
msgstr ""
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:132
#, fuzzy
#| msgid "Invoice recipient:"
msgid "Invoice recipient email"
msgstr "E-mail do destinatário da fatura"
msgstr "destinatário da factura:"
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:139
#, fuzzy
@@ -28338,6 +28461,8 @@ msgstr "Lista de check-in (PDF)"
#: pretix/plugins/checkinlists/exporters.py:461
#: pretix/plugins/checkinlists/exporters.py:661
#: pretix/plugins/checkinlists/exporters.py:731
#, fuzzy
#| msgid "Check-in"
msgctxt "export_category"
msgid "Check-in"
msgstr "Check-in"
@@ -31620,7 +31745,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:12
msgid "You already selected the following payment methods:"
msgstr "Já seleccionou os seguintes métodos de pagamento:"
msgstr "Por favor, confirme os seguintes detalhes de pagamento."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:26
msgid "Remove payment"
@@ -31636,7 +31761,7 @@ msgstr "Por favor, selecione um método de pagamento."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:52
msgid "Please select how you want to pay the remaining balance:"
msgstr "Seleccione como pretende pagar o saldo remanescente:"
msgstr "Por favor, selecione como deseja pagar."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:95
msgid "This sales channel does not provide support for test mode."
@@ -31839,9 +31964,10 @@ msgstr "Novo preço:"
#: pretix/presale/templates/pretixpresale/event/voucher.html:176
#: pretix/presale/templates/pretixpresale/event/voucher.html:328
#: pretix/presale/templates/pretixpresale/event/voucher.html:330
#, python-format
#, fuzzy, python-format
#| msgid "Modify price for %(item)s"
msgid "Modify price for %(item)s, at least %(price)s"
msgstr "Modificar preço para %(item)s, pelo menos %(price)s"
msgstr "Modificar preço para %(item)s"
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:152
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:291
@@ -32116,8 +32242,10 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:377
#: pretix/presale/templates/pretixpresale/event/order_giftcard.html:20
#: pretix/presale/templates/pretixpresale/event/position_giftcard.html:20
#, fuzzy
#| msgid "Current value"
msgid "Current value:"
msgstr "Valor atual:"
msgstr "Valor atual"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:451
#, python-format
@@ -32204,9 +32332,10 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/fragment_change_confirm.html:56
#: pretix/presale/templates/pretixpresale/event/fragment_change_confirm.html:81
#: pretix/presale/templates/pretixpresale/event/fragment_change_confirm.html:106
#, python-format
#, fuzzy, python-format
#| msgid "Add-On to position #%(posid)s"
msgid "Add-on product to position #%(positionid)s"
msgstr "Add-On para a posição # %(positionid)s"
msgstr "Add-On para a posição %(posid)s"
#: pretix/presale/templates/pretixpresale/event/fragment_change_confirm.html:40
#, python-format
@@ -32458,17 +32587,19 @@ msgstr "Mostrar imagem em tamanho original do %(item)s"
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:329
#: pretix/presale/templates/pretixpresale/event/voucher.html:204
#: pretix/presale/templates/pretixpresale/event/voucher.html:358
#, python-format
#, fuzzy, python-format
#| msgid "(incl. taxes)"
msgid "%(value)s incl. taxes"
msgstr "%(value)s incl. impostos"
msgstr "(incl. impostos)"
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:183
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:335
#: pretix/presale/templates/pretixpresale/event/voucher.html:210
#: pretix/presale/templates/pretixpresale/event/voucher.html:364
#, python-format
#, fuzzy, python-format
#| msgid "Total value (without taxes)"
msgid "%(value)s without taxes"
msgstr "%(value)s sem impostos"
msgstr "Valor total (sem impostos)"
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:290
#: pretix/presale/templates/pretixpresale/event/voucher.html:321
@@ -32718,7 +32849,7 @@ msgstr "Obrigado!"
#: pretix/presale/templates/pretixpresale/event/order.html:14
#: pretix/presale/templates/pretixpresale/event/order.html:32
msgid "Your order has been placed successfully. See below for details."
msgstr "A sua encomenda foi efectuada com sucesso. Veja abaixo os detalhes."
msgstr "O seu pedido foi feito com sucesso. Vê abaixo os detalhes!"
#: pretix/presale/templates/pretixpresale/event/order.html:16
#: pretix/presale/templates/pretixpresale/event/order.html:48
@@ -33080,9 +33211,10 @@ msgstr "Confirme as seguintes alterações em seu pedido."
#: pretix/presale/templates/pretixpresale/event/order_giftcard.html:10
#: pretix/presale/templates/pretixpresale/event/position_giftcard.html:10
#, python-format
#, fuzzy, python-format
#| msgid "Gift card: %(card)s"
msgid "Gift card: %(code)s"
msgstr "Cartão-presente: %(code)s"
msgstr "Cartão-presente: %(card)s"
#: pretix/presale/templates/pretixpresale/event/order_modify.html:5
msgid "Modify order"
@@ -33876,8 +34008,10 @@ msgid "This feature is only available in test mode."
msgstr "Este cartão-presente só pode ser usado em modo de teste."
#: pretix/presale/views/event.py:969
#, fuzzy
#| msgid "This account is disabled."
msgid "Time machine disabled!"
msgstr "Máquina do tempo desactivada!"
msgstr "Esta conta está desativada."
#: pretix/presale/views/order.py:368 pretix/presale/views/order.py:433
#: pretix/presale/views/order.py:514

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-08 13:19+0000\n"
"PO-Revision-Date: 2024-06-08 18:00+0000\n"
"PO-Revision-Date: 2022-11-16 16:12+0000\n"
"Last-Translator: David Vaz <davidmgvaz@gmail.com>\n"
"Language-Team: Portuguese (Portugal) <https://translate.pretix.eu/projects/"
"pretix/pretix-js/pt_PT/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.5.5\n"
"X-Generator: Weblate 4.14.1\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -265,7 +265,7 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
msgid "Additional information required"
msgstr "Informação adicional necessária"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "Valid ticket"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-24 08:47+0000\n"
"PO-Revision-Date: 2024-06-05 15:00+0000\n"
"PO-Revision-Date: 2024-05-23 14:03+0000\n"
"Last-Translator: Charlie Lundberg <charlieblundberg@gmail.com>\n"
"Language-Team: Swedish <https://translate.pretix.eu/projects/pretix/pretix/"
"sv/>\n"
@@ -4346,16 +4346,12 @@ msgid ""
"You need to either set a minimum number of matching products or a minimum "
"value."
msgstr ""
"Du kan antingen ställa in ett minsta antal matchande produkter eller ett "
"lägsta värde, inte båda."
#: pretix/base/models/discount.py:206
msgid ""
"You cannot apply the discount only to some of the matched products if you "
"are matching on a minimum value."
msgstr ""
"Du kan inte tillämpa rabatten endast på vissa av de matchade produkterna om "
"du matchar på ett minimivärde."
#: pretix/base/models/discount.py:212
msgid ""
@@ -4612,7 +4608,7 @@ msgstr "Fullständigt namn"
#: pretix/base/models/event.py:1690
#: pretix/control/templates/pretixcontrol/organizers/properties.html:40
msgid "Can be used for filtering"
msgstr "Kan användas för filtrering"
msgstr ""
#: pretix/base/models/event.py:1691
msgid ""
@@ -4620,9 +4616,6 @@ msgid ""
"can also be used for hidden filter parameters in the frontend (e.g. using "
"the widget)."
msgstr ""
"Det här fältet kommer att visas för att filtrera händelser eller rapporter i "
"backend, och det kan också användas för dolda filterparametrar i frontend ("
"t.ex. med hjälp av widgeten)."
#: pretix/base/models/event.py:1701
msgid "A property can either be required or have a default value, not both."
@@ -4637,7 +4630,7 @@ msgstr "Text (flera rader)"
#: pretix/base/models/event.py:1784 pretix/base/models/organizer.py:497
msgid "Link URL"
msgstr "Länk-URL"
msgstr ""
#: pretix/base/models/exports.py:42 pretix/control/navigation.py:227
#: pretix/control/navigation.py:636
@@ -4684,7 +4677,7 @@ msgstr ""
#: pretix/plugins/sendmail/forms.py:58 pretix/plugins/sendmail/forms.py:78
#: pretix/plugins/sendmail/models.py:233
msgid "Message"
msgstr "Meddelande"
msgstr ""
#: pretix/base/models/exports.py:85
#, fuzzy
@@ -4694,7 +4687,7 @@ msgstr "events start tid"
#: pretix/base/models/exports.py:86
msgid "The actual start time might be delayed depending on system load."
msgstr "Den faktiska starttiden kan vara försenad beroende på systembelastning."
msgstr ""
#: pretix/base/models/fields.py:33
msgid "No value can contain the delimiter character."
@@ -4720,7 +4713,7 @@ msgstr "Speciella villkor"
#: pretix/base/models/giftcards.py:219 pretix/base/models/giftcards.py:223
msgid "Manual transaction"
msgstr "Manuell transaktion"
msgstr ""
#: pretix/base/models/invoices.py:185
#, python-format
@@ -4803,7 +4796,7 @@ msgstr "Kund"
#: pretix/base/models/items.py:375
msgid "Dynamic validity"
msgstr "Dynamisk giltighet"
msgstr ""
#: pretix/base/models/items.py:381 pretix/control/forms/item.py:605
#: pretix/control/templates/pretixcontrol/subevents/fragment_unavail_mode_indicator.html:3
@@ -4815,7 +4808,7 @@ msgstr "Denna produkt är just nu inte tillgänglig."
#: pretix/base/models/items.py:382
#: pretix/control/templates/pretixcontrol/subevents/fragment_unavail_mode_indicator.html:5
msgid "Show info text if unavailable"
msgstr "Visa infotext om den inte är tillgänglig"
msgstr ""
#: pretix/base/models/items.py:389 pretix/base/models/items.py:703
msgid "Don't use re-usable media, use regular one-off tickets"
@@ -4823,15 +4816,15 @@ msgstr ""
#: pretix/base/models/items.py:390
msgid "Require an existing medium to be re-used"
msgstr "Kräv att ett befintligt medium återanvänds"
msgstr ""
#: pretix/base/models/items.py:391
msgid "Require a previously unknown medium to be newly added"
msgstr "Kräv att ett tidigare okänt medium läggs till nyligen"
msgstr ""
#: pretix/base/models/items.py:392
msgid "Require either an existing or a new medium to be used"
msgstr "Kräv att antingen ett befintligt eller ett nytt medium ska användas"
msgstr ""
#: pretix/base/models/items.py:408 pretix/base/models/items.py:1363
#: pretix/control/templates/pretixcontrol/items/index.html:40
@@ -4885,9 +4878,6 @@ msgid ""
"can choose a lower value, but not lower than the price this product would "
"have without the free price option."
msgstr ""
"Detta pris kommer att användas som standardvärde för inmatningsfältet. "
"Användaren kan välja ett lägre värde, men inte lägre än det pris som denna "
"produkt skulle ha utan det fria prisalternativet."
#: pretix/base/models/items.py:459
#, fuzzy
@@ -5065,8 +5055,6 @@ msgid ""
"This text will be shown by the check-in app if a ticket of this type is "
"scanned."
msgstr ""
"Denna text kommer att visas av incheckningsappen om en biljett av denna typ "
"skannas."
#: pretix/base/models/items.py:598 pretix/base/models/items.py:1083
msgid ""
@@ -5136,15 +5124,6 @@ msgid ""
"change the settings here later, existing tickets will not be affected by the "
"change but keep their current validity."
msgstr ""
"När du ställer in en vanlig händelse, eller en händelseserie med tidsluckor, "
"behöver du vanligtvis INTE ändra detta värde. Standardinställningen innebär "
"att giltighetstiden för biljetter inte bestäms av produkten, utan av "
"evenemanget och incheckningskonfigurationen. Använd bara de andra "
"alternativen om du behöver dem för att realisera t.ex. en bokning av en "
"årsbiljett med ett dynamiskt startdatum. Observera att giltigheten kommer "
"att lagras med biljetten, så om du ändrar inställningarna här senare kommer "
"befintliga biljetter inte att påverkas av ändringen utan behålla sin "
"nuvarande giltighet."
#: pretix/base/models/items.py:660 pretix/control/forms/item.py:668
#, fuzzy
@@ -5166,23 +5145,23 @@ msgstr "minuter"
#: pretix/base/models/items.py:668
msgid "Hours"
msgstr "Timmar"
msgstr ""
#: pretix/base/models/items.py:672
msgid "Days"
msgstr "Dagar"
msgstr ""
#: pretix/base/models/items.py:676
msgid "Months"
msgstr "Månader"
msgstr ""
#: pretix/base/models/items.py:679
msgid "Customers can select the validity start date"
msgstr "Kunder kan välja startdatum för giltigheten"
msgstr ""
#: pretix/base/models/items.py:680
msgid "If not selected, the validity always starts at the time of purchase."
msgstr "Om ej valt börjar giltigheten alltid vid köptillfället."
msgstr ""
#: pretix/base/models/items.py:685
#, fuzzy
@@ -5192,11 +5171,11 @@ msgstr "Maximalt antal"
#: pretix/base/models/items.py:686
msgid "The selected start date may only be this many days in the future."
msgstr "Det valda startdatumet kan bara vara så här många dagar i framtiden."
msgstr ""
#: pretix/base/models/items.py:692
msgid "Reusable media policy"
msgstr "Återanvändbar mediepolicy"
msgstr ""
#: pretix/base/models/items.py:694
msgid ""
@@ -5207,12 +5186,6 @@ msgid ""
"feature that also requires specific configuration of ticketing and printing "
"settings."
msgstr ""
"Om denna produkt ska lagras på ett återanvändbart fysiskt medium kan du "
"bifoga en policy för fysiskt media. Detta krävs inte för vanliga biljetter, "
"som bara använder en engångs-streckkod, utan endast för produkter som "
"förnybara säsongsbiljetter eller laddningsbara presentkort-armband. Detta är "
"en avancerad funktion som också kräver specifik konfiguration av biljett- "
"och utskriftsinställningar."
#: pretix/base/models/items.py:704
msgid "Reusable media type"
@@ -6739,7 +6712,7 @@ msgstr ""
#: pretix/base/notifications.py:288
#, python-brace-format
msgid "Order {order.code} has been overpaid."
msgstr "Order {order.code} har blivit överbetald."
msgstr ""
#: pretix/base/notifications.py:294
#, python-brace-format
@@ -6748,39 +6721,36 @@ msgstr ""
#: pretix/base/notifications.py:299
msgid "Refund requested"
msgstr "Återbetalning begärd"
msgstr ""
#: pretix/base/notifications.py:300
#, python-brace-format
msgid "You have been requested to issue a refund for {order.code}."
msgstr "Du har blivit ombedd att utfärda en återbetalning för {order.code}."
msgstr ""
#: pretix/base/payment.py:87
msgctxt "payment"
msgid "Apple Pay"
msgstr "Apple Pay"
msgstr ""
#: pretix/base/payment.py:88
#, fuzzy
msgctxt "payment"
msgid "Google Pay"
msgstr "Google Pay"
msgstr ""
#: pretix/base/payment.py:257
#: pretix/presale/templates/pretixpresale/event/order.html:115
msgid "Pay now"
msgstr "Betala nu"
msgstr ""
#: pretix/base/payment.py:331
msgid "Enable payment method"
msgstr "Aktivera betalningsmetod"
msgstr ""
#: pretix/base/payment.py:337
msgid ""
"Users will not be able to choose this payment provider after the given date."
msgstr ""
"Användare kommer inte att kunna välja denna betalningsleverantör efter det "
"angivna datumet."
#: pretix/base/payment.py:343
#, fuzzy
@@ -6791,7 +6761,7 @@ msgstr "Den här produkten kommer inte säljas innan angivet datum."
#: pretix/base/payment.py:348
msgid "Minimum order total"
msgstr "Minsta ordersumma"
msgstr ""
#: pretix/base/payment.py:349
msgid ""
@@ -6799,14 +6769,10 @@ msgid ""
"exceeds the given value. The order total for this purpose may be computed "
"without taking the fees imposed by this payment method into account."
msgstr ""
"Denna betalning kommer endast att vara tillgänglig om ordersumman är lika "
"med eller överstiger det angivna värdet. Ordersumman för detta ändamål kan "
"komma att beräknas utan att ta hänsyn till de avgifter som tas ut av denna "
"betalningsmetod."
#: pretix/base/payment.py:359
msgid "Maximum order total"
msgstr "Maximal ordersumma"
msgstr ""
#: pretix/base/payment.py:360
msgid ""
@@ -6814,26 +6780,22 @@ msgid ""
"the given value. The order total for this purpose may be computed without "
"taking the fees imposed by this payment method into account."
msgstr ""
"Denna betalning kommer endast att vara tillgänglig om ordersumman är lika "
"med eller under det angivna värdet. Ordersumman för detta ändamål kan komma "
"att beräknas utan att ta hänsyn till de avgifter som tas ut av denna "
"betalningsmetod."
#: pretix/base/payment.py:370 pretix/base/payment.py:379
msgid "Additional fee"
msgstr "Extra avgift"
msgstr ""
#: pretix/base/payment.py:371
msgid "Absolute value"
msgstr "Absolutvärde"
msgstr ""
#: pretix/base/payment.py:380
msgid "Percentage of the order total."
msgstr "Andel av ordersumman."
msgstr ""
#: pretix/base/payment.py:386
msgid "Calculate the fee from the total value including the fee."
msgstr "Beräkna avgiften från det totala värdet inklusive avgiften."
msgstr ""
#: pretix/base/payment.py:387
#, python-brace-format
@@ -6843,14 +6805,10 @@ msgid ""
"rel=\"noopener\">Click here for detailed information on what this does.</a> "
"Don't forget to set the correct fees above!"
msgstr ""
"Vi rekommenderar att du aktiverar detta om du vill att dina användare ska "
"betala betalningsavgifterna från din betalningsleverantör. <a href=\""
"{docs_url}\" target=\"_blank\" rel=\"noopener\">Klicka här för detaljerad "
"information om vad detta gör.</a> Glöm inte att ange rätt avgifter ovan!"
#: pretix/base/payment.py:395
msgid "Text on invoices"
msgstr "Text på fakturor"
msgstr ""
#: pretix/base/payment.py:396
msgid ""
@@ -6859,14 +6817,10 @@ msgid ""
"order is paid. If the invoice is generated later, it will show a text "
"stating that it has already been paid."
msgstr ""
"Kommer att skrivas ut precis under betalningssiffrorna och ovanför "
"sluttexten på fakturor. Detta kommer endast att användas om fakturan "
"genereras innan beställningen betalas. Om fakturan genereras senare kommer "
"den att visa en text om att den redan är betald."
#: pretix/base/payment.py:405
msgid "Restrict to countries"
msgstr "Begränsa till länder"
msgstr ""
#: pretix/base/payment.py:407
msgid ""
@@ -6986,10 +6940,6 @@ msgid ""
"It should instruct the user on how to proceed with the payment. You can use "
"the placeholders {order}, {amount}, {currency} and {amount_with_currency}."
msgstr ""
"Denna text kommer att visas på orderbekräftelsesidan för väntande "
"beställningar. Den bör instruera användaren om hur man går vidare med "
"betalningen. Du kan använda platshållarna {order}, {amount}, {currency} och "
"{amount_with_currency}."
#: pretix/base/payment.py:1209 pretix/plugins/banktransfer/payment.py:151
msgid ""
@@ -6999,16 +6949,16 @@ msgstr ""
#: pretix/base/payment.py:1260
msgid "Offsetting"
msgstr "Förskjutning"
msgstr ""
#: pretix/base/payment.py:1274 pretix/control/views/orders.py:1244
msgid "You entered an order that could not be found."
msgstr "Du angav en beställning som inte kunde hittas."
msgstr ""
#: pretix/base/payment.py:1303
#, python-format
msgid "Balanced against orders: %s"
msgstr "Balanserat mot order: %s"
msgstr ""
#: pretix/base/payment.py:1329
#, fuzzy
@@ -7018,27 +6968,27 @@ msgstr "Betalnings metod"
#: pretix/base/payment.py:1346
msgid "In test mode, only test cards will work."
msgstr "I testläge fungerar endast testkort."
msgstr ""
#: pretix/base/payment.py:1428 pretix/base/payment.py:1479
#: pretix/base/payment.py:1522
msgid "You cannot pay with gift cards when buying a gift card."
msgstr "Du kan inte betala med presentkort vid köp av presentkort."
msgstr ""
#: pretix/base/payment.py:1437 pretix/base/payment.py:1487
#: pretix/base/payment.py:1532 pretix/base/payment.py:1534
msgid "This gift card does not support this currency."
msgstr "Detta presentkort stöder inte denna valuta."
msgstr ""
#: pretix/base/payment.py:1440 pretix/base/payment.py:1490
#: pretix/base/payment.py:1540
msgid "This gift card can only be used in test mode."
msgstr "Detta presentkort kan endast användas i testläge."
msgstr ""
#: pretix/base/payment.py:1443 pretix/base/payment.py:1493
#: pretix/base/payment.py:1542
msgid "Only test gift cards can be used in test mode."
msgstr "Endast testpresentkort kan användas i testläge."
msgstr ""
#: pretix/base/payment.py:1446 pretix/base/payment.py:1496
#: pretix/base/payment.py:1544
@@ -7049,35 +6999,31 @@ msgstr "Dina ändringar har sparats."
#: pretix/base/payment.py:1449 pretix/base/payment.py:1499
msgid "All credit on this gift card has been used."
msgstr "All kredit på detta presentkort har använts."
msgstr ""
#: pretix/base/payment.py:1454
msgid "This gift card is already used for your payment."
msgstr "Detta presentkort används redan för din betalning."
msgstr ""
#: pretix/base/payment.py:1469 pretix/base/payment.py:1512
msgid ""
"You entered a voucher instead of a gift card. Vouchers can only be entered "
"on the first page of the shop below the product selection."
msgstr ""
"Du angav en kupong istället för ett presentkort. Kuponger kan endast anges "
"på första sidan i butiken under produkturvalet."
#: pretix/base/payment.py:1472 pretix/base/payment.py:1515
msgid "This gift card is not known."
msgstr "Detta presentkort är inte känt."
msgstr ""
#: pretix/base/payment.py:1474 pretix/base/payment.py:1517
msgid ""
"This gift card can not be redeemed since its code is not unique. Please "
"contact the organizer of this event."
msgstr ""
"Detta presentkort kan inte lösas in eftersom dess kod inte är unik. Kontakta "
"arrangören av detta evenemang."
#: pretix/base/payment.py:1536
msgid "This gift card is not accepted by this event organizer."
msgstr "Detta presentkort accepteras inte av denna arrangör."
msgstr ""
#: pretix/base/payment.py:1538
#, fuzzy
@@ -7090,11 +7036,11 @@ msgstr ""
#: pretix/base/pdf.py:96
msgid "Ticket code (barcode content)"
msgstr "Biljettkod (streckkodsinnehåll)"
msgstr ""
#: pretix/base/pdf.py:108
msgid "Order position number"
msgstr "Orderpositionsnummer"
msgstr ""
#: pretix/base/pdf.py:116
#, fuzzy
@@ -7105,11 +7051,11 @@ msgstr "Beställningsrad"
#: pretix/base/pdf.py:122 pretix/base/services/tickets.py:100
#: pretix/control/views/event.py:795 pretix/control/views/pdf.py:94
msgid "Sample product"
msgstr "Exempelprodukt"
msgstr ""
#: pretix/base/pdf.py:126
msgid "Variation name"
msgstr "Variationsnamn"
msgstr ""
#: pretix/base/pdf.py:127
msgid "Sample variation"
@@ -7263,18 +7209,16 @@ msgstr ""
#: pretix/base/pdf.py:253 pretix/base/pdf.py:279 pretix/base/pdf.py:388
#: pretix/base/pdf.py:412 pretix/base/pdf.py:436 pretix/base/pdf.py:460
#: pretix/base/pdf.py:517 pretix/base/pdf.py:522
#, fuzzy
msgid "2017-05-31"
msgstr "2017-05-31"
msgstr ""
#: pretix/base/pdf.py:260
msgid "Event begin time"
msgstr "Eventets starttid"
msgstr ""
#: pretix/base/pdf.py:261
#, fuzzy
msgid "20:00"
msgstr "20:00"
msgstr ""
#: pretix/base/pdf.py:265
#, fuzzy
@@ -7285,20 +7229,19 @@ msgstr "Evenemangets slutdatum"
#: pretix/base/pdf.py:266 pretix/base/pdf.py:295
#: pretix/base/services/checkin.py:362 pretix/control/forms/filter.py:1160
msgid "Friday"
msgstr "Fredag"
msgstr ""
#: pretix/base/pdf.py:270
msgid "Event end date and time"
msgstr "Eventets slutdatum och tid"
msgstr ""
#: pretix/base/pdf.py:271
msgid "2017-05-31 22:00"
msgstr "2017-05-31 22:00"
msgstr ""
#: pretix/base/pdf.py:287
#, fuzzy
msgid "22:00"
msgstr "22:00"
msgstr ""
#: pretix/base/pdf.py:294
#, fuzzy
@@ -7308,49 +7251,45 @@ msgstr "Evenemangets slutdatum"
#: pretix/base/pdf.py:299
msgid "Event admission date and time"
msgstr "Datum och tid för tillträde till evenemanget"
msgstr ""
#: pretix/base/pdf.py:300 pretix/base/pdf.py:396 pretix/base/pdf.py:420
#: pretix/base/pdf.py:444 pretix/base/pdf.py:468 pretix/base/pdf.py:511
#, fuzzy
msgid "2017-05-31 19:00"
msgstr "2017-05-31 19:00"
msgstr ""
#: pretix/base/pdf.py:307
msgid "Event admission time"
msgstr "Tillträdestid för evenemang"
msgstr ""
#: pretix/base/pdf.py:308 pretix/base/pdf.py:404 pretix/base/pdf.py:428
#: pretix/base/pdf.py:452 pretix/base/pdf.py:476
#, fuzzy
msgid "19:00"
msgstr "19:00"
msgstr ""
#: pretix/base/pdf.py:315
msgid "Event location"
msgstr "Eventplats"
msgstr ""
#: pretix/base/pdf.py:316 pretix/base/settings.py:1118
msgid "Random City"
msgstr "Slumpmässig stad"
msgstr ""
#: pretix/base/pdf.py:335
msgid "Invoice address company"
msgstr "Fakturaadress företag"
msgstr ""
#: pretix/base/pdf.py:341
#, fuzzy
msgid "Sesame Street 42"
msgstr "Sesame Street 42"
msgstr ""
#: pretix/base/pdf.py:346
#, fuzzy
msgid "12345"
msgstr "12345"
msgstr ""
#: pretix/base/pdf.py:351 pretix/base/services/invoices.py:473
msgid "Sample city"
msgstr "Teststad"
msgstr ""
#: pretix/base/pdf.py:355
#, fuzzy
@@ -7366,21 +7305,18 @@ msgid "Sample State"
msgstr "Välj region"
#: pretix/base/pdf.py:361
#, fuzzy
msgid "Atlantis"
msgstr "Atlantis"
msgstr ""
#: pretix/base/pdf.py:365
msgid "List of Add-Ons"
msgstr "Lista över tillägg"
msgstr ""
#: pretix/base/pdf.py:366
msgid ""
"Add-on 1\n"
"2x Add-on 2"
msgstr ""
"Tillägg 1\n"
"2x tillägg 2"
#: pretix/base/pdf.py:372 pretix/control/forms/filter.py:1301
#: pretix/control/forms/filter.py:1303
@@ -7570,7 +7506,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/checkin/checkins.html:66
#: pretix/plugins/ticketoutputpdf/ticketoutput.py:113
msgid "Ticket"
msgstr "Biljett"
msgstr ""
#: pretix/base/pdf.py:1156
#, fuzzy
@@ -7592,47 +7528,45 @@ msgstr "Tillträde till evenemang"
#: pretix/base/reldate.py:38
msgid "Presale start"
msgstr "Förköpsperiod startar"
msgstr ""
#: pretix/base/reldate.py:39
msgid "Presale end"
msgstr "Förköpsperiod slutar"
msgstr ""
#: pretix/base/reldate.py:183
msgid "before"
msgstr "före"
msgstr ""
#: pretix/base/reldate.py:184
msgid "after"
msgstr "efter"
msgstr ""
#: pretix/base/reldate.py:231 pretix/base/reldate.py:359
msgid "Fixed date:"
msgstr "Fixerat datum:"
msgstr ""
#: pretix/base/reldate.py:232 pretix/base/reldate.py:360
msgid "Relative date:"
msgstr "Relativt datum:"
msgstr ""
#: pretix/base/reldate.py:233
msgid "Relative time:"
msgstr "Relativ tid:"
msgstr ""
#: pretix/base/reldate.py:241 pretix/base/reldate.py:363
msgid "Not set"
msgstr "Inte inställt"
msgstr ""
#: pretix/base/secrets.py:119
msgid "Random (default, works with all pretix apps)"
msgstr "Slumpmässig (standard, fungerar med alla pretix-appar)"
msgstr ""
#: pretix/base/secrets.py:150
msgid ""
"pretix signature scheme 1 (for very large events, changes semantics of "
"offline scanning please refer to documentation or support for details)"
msgstr ""
"pretix signaturschema 1 (för mycket stora events, ändrar semantik för "
"offline-skanning se dokumentation eller support för detaljer)"
#: pretix/base/services/cancelevent.py:229
#: pretix/base/services/cancelevent.py:287
@@ -7753,28 +7687,24 @@ msgid ""
"The booking period for this event has not yet started. The affected "
"positions have been removed from your cart."
msgstr ""
"Bokningsperioden för detta evenemang har ännu inte börjat. De berörda "
"produkterna har tagits bort från din kundvagn."
#: pretix/base/services/cart.py:152 pretix/base/services/orders.py:182
msgid ""
"The booking period for one of the events in your cart has ended. The "
"affected positions have been removed from your cart."
msgstr ""
"Bokningsperioden för ett av evenemangen i din varukorg har gått ut. De "
"berörda platserna har tagits bort från din kundvagn."
#: pretix/base/services/cart.py:154
msgid "The entered price is not a number."
msgstr "Det angivna priset är inte en siffra."
msgstr ""
#: pretix/base/services/cart.py:155
msgid "The entered price is to high."
msgstr "Det angivna priset är för högt."
msgstr ""
#: pretix/base/services/cart.py:156
msgid "This voucher code is not known in our database."
msgstr "Denna kupongkod är inte känd i vår databas."
msgstr ""
#: pretix/base/services/cart.py:158 pretix/base/services/orders.py:157
#, python-format
@@ -7785,11 +7715,7 @@ msgid_plural ""
"The voucher code \"%(voucher)s\" can only be used if you select at least "
"%(number)s matching products."
msgstr[0] ""
"Verifikationskoden \"%(voucher)s\" kan endast användas om du väljer minst "
"%(number)s matchande produkter."
msgstr[1] ""
"Verifikationskoderna \"%(voucher)s\" kan endast användas om du väljer minst "
"%(number)s matchande produkter."
#: pretix/base/services/cart.py:163
#, python-format
@@ -7802,18 +7728,12 @@ msgid_plural ""
"%(number)s matching products. We have therefore removed some positions from "
"your cart that can no longer be purchased like this."
msgstr[0] ""
"Verifikationskoden \"%(voucher)s\" kan endast användas om du väljer minst "
"%(number)s matchande produkter. Vi har därför tagit bort några positioner "
"från din varukorg som inte längre går att köpa så här."
msgstr[1] ""
"Verifikationskoderna \"%(voucher)s\" kan endast användas om du väljer minst "
"%(number)s matchande produkter. Vi har därför tagit bort några positioner "
"från din varukorg som inte längre går att köpa så här."
#: pretix/base/services/cart.py:169
msgid ""
"This voucher code has already been used the maximum number of times allowed."
msgstr "Denna kupongkod har redan använts det maximala antalet tillåtna gånger."
msgstr ""
#: pretix/base/services/cart.py:171
#, python-format
@@ -7823,10 +7743,6 @@ msgid ""
"or that you tried to redeem it before but did not complete the checkout "
"process. You can try to use it again in %d minutes."
msgstr ""
"Denna kupongkod är för närvarande låst eftersom den redan finns i en "
"kundvagn. Det kan betyda att någon annan löser in den här kupongen just nu, "
"eller att du försökte lösa in den tidigare men inte slutförde "
"utcheckningsprocessen. Du kan försöka använda den igen om %d minuter."
#: pretix/base/services/cart.py:176
#, python-format
@@ -7882,15 +7798,15 @@ msgstr ""
#: pretix/base/services/cart.py:194
msgctxt "subevent"
msgid "The selected event date is not active."
msgstr "Det valda händelsedatumet är inte aktivt."
msgstr ""
#: pretix/base/services/cart.py:195 pretix/base/services/orders.py:189
msgid "You can not select an add-on for the selected product."
msgstr "Du kan inte välja ett tillägg för den valda produkten."
msgstr ""
#: pretix/base/services/cart.py:196 pretix/base/services/orders.py:190
msgid "You can not select two variations of the same add-on product."
msgstr "Du kan inte välja två varianter av samma tilläggsprodukt."
msgstr ""
#: pretix/base/services/cart.py:198 pretix/base/services/orders.py:192
#, python-format
@@ -7901,11 +7817,7 @@ msgid_plural ""
"You can select at most %(max)s add-ons from the category %(cat)s for the "
"product %(base)s."
msgstr[0] ""
"Du kan välja högst %(max)s tillägg från kategorin %(cat)s för produkten "
"%(base)s."
msgstr[1] ""
"Du kan välja högst %(max)s tillägg från kategorin %(cat)s för produkterna "
"%(base)s."
#: pretix/base/services/cart.py:203 pretix/base/services/orders.py:197
#, fuzzy, python-format
@@ -7941,15 +7853,15 @@ msgstr ""
#: pretix/base/services/cart.py:209
msgid "One of the products you selected can only be bought part of a bundle."
msgstr "En av de produkter du valt kan endast köpas som en del av ett paket."
msgstr ""
#: pretix/base/services/cart.py:211
msgid "Please select a valid seat."
msgstr "Välj en giltig plats."
msgstr ""
#: pretix/base/services/cart.py:212
msgid "You can not select a seat for this position."
msgstr "Du kan inte välja en plats för denna plats."
msgstr ""
#: pretix/base/services/cart.py:214
msgid "You can not select the same seat multiple times."
@@ -8000,7 +7912,7 @@ msgstr "Försäljningen har inte påbörjats"
#: pretix/base/services/checkin.py:289
msgid "Wrong entrance gate"
msgstr "Fel ingång/entre"
msgstr ""
#: pretix/base/services/checkin.py:313
#, fuzzy

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-24 08:47+0000\n"
"PO-Revision-Date: 2024-06-01 01:00+0000\n"
"Last-Translator: Luan Thien <vanthienluan@gmail.com>\n"
"PO-Revision-Date: 2022-04-25 16:10+0000\n"
"Last-Translator: fsnaix <truonggiangsn@gmail.com>\n"
"Language-Team: Vietnamese <https://translate.pretix.eu/projects/pretix/"
"pretix/vi/>\n"
"Language: vi\n"
@@ -17,111 +17,111 @@ 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.5.5\n"
"X-Generator: Weblate 4.11.2\n"
#: pretix/_base_settings.py:78
msgid "English"
msgstr "Tiếng Anh"
msgstr ""
#: pretix/_base_settings.py:79
msgid "German"
msgstr "Tiếng Đức"
msgstr ""
#: pretix/_base_settings.py:80
msgid "German (informal)"
msgstr "Tiếng Đức (thân mật)"
msgstr ""
#: pretix/_base_settings.py:81
msgid "Arabic"
msgstr "Tiếng A-rập"
msgstr ""
#: pretix/_base_settings.py:82
msgid "Chinese (simplified)"
msgstr "Tiếng Trung (giản thể)"
msgstr ""
#: pretix/_base_settings.py:83
msgid "Chinese (traditional)"
msgstr "Tiếng Trung Quốc (phồn thể)"
msgstr ""
#: pretix/_base_settings.py:84
msgid "Czech"
msgstr "Tiếng Séc"
msgstr ""
#: pretix/_base_settings.py:85
msgid "Danish"
msgstr "Tiếng Đan Mạch"
msgstr ""
#: pretix/_base_settings.py:86
msgid "Dutch"
msgstr "Tiếng Hà Lan"
msgstr ""
#: pretix/_base_settings.py:87
msgid "Dutch (informal)"
msgstr "Tiếng Hà Lan (thân mật)"
msgstr ""
#: pretix/_base_settings.py:88
msgid "French"
msgstr "Tiếng Pháp"
msgstr ""
#: pretix/_base_settings.py:89
msgid "Finnish"
msgstr "Tiếng Phần Lan"
msgstr ""
#: pretix/_base_settings.py:90
msgid "Galician"
msgstr "Tiếng Galician"
msgstr ""
#: pretix/_base_settings.py:91
msgid "Greek"
msgstr "Tiếng Hy Lạp"
msgstr ""
#: pretix/_base_settings.py:92
msgid "Indonesian"
msgstr "Tiếng Indonesia"
msgstr ""
#: pretix/_base_settings.py:93
msgid "Italian"
msgstr "Tiếng Ý"
msgstr ""
#: pretix/_base_settings.py:94
msgid "Latvian"
msgstr "Tiếng Latvia"
msgstr ""
#: pretix/_base_settings.py:95
msgid "Norwegian Bokmål"
msgstr "Tiếng Na Uy"
msgstr ""
#: pretix/_base_settings.py:96
msgid "Polish"
msgstr "Tiếng Ba Lan"
msgstr ""
#: pretix/_base_settings.py:97
msgid "Portuguese (Portugal)"
msgstr "Tiếng Bồ Đào Nha"
msgstr ""
#: pretix/_base_settings.py:98
msgid "Portuguese (Brazil)"
msgstr "Tiếng Bồ Đào Nha (Brazil)"
msgstr ""
#: pretix/_base_settings.py:99
msgid "Romanian"
msgstr "Tiếng Ru-ma-ni"
msgstr ""
#: pretix/_base_settings.py:100
msgid "Russian"
msgstr "Tiếng Nga"
msgstr ""
#: pretix/_base_settings.py:101
msgid "Spanish"
msgstr "Tiếng Tây Ban Nha"
msgstr ""
#: pretix/_base_settings.py:102
msgid "Turkish"
msgstr "Tiếng Thổ Nhĩ Kỳ"
msgstr ""
#: pretix/_base_settings.py:103
msgid "Ukrainian"
msgstr "Tiếng Ukrainian"
msgstr ""
#: pretix/api/auth/devicesecurity.py:31
msgid ""
@@ -203,7 +203,7 @@ msgstr "Giới hạn cho sự kiện"
#: pretix/plugins/banktransfer/refund_export.py:46
#: pretix/plugins/checkinlists/exporters.py:509
msgid "Comment"
msgstr "Bình luận"
msgstr ""
#: pretix/api/serializers/cart.py:168 pretix/api/serializers/order.py:1349
msgid "The product \"{}\" is not assigned to a quota."
@@ -212,7 +212,7 @@ msgstr "Mặt hàng \"{}\" chưa được chỉ định số hàng tồn."
#: pretix/api/serializers/checkin.py:66 pretix/base/models/event.py:1622
#: pretix/base/models/items.py:1822 pretix/base/models/items.py:2080
msgid "One or more items do not belong to this event."
msgstr "Một hoặc một vài mục không thuộc sự kiện này."
msgstr ""
#: pretix/api/serializers/checkin.py:70 pretix/api/serializers/checkin.py:73
#: pretix/base/models/items.py:2091 pretix/base/models/items.py:2094
@@ -233,23 +233,23 @@ msgstr ""
#: pretix/api/serializers/event.py:232 pretix/api/serializers/event.py:531
#, python-brace-format
msgid "Meta data property '{name}' does not exist."
msgstr "Thuộc tính '{name}' không tồn tại."
msgstr ""
#: pretix/api/serializers/event.py:235 pretix/api/serializers/event.py:534
#, python-brace-format
msgid "Meta data property '{name}' does not allow value '{value}'."
msgstr "Thuộc tính '{name}' không chấp nhận giá trị '{value}'"
msgstr ""
#: pretix/api/serializers/event.py:278
#, python-brace-format
msgid "Unknown plugin: '{name}'."
msgstr "Không có plugin: '{name}'."
msgstr ""
#: pretix/api/serializers/item.py:75 pretix/api/serializers/item.py:125
#: pretix/api/serializers/item.py:327
#, python-brace-format
msgid "Item meta data property '{name}' does not exist."
msgstr "Không tồn tại mục chứa thuộc tính '{name}'."
msgstr ""
#: pretix/api/serializers/item.py:184 pretix/control/forms/item.py:1207
msgid "The bundled item must not be the same item as the bundling one."
@@ -407,7 +407,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/event/mail.html:114
#: pretix/control/views/orders.py:1549
msgid "Order canceled"
msgstr "Đã huỷ đơn hàng"
msgstr ""
#: pretix/api/webhooks.py:242 pretix/base/notifications.py:257
msgid "Order reactivated"
@@ -969,7 +969,7 @@ msgstr ""
#: pretix/plugins/checkinlists/exporters.py:806
#: pretix/plugins/checkinlists/exporters.py:807
msgid "Yes"
msgstr ""
msgstr ""
#: pretix/base/exporters/customers.py:100
#: pretix/base/exporters/customers.py:101 pretix/base/exporters/events.py:83
@@ -992,7 +992,7 @@ msgstr "Có"
#: pretix/plugins/checkinlists/exporters.py:806
#: pretix/plugins/checkinlists/exporters.py:807
msgid "No"
msgstr "Không"
msgstr ""
#: pretix/base/exporters/dekodi.py:42 pretix/base/exporters/invoices.py:66
msgctxt "export_category"
@@ -2081,7 +2081,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:11
#: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:45
msgid "Product"
msgstr "Sản phẩm"
msgstr ""
#: pretix/base/exporters/orderlist.py:578
#: pretix/base/exporters/orderlist.py:583 pretix/base/forms/questions.py:655
@@ -2433,7 +2433,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/event/cancel.html:20
#: pretix/control/views/item.py:949
msgid "Paid orders"
msgstr "Đơn hàng đã thanh toán"
msgstr ""
#: pretix/base/exporters/orderlist.py:1106 pretix/control/views/item.py:954
msgid "Pending orders"
@@ -2590,7 +2590,7 @@ msgstr ""
#: pretix/plugins/reports/accountingreport.py:104
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_list.html:67
msgid "All"
msgstr "Tất cả"
msgstr ""
#: pretix/base/exporters/orderlist.py:1278 pretix/control/forms/filter.py:1343
msgid "Live"
@@ -3310,7 +3310,7 @@ msgstr ""
#: pretix/base/modelimport_vouchers.py:205 pretix/base/models/items.py:1163
#: pretix/base/models/vouchers.py:263 pretix/base/models/waitinglist.py:99
msgid "Product variation"
msgstr "Biến thể sản phẩm"
msgstr ""
#: pretix/base/modelimport_orders.py:160
#: pretix/base/modelimport_vouchers.py:225
@@ -3693,19 +3693,19 @@ msgstr ""
#: pretix/base/models/checkin.py:341
msgid "Entry"
msgstr "Vào"
msgstr ""
#: pretix/base/models/checkin.py:342
msgid "Exit"
msgstr "Ra"
msgstr ""
#: pretix/base/models/checkin.py:360
msgid "Unknown ticket"
msgstr "Không nhận ra vé"
msgstr ""
#: pretix/base/models/checkin.py:361
msgid "Ticket not paid"
msgstr "Vé chưa thanh toán"
msgstr ""
#: pretix/base/models/checkin.py:362
msgid "Forbidden by custom rule"
@@ -3713,23 +3713,23 @@ msgstr ""
#: pretix/base/models/checkin.py:363
msgid "Ticket code revoked/changed"
msgstr "Mã vé đã bị thu hồi / thay đổi"
msgstr ""
#: pretix/base/models/checkin.py:364
msgid "Information required"
msgstr "Thông tin được yêu cầu"
msgstr ""
#: pretix/base/models/checkin.py:365
msgid "Ticket already used"
msgstr "Vé đã được sử dụng"
msgstr ""
#: pretix/base/models/checkin.py:366
msgid "Ticket type not allowed here"
msgstr "Loại vé không được chấp nhập ở đây"
msgstr ""
#: pretix/base/models/checkin.py:367
msgid "Ticket code is ambiguous on list"
msgstr "Mã vé không rõ ràng trong danh sách"
msgstr ""
#: pretix/base/models/checkin.py:368
msgid "Server error"
@@ -3737,15 +3737,15 @@ msgstr ""
#: pretix/base/models/checkin.py:369
msgid "Ticket blocked"
msgstr "Vé đã bị khoá"
msgstr ""
#: pretix/base/models/checkin.py:370
msgid "Order not approved"
msgstr "Đơn hàng không được chấp nhận"
msgstr ""
#: pretix/base/models/checkin.py:371
msgid "Ticket not valid at this time"
msgstr "Vé không hợp lệ tại thời điểm này"
msgstr ""
#: pretix/base/models/customers.py:55
msgid "Provider name"
@@ -3844,7 +3844,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/gates.html:16
#: pretix/plugins/checkinlists/exporters.py:754
msgid "Gate"
msgstr "Cổng"
msgstr ""
#: pretix/base/models/devices.py:132
#: pretix/control/templates/pretixcontrol/organizers/devices.html:83
@@ -5225,7 +5225,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:30
#: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:78
msgid "Canceled"
msgstr "Đã huỷ"
msgstr ""
#: pretix/base/models/memberships.py:134
#: pretix/control/templates/pretixcontrol/organizers/customer.html:115
@@ -5742,7 +5742,7 @@ msgstr ""
#: pretix/base/models/vouchers.py:201 pretix/control/views/vouchers.py:119
msgid "Redeemed"
msgstr "Đã đổi"
msgstr ""
#: pretix/base/models/vouchers.py:206
msgid ""
@@ -6758,15 +6758,15 @@ msgstr ""
#: pretix/base/reldate.py:35
msgid "Event start"
msgstr "Sự kiện bắt đầu"
msgstr ""
#: pretix/base/reldate.py:36
msgid "Event end"
msgstr "Sự kiện kết thúc"
msgstr ""
#: pretix/base/reldate.py:37
msgid "Event admission"
msgstr "Ghi danh sự kiện"
msgstr ""
#: pretix/base/reldate.py:38
msgid "Presale start"
@@ -10554,7 +10554,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:355
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:364
msgid "minutes"
msgstr "phút"
msgstr ""
#: pretix/base/templates/pretixbase/forms/widgets/reldatetime.html:23
msgid "at"
@@ -11785,7 +11785,7 @@ msgstr ""
#: pretix/control/forms/filter.py:1953 pretix/control/forms/filter.py:1955
#: pretix/control/forms/filter.py:2523 pretix/control/forms/filter.py:2525
msgid "Search query"
msgstr "Truy vấn tìm kiếm"
msgstr ""
#: pretix/control/forms/filter.py:1423 pretix/control/forms/filter.py:1496
#: pretix/control/templates/pretixcontrol/organizers/customer.html:45
@@ -11906,7 +11906,7 @@ msgstr ""
#: pretix/control/forms/filter.py:2019
msgid "Valid"
msgstr "Hợp lệ"
msgstr ""
#: pretix/control/forms/filter.py:2020
msgid "Unredeemed"
@@ -14831,7 +14831,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/order_pay_change.html:67
#: pretix/presale/templates/pretixpresale/event/position_change.html:29
msgid "Continue"
msgstr "Tiếp tục"
msgstr ""
#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html:8
msgid "Authorize an application"
@@ -15292,7 +15292,7 @@ msgstr[0] ""
#: pretix/presale/templates/pretixpresale/event/position_change.html:24
#: pretix/presale/templates/pretixpresale/event/position_modify.html:44
msgid "Cancel"
msgstr "Huỷ"
msgstr ""
#: pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html:27
#: pretix/control/templates/pretixcontrol/checkin/list_delete.html:24
@@ -15401,7 +15401,7 @@ msgstr ""
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:14
#: pretix/plugins/checkinlists/exporters.py:755
msgid "Result"
msgstr "Kết quả"
msgstr ""
#: pretix/control/templates/pretixcontrol/checkin/checkins.html:78
#: pretix/control/templates/pretixcontrol/order/index.html:391
@@ -15697,7 +15697,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/checkin/simulator.html:68
msgid "Additional information required"
msgstr "Yêu cầu thông tin bổ sung"
msgstr ""
#: pretix/control/templates/pretixcontrol/checkin/simulator.html:70
msgid ""
@@ -18866,7 +18866,7 @@ msgstr ""
#: pretix/plugins/reports/exporters.py:957
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:449
msgid "Total"
msgstr "Tổng cộng"
msgstr ""
#: pretix/control/templates/pretixcontrol/order/index.html:712
#: pretix/presale/templates/pretixpresale/event/order.html:209
@@ -24712,7 +24712,7 @@ msgstr ""
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:80
msgid "Comment:"
msgstr "Bình luận:"
msgstr ""
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:98
msgid "No order code detected"
@@ -24979,7 +24979,7 @@ msgstr ""
#: pretix/plugins/paypal2/payment.py:136 pretix/plugins/paypal2/payment.py:1063
#: pretix/plugins/paypal2/payment.py:1064 pretix/plugins/stripe/payment.py:1915
msgid "PayPal"
msgstr "PayPal"
msgstr ""
#: pretix/plugins/paypal/apps.py:53
msgid ""
@@ -26430,7 +26430,7 @@ msgstr ""
#: pretix/plugins/stripe/payment.py:339 pretix/plugins/stripe/payment.py:1591
msgid "giropay"
msgstr "giropay"
msgstr ""
#: pretix/plugins/stripe/payment.py:341 pretix/plugins/stripe/payment.py:349
#: pretix/plugins/stripe/payment.py:357 pretix/plugins/stripe/payment.py:365
@@ -26445,7 +26445,7 @@ msgstr ""
#: pretix/plugins/stripe/payment.py:347 pretix/plugins/stripe/payment.py:1627
msgid "iDEAL"
msgstr "iDEAL"
msgstr ""
#: pretix/plugins/stripe/payment.py:355 pretix/plugins/stripe/payment.py:1652
msgid "Alipay"
@@ -26453,11 +26453,11 @@ msgstr ""
#: pretix/plugins/stripe/payment.py:363 pretix/plugins/stripe/payment.py:1664
msgid "Bancontact"
msgstr "Bancontact"
msgstr ""
#: pretix/plugins/stripe/payment.py:371
msgid "SEPA Direct Debit"
msgstr "Ghi nợ trực tiếp SEPA"
msgstr ""
#: pretix/plugins/stripe/payment.py:374
msgid ""
@@ -26485,7 +26485,7 @@ msgstr ""
#: pretix/plugins/stripe/payment.py:398
msgid "SOFORT"
msgstr "SOFORT"
msgstr ""
#: pretix/plugins/stripe/payment.py:401
msgid ""
@@ -27114,7 +27114,7 @@ msgstr ""
#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:23
msgid "Ticket design"
msgstr "Thiết kế vé"
msgstr ""
#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:27
msgid "You can modify the design after you saved this page."
@@ -29650,7 +29650,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/postmessage.html:21
#: pretix/presale/templates/pretixpresale/waiting.html:22
msgid "We are processing your request …"
msgstr "Chúng tôi đang xử lý yêu cầu …"
msgstr ""
#: pretix/presale/utils.py:256 pretix/presale/utils.py:389
#: pretix/presale/utils.py:390
@@ -29956,4 +29956,4 @@ msgstr ""
#: pretix/settings.py:748
msgid "Kosovo"
msgstr "Kosovo"
msgstr ""

View File

@@ -3,84 +3,83 @@
# 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: 2024-05-08 13:19+0000\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"
"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=1; plural=0;\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
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:68
msgid "Marked as paid"
msgstr "Chuyển thành Đã thanh toán"
msgstr ""
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:76
msgid "Comment:"
msgstr "Bình luận:"
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 "Tín dụng PayPal"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39
msgid "Credit Card"
msgstr "Thẻ tín dụng"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40
msgid "PayPal Pay Later"
msgstr "PayPal Pay Later"
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 "Ghi nợ trực tiếp SEPA"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43
msgid "Bancontact"
msgstr "Bancontact"
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"
msgstr "eps"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
msgid "MyBank"
@@ -133,7 +132,7 @@ msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Continue"
msgstr "Tiếp tục"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244
@@ -142,199 +141,199 @@ msgstr "Tiếp tục"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341
msgid "Confirming your payment …"
msgstr "Xác nhận thanh toán…"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:254
msgid "Payment method unavailable"
msgstr "Phương thức thanh toán không khả dụng"
msgstr ""
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:15
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39
msgid "Placed orders"
msgstr "Đặt hàng"
msgstr ""
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:15
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39
msgid "Paid orders"
msgstr "Đơn hàng đã thanh toán"
msgstr ""
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:27
msgid "Total revenue"
msgstr "Tổng doanh thu"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr "Đang kết nối Stripe…"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
msgstr "Tổng cộng"
msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291
msgid "Contacting your bank …"
msgstr "Đang kết nối đến ngân hàng…"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"
msgstr "Chọn một danh sách check-in"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found."
msgstr "Không có danh sách check-in nào đang kích hoạt."
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list"
msgstr "Chuyển danh sách check-in"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results"
msgstr "Kết quả tìm kiếm"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
msgid "No tickets found"
msgstr "Không có vé nào được tìm thấy"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
msgid "Result"
msgstr "Kết quả"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
msgid "This ticket requires special attention"
msgstr "Vé này cần được chú ý đặc biệt"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
msgid "Switch direction"
msgstr "Chuyển hướng"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
msgid "Entry"
msgstr "Vào"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit"
msgstr "Ra"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…"
msgstr "Quét mã vé hoặc tìm kiếm và nhấn Enter…"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more"
msgstr "Tải thêm"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
msgid "Valid"
msgstr "Hợp lệ"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
msgid "Unpaid"
msgstr "Chưa thanh toán"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
msgid "Canceled"
msgstr "Đã huỷ"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Redeemed"
msgstr "Đã đổi"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Cancel"
msgstr "Huỷ"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
msgid "Ticket not paid"
msgstr "Vé chưa thanh toán"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
msgid "This ticket is not yet paid. Do you want to continue anyways?"
msgstr "Vé này chưa được thanh toán. Tiếp tục thực hiện?"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
msgid "Additional information required"
msgstr "Yêu cầu thông tin bổ sung"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "Valid ticket"
msgstr "Vé hợp lệ"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53
msgid "Exit recorded"
msgstr "Đã ghi nhận Rời khỏi"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
msgid "Ticket already used"
msgstr "Vé đã được sử dụng"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
msgid "Information required"
msgstr "Thông tin được yêu cầu"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Unknown ticket"
msgstr "Không nhận ra vé"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Ticket type not allowed here"
msgstr "Loại vé không được chấp nhập ở đây"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Entry not allowed"
msgstr "Không cho phép vào"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
msgid "Ticket code revoked/changed"
msgstr "Mã vé đã bị thu hồi / thay đổi"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
msgid "Ticket blocked"
msgstr "Vé đã bị khoá"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
msgid "Ticket not valid at this time"
msgstr "Vé không hợp lệ tại thời điểm này"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
msgid "Order canceled"
msgstr "Đã huỷ đơn hàng"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
msgid "Ticket code is ambiguous on list"
msgstr "Mã vé không rõ ràng trong danh sách"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
msgid "Order not approved"
msgstr "Đơn hàng không được chấp nhận"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
msgid "Checked-in Tickets"
msgstr "Vé đã check-in"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67
msgid "Valid Tickets"
msgstr "Những vé hợp lệ"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
msgid "Currently inside"
msgstr "Hiện đang ở bên trong"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
#: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:270
msgid "Yes"
msgstr ""
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
#: pretix/static/pretixcontrol/js/ui/question.js:138
#: pretix/static/pretixpresale/js/ui/questions.js:270
msgid "No"
msgstr "Không"
msgstr ""
#: pretix/static/lightbox/js/lightbox.js:96
msgid "close"
msgstr "đóng"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:58
#: pretix/static/pretixbase/js/asynctask.js:135
@@ -342,13 +341,11 @@ msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
msgstr ""
"Yêu cầu của bạn đang được xử lý. Tuỳ thuộc vào quy mô của sự kiện, quá trình "
"có thể mất vài phút."
#: pretix/static/pretixbase/js/asynctask.js:63
#: pretix/static/pretixbase/js/asynctask.js:140
msgid "Your request has been queued on the server and will soon be processed."
msgstr "Yêu cầu của bạn đã được tiếp nhận và sẽ sớm được xử lý."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:69
#: pretix/static/pretixbase/js/asynctask.js:146
@@ -357,36 +354,34 @@ msgid ""
"If this takes longer than two minutes, please contact us or go back in your "
"browser and try again."
msgstr ""
"Chúng tôi đã nhận được yêu cầu của bạn nhưng chờ để xử lý. Vui lòng liên hệ "
"cho chúng tôi hoặc thực hiện lại nếu quá trình xử lý kéo dài hơn 2 phút."
#: pretix/static/pretixbase/js/asynctask.js:105
#: pretix/static/pretixbase/js/asynctask.js:193
#: pretix/static/pretixbase/js/asynctask.js:198
#: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred."
msgstr "Đã xảy ra lỗi {code}."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:108
msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: "
"{code}"
msgstr "Mất kết nối đến server, đang kết nối lại. Mã lỗi: {code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:160
#: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again."
msgstr "Yêu cầu quá lâu. Vui lòng thực hiện lại."
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:201
#: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}"
msgstr "Không thể kết nối đến máy chủ. Vui lòng thử lại. Mã lỗi: {code}"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:230
msgid "We are processing your request …"
msgstr "Chúng tôi đang xử lý yêu cầu …"
msgstr ""
#: pretix/static/pretixbase/js/asynctask.js:238
msgid ""
@@ -394,79 +389,77 @@ msgid ""
"than one minute, please check your internet connection and then reload this "
"page and try again."
msgstr ""
"Đang gửi yêu cầu đến máy chủ. Nếu quá trình này kéo dài hơn 1 phút, vui lòng "
"kiểm tra lại kết nối Internet, tải lại trang và thử lại."
#: pretix/static/pretixbase/js/asynctask.js:301
#: pretix/static/pretixcontrol/js/ui/main.js:71
msgid "Close message"
msgstr "Đóng tin nhắn"
msgstr ""
#: pretix/static/pretixcontrol/js/clipboard.js:23
msgid "Copied!"
msgstr "Đã sao chép!"
msgstr ""
#: pretix/static/pretixcontrol/js/clipboard.js:29
msgid "Press Ctrl-C to copy!"
msgstr "Nhấn Ctrl-C để sao chép!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:12
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:18
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
msgid "is one of"
msgstr "là một trong"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
msgid "is before"
msgstr "là trước"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
msgid "is after"
msgstr "là sau"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "="
msgstr "="
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product"
msgstr "Sản phẩm"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Product variation"
msgstr "Biến thể sản phẩm"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Gate"
msgstr "Cổng"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
msgid "Current date and time"
msgstr "Ngày và giờ hiện tại"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr "Ngày hiện tại trong tuần (1 = Thứ 2, 7 = Chủ nhật)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status"
msgstr "Trạng thái vào hiện tại"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries"
msgstr "Số lượng các mục trước"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
msgid "Number of previous entries since midnight"
msgstr "Số mục trước đó tính từ nửa đêm"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
msgid "Number of previous entries since"
msgstr "Số mục trước từ khi"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
msgid "Number of previous entries before"
msgstr "Số mục trước trước lúc"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry"
@@ -490,159 +483,157 @@ msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)"
msgstr "Tất cả các điều kiện bên dưới (và)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
msgid "At least one of the conditions below (OR)"
msgstr "Tối thiểu một điều kiện bên dưới (hoặc)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:184
msgid "Event start"
msgstr "Sự kiện bắt đầu"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
msgid "Event end"
msgstr "Sự kiện kết thúc"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
msgid "Event admission"
msgstr "Ghi danh sự kiện"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
msgid "custom date and time"
msgstr "tuỳ chỉnh ngày và giờ"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
msgid "custom time"
msgstr "tuỷ chỉnh giờ"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
msgid "Tolerance (minutes)"
msgstr "Tolerance (phút)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
msgid "Add condition"
msgstr "Thêm điều kiện"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
msgid "minutes"
msgstr "phút"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate"
msgstr "Nhân bản"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status"
msgid "present"
msgstr "có mặt"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status"
msgid "absent"
msgstr "vắng"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:72
msgid "Check-in QR"
msgstr "Mã QR Check-in"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:387
msgid "The PDF background file could not be loaded for the following reason:"
msgstr "Không thể tải ảnh nền từ file PDF vì:"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:656
msgid "Group of objects"
msgstr "Nhóm các đối tượng"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:661
msgid "Text object"
msgstr "Văn bản"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:663
msgid "Barcode area"
msgstr "Vùng mã vạch"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:665
msgid "Image area"
msgstr "Vùng ảnh"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:667
msgid "Powered by pretix"
msgstr "Được cung cấp bởi pretix"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:669
msgid "Object"
msgstr "Đối tượng"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:673
msgid "Ticket design"
msgstr "Thiết kế vé"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:972
msgid "Saving failed."
msgstr "Không thể lưu."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1041
#: pretix/static/pretixcontrol/js/ui/editor.js:1091
msgid "Error while uploading your PDF file, please try again."
msgstr "Có lỗi xảy ra khi tải file PDF lên, vui lòng thử lại."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:1074
msgid "Do you really want to leave the editor without saving your changes?"
msgstr "Bạn thực sự muốn đóng mà không lưu các thay đổi chứ?"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/mail.js:19
msgid "An error has occurred."
msgstr "Đã có lỗi xảy ra."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/mail.js:52
msgid "Generating messages …"
msgstr "Đang tạo lời nhắn…"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:109
msgid "Unknown error."
msgstr "Lỗi không xác định."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:313
msgid "Your color has great contrast and is very easy to read!"
msgstr "Bạn đã chọn màu có độ tương phản tốt và dễ đọc!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:317
msgid "Your color has decent contrast and is probably good-enough to read!"
msgstr "Bạn đã giảm độ tương phản và có lẽ khá tốt để đọc!"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:321
msgid ""
"Your color has bad contrast for text on white background, please choose a "
"darker shade."
msgstr ""
"Màu của bạn có độ tương phản kém đối với văn bản trên nền trắng, vui lòng "
"chọn màu tối hơn."
#: pretix/static/pretixcontrol/js/ui/main.js:475
#: pretix/static/pretixcontrol/js/ui/main.js:495
msgid "Search query"
msgstr "Truy vấn tìm kiếm"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:493
msgid "All"
msgstr "Tất cả"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:494
msgid "None"
msgstr "Không có"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:498
msgid "Selected only"
msgstr "Chỉ được chọn"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:828
msgid "Enter page number between 1 and %(max)s."
msgstr "Nhập số trang từ 1 đến %(max)s."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:831
msgid "Invalid page number."
msgstr "Số trang không hợp lệ."
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:989
msgid "Use a different name internally"

View File

@@ -187,9 +187,7 @@ class BankTransfer(BasePaymentProvider):
help_text=_('Put one IBAN or IBAN prefix per line. The system will not attempt to send refunds to any '
'of these IBANs. Useful e.g. if you receive a lot of "forwarded payments" by a third-party payment '
'provider. You can also list country codes such as "GB" if you never want to send refunds to '
'IBANs from a specific country. The check digits will be ignored for comparison, so you '
'can e.g. ban DE0012345 to ban all German IBANs with the bank identifier starting with '
'12345.')
'IBANs from a specific country.')
)),
])
@@ -593,12 +591,7 @@ class BankTransfer(BasePaymentProvider):
except ValidationError:
return False
else:
def _compare(iban, prefix): # Compare IBAN with pretix ignoring the check digits
iban = iban[:2] + iban[4:]
prefix = prefix[:2] + prefix[4:]
return iban.startswith(prefix)
return not any(_compare(iban, b) for b in (self.settings.refund_iban_blocklist or '').splitlines() if b)
return not any(iban.startswith(b) for b in (self.settings.refund_iban_blocklist or '').splitlines() if b)
def payment_partial_refund_supported(self, payment: OrderPayment) -> bool:
return self.payment_refund_supported(payment)

View File

@@ -229,10 +229,7 @@ class Paypal(BasePaymentProvider):
kwargs['cart_namespace'] = request.resolver_match.kwargs['cart_namespace']
try:
if self.settings.connect_client_id and not self.settings.secret:
if not request.event.settings.payment_paypal_connect_user_id:
raise PaymentException('Payment method misconfigured')
if request.event.settings.payment_paypal_connect_user_id:
try:
tokeninfo = Tokeninfo.create_with_refresh_token(request.event.settings.payment_paypal_connect_refresh_token)
except BadRequest as ex:

View File

@@ -524,13 +524,10 @@ class PaypalMethod(BasePaymentProvider):
kwargs['cart_namespace'] = request.resolver_match.kwargs['cart_namespace']
# ISU
if self.settings.connect_client_id and self.settings.connect_secret_key and not self.settings.secret:
if request.event.settings.payment_paypal_isu_merchant_id:
payee = {
"merchant_id": request.event.settings.payment_paypal_isu_merchant_id,
}
else:
raise PaymentException('Payment method misconfigured')
if request.event.settings.payment_paypal_isu_merchant_id:
payee = {
"merchant_id": request.event.settings.payment_paypal_isu_merchant_id,
}
# Manual API integration
else:
payee = {}
@@ -1103,8 +1100,6 @@ class PaypalAPM(PaypalMethod):
payment.save(update_fields=["provider"])
paypal_order = self._create_paypal_order(request, payment, None)
if not paypal_order:
raise PaymentException(_('We had trouble communicating with PayPal'))
payment.info = json.dumps(paypal_order.dict())
payment.save(update_fields=['info'])

View File

@@ -225,11 +225,6 @@ class OrderMailForm(BaseMailForm):
]
self.fields['recipients'].choices = recp_choices
if not self.event.settings.mail_attach_tickets:
self.fields['attach_tickets'].disabled = True
self.fields['attach_tickets'].help_text = _("Attachment of tickets is disabled in this event's email "
"settings.")
choices = [(e, l) for e, l in Order.STATUS_CHOICE if e != 'n']
choices.insert(0, ('valid_if_pending', _('payment pending but already confirmed')))
choices.insert(0, ('na', _('payment pending (except unapproved or already confirmed)')))

View File

@@ -21,8 +21,6 @@ export default {
computed: {
status() {
if (this.position.checkins.length) return 'redeemed';
if (this.position.order__status === 'n' && this.position.order__valid_if_pending) return 'pending_valid';
if (this.position.order__status === 'n' && this.position.order__require_approval) return 'require_approval';
return this.position.order__status
},
itemvar() {

View File

@@ -43,8 +43,6 @@ window.vapp = new Vue({
'status.n': gettext('Unpaid'),
'status.c': gettext('Canceled'),
'status.e': gettext('Canceled'),
'status.pending_valid': gettext('Confirmed'),
'status.require_approval': gettext('Approval pending'),
'status.redeemed': gettext('Redeemed'),
'modal.cancel': gettext('Cancel'),
'modal.continue': gettext('Continue'),

View File

@@ -74,10 +74,10 @@ a.searchresult {
align-items: center;
font-size: 140%;
&.status-p, &.status-pending_valid {
&.status-p {
background: $brand-success;
}
&.status-c, &.status-e, &.status-n, &.status-require_approval {
&.status-c, &.status-e, &.status-n {
background: $brand-danger;
}
&.status-redeemed {

View File

@@ -182,6 +182,4 @@ def _default_context(request):
ctx['settings'] = pretix_settings
ctx['django_settings'] = settings
ctx['ie_deprecation_warning'] = 'MSIE' in request.headers.get('User-Agent', '') or 'Trident/' in request.headers.get('User-Agent', '')
return ctx

View File

@@ -46,22 +46,6 @@
<body class="nojs" data-locale="{{ request.LANGUAGE_CODE }}" data-now="{% now "U.u" %}" data-datetimeformat="{{ js_datetime_format }}" data-timeformat="{{ js_time_format }}" data-dateformat="{{ js_date_format }}" data-datetimelocale="{{ js_locale }}" data-currency="{{ request.event.currency }}">
{{ html_page_header|safe }}
<header>
{% if ie_deprecation_warning %}
<div class="old-browser-warning">
<span class="fa fa-internet-explorer"></span>
{% blocktrans trimmed %}
We've detected that you are using <strong>Microsoft Internet Explorer</strong>.
{% endblocktrans %}
{% blocktrans trimmed %}
Internet Explorer is an old browser that does not support lots of recent web-based
technologies and is no longer supported by this website.
{% endblocktrans %}
{% blocktrans trimmed %}
We kindly ask you to move to one of our supported browsers, such as Microsoft Edge,
Mozilla Firefox, Google Chrome, or Safari.
{% endblocktrans %}
</div>
{% endif %}
{% block above %}
{% endblock %}
</header>

View File

@@ -348,17 +348,15 @@ def get_grouped_items(event, subevent=None, voucher=None, channel='web', require
)
original_price = item_price_override.get(item.pk, item.default_price)
voucher_reduced = False
if voucher:
price = voucher.calculate_price(original_price)
voucher_reduced = price < original_price
include_bundled = not voucher.all_bundles_included
else:
price = original_price
include_bundled = True
item.display_price = item.tax(price, currency=event.currency, include_bundled=include_bundled)
if item.free_price and item.free_price_suggestion is not None and not voucher_reduced:
if item.free_price and item.free_price_suggestion is not None:
item.suggested_price = item.tax(max(price, item.free_price_suggestion), currency=event.currency, include_bundled=include_bundled)
else:
item.suggested_price = item.display_price
@@ -401,10 +399,8 @@ def get_grouped_items(event, subevent=None, voucher=None, channel='web', require
)
original_price = var_price_override.get(var.pk, var.price)
voucher_reduced = False
if voucher:
price = voucher.calculate_price(original_price)
voucher_reduced = price < original_price
include_bundled = not voucher.all_bundles_included
else:
price = original_price
@@ -412,10 +408,10 @@ def get_grouped_items(event, subevent=None, voucher=None, channel='web', require
var.display_price = var.tax(price, currency=event.currency, include_bundled=include_bundled)
if item.free_price and var.free_price_suggestion is not None and not voucher_reduced:
if item.free_price and var.free_price_suggestion is not None:
var.suggested_price = item.tax(max(price, var.free_price_suggestion), currency=event.currency,
include_bundled=include_bundled)
elif item.free_price and item.free_price_suggestion is not None and not voucher_reduced:
elif item.free_price and item.free_price_suggestion is not None:
var.suggested_price = item.tax(max(price, item.free_price_suggestion), currency=event.currency,
include_bundled=include_bundled)
else:

View File

@@ -19,13 +19,60 @@
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
import re
import weakref
from collections import OrderedDict
from celery.exceptions import Retry
from sentry_sdk import Hub
from sentry_sdk.integrations import django as djangosentry
from sentry_sdk.utils import capture_internal_exceptions
MASK = '*' * 8
KEYS = frozenset([
'password',
'secret',
'passwd',
'authorization',
'api_key',
'apikey',
'sentry_dsn',
'access_token',
'session',
])
VALUES_RE = re.compile(r'^(?:\d[ -]*?){13,16}$')
def scrub_data(data):
if isinstance(data, dict):
for k, v in data.items():
if isinstance(k, bytes):
key = k.decode('utf-8', 'replace')
else:
key = k
key = key.lower()
data[k] = scrub_data(v)
for blk in KEYS:
if blk in key:
data[k] = MASK
elif isinstance(data, list):
for i, l in enumerate(list(data)):
data[i] = scrub_data(l)
elif isinstance(data, str):
if '=' in data:
# at this point we've assumed it's a standard HTTP query
# or cookie
if '&' in data:
delimiter = '&'
else:
delimiter = ';'
qd = scrub_data(OrderedDict(e.split('=', 1) if '=' in e else (e, None) for e in data.split(delimiter)))
return delimiter.join((k + '=' + v if v is not None else k) for k, v in qd.items())
if VALUES_RE.match(data):
return MASK
return data
def _make_event_processor(weak_request, integration):
def event_processor(event, hint):
@@ -35,6 +82,8 @@ def _make_event_processor(weak_request, integration):
with capture_internal_exceptions():
djangosentry._set_user_info(request, event)
request_info = event.setdefault("request", {})
request_info["cookies"] = dict(request.COOKIES)
# Sentry's DjangoIntegration already sets the transaction, but it gets confused by our multi-domain stuff
# where the URL resolver changes in the middleware stack. Additionally, we'd like to get the method.
@@ -47,6 +96,15 @@ def _make_event_processor(weak_request, integration):
request.method,
url
)
# We want to scrub data not only from the request, but from traceback frames as well!
scrub_data(event.get("request", {}))
if 'exception' in event:
exc = event.get("exception", {})
for val in exc.get('values', []):
stack = val.get('stacktrace', {})
for frame in stack.get('frames', []):
scrub_data(frame['vars'])
return event
return event_processor

View File

@@ -629,21 +629,15 @@ LOGGING = {
SENTRY_ENABLED = False
if config.has_option('sentry', 'dsn') and not any(c in sys.argv for c in ('shell', 'shell_scoped', 'shell_plus')):
import django.db.models.signals
import sentry_sdk
from sentry_sdk.integrations.celery import CeleryIntegration
from sentry_sdk.integrations.logging import (
LoggingIntegration, ignore_logger,
)
from sentry_sdk.scrubber import EventScrubber, DEFAULT_DENYLIST
from .sentry import PretixSentryIntegration, setup_custom_filters
SENTRY_TOKEN = config.get('sentry', 'traces_sample_token', fallback='')
pretix_denylist = DEFAULT_DENYLIST + [
"access_token",
"sentry_dsn",
]
def traces_sampler(sampling_context):
qs = sampling_context.get('wsgi_environ', {}).get('QUERY_STRING', '')
@@ -655,12 +649,7 @@ if config.has_option('sentry', 'dsn') and not any(c in sys.argv for c in ('shell
sentry_sdk.init(
dsn=config.get('sentry', 'dsn'),
integrations=[
PretixSentryIntegration(
signals_denylist=[
django.db.models.signals.pre_init,
django.db.models.signals.post_init,
]
),
PretixSentryIntegration(),
CeleryIntegration(),
LoggingIntegration(
level=logging.INFO,
@@ -670,7 +659,6 @@ if config.has_option('sentry', 'dsn') and not any(c in sys.argv for c in ('shell
traces_sampler=traces_sampler,
environment=urlparse(SITE_URL).netloc,
release=__version__,
event_scrubber=EventScrubber(denylist=pretix_denylist, recursive=True),
send_default_pii=False,
propagate_traces=False, # see https://github.com/getsentry/sentry-python/issues/1717
)

File diff suppressed because it is too large Load Diff

View File

@@ -4,8 +4,8 @@
"private": true,
"scripts": {},
"dependencies": {
"@babel/core": "^7.24.7",
"@babel/preset-env": "^7.24.6",
"@babel/core": "^7.24.5",
"@babel/preset-env": "^7.24.5",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-node-resolve": "^15.2.3",
"vue": "^2.7.16",

View File

@@ -519,13 +519,6 @@ h2 .label {
.progress-bar-#{$i} { width: 1% * $i; }
}
.old-browser-warning {
background-color: #ffe761;
padding: 32px; /* 30px + 2px optical compensation */
font-size: 30px;
}
@import "_iframe.scss";
@import "_a11y.scss";
@import "_print.scss";

View File

@@ -20,7 +20,6 @@ DJANGO_SETTINGS_MODULE = tests.settings
addopts = --reruns 3 -rw
filterwarnings =
error
ignore:.*invalid escape sequence.*:
ignore:The 'warn' method is deprecated:DeprecationWarning
ignore::django.utils.deprecation.RemovedInDjango51Warning:django.core.files.storage
ignore:.*index_together.*:django.utils.deprecation.RemovedInDjango51Warning:

View File

@@ -105,8 +105,6 @@ TEST_ORDERPOSITION1_RES = {
"id": 1,
"require_attention": False,
"order__status": "p",
"order__require_approval": False,
"order__valid_if_pending": False,
"order": "FOO",
"positionid": 1,
"item": 1,
@@ -142,8 +140,6 @@ TEST_ORDERPOSITION2_RES = {
"id": 2,
"require_attention": False,
"order__status": "p",
"order__require_approval": False,
"order__valid_if_pending": False,
"order": "FOO",
"positionid": 2,
"item": 1,
@@ -179,8 +175,6 @@ TEST_ORDERPOSITION3_RES = {
"id": 3,
"require_attention": False,
"order__status": "p",
"order__require_approval": False,
"order__valid_if_pending": False,
"order": "FOO",
"positionid": 3,
"item": 1,

View File

@@ -144,8 +144,6 @@ TEST_ORDERPOSITION1_RES = {
"id": 1,
"require_attention": False,
"order__status": "p",
"order__require_approval": False,
"order__valid_if_pending": False,
"order": "FOO",
"positionid": 1,
"item": 1,

View File

@@ -28,7 +28,7 @@ from django_countries.fields import Country
from django_scopes import scopes_disabled
from pretix.base.models import (
InvoiceAddress, ItemVariation, Order, OrderPosition, SeatingPlan, SubEvent,
InvoiceAddress, Order, OrderPosition, SeatingPlan, SubEvent,
)
from pretix.base.models.orders import OrderFee
@@ -503,7 +503,7 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2,
)
assert resp.status_code == 200
with scopes_disabled():
assert event.items.get(id=item.pk).default_price == Decimal('23.00')
assert subevent.items.get(id=item.pk).default_price == Decimal('23.00')
assert subevent.item_price_overrides[item.pk] == Decimal('99.99')
resp = token_client.patch(
@@ -609,7 +609,7 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2,
)
assert resp.status_code == 200
with scopes_disabled():
assert ItemVariation.objects.get(id=variations[0].pk).default_price == Decimal('12.00')
assert subevent.variations.get(id=variations[0].pk).default_price == Decimal('12.00')
assert subevent.var_price_overrides[variations[0].pk] == Decimal('99.99')
resp = token_client.patch(