Compare commits

..

2 Commits

Author SHA1 Message Date
Raphael Michel
dc097f2c9e Fix mising check 2025-01-14 09:22:48 +01:00
Raphael Michel
a83a6bb809 New invoice generation setting: User request but paid only 2025-01-13 13:22:03 +01:00
44 changed files with 6589 additions and 8921 deletions

View File

@@ -855,7 +855,7 @@ Generating new secrets
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/orders/(code)/regenerate_secrets/
Triggers generation of new ``secret`` and ``ẁeb_secret`` attributes for both the order and all order positions.
Triggers generation of new ``secret`` attributes for both the order and all order positions.
**Example request**:
@@ -886,7 +886,7 @@ Generating new secrets
.. http:post:: /api/v1/organizers/(organizer)/events/(event)/orderpositions/(id)/regenerate_secrets/
Triggers generation of a new ``secret`` and ``web_secret`` attribute for a single order position.
Triggers generation of a new ``secret`` attribute for a single order position.
**Example request**:

View File

@@ -32,7 +32,7 @@ dependencies = [
"bleach==6.2.*",
"celery==5.4.*",
"chardet==5.2.*",
"cryptography>=44.0.0",
"cryptography>=3.4.2",
"css-inline==0.14.*",
"defusedcsv>=1.1.0",
"Django[argon2]==4.2.*,>=4.2.15",
@@ -72,9 +72,9 @@ dependencies = [
"packaging",
"paypalrestsdk==1.13.*",
"paypal-checkout-serversdk==1.0.*",
"PyJWT==2.10.*",
"PyJWT==2.9.*",
"phonenumberslite==8.13.*",
"Pillow==11.1.*",
"Pillow==11.0.*",
"pretix-plugin-build",
"protobuf==5.29.*",
"psycopg2-binary",

View File

@@ -94,7 +94,6 @@ ALL_LANGUAGES = [
('el', _('Greek')),
('id', _('Indonesian')),
('it', _('Italian')),
('ja', _('Japanese')),
('lv', _('Latvian')),
('nb-no', _('Norwegian Bokmål')),
('pl', _('Polish')),

View File

@@ -103,7 +103,7 @@ class SalesChannelMigrationMixin:
]
})
if set(data["sales_channels"]) == all_channels:
if data["sales_channels"] == all_channels:
data["all_sales_channels"] = True
data["limit_sales_channels"] = []
else:

View File

@@ -437,8 +437,7 @@ class CloneEventSerializer(EventSerializer):
testmode = validated_data.pop('testmode', None)
has_subevents = validated_data.pop('has_subevents', None)
tz = validated_data.pop('timezone', None)
all_sales_channels = validated_data.pop('all_sales_channels', None)
limit_sales_channels = validated_data.pop('limit_sales_channels', None)
sales_channels = validated_data.pop('sales_channels', None)
date_admission = validated_data.pop('date_admission', None)
new_event = super().create({**validated_data, 'plugins': None})
@@ -451,9 +450,8 @@ class CloneEventSerializer(EventSerializer):
new_event.is_public = is_public
if testmode is not None:
new_event.testmode = testmode
if all_sales_channels is not None or limit_sales_channels is not None:
new_event.all_sales_channels = all_sales_channels
new_event.limit_sales_channels.set(limit_sales_channels)
if sales_channels is not None:
new_event.sales_channels = sales_channels
if has_subevents is not None:
new_event.has_subevents = has_subevents
if has_subevents is not None:

View File

@@ -619,7 +619,7 @@ class QuotaViewSet(ConditionalListView, viewsets.ModelViewSet):
def availability(self, request, *args, **kwargs):
quota = self.get_object()
qa = QuotaAvailability(full_results=True)
qa = QuotaAvailability()
qa.queue(quota)
qa.compute()
avail = qa.results[quota]

View File

@@ -602,7 +602,7 @@ class EventOrderViewSet(OrderViewSetMixin, viewsets.ModelViewSet):
order.status in (Order.STATUS_PAID, Order.STATUS_PENDING)
and order.invoices.filter(is_cancellation=True).count() >= order.invoices.filter(is_cancellation=False).count()
)
if self.request.event.settings.get('invoice_generate') not in ('admin', 'user', 'paid', 'True') or not invoice_qualified(order):
if self.request.event.settings.get('invoice_generate') not in ('admin', 'user', 'paid', 'user_paid', 'True') or not invoice_qualified(order):
return Response(
{'detail': _('You cannot generate an invoice for this order.')},
status=status.HTTP_400_BAD_REQUEST
@@ -647,8 +647,6 @@ class EventOrderViewSet(OrderViewSetMixin, viewsets.ModelViewSet):
order = self.get_object()
order.secret = generate_secret()
for op in order.all_positions.all():
op.web_secret = generate_secret()
op.save(update_fields=["web_secret"])
assign_ticket_secret(
request.event, op, force_invalidate=True, save=True
)

View File

@@ -1,23 +0,0 @@
# Generated by Django 4.2.17 on 2025-01-13 14:55
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("pretixbase", "0274_tax_codes"),
]
operations = [
migrations.AlterField(
model_name="question",
name="valid_number_max",
field=models.DecimalField(decimal_places=6, max_digits=30, null=True),
),
migrations.AlterField(
model_name="question",
name="valid_number_min",
field=models.DecimalField(decimal_places=6, max_digits=30, null=True),
),
]

View File

@@ -1718,10 +1718,10 @@ class Question(LoggedModel):
'Question', null=True, blank=True, on_delete=models.SET_NULL, related_name='dependent_questions'
)
dependency_values = MultiStringField(default=[])
valid_number_min = models.DecimalField(decimal_places=6, max_digits=30, null=True, blank=True,
valid_number_min = models.DecimalField(decimal_places=6, max_digits=16, null=True, blank=True,
verbose_name=_('Minimum value'),
help_text=_('Currently not supported in our apps and during check-in'))
valid_number_max = models.DecimalField(decimal_places=6, max_digits=30, null=True, blank=True,
valid_number_max = models.DecimalField(decimal_places=6, max_digits=16, null=True, blank=True,
verbose_name=_('Maximum value'),
help_text=_('Currently not supported in our apps and during check-in'))
valid_date_min = models.DateField(null=True, blank=True,

View File

@@ -1087,7 +1087,7 @@ class Order(LockModel, LoggedModel):
for i, op in enumerate(positions):
if op.seat:
if not op.seat.is_available(ignore_orderpos=op, sales_channel=self.sales_channel.identifier):
if not op.seat.is_available(ignore_orderpos=op):
raise Quota.QuotaExceededException(error_messages['seat_unavailable'].format(seat=op.seat))
if force:
continue

View File

@@ -185,104 +185,43 @@ BEFORE_AFTER_CHOICE = (
)
reldatetimeparts = namedtuple('reldatetimeparts', (
"status", # 0
"absolute", # 1
"rel_days_number", # 2
"rel_mins_relationto", # 3
"rel_days_timeofday", # 4
"rel_mins_number", # 5
"rel_days_relationto", # 6
"rel_mins_relation", # 7
"rel_days_relation" # 8
))
reldatetimeparts.indizes = reldatetimeparts(*range(9))
class RelativeDateTimeWidget(forms.MultiWidget):
template_name = 'pretixbase/forms/widgets/reldatetime.html'
parts = reldatetimeparts
def __init__(self, *args, **kwargs):
self.status_choices = kwargs.pop('status_choices')
base_choices = kwargs.pop('base_choices')
widgets = reldatetimeparts(
status=forms.RadioSelect(choices=self.status_choices),
absolute=forms.DateTimeInput(
widgets = (
forms.RadioSelect(choices=self.status_choices),
forms.DateTimeInput(
attrs={'class': 'datetimepicker'}
),
rel_days_number=forms.NumberInput(),
rel_mins_relationto=forms.Select(choices=base_choices),
rel_days_timeofday=forms.TimeInput(attrs={'placeholder': _('Time'), 'class': 'timepickerfield'}),
rel_mins_number=forms.NumberInput(),
rel_days_relationto=forms.Select(choices=base_choices),
rel_mins_relation=forms.Select(choices=BEFORE_AFTER_CHOICE),
rel_days_relation=forms.Select(choices=BEFORE_AFTER_CHOICE),
forms.NumberInput(),
forms.Select(choices=base_choices),
forms.TimeInput(attrs={'placeholder': _('Time'), 'class': 'timepickerfield'}),
forms.NumberInput(),
forms.Select(choices=base_choices),
forms.Select(choices=BEFORE_AFTER_CHOICE),
forms.Select(choices=BEFORE_AFTER_CHOICE),
)
super().__init__(widgets=widgets, *args, **kwargs)
def decompress(self, value):
if isinstance(value, str):
value = RelativeDateWrapper.from_string(value)
if isinstance(value, reldatetimeparts):
return value
if not value:
return reldatetimeparts(
status="unset",
absolute=None,
rel_days_number=1,
rel_mins_relationto="date_from",
rel_days_timeofday=None,
rel_mins_number=0,
rel_days_relationto="date_from",
rel_mins_relation="before",
rel_days_relation="before"
)
return ['unset', None, 1, 'date_from', None, 0, "date_from", "before", "before"]
elif isinstance(value.data, (datetime.datetime, datetime.date)):
return reldatetimeparts(
status="absolute",
absolute=value.data,
rel_days_number=1,
rel_mins_relationto="date_from",
rel_days_timeofday=None,
rel_mins_number=0,
rel_days_relationto="date_from",
rel_mins_relation="before",
rel_days_relation="before"
)
return ['absolute', value.data, 1, 'date_from', None, 0, "date_from", "before", "before"]
elif value.data.minutes is not None:
return reldatetimeparts(
status="relative_minutes",
absolute=None,
rel_days_number=None,
rel_mins_relationto=value.data.base_date_name,
rel_days_timeofday=None,
rel_mins_number=value.data.minutes,
rel_days_relationto=value.data.base_date_name,
rel_mins_relation="after" if value.data.is_after else "before",
rel_days_relation="after" if value.data.is_after else "before"
)
return reldatetimeparts(
status="relative",
absolute=None,
rel_days_number=value.data.days,
rel_mins_relationto=value.data.base_date_name,
rel_days_timeofday=value.data.time,
rel_mins_number=0,
rel_days_relationto=value.data.base_date_name,
rel_mins_relation="after" if value.data.is_after else "before",
rel_days_relation="after" if value.data.is_after else "before"
)
return ['relative_minutes', None, None, value.data.base_date_name, None, value.data.minutes, value.data.base_date_name,
"after" if value.data.is_after else "before", "after" if value.data.is_after else "before"]
return ['relative', None, value.data.days, value.data.base_date_name, value.data.time, 0, value.data.base_date_name,
"after" if value.data.is_after else "before", "after" if value.data.is_after else "before"]
def get_context(self, name, value, attrs):
ctx = super().get_context(name, value, attrs)
ctx['required'] = self.status_choices[0][0] == 'unset'
ctx['rendered_subwidgets'] = self.parts(*(
self._render(w['template_name'], {**ctx, 'widget': w})
for w in ctx['widget']['subwidgets']
))._asdict()
return ctx
@@ -300,36 +239,36 @@ class RelativeDateTimeField(forms.MultiValueField):
choices = BASE_CHOICES
if not kwargs.get('required', True):
status_choices.insert(0, ('unset', _('Not set')))
fields = reldatetimeparts(
status=forms.ChoiceField(
fields = (
forms.ChoiceField(
choices=status_choices,
required=True
),
absolute=forms.DateTimeField(
forms.DateTimeField(
required=False
),
rel_days_number=forms.IntegerField(
forms.IntegerField(
required=False
),
rel_mins_relationto=forms.ChoiceField(
forms.ChoiceField(
choices=choices,
required=False
),
rel_days_timeofday=forms.TimeField(
forms.TimeField(
required=False,
),
rel_mins_number=forms.IntegerField(
forms.IntegerField(
required=False
),
rel_days_relationto=forms.ChoiceField(
forms.ChoiceField(
choices=choices,
required=False
),
rel_mins_relation=forms.ChoiceField(
forms.ChoiceField(
choices=BEFORE_AFTER_CHOICE,
required=False
),
rel_days_relation=forms.ChoiceField(
forms.ChoiceField(
choices=BEFORE_AFTER_CHOICE,
required=False
),
@@ -343,36 +282,32 @@ class RelativeDateTimeField(forms.MultiValueField):
)
def set_event(self, event):
self.widget.widgets[reldatetimeparts.indizes.rel_days_relationto].choices = [
(k, v) for k, v in BASE_CHOICES if getattr(event, k, None)
]
self.widget.widgets[reldatetimeparts.indizes.rel_mins_relationto].choices = [
self.widget.widgets[3].choices = [
(k, v) for k, v in BASE_CHOICES if getattr(event, k, None)
]
def compress(self, data_list):
if not data_list:
return None
data = reldatetimeparts(*data_list)
if data.status == 'absolute':
return RelativeDateWrapper(data.absolute)
elif data.status == 'unset':
if data_list[0] == 'absolute':
return RelativeDateWrapper(data_list[1])
elif data_list[0] == 'unset':
return None
elif data.status == 'relative_minutes':
elif data_list[0] == 'relative_minutes':
return RelativeDateWrapper(RelativeDate(
days=0,
base_date_name=data.rel_mins_relationto,
base_date_name=data_list[3],
time=None,
minutes=data.rel_mins_number,
is_after=data.rel_mins_relation == "after",
minutes=data_list[5],
is_after=data_list[7] == "after",
))
else:
return RelativeDateWrapper(RelativeDate(
days=data.rel_days_number,
base_date_name=data.rel_days_relationto,
time=data.rel_days_timeofday,
days=data_list[2],
base_date_name=data_list[6],
time=data_list[4],
minutes=None,
is_after=data.rel_days_relation == "after",
is_after=data_list[8] == "after",
))
def has_changed(self, initial, data):
@@ -381,41 +316,29 @@ class RelativeDateTimeField(forms.MultiValueField):
return super().has_changed(initial, data)
def clean(self, value):
data = reldatetimeparts(*value)
if data.status == 'absolute' and not data.absolute:
if value[0] == 'absolute' and not value[1]:
raise ValidationError(self.error_messages['incomplete'])
elif data.status == 'relative' and (data.rel_days_number is None or not data.rel_days_relationto):
elif value[0] == 'relative' and (value[2] is None or not value[3]):
raise ValidationError(self.error_messages['incomplete'])
elif data.status == 'relative_minutes' and (data.rel_mins_number is None or not data.rel_mins_relationto):
elif value[0] == 'relative_minutes' and (value[5] is None or not value[3]):
raise ValidationError(self.error_messages['incomplete'])
return super().clean(value)
reldateparts = namedtuple('reldateparts', (
"status", # 0
"absolute", # 1
"rel_days_number", # 2
"rel_days_relationto", # 3
"rel_days_relation", # 4
))
reldateparts.indizes = reldateparts(*range(5))
class RelativeDateWidget(RelativeDateTimeWidget):
template_name = 'pretixbase/forms/widgets/reldate.html'
parts = reldateparts
def __init__(self, *args, **kwargs):
self.status_choices = kwargs.pop('status_choices')
widgets = reldateparts(
status=forms.RadioSelect(choices=self.status_choices),
absolute=forms.DateInput(
widgets = (
forms.RadioSelect(choices=self.status_choices),
forms.DateInput(
attrs={'class': 'datepickerfield'}
),
rel_days_number=forms.NumberInput(),
rel_days_relationto=forms.Select(choices=kwargs.pop('base_choices')),
rel_days_relation=forms.Select(choices=BEFORE_AFTER_CHOICE),
forms.NumberInput(),
forms.Select(choices=kwargs.pop('base_choices')),
forms.Select(choices=BEFORE_AFTER_CHOICE),
)
forms.MultiWidget.__init__(self, widgets=widgets, *args, **kwargs)
@@ -423,30 +346,10 @@ class RelativeDateWidget(RelativeDateTimeWidget):
if isinstance(value, str):
value = RelativeDateWrapper.from_string(value)
if not value:
return reldateparts(
status="unset",
absolute=None,
rel_days_number=1,
rel_days_relationto="date_from",
rel_days_relation="before"
)
if isinstance(value, reldateparts):
return value
return ['unset', None, 1, 'date_from', 'before']
elif isinstance(value.data, (datetime.datetime, datetime.date)):
return reldateparts(
status="absolute",
absolute=value.data,
rel_days_number=1,
rel_days_relationto="date_from",
rel_days_relation="before"
)
return reldateparts(
status="relative",
absolute=None,
rel_days_number=value.data.days,
rel_days_relationto=value.data.base_date_name,
rel_days_relation="after" if value.data.is_after else "before"
)
return ['absolute', value.data, 1, 'date_from', 'before']
return ['relative', None, value.data.days, value.data.base_date_name, "after" if value.data.is_after else "before"]
class RelativeDateField(RelativeDateTimeField):
@@ -458,22 +361,22 @@ class RelativeDateField(RelativeDateTimeField):
]
if not kwargs.get('required', True):
status_choices.insert(0, ('unset', _('Not set')))
fields = reldateparts(
status=forms.ChoiceField(
fields = (
forms.ChoiceField(
choices=status_choices,
required=True
),
absolute=forms.DateField(
forms.DateField(
required=False
),
rel_days_number=forms.IntegerField(
forms.IntegerField(
required=False
),
rel_days_relationto=forms.ChoiceField(
forms.ChoiceField(
choices=BASE_CHOICES,
required=False
),
rel_days_relation=forms.ChoiceField(
forms.ChoiceField(
choices=BEFORE_AFTER_CHOICE,
required=False
),
@@ -484,35 +387,28 @@ class RelativeDateField(RelativeDateTimeField):
self, fields=fields, require_all_fields=False, *args, **kwargs
)
def set_event(self, event):
self.widget.widgets[reldateparts.indizes.rel_days_relationto].choices = [
(k, v) for k, v in BASE_CHOICES if getattr(event, k, None)
]
def compress(self, data_list):
if not data_list:
return None
data = reldateparts(*data_list)
if data.status == 'absolute':
return RelativeDateWrapper(data.absolute)
elif data.status == 'unset':
if data_list[0] == 'absolute':
return RelativeDateWrapper(data_list[1])
elif data_list[0] == 'unset':
return None
else:
return RelativeDateWrapper(RelativeDate(
days=data.rel_days_number,
base_date_name=data.rel_days_relationto,
days=data_list[2],
base_date_name=data_list[3],
time=None, minutes=None,
is_after=data.rel_days_relation == "after"
is_after=data_list[4] == "after"
))
def clean(self, value):
data = reldateparts(*value)
if data.status == 'absolute' and not data.absolute:
if value[0] == 'absolute' and not value[1]:
raise ValidationError(self.error_messages['incomplete'])
elif data.status == 'relative' and (data.rel_days_number is None or not data.rel_days_relationto):
elif value[0] == 'relative' and (value[2] is None or not value[3]):
raise ValidationError(self.error_messages['incomplete'])
return forms.MultiValueField.clean(self, value)
return super().clean(value)
class ModelRelativeDateTimeField(models.CharField):

View File

@@ -2425,8 +2425,6 @@ class OrderChangeManager:
elif isinstance(op, self.SplitOperation):
split_positions.append(op.position)
elif isinstance(op, self.RegenerateSecretOperation):
op.position.web_secret = generate_secret()
op.position.save(update_fields=["web_secret"])
assign_ticket_secret(
event=self.event, position=op.position, force_invalidate=True, save=True
)
@@ -2533,7 +2531,6 @@ class OrderChangeManager:
'new_order': split_order.code,
})
op.order = split_order
op.web_secret = generate_secret()
assign_ticket_secret(
self.event, position=op, force_invalidate=True,
)

View File

@@ -1040,6 +1040,7 @@ DEFAULTS = {
('False', _('Do not generate invoices')),
('admin', _('Only manually in admin panel')),
('user', _('Automatically on user request')),
('user_paid', _('Automatically on user request for paid orders')),
('True', _('Automatically for all created orders')),
('paid', _('Automatically on payment or when required by payment method')),
),
@@ -1052,6 +1053,7 @@ DEFAULTS = {
('paid', _('Automatically after payment or when required by payment method')),
('True', _('Automatically before payment for all created orders')),
('user', _('Automatically on user request')),
('user_paid', _('Automatically on user request for paid orders')),
('admin', _('Only manually in admin panel')),
),
help_text=_("Invoices will never be automatically generated for free orders.")
@@ -3557,8 +3559,8 @@ PERSON_NAME_SCHEMES = OrderedDict([
str(p) for p in [d.get('family_name', ''), d.get('given_name', '')] if p
),
'sample': {
'family_name': '',
'given_name': '',
'given_name': '泽东',
'family_name': '',
'_scheme': 'family_nospace_given',
},
}),
@@ -3609,8 +3611,8 @@ PERSON_NAME_SCHEMES = OrderedDict([
'concatenation': lambda d: str(d.get('full_name', '')),
'concatenation_all_components': lambda d: str(d.get('full_name', '')) + " (" + d.get('latin_transcription', '') + ")",
'sample': {
'full_name': '山田花子',
'latin_transcription': 'Yamada Hanako',
'full_name': '庄司',
'latin_transcription': 'Shōji',
'_scheme': 'full_transcription',
},
}),
@@ -3701,7 +3703,6 @@ COUNTRIES_WITH_STATE_IN_ADDRESS = {
'BR': (['State'], 'short'),
'CA': (['Province', 'Territory'], 'short'),
# 'CN': (['Province', 'Autonomous region', 'Munincipality'], 'long'),
'JP': (['Prefecture'], 'long'),
'MY': (['State', 'Federal territory'], 'long'),
'MX': (['State', 'Federal district'], 'short'),
'US': (['State', 'Outlying area', 'District'], 'short'),

View File

@@ -9,11 +9,12 @@
{{ selopt.label }}
</label>
{% if selopt.value == "absolute" %}
{{ rendered_subwidgets.absolute }}
{% include widget.subwidgets.1.template_name with widget=widget.subwidgets.1 %}
{% elif selopt.value == "relative" %}
{% blocktrans trimmed with number=rendered_subwidgets.rel_days_number relation=rendered_subwidgets.rel_days_relation relation_to=rendered_subwidgets.rel_days_relationto %}
{{ number }} days {{ relation }} {{ relation_to }}
{% endblocktrans %}
{% include widget.subwidgets.2.template_name with widget=widget.subwidgets.2 %}
{% trans "days" %}
{% include widget.subwidgets.4.template_name with widget=widget.subwidgets.4 %}
{% include widget.subwidgets.3.template_name with widget=widget.subwidgets.3 %}
{% endif %}
</div>
{% endfor %}

View File

@@ -9,15 +9,19 @@
{{ selopt.label }}
</label>
{% if selopt.value == "absolute" %}
{{ rendered_subwidgets.absolute }}
{% include widget.subwidgets.1.template_name with widget=widget.subwidgets.1 %}
{% elif selopt.value == "relative_minutes" %}
{% blocktrans trimmed with number=rendered_subwidgets.rel_mins_number relation=rendered_subwidgets.rel_mins_relation relation_to=rendered_subwidgets.rel_mins_relationto %}
{{ number }} minutes {{ relation }} {{ relation_to }}
{% endblocktrans %}
{% include widget.subwidgets.5.template_name with widget=widget.subwidgets.5 %}
{% trans "minutes" %}
{% include widget.subwidgets.7.template_name with widget=widget.subwidgets.7 %}
{% include widget.subwidgets.3.template_name with widget=widget.subwidgets.3 %}
{% elif selopt.value == "relative" %}
{% blocktrans trimmed with number=rendered_subwidgets.rel_days_number relation=rendered_subwidgets.rel_days_relation relation_to=rendered_subwidgets.rel_days_relationto time_of_day=rendered_subwidgets.rel_days_timeofday %}
{{ number }} days {{ relation }} {{ relation_to }} at {{ time_of_day }}
{% endblocktrans %}
{% include widget.subwidgets.2.template_name with widget=widget.subwidgets.2 %}
{% trans "days" %}
{% include widget.subwidgets.8.template_name with widget=widget.subwidgets.8 %}
{% include widget.subwidgets.6.template_name with widget=widget.subwidgets.6 %}
{% trans "at" %}
{% include widget.subwidgets.4.template_name with widget=widget.subwidgets.4 %}
{% endif %}
</div>
{% endfor %}

View File

@@ -490,9 +490,7 @@ class OrderPositionChangeForm(forms.Form):
)
operation_secret = forms.BooleanField(
required=False,
label=_('Generate a new secret'),
help_text=_('This affects both the ticket secret (often used as a QR code) as well as the link used to '
'individually access the ticket.')
label=_('Generate a new secret')
)
operation_cancel = forms.BooleanField(
required=False,

View File

@@ -479,7 +479,7 @@ class OrderView(EventPermissionRequiredMixin, DetailView):
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx['can_generate_invoice'] = invoice_qualified(self.order) and (
self.request.event.settings.invoice_generate in ('admin', 'user', 'paid', 'True')
self.request.event.settings.invoice_generate in ('admin', 'user', 'paid', 'user_paid', 'True')
) and self.order.status in (Order.STATUS_PAID, Order.STATUS_PENDING) and (
not self.order.invoices.exists()
or self.order.invoices.filter(is_cancellation=True).count() >= self.order.invoices.filter(is_cancellation=False).count()
@@ -1584,7 +1584,7 @@ class OrderInvoiceCreate(OrderView):
order.status in (Order.STATUS_PAID, Order.STATUS_PENDING)
and order.invoices.filter(is_cancellation=True).count() >= order.invoices.filter(is_cancellation=False).count()
)
if self.request.event.settings.get('invoice_generate') not in ('admin', 'user', 'paid', 'True') or not invoice_qualified(order):
if self.request.event.settings.get('invoice_generate') not in ('admin', 'user', 'paid', 'user_paid', 'True') or not invoice_qualified(order):
messages.error(self.request, _('You cannot generate an invoice for this order.'))
elif has_inv:
messages.error(self.request, _('An invoice for this order already exists.'))
@@ -2241,8 +2241,6 @@ class OrderContactChange(OrderView):
changed = True
self.order.secret = generate_secret()
for op in self.order.all_positions.all():
op.web_secret = generate_secret()
op.save(update_fields=["web_secret"])
assign_ticket_secret(
self.request.event, position=op, force_invalidate=True, save=True
)

View File

@@ -4,8 +4,8 @@ msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 14:20+0000\n"
"PO-Revision-Date: 2025-01-14 09:56+0000\n"
"Last-Translator: Nikolai <nikolai@lengefeldt.de>\n"
"PO-Revision-Date: 2024-11-04 13:44+0000\n"
"Last-Translator: Katrine Tella <ktl@hjoerring.dk>\n"
"Language-Team: Danish <https://translate.pretix.eu/projects/pretix/pretix/da/"
">\n"
"Language: 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.9.2\n"
"X-Generator: Weblate 5.8.1\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -20841,7 +20841,7 @@ msgstr "Nej, gå tilbage"
#: pretix/control/templates/pretixcontrol/order/approve.html:25
msgid "Yes, approve order"
msgstr "Ja, godkend bestilling"
msgstr "Ja, annullér bestilling"
#: pretix/control/templates/pretixcontrol/order/cancel.html:6
#: pretix/control/templates/pretixcontrol/order/cancel.html:10

View File

@@ -5,8 +5,8 @@ msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 14:20+0000\n"
"PO-Revision-Date: 2025-01-10 10:00+0000\n"
"Last-Translator: Martin Gross <gross@rami.io>\n"
"PO-Revision-Date: 2024-12-16 16:15+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix/de/"
">\n"
"Language: de\n"
@@ -14,7 +14,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.9.2\n"
"X-Generator: Weblate 5.8.4\n"
"X-Poedit-Bookmarks: -1,-1,904,-1,-1,-1,-1,-1,-1,-1\n"
#: pretix/_base_settings.py:79
@@ -19542,7 +19542,7 @@ msgid ""
msgstr ""
"Wenn Sie komplexere Funktionen wie zusätzliche Produkte, Produktvarianten "
"oder freie Kontingentstrukturen nutzen wollen, können Sie dies später über "
"den Konfigurationsbereich Produkte in der linken Navigationsleiste tun. "
"den Konfigurationsbereich \"Produkte\" in der linken Navigationsleiste tun. "
"Keine Sorge, alles was Sie hier eingeben, können Sie später noch ändern."
#: pretix/control/templates/pretixcontrol/event/quick_setup.html:132
@@ -32366,7 +32366,7 @@ msgstr "Wir versuchen nun, diese Zusatzprodukte für Sie zu buchen!"
#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:28
msgid "Additional options for"
msgstr "Zusätzliche Optionen für"
msgstr "Zusätzliche Einstellungen für"
#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:64
msgid "More recommendations"

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 14:20+0000\n"
"PO-Revision-Date: 2025-01-10 10:00+0000\n"
"Last-Translator: Martin Gross <gross@rami.io>\n"
"PO-Revision-Date: 2024-12-16 16:28+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"
@@ -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.9.2\n"
"X-Generator: Weblate 5.8.4\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -19511,7 +19511,7 @@ msgstr ""
"Wenn du komplexere Funktionen wie zusätzliche Produkte, Produktvarianten "
"oder freie Kontingentstrukturen nutzen willst, kannst du dies später über "
"den Konfigurationsbereich \"Produkte\" in der linken Navigationsleiste tun. "
"Keine Sorge, alles was du hier eingibst, kannst du später noch ändern."
"Keine Sorge, alles was du hier gibst, kannst du später noch ändern."
#: pretix/control/templates/pretixcontrol/event/quick_setup.html:132
#: pretix/control/views/event.py:357
@@ -19524,7 +19524,7 @@ msgid ""
"your event, but if you're in a hurry and want to get started quickly, here's "
"a short version:"
msgstr ""
"Wir empfehlen, dass du dir die Zeit nimmst und die Einstellungen deiner "
"Wir empfehlen, dass du dich die Zeit nimmst und die Einstellungen deiner "
"Veranstaltungen in Ruhe durchgehst. Wenn du aber schnell loslegen willst, "
"ist hier die Kurzversion:"
@@ -32309,7 +32309,7 @@ msgstr "Wir versuchen nun, diese Zusatzprodukte für dich zu buchen!"
#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:28
msgid "Additional options for"
msgstr "Zusätzliche Optionen für"
msgstr "Zusätzliche Einstellungen für"
#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:64
msgid "More recommendations"

View File

@@ -8,16 +8,16 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 14:20+0000\n"
"PO-Revision-Date: 2024-12-22 00:00+0000\n"
"Last-Translator: Dimitris Tsimpidis <tsimpidisd@gmail.com>\n"
"Language-Team: Greek <https://translate.pretix.eu/projects/pretix/pretix/el/>"
"\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"
"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.9.2\n"
"X-Generator: Weblate 5.5.5\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -36881,8 +36881,8 @@ msgid ""
"If you're looking to configure this installation, please <a %(a_attr)s>head "
"over here</a>."
msgstr ""
"Αν θέλετε να διαμορφώσετε αυτήν την εγκατάσταση, παρακαλούμε να <a %(a_attr)"
"s>κατευθυνθείτε εδώ</a>."
"Αν θέλετε να διαμορφώσετε αυτήν την εγκατάσταση, παρακαλούμε να "
"%(a_attr)ατευθυνθείτε εδώ</a>."
#: pretix/presale/templates/pretixpresale/index.html:24
msgid "Enjoy!"

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 14:20+0000\n"
"PO-Revision-Date: 2024-12-22 00:00+0000\n"
"Last-Translator: Dimitris Tsimpidis <tsimpidisd@gmail.com>\n"
"PO-Revision-Date: 2019-10-03 19:00+0000\n"
"Last-Translator: Chris Spy <chrispiropoulou@hotmail.com>\n"
"Language-Team: Greek <https://translate.pretix.eu/projects/pretix/pretix-js/"
"el/>\n"
"Language: el\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.9.2\n"
"X-Generator: Weblate 3.5.1\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -31,7 +31,7 @@ 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"
@@ -64,7 +64,7 @@ msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42
msgid "SEPA Direct Debit"
msgstr "Τραπεζική μεταφορά"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43
msgid "Bancontact"
@@ -79,8 +79,10 @@ msgid "SOFORT"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46
#, fuzzy
#| msgid "Yes"
msgid "eps"
msgstr "EPS"
msgstr "Ναι"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
msgid "MyBank"
@@ -145,11 +147,11 @@ msgstr "Συνέχεια"
#: 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 "Επιβεβαίωση πληρωμής…"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:254
msgid "Payment method unavailable"
msgstr "Μη διαθέσιμος τρόπος πληρωμής"
msgstr ""
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:15
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39
@@ -174,8 +176,10 @@ msgid "Total"
msgstr "Σύνολο"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291
#, fuzzy
#| msgid "Contacting Stripe …"
msgid "Contacting your bank …"
msgstr "Επικοινωνία με την τράπεζα …"
msgstr "Επικοινωνία με το Stripe …"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list"

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 14:20+0000\n"
"PO-Revision-Date: 2025-01-04 19:00+0000\n"
"Last-Translator: Hector <hector@demandaeventos.es>\n"
"PO-Revision-Date: 2024-12-17 18:00+0000\n"
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix/"
"es/>\n"
"Language: es\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.9.2\n"
"X-Generator: Weblate 5.8.4\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -121,11 +121,11 @@ msgstr "Ruso"
#: pretix/_base_settings.py:104
msgid "Slovak"
msgstr "Eslovaco"
msgstr "eslovaco"
#: pretix/_base_settings.py:105
msgid "Swedish"
msgstr "Sueco"
msgstr "sueco"
#: pretix/_base_settings.py:106
msgid "Spanish"
@@ -162,38 +162,37 @@ msgstr "pretixSCAN (solo en línea, sin sincronización de pedidos)"
#: pretix/api/models.py:39 pretix/base/models/customers.py:402
msgid "Application name"
msgstr "Nombre de aplicación"
msgstr "Nombre de Aplicación"
#: pretix/api/models.py:42 pretix/base/models/customers.py:421
msgid "Redirection URIs"
msgstr "URI de redirección"
msgstr "URI de Redirección"
#: pretix/api/models.py:43 pretix/base/models/customers.py:422
msgid "Allowed URIs list, space separated"
msgstr "Lista de URIs permitidas, separadas por espacio"
msgstr "Lista de URI permitida, separada por espacio"
#: pretix/api/models.py:47
msgid "Allowed Post Logout URIs list, space separated"
msgstr ""
"Lista de URIs después del cierre de sesión permitidas, separadas por espacios"
msgstr "Lista de URI permitidas, separadas por espacios"
#: pretix/api/models.py:51 pretix/base/models/customers.py:406
#: pretix/plugins/paypal/payment.py:113 pretix/plugins/paypal2/payment.py:110
msgid "Client ID"
msgstr "ID de cliente"
msgstr "ID Cliente"
#: pretix/api/models.py:55
msgid "Client secret"
msgstr "Secreto de cliente"
msgstr "Clave Secreta"
#: pretix/api/models.py:116
msgid "Enable webhook"
msgstr "Habilitar webhooks"
msgstr "Habilitar webhook"
#: pretix/api/models.py:117
#: pretix/control/templates/pretixcontrol/organizers/webhooks.html:36
msgid "Target URL"
msgstr "URL de destino"
msgstr "URL destino"
#: pretix/api/models.py:118 pretix/base/models/devices.py:122
#: pretix/base/models/organizer.py:286
@@ -221,7 +220,7 @@ msgstr "Comentario"
#: pretix/api/serializers/cart.py:168 pretix/api/serializers/order.py:1384
msgid "The product \"{}\" is not assigned to a quota."
msgstr "El producto \"{}\" no está asignado a una cuota."
msgstr "El producto \"{}\" no tiene asignada una cuota."
#: pretix/api/serializers/checkin.py:65 pretix/base/models/event.py:1667
#: pretix/base/models/items.py:1905 pretix/base/models/items.py:2163
@@ -266,11 +265,11 @@ msgstr "Plugin restringido: '{name}'."
#: pretix/api/serializers/item.py:359
#, python-brace-format
msgid "Item meta data property '{name}' does not exist."
msgstr "La propiedad '{name}' de metadatos del elemento no existe."
msgstr "Los metadatos de propiedad '{name}' no existe."
#: pretix/api/serializers/item.py:207 pretix/control/forms/item.py:1269
msgid "The bundled item must not be the same item as the bundling one."
msgstr "El artículo agrupado no debe ser el mismo que el del paquete."
msgstr "El artículo en el paquete no debe ser el paquete."
#: pretix/api/serializers/item.py:210 pretix/control/forms/item.py:1271
msgid "The bundled item must not have bundles on its own."
@@ -281,8 +280,8 @@ msgid ""
"Updating add-ons, bundles, or variations via PATCH/PUT is not supported. "
"Please use the dedicated nested endpoint."
msgstr ""
"Actualizar los add-ons, paquetes o variaciones por medio de PATCH/PUT no "
"es soportado. Por favor, use el endpoint dedicado para esta finalidad."
"Actualizando los add-ons, paquetes o variaciones por medio de PATCH/PUT no "
"es soportado. Use un punto dedicado para esta finalidad."
#: pretix/api/serializers/item.py:306
msgid "Only admission products can currently be personalized."
@@ -305,13 +304,12 @@ msgid ""
"Updating options via PATCH/PUT is not supported. Please use the dedicated "
"nested endpoint."
msgstr ""
"Actualizando las opciones por medio de PATCH/PUT no es soportado. Por "
"favor, use el endpoint dedicado para esta finalidad."
"Actualizando las opciones por medio de PATCH/PUT no es soportado. Use un "
"punto dedicado para esta finalidad."
#: pretix/api/serializers/item.py:533 pretix/control/forms/item.py:177
msgid "Question cannot depend on a question asked during check-in."
msgstr ""
"La pregunta no puede depender de otra pregunta realizada durante el check-in."
msgstr "La pregunta no debe depender de otra realizada durante el check-in."
#: pretix/api/serializers/item.py:538 pretix/control/forms/item.py:182
msgid "Circular dependency between questions detected."
@@ -319,7 +317,7 @@ msgstr "Se ha detectado una dependencia circular entre las preguntas."
#: pretix/api/serializers/item.py:543 pretix/control/forms/item.py:191
msgid "This type of question cannot be asked during check-in."
msgstr "Este tipo de pregunta no se puede preguntar durante el check-in."
msgstr "Este tipo de pregunta no se puede hacer durante el check-in."
#: pretix/api/serializers/item.py:546 pretix/control/forms/item.py:199
msgid "This type of question cannot be shown during check-in."
@@ -330,19 +328,19 @@ msgid ""
"A medium with the same identifier and type already exists in your organizer "
"account."
msgstr ""
"Un medio con el mismo identificador y tipo ya existe en tu cuenta de "
"organizador."
"Ya existe un medio con el mismo identificador en tu cuenta de organizador o "
"en otra afiliada."
#: pretix/api/serializers/order.py:78
#, python-brace-format
msgid "\"{input}\" is not a valid choice."
msgstr "\"{input}\" no es una opción valida."
msgstr "\"{input}\" no es una entrada valida."
#: pretix/api/serializers/order.py:1345 pretix/api/views/cart.py:224
#: pretix/base/services/orders.py:1530
#, python-brace-format
msgid "The selected seat \"{seat}\" is not available."
msgstr "El asiento seleccionado {seat} no está disponible."
msgstr "La butaca seleccionada {seat} no está disponible."
#: pretix/api/serializers/order.py:1371 pretix/api/serializers/order.py:1378
msgid "The product \"{}\" is not available on this date."
@@ -353,12 +351,12 @@ msgid ""
"There is not enough quota available on quota \"{}\" to perform the operation."
msgstr ""
"No hay suficiente cuota disponible en la cuota \"{}\" para realizar esta "
"operación."
"operacion."
#: pretix/api/serializers/organizer.py:103
#: pretix/control/forms/organizer.py:888 pretix/presale/forms/customer.py:445
msgid "An account with this email address is already registered."
msgstr "Una cuenta con esta dirección de correo electrónico ya está registrada."
msgstr "Una cuenta con esta dirección de correo ya está registrada."
#: pretix/api/serializers/organizer.py:236
#: pretix/control/forms/organizer.py:737
@@ -366,13 +364,13 @@ msgid ""
"A gift card with the same secret already exists in your or an affiliated "
"organizer account."
msgstr ""
"Una tarjeta regalo con el mismo secreto ya existe en tu cuenta de "
"Ya existe una tarjeta regalo con el mismo secreto en tu cuenta de "
"organizador o en otra afiliada."
#: pretix/api/serializers/organizer.py:327
#: pretix/control/views/organizer.py:769
msgid "pretix account invitation"
msgstr "Invitación a la cuenta pretix"
msgstr "invitación a la cuenta pretix"
#: pretix/api/serializers/organizer.py:349
#: pretix/control/views/organizer.py:868
@@ -388,7 +386,7 @@ msgstr "Este usuario ya tiene permisos para este equipo."
msgid ""
"The specified voucher has already been used the maximum number of times."
msgstr ""
"El vale de compra utilizado ya ha sido utilizado el máximo número de veces "
"El vale de compra empleado ya ha sido utilizado el número máximo de veces "
"permitido."
#: pretix/api/views/checkin.py:610 pretix/api/views/checkin.py:617
@@ -407,7 +405,7 @@ msgstr ""
#: pretix/api/views/order.py:607 pretix/control/views/orders.py:1588
#: pretix/presale/views/order.py:742 pretix/presale/views/order.py:815
msgid "You cannot generate an invoice for this order."
msgstr "No puedes generar una factura para este pedido."
msgstr "No se puede generar una factura para este pedido."
#: pretix/api/views/order.py:612 pretix/control/views/orders.py:1590
#: pretix/presale/views/order.py:744 pretix/presale/views/order.py:817
@@ -428,7 +426,7 @@ msgstr ""
#: pretix/api/webhooks.py:237 pretix/base/notifications.py:233
msgid "New order placed"
msgstr "Se hizo un nuevo pedido"
msgstr "Se hizo nuevo pedido"
#: pretix/api/webhooks.py:241 pretix/base/notifications.py:239
msgid "New order requires approval"
@@ -455,7 +453,7 @@ msgstr "Pedido caducado"
#: pretix/api/webhooks.py:261
msgid "Order expiry date changed"
msgstr "Fecha de caducidad del pedido modificada"
msgstr "Se ha modificado la fecha de caducidad del pedido"
#: pretix/api/webhooks.py:265 pretix/base/notifications.py:269
msgid "Order information changed"
@@ -463,16 +461,16 @@ msgstr "Información de pedido modificada"
#: pretix/api/webhooks.py:269 pretix/base/notifications.py:275
msgid "Order contact address changed"
msgstr "Dirección de contacto del pedido modificada"
msgstr "Cambiar la dirección de contacto del pedido"
#: pretix/api/webhooks.py:273 pretix/base/notifications.py:281
#: pretix/control/templates/pretixcontrol/event/mail.html:102
msgid "Order changed"
msgstr "Pedido cambiado"
msgstr "Perdido cambiado"
#: pretix/api/webhooks.py:277
msgid "Refund of payment created"
msgstr "Orden de devolución de pago creada"
msgstr "Devolución del pago creado"
#: pretix/api/webhooks.py:281 pretix/base/notifications.py:293
msgid "External refund of payment"
@@ -496,23 +494,23 @@ msgstr "Devolución fallida del pago"
#: pretix/api/webhooks.py:301
msgid "Payment confirmed"
msgstr "Pago confirmado"
msgstr "Pago confimado"
#: pretix/api/webhooks.py:305
msgid "Order approved"
msgstr "Pedido aprobado"
msgstr "Perdido aprobado"
#: pretix/api/webhooks.py:309
msgid "Order denied"
msgstr "Pedido denegado"
msgstr "Perdido denegado"
#: pretix/api/webhooks.py:313
msgid "Order deleted"
msgstr "Pedido eliminado"
msgstr "Perdido borrado"
#: pretix/api/webhooks.py:317
msgid "Ticket checked in"
msgstr "Entrada escaneada"
msgstr "Entrada comprobada"
#: pretix/api/webhooks.py:321
msgid "Ticket check-in reverted"
@@ -533,7 +531,7 @@ msgstr "Evento eliminado"
#: pretix/api/webhooks.py:337
msgctxt "subevent"
msgid "Event series date added"
msgstr "Fechas de la serie de eventos añadidas"
msgstr "Fecha de inicio de la serie de eventos creada"
#: pretix/api/webhooks.py:341
msgctxt "subevent"
@@ -571,15 +569,15 @@ msgstr "Modo de pruebas de la tienda ha sido desactivado"
#: pretix/api/webhooks.py:370
msgid "Waiting list entry added"
msgstr "Elemento agregado a la lista de espera"
msgstr "Agregado a la lista de espera"
#: pretix/api/webhooks.py:374
msgid "Waiting list entry changed"
msgstr "Elemento de la lista de espera cambiado"
msgstr "Entrada a la lista de espera"
#: pretix/api/webhooks.py:378
msgid "Waiting list entry deleted"
msgstr "Elemento de la lista de espera eliminado"
msgstr "Entrada a la lista de espera eliminada"
#: pretix/api/webhooks.py:382
msgid "Waiting list entry received voucher"
@@ -612,11 +610,11 @@ msgstr "Este campo es obligatorio."
#: pretix/base/addressvalidation.py:213
msgid "Enter a postal code in the format XXX."
msgstr "Ingresa el código postal en el formato XXXXX."
msgstr "Ingresa el código postal en el formato XXX."
#: pretix/base/addressvalidation.py:222 pretix/base/addressvalidation.py:224
msgid "Enter a postal code in the format XXXX."
msgstr "Ingresa un código postal en el formato XXXXX."
msgstr "Ingresa un código postal en el formato XXX."
#: pretix/base/auth.py:146
#, python-brace-format
@@ -657,7 +655,7 @@ msgstr "Contraseña"
#: pretix/base/auth.py:176 pretix/base/auth.py:183
msgid "Your password must contain both numeric and alphabetic characters."
msgstr "Su contraseña debe contener caracteres alfanuméricos."
msgstr "Su contraseña debe contener caracteres numéricos y alfabéticos."
#: pretix/base/auth.py:202 pretix/base/auth.py:212
#, python-format
@@ -689,7 +687,7 @@ msgstr ""
#: pretix/base/context.py:45
#, python-brace-format
msgid "powered by {name} based on <a {a_attr}>pretix</a>"
msgstr "desarrollado por {name} basado en <a {a_attr}>pretix</a>"
msgstr "hecho posible por {name} basado en <a {a_attr}>pretix</a>"
#: pretix/base/context.py:52
#, python-format
@@ -703,7 +701,7 @@ msgstr "Código fuente"
#: pretix/base/customersso/oidc.py:61
#, python-brace-format
msgid "Configuration option \"{name}\" is missing."
msgstr "La opción de configuración \"{name}\" falta."
msgstr "La opción de configuración \"{name}\" no existe."
#: pretix/base/customersso/oidc.py:69 pretix/base/customersso/oidc.py:74
#, python-brace-format
@@ -723,7 +721,7 @@ msgstr "Proveedor SSO incompatible: \"{error}\"."
#: pretix/base/customersso/oidc.py:111
#, python-brace-format
msgid "You are not requesting \"{scope}\"."
msgstr "No estas solicitando \"{scope}\"."
msgstr "No esta solicitando \"{scope}\"."
#: pretix/base/customersso/oidc.py:117
#, python-brace-format
@@ -731,8 +729,8 @@ msgid ""
"You are requesting scope \"{scope}\" but provider only supports these: "
"{scopes}."
msgstr ""
"Estás solicitando la funcionalidad \"{scope}\", pero el proveedor solo "
"admite estos: {scopes}."
"Está solicitando el scope \"{scope}\", pero el proveedor solo admite estos: "
"{scopes}."
#: pretix/base/customersso/oidc.py:127
#, python-brace-format
@@ -740,7 +738,7 @@ msgid ""
"You are requesting field \"{field}\" but provider only supports these: "
"{fields}."
msgstr ""
"Estás solicitando el campo \"{field}\", pero el proveedor solo admite estos: "
"Está solicitando el campo \"{field}\", pero el proveedor solo admite estos: "
"{fields}."
#: pretix/base/customersso/oidc.py:137
@@ -759,7 +757,7 @@ msgstr ""
#: pretix/presale/views/customer.py:862
#, python-brace-format
msgid "Login was not successful. Error message: \"{error}\"."
msgstr "El inicio de sesión no tuvo éxito. Mensaje de error: \"{error}\"."
msgstr "El inicio de sesión no fue exitoso. Mensaje de error: \"{error}\"."
#: pretix/base/customersso/oidc.py:236
msgid ""
@@ -810,7 +808,7 @@ msgstr "Excel combinado (.xlsx)"
#: pretix/base/exporters/answers.py:54
msgid "Question answer file uploads"
msgstr "Subida de archivo de preguntas y respuestas"
msgstr "Cargas de archivos de respuestas a preguntas"
#: pretix/base/exporters/answers.py:55 pretix/base/exporters/json.py:52
#: pretix/base/exporters/mail.py:53 pretix/base/exporters/orderlist.py:87
@@ -893,12 +891,12 @@ msgstr "Todas las fechas"
#: pretix/base/exporters/customers.py:49 pretix/control/navigation.py:606
#: pretix/control/templates/pretixcontrol/organizers/edit.html:132
msgid "Customer accounts"
msgstr "Cuentas de clientes"
msgstr "Cuenta de cliente"
#: pretix/base/exporters/customers.py:51
msgctxt "export_category"
msgid "Customer accounts"
msgstr "Cuentas de clientes"
msgstr "Cuenta de cliente"
#: pretix/base/exporters/customers.py:52
msgid "Download a spreadsheet of all currently registered customer accounts."
@@ -912,7 +910,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/checkout_customer.html:36
#: pretix/presale/templates/pretixpresale/organizers/customer_base.html:37
msgid "Customer ID"
msgstr "ID de cliente"
msgstr "ID Cliente"
#: pretix/base/exporters/customers.py:65
#: pretix/control/templates/pretixcontrol/organizers/customer.html:32
@@ -1109,7 +1107,7 @@ msgstr ""
#: pretix/base/exporters/dekodi.py:105
#, python-brace-format
msgid "Event ticket {event}-{code}"
msgstr "Entrada para el evento {event}-{code}"
msgstr "Entrada para evento {event}-{code}"
#: pretix/base/exporters/dekodi.py:234 pretix/base/exporters/invoices.py:74
#: pretix/base/exporters/orderlist.py:128
@@ -1204,12 +1202,12 @@ msgstr "Hora de admisión"
#: pretix/base/exporters/events.py:65 pretix/base/models/event.py:598
#: pretix/base/models/event.py:1484 pretix/control/forms/subevents.py:93
msgid "Start of presale"
msgstr "Inicio de la preventa"
msgstr "Inicio de preventa"
#: pretix/base/exporters/events.py:66 pretix/base/models/event.py:592
#: pretix/base/models/event.py:1478 pretix/control/forms/subevents.py:99
msgid "End of presale"
msgstr "Finalización de la preventa"
msgstr "Finalización de preventa"
#: pretix/base/exporters/events.py:67 pretix/base/exporters/invoices.py:351
#: pretix/base/models/event.py:604 pretix/base/models/event.py:1490
@@ -1219,7 +1217,7 @@ msgstr "Ubicación"
#: pretix/base/exporters/events.py:68 pretix/base/models/event.py:607
#: pretix/base/models/event.py:1493
msgid "Latitude"
msgstr "Latitud"
msgstr "Lalitud"
#: pretix/base/exporters/events.py:69 pretix/base/models/event.py:615
#: pretix/base/models/event.py:1501
@@ -1246,7 +1244,7 @@ msgstr "Comentario interno"
#: pretix/control/templates/pretixcontrol/orders/refunds.html:50
#: pretix/control/templates/pretixcontrol/search/payments.html:93
msgid "Payment provider"
msgstr "Proveedor de pago"
msgstr "Proveedor de pagos"
#: pretix/base/exporters/invoices.py:84 pretix/base/exporters/invoices.py:86
#: pretix/control/forms/filter.py:206 pretix/control/forms/filter.py:1020
@@ -1272,7 +1270,7 @@ msgstr "Todas las facturas"
#: pretix/base/exporters/invoices.py:127
msgid "Download all invoices created by the system as a ZIP file of PDF files."
msgstr ""
"Descargue todas las facturas creadas por el sistema en un archivo ZIP de "
"Descargue todas las facturas creadas por el sistema como un archivo ZIP de "
"archivos PDF."
#: pretix/base/exporters/invoices.py:178
@@ -1446,7 +1444,7 @@ msgstr "País"
#: pretix/base/exporters/invoices.py:211 pretix/base/exporters/invoices.py:337
msgid "Tax ID"
msgstr "CIF"
msgstr "IVA-ID"
#: pretix/base/exporters/invoices.py:212 pretix/base/exporters/invoices.py:220
#: pretix/base/exporters/invoices.py:338 pretix/base/exporters/invoices.py:346
@@ -1490,7 +1488,7 @@ msgstr "Destinatario de la factura:"
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:83
#: pretix/presale/templates/pretixpresale/event/order.html:307
msgid "Company"
msgstr "Empresa"
msgstr "Compañía"
#: pretix/base/exporters/invoices.py:215 pretix/base/exporters/invoices.py:341
msgid "Street address"
@@ -3420,7 +3418,7 @@ msgstr "Formato de facturas predeterminado (carta de estilo europeo)"
#: pretix/base/invoice.py:947
msgctxt "invoice"
msgid "(Please quote at all times.)"
msgstr "(Por favor cite en todo momento.)"
msgstr "{Por favor, siempre seleccionar quota.}"
#: pretix/base/invoice.py:994
msgid "Simplified invoice renderer"
@@ -4567,13 +4565,13 @@ msgstr "Transacción manual"
#, python-format
msgctxt "invoice"
msgid "Tax ID: %s"
msgstr "CIF: %s"
msgstr "IVA-ID: %s"
#: pretix/base/models/invoices.py:191 pretix/base/services/invoices.py:139
#, python-format
msgctxt "invoice"
msgid "VAT-ID: %s"
msgstr "CIF: %s"
msgstr "IVA-ID: %s"
#: pretix/base/models/items.py:93
msgid "Category name"
@@ -5969,7 +5967,7 @@ msgstr "Tarifa de envío"
#: pretix/base/models/orders.py:2286
msgid "Service fee"
msgstr "Gastos de gestión"
msgstr "Tarifa por servicio"
#: pretix/base/models/orders.py:2287
#: pretix/control/templates/pretixcontrol/order/index.html:156

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -8,16 +8,16 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 14:20+0000\n"
"PO-Revision-Date: 2024-12-27 11:45+0000\n"
"Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n"
"Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/"
"pretix-js/ja/>\n"
"PO-Revision-Date: 2022-03-15 00:00+0000\n"
"Last-Translator: Yuriko Matsunami <y.matsunami@enobyte.com>\n"
"Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/pretix-"
"js/ja/>\n"
"Language: ja\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.9.2\n"
"X-Generator: Weblate 4.8\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -35,28 +35,28 @@ 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 "PayPalクレジット"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39
msgid "Credit Card"
msgstr "クレジットカード"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40
msgid "PayPal Pay Later"
msgstr "PayPal後払い"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41
msgid "iDEAL"
@@ -76,15 +76,17 @@ 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
#, fuzzy
#| msgid "Yes"
msgid "eps"
msgstr "eps"
msgstr "はい"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
msgid "MyBank"
msgstr "MyBank"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48
msgid "Przelewy24"
@@ -92,35 +94,35 @@ msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49
msgid "Verkkopankki"
msgstr "Verkkopankki"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50
msgid "PayU"
msgstr "PayU"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:51
msgid "BLIK"
msgstr "BLIK"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:52
msgid "Trustly"
msgstr "Trustly"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:53
msgid "Zimpler"
msgstr "Zimpler"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:54
msgid "Maxima"
msgstr "Maxima"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:55
msgid "OXXO"
msgstr "OXXO"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:56
msgid "Boleto"
msgstr "Boleto"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:57
msgid "WeChat Pay"
@@ -128,7 +130,7 @@ msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58
msgid "Mercado Pago"
msgstr "Mercado Pago"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
@@ -142,11 +144,11 @@ msgstr "次へ"
#: 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 "お支払いの確認中…"
msgstr "お支払い内容の確認"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:254
msgid "Payment method unavailable"
msgstr "支払い方法が利用できません"
msgstr ""
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:15
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39
@@ -164,7 +166,7 @@ msgstr "売上合計"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …"
msgstr "Stripeに接続中…"
msgstr "お問い合わせはこちら"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total"
@@ -212,11 +214,11 @@ msgstr "入口"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit"
msgstr "退出"
msgstr "出"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…"
msgstr "チケットのスキャン又は検索を行い、リターンを押す…"
msgstr "チケットのスキャン検索を行い、エンターキーで確定してください"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more"
@@ -237,7 +239,7 @@ msgstr "キャンセル"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Confirmed"
msgstr "確認済み"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Approval pending"
@@ -443,7 +445,7 @@ msgstr "の後"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "="
msgstr "="
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product"
@@ -463,11 +465,11 @@ msgstr "現在の日時"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr "現在の曜日 (1 = 月曜日, 7 = 日曜日)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status"
msgstr "現在の登録ステータス"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries"
@@ -478,32 +480,40 @@ msgid "Number of previous entries since midnight"
msgstr "0時から現在までの入力件数"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
#, fuzzy
#| msgid "Number of previous entries"
msgid "Number of previous entries since"
msgstr "この時点から今までの入力件数"
msgstr "こまでの入力件数"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
#, fuzzy
#| msgid "Number of previous entries"
msgid "Number of previous entries before"
msgstr "この時点より前に入力された件数"
msgstr "これまでの入力件数"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry"
msgstr "これまでの入力日数"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry since"
msgstr "この時点より後に入力が行われた日数"
msgstr "これまでの入力日数"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
#, fuzzy
#| msgid "Number of days with a previous entry"
msgid "Number of days with a previous entry before"
msgstr "この時点より前に入力が行われた日数"
msgstr "これまでの入力日数"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
msgid "Minutes since last entry (-1 on first entry)"
msgstr "最後の登録からの経過分数(最初の登録は-1"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
msgid "Minutes since first entry (-1 on first entry)"
msgstr "最初のとうろくからの経過分数(最初の登録は-1)"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)"
@@ -547,17 +557,17 @@ msgstr "分"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate"
msgstr "複製"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status"
msgid "present"
msgstr "出席"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status"
msgid "absent"
msgstr "欠席"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR"
@@ -572,8 +582,10 @@ msgid "Group of objects"
msgstr "オブジェクトグループ"
#: pretix/static/pretixcontrol/js/ui/editor.js:899
#, fuzzy
#| msgid "Text object"
msgid "Text object (deprecated)"
msgstr "テキストオブジェクト (廃止済)"
msgstr "テキストオブジェクト"
#: pretix/static/pretixcontrol/js/ui/editor.js:901
#, fuzzy
@@ -661,11 +673,11 @@ msgstr "選択したもののみ"
#: pretix/static/pretixcontrol/js/ui/main.js:808
msgid "Enter page number between 1 and %(max)s."
msgstr "1以上%(max)s以下のページ番号を入力。"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:811
msgid "Invalid page number."
msgstr "無効なページ番号。"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/main.js:969
msgid "Use a different name internally"
@@ -744,44 +756,49 @@ msgstr "現地時間:"
#: pretix/static/pretixpresale/js/walletdetection.js:39
msgid "Google Pay"
msgstr "Google Pay"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:16
msgctxt "widget"
msgid "Quantity"
msgstr "数量"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:17
msgctxt "widget"
msgid "Decrease quantity"
msgstr "数量を減らす"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:18
msgctxt "widget"
msgid "Increase quantity"
msgstr "数量を増やす"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:19
msgctxt "widget"
msgid "Price"
msgstr "価格"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:20
#, fuzzy
#| msgid "Selected only"
msgctxt "widget"
msgid "Select"
msgstr "選択"
msgstr "選択したもののみ"
#: pretix/static/pretixpresale/js/widget/widget.js:21
#, javascript-format
#, fuzzy, javascript-format
#| msgid "Selected only"
msgctxt "widget"
msgid "Select %s"
msgstr "%sを選択"
msgstr "選択したもののみ"
#: pretix/static/pretixpresale/js/widget/widget.js:22
#, javascript-format
#, fuzzy, javascript-format
#| msgctxt "widget"
#| msgid "See variations"
msgctxt "widget"
msgid "Select variant %s"
msgstr "バリアント %sを選択"
msgstr "バリエーションを確認する"
#: pretix/static/pretixpresale/js/widget/widget.js:23
msgctxt "widget"
@@ -845,19 +862,25 @@ msgid "Only available with a voucher"
msgstr "クーポンをお持ちの方のみ"
#: pretix/static/pretixpresale/js/widget/widget.js:35
#, fuzzy
#| msgctxt "widget"
#| msgid "currently available: %s"
msgctxt "widget"
msgid "Not yet available"
msgstr "提供開始前"
msgstr "現在%s使用可能"
#: pretix/static/pretixpresale/js/widget/widget.js:36
msgctxt "widget"
msgid "Not available anymore"
msgstr "今後の提供不可"
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:37
#, fuzzy
#| msgctxt "widget"
#| msgid "currently available: %s"
msgctxt "widget"
msgid "Currently not available"
msgstr "現時点で提供不可"
msgstr "現在%s使用可能"
#: pretix/static/pretixpresale/js/widget/widget.js:38
#, javascript-format
@@ -892,7 +915,7 @@ msgstr "チケットショップを開く"
#: pretix/static/pretixpresale/js/widget/widget.js:44
msgctxt "widget"
msgid "The cart could not be created. Please try again later"
msgstr "カート作成できません。後ほど再度お試しください"
msgstr "カート作成に失敗しました。再試行してください"
#: pretix/static/pretixpresale/js/widget/widget.js:45
msgctxt "widget"
@@ -906,7 +929,7 @@ msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:47
msgctxt "widget"
msgid "Waiting list"
msgstr "空席待ちリスト"
msgstr "待機リスト"
#: pretix/static/pretixpresale/js/widget/widget.js:48
msgctxt "widget"
@@ -948,14 +971,20 @@ msgid "Continue"
msgstr "続ける"
#: pretix/static/pretixpresale/js/widget/widget.js:56
#, fuzzy
#| msgctxt "widget"
#| msgid "See variations"
msgctxt "widget"
msgid "Show variants"
msgstr "バリエーションを表示"
msgstr "バリエーションを確認する"
#: pretix/static/pretixpresale/js/widget/widget.js:57
#, fuzzy
#| msgctxt "widget"
#| msgid "See variations"
msgctxt "widget"
msgid "Hide variants"
msgstr "バリエーションを隠す"
msgstr "バリエーションを確認する"
#: pretix/static/pretixpresale/js/widget/widget.js:58
msgctxt "widget"
@@ -1004,9 +1033,6 @@ msgid ""
"add yourself to the waiting list. We will then notify if seats are available "
"again."
msgstr ""
"現在、一部またはすべてのカテゴリでチケットが売り切れています。ご希望に応じて"
"、ご自身で空席待ちリストに追加することができます。その後、空席が出来次第お知"
"らせします。"
#: pretix/static/pretixpresale/js/widget/widget.js:67
msgctxt "widget"

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 14:20+0000\n"
"PO-Revision-Date: 2025-01-11 21:00+0000\n"
"Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n"
"PO-Revision-Date: 2023-04-06 02:00+0000\n"
"Last-Translator: 전윤수 <jeonyunsoo123@gmail.com>\n"
"Language-Team: Korean <https://translate.pretix.eu/projects/pretix/pretix/ko/"
">\n"
"Language: ko\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.9.2\n"
"X-Generator: Weblate 4.16.4\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -163,15 +163,17 @@ msgstr "어플리케이션 이름"
#: pretix/api/models.py:42 pretix/base/models/customers.py:421
msgid "Redirection URIs"
msgstr "리다이렉션 URI"
msgstr "리다이렉션URI"
#: pretix/api/models.py:43 pretix/base/models/customers.py:422
msgid "Allowed URIs list, space separated"
msgstr "허용된 URI 리스트, 스페이스로 구분"
#: pretix/api/models.py:47
#, fuzzy
#| msgid "Allowed URIs list, space separated"
msgid "Allowed Post Logout URIs list, space separated"
msgstr "공백으로 구분된 허용된 로그아웃 후 URI 목록"
msgstr "허용된 URI 리스트, 스페이스로 구분"
#: pretix/api/models.py:51 pretix/base/models/customers.py:406
#: pretix/plugins/paypal/payment.py:113 pretix/plugins/paypal2/payment.py:110
@@ -199,7 +201,7 @@ msgstr "모든 이벤트 (향후 생성될 이벤트들도 포함)"
#: pretix/api/models.py:119 pretix/base/models/devices.py:123
#: pretix/base/models/organizer.py:287
msgid "Limit to events"
msgstr "이러한 이벤트로 제한하"
msgstr "다음 이벤트로 제한하"
#: pretix/api/models.py:120 pretix/base/exporters/orderlist.py:284
#: pretix/base/exporters/orderlist.py:1077
@@ -17952,8 +17954,10 @@ msgid "December"
msgstr ""
#: pretix/control/templates/pretixcontrol/global_sysreport.html:32
#, fuzzy
#| msgid "Generate tickets"
msgid "Generate report"
msgstr "보고서를 생성"
msgstr "티켓 생성"
#: pretix/control/templates/pretixcontrol/global_update.html:7
msgid "Update check results"
@@ -19891,8 +19895,11 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/orders/bulk_action.html:5
#: pretix/control/templates/pretixcontrol/orders/bulk_action.html:7
#, fuzzy
#| msgid "1 order"
#| msgid_plural "%(s)s orders"
msgid "Modify orders"
msgstr "주문을 수정"
msgstr "%(s)s개 주문"
#: pretix/control/templates/pretixcontrol/orders/bulk_action.html:12
#, python-format
@@ -22084,8 +22091,11 @@ msgid "Begin"
msgstr ""
#: pretix/control/templates/pretixcontrol/subevents/index.html:176
#, fuzzy
#| msgid "1 order"
#| msgid_plural "%(s)s orders"
msgid "Show orders"
msgstr "주문을 표시"
msgstr "%(s)s개 주문"
#: pretix/control/templates/pretixcontrol/subevents/index.html:187
msgctxt "subevent"
@@ -26618,8 +26628,10 @@ msgid ""
msgstr ""
#: pretix/plugins/returnurl/views.py:37
#, fuzzy
#| msgid "Redirection URIs"
msgid "Base redirection URLs"
msgstr "기본 리다이렉션 URL"
msgstr "리다이렉션URI"
#: pretix/plugins/returnurl/views.py:38
msgid ""
@@ -27303,8 +27315,10 @@ msgid "Publishable key"
msgstr ""
#: pretix/plugins/stripe/payment.py:280
#, fuzzy
#| msgid "Generate tickets"
msgid "Generate API keys"
msgstr "API 키 생성"
msgstr "티켓 생성"
#: pretix/plugins/stripe/payment.py:282
msgid ""
@@ -28481,8 +28495,11 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/base.html:127
#: pretix/presale/templates/pretixpresale/event/base.html:201
#, fuzzy
#| msgid "This ticket has been used once."
#| msgid_plural "This ticket has been used %(count)s times."
msgid "This ticket shop is currently in test mode."
msgstr "이 티켓 상점은 현재 테스트 모드입니다."
msgstr "티켓이 %(count)s회 사용되었습니다."
#: pretix/presale/templates/pretixpresale/event/base.html:130
#: pretix/presale/templates/pretixpresale/event/base.html:204
@@ -29744,8 +29761,11 @@ msgid "Shop offline"
msgstr ""
#: pretix/presale/templates/pretixpresale/event/offline.html:9
#, fuzzy
#| msgid "This ticket has been used once."
#| msgid_plural "This ticket has been used %(count)s times."
msgid "This ticket shop is currently turned off."
msgstr "이 티켓 상점은 현재 비활성화되어 있습니다."
msgstr "티켓이 %(count)s회 사용되었습니다."
#: pretix/presale/templates/pretixpresale/event/offline.html:10
msgid "It is only accessible to authenticated team members."
@@ -30188,8 +30208,11 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/position_modify.html:5
#: pretix/presale/templates/pretixpresale/event/position_modify.html:8
#, fuzzy
#| msgid "1 order"
#| msgid_plural "%(s)s orders"
msgid "Modify ticket"
msgstr "티켓 수정"
msgstr "%(s)s개 주문"
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4
#: pretix/presale/templates/pretixpresale/event/resend_link.html:11
@@ -30715,7 +30738,7 @@ msgstr ""
#: pretix/presale/views/cart.py:546
msgid "The products have been successfully added to your cart."
msgstr "제품이 장바구니에 성공적으로 추가되었습니다."
msgstr "성공적으로 추가되었습니다."
#: pretix/presale/views/cart.py:570 pretix/presale/views/event.py:537
#: pretix/presale/views/widget.py:377

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 14:20+0000\n"
"PO-Revision-Date: 2024-12-29 22:00+0000\n"
"Last-Translator: Wiktor Przybylski <wikprzybylski@gmail.com>\n"
"PO-Revision-Date: 2024-10-29 21:00+0000\n"
"Last-Translator: Anarion Dunedain <anarion80@gmail.com>\n"
"Language-Team: Polish <https://translate.pretix.eu/projects/pretix/pretix/pl/"
">\n"
"Language: pl\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.9.2\n"
"X-Generator: Weblate 5.8.1\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -3077,7 +3077,7 @@ msgstr "Proszę wprowadzić nazwę firmy."
#: pretix/base/forms/questions.py:1176
msgid "You need to provide your name."
msgstr "Proszę wprowadzić swoje imię i nazwisko."
msgstr "Proszę wprowadzić swoję imie i nazwisko."
#: pretix/base/forms/user.py:51 pretix/control/forms/users.py:43
msgid ""
@@ -10866,7 +10866,7 @@ msgid ""
msgstr ""
"Witaj,\n"
"\n"
"Płatność za {event} się powiodła. Dziękujemy!\n"
"Płatność za {event} się powiodła. Dziękujmy!\n"
"\n"
"{payment_info}\n"
"\n"
@@ -19747,8 +19747,10 @@ msgid "Calculation"
msgstr "Anulowanie"
#: pretix/control/templates/pretixcontrol/event/tax_edit.html:64
#, fuzzy
#| msgid "Reason:"
msgid "Reason"
msgstr "Powód"
msgstr "Powód:"
#: pretix/control/templates/pretixcontrol/event/tax_edit.html:137
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:251

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 14:20+0000\n"
"PO-Revision-Date: 2025-01-10 20:00+0000\n"
"Last-Translator: David Vaz <davidmgvaz@gmail.com>\n"
"PO-Revision-Date: 2024-12-13 08: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.9.2\n"
"X-Generator: Weblate 5.8.4\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -34876,7 +34876,7 @@ msgstr "Nenhuma associação é armazenada em sua conta."
#| msgid "+ %(count)s invited"
msgid "%(counter)s item"
msgid_plural "%(counter)s items"
msgstr[0] "+%(count)s convidado"
msgstr[0] "+%(count)s convidados"
msgstr[1] "+%(count)s convidados"
#: pretix/presale/templates/pretixpresale/organizers/customer_orders.html:78

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 14:20+0000\n"
"PO-Revision-Date: 2025-01-04 01:00+0000\n"
"Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n"
"PO-Revision-Date: 2024-08-02 23:00+0000\n"
"Last-Translator: baris gormez <vbgormez@gmail.com>\n"
"Language-Team: Turkish <https://translate.pretix.eu/projects/pretix/pretix/"
"tr/>\n"
"Language: tr\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.9.2\n"
"X-Generator: Weblate 5.6.2\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -465,7 +465,7 @@ msgstr "Siparişin süresi doldu"
#: pretix/api/webhooks.py:261
msgid "Order expiry date changed"
msgstr "Siparişin son kullanma tarihi değiştirildi"
msgstr "Siparişin son tarihi değiştirildi."
#: pretix/api/webhooks.py:265 pretix/base/notifications.py:269
msgid "Order information changed"
@@ -494,11 +494,11 @@ msgstr "Müşteri tarafından iade talep edildi"
#: pretix/api/webhooks.py:289
msgid "Refund of payment completed"
msgstr "Ödemenin iadesi tamamlandı"
msgstr "Ödeme iadesi tamamlandı."
#: pretix/api/webhooks.py:293
msgid "Refund of payment canceled"
msgstr "Ödemenin iadesi iptal edildi"
msgstr "İade iptal edildi."
#: pretix/api/webhooks.py:297
msgid "Refund of payment failed"
@@ -1041,8 +1041,10 @@ msgid "Name"
msgstr "Ad"
#: pretix/base/exporters/customers.py:77 pretix/base/models/customers.py:99
#, fuzzy
#| msgid "This account is inactive."
msgid "Account active"
msgstr "Hesap aktif"
msgstr "Bu hesap aktif değildir."
#: pretix/base/exporters/customers.py:78 pretix/base/models/customers.py:100
#, fuzzy
@@ -1190,13 +1192,17 @@ msgstr ""
"tarihinin her zaman sipariş veya ödeme tarihine uygun olmadığını unutmayın."
#: pretix/base/exporters/events.py:47
#, fuzzy
#| msgid "Event date"
msgid "Event data"
msgstr "Etkinlik verileri"
msgstr "Etkinlik tarihi"
#: pretix/base/exporters/events.py:48
#, fuzzy
#| msgid "Event date"
msgctxt "export_category"
msgid "Event data"
msgstr "Etkinlik verileri"
msgstr "Etkinlik tarihi"
#: pretix/base/exporters/events.py:49
msgid ""
@@ -1851,7 +1857,7 @@ msgstr "Bekleme listesi"
#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:171
#: pretix/control/templates/pretixcontrol/subevents/detail.html:149
msgid "Available from"
msgstr "Şuradan temin edilebilir"
msgstr "Mevcut"
#: pretix/base/exporters/items.py:81 pretix/base/models/discount.py:85
#: pretix/base/models/items.py:229 pretix/base/models/items.py:285
@@ -4373,8 +4379,10 @@ msgid "Profile data (name, addresses)"
msgstr "Yeni bir tarih oluştur"
#: pretix/base/models/customers.py:414
#, fuzzy
#| msgid "Event date"
msgid "Client type"
msgstr "Müşteri türü"
msgstr "Etkinlik tarihi"
#: pretix/base/models/customers.py:417
#, fuzzy
@@ -8219,8 +8227,10 @@ msgstr ""
#: pretix/base/services/cancelevent.py:229
#: pretix/base/services/cancelevent.py:287
#, fuzzy
#| msgid "Event date"
msgid "Event canceled"
msgstr "Etkinlik iptal edildi"
msgstr "Etkinlik tarihi"
#: pretix/base/services/cart.py:101 pretix/base/services/modelimport.py:194
#: pretix/base/services/orders.py:150
@@ -9069,9 +9079,6 @@ msgid ""
"place at {date}, however you already used the same membership for a "
"different ticket at the same time."
msgstr ""
"{date}'de gerçekleşen bir etkinlik için \"{type}\" türünde bir üyelik "
"kullanmaya çalışıyorsunuz, ancak aynı üyeliği aynı anda farklı bir bilet "
"için zaten kullandınız."
#: pretix/base/services/modelimport.py:53
#, python-brace-format
@@ -10828,7 +10835,7 @@ msgstr "Seçilen ürün aktif değil veya fiyat ayarlı değil."
#: pretix/base/settings.py:1659
msgid "Hide all unavailable dates from calendar or list views"
msgstr "Takvim veya liste görünümlerinden tüm uygun olmayan tarihleri gizle"
msgstr ""
#: pretix/base/settings.py:1660 pretix/base/settings.py:1671
msgid ""
@@ -11285,8 +11292,8 @@ msgid ""
msgstr ""
"Merhaba,\n"
"\n"
"Bu mesajı size bağlantıyı göndermemizi istediğiniz için alıyorsunuz\n"
"to your order for {event}.\n"
"Bu mesajı size {event} etkinliğine ait siparişiniz ile ilgili bağlantıyı "
"göndermemizi istediğiniz için aldınız\n"
"\n"
"Bu adresten sipariş ayrıntılarınızı değiştirebilir ve siparişinizin durumunu "
"görebilirsiniz\n"
@@ -14136,12 +14143,12 @@ msgid "Text (if an incomplete payment was received)"
msgstr "Siparişiniz için ödeme alındı: {code}"
#: pretix/control/forms/event.py:1169
#, fuzzy
#| msgid "This plugin allows you to receive payments via bank transfer "
msgid ""
"This email only applies to payment methods that can receive incomplete "
"payments, such as bank transfer."
msgstr ""
"Bu e-posta yalnızca banka havalesi gibi eksik ödemeler alabilen ödeme "
"yöntemleri için geçerlidir."
msgstr "Bu eklenti banka havalesi yoluyla ödeme almanızı sağlar "
#: pretix/control/forms/event.py:1237
msgid ""
@@ -14935,8 +14942,10 @@ msgid "Date filter"
msgstr "Tarih geçmişi"
#: pretix/control/forms/filter.py:2332 pretix/plugins/reports/exporters.py:690
#, fuzzy
#| msgid "Filter by tag"
msgid "Filter by…"
msgstr "Filtrele"
msgstr "Etikete göre filtrele"
#: pretix/control/forms/filter.py:2334 pretix/plugins/reports/exporters.py:692
#, fuzzy
@@ -15992,10 +16001,6 @@ msgid ""
"series is only partially canceled since it consists of tickets for multiple "
"dates."
msgstr ""
"Seçilen ücret türleri iade edilmeyecek, bunun yerine iptal ücretine "
"eklenecektir. Bir etkinlik serisindeki bir sipariş, birden fazla tarih için "
"biletlerden oluştuğu için yalnızca kısmen iptal edildiğinde ücretler asla "
"iade edilmez."
#: pretix/control/forms/orders.py:905
#, fuzzy
@@ -16186,9 +16191,11 @@ msgid "This will be attached to every email."
msgstr "Bu her e-postaya eklenecektir. Mevcut yer tutucuları: {event}"
#: pretix/control/forms/organizer.py:681
#, fuzzy
#| msgid "Event date"
msgctxt "webhooks"
msgid "Event types"
msgstr "Etkinlik türleri"
msgstr "Etkinlik tarihi"
#: pretix/control/forms/organizer.py:713
#, fuzzy
@@ -16711,9 +16718,9 @@ msgid "Position #{posid} created: {item} ({price})."
msgstr "Poziyon #{posid} oluşturuldu: {item} ({price})."
#: pretix/control/logdisplay.py:162
#, fuzzy, python-brace-format
#, python-brace-format
msgid "A new secret has been generated for position #{posid}."
msgstr "#{Posid} pozisyonu için yeni bir sır oluşturuldu."
msgstr "Pozisyon #{posid} için yeni bir sır oluşturuldu"
#: pretix/control/logdisplay.py:166
#, fuzzy, python-brace-format
@@ -18362,8 +18369,10 @@ msgstr "Soruyu sil"
#: pretix/control/navigation.py:494
#: pretix/control/templates/pretixcontrol/organizers/properties.html:5
#, fuzzy
#| msgid "Event date"
msgid "Event metadata"
msgstr "Olay meta verileri"
msgstr "Etkinlik tarihi"
#: pretix/control/navigation.py:515
#: pretix/control/templates/pretixcontrol/organizers/webhooks.html:6
@@ -19531,8 +19540,10 @@ msgid "Valid check-in"
msgstr "Check-in listeleri"
#: pretix/control/templates/pretixcontrol/checkin/simulator.html:68
#, fuzzy
#| msgid "Meta information"
msgid "Additional information required"
msgstr "Ek bilgi gerekli"
msgstr "Meta bilgisi"
#: pretix/control/templates/pretixcontrol/checkin/simulator.html:70
msgid ""
@@ -19709,8 +19720,8 @@ msgid ""
msgstr ""
"Merhaba,\n"
"\n"
"Bu, pretix hesabınızın hesap bilgilerinin\n"
"Değişti. Özellikle, aşağıdaki değişiklikler yapılmıştır:\n"
"pretix hesabınızdaki bilgiler değiştiği için bu e-postayı aldınız. Aşağıdaki "
"değişiklikler gerçekleşti:\n"
"\n"
"%(messages)s\n"
"\n"
@@ -19970,9 +19981,6 @@ msgid ""
"event and only retain the financial information such as the number and type "
"of tickets sold."
msgstr ""
"İsimler ve e-posta adresleri gibi kişisel verileri etkinliğinizden "
"kaldırabilir ve yalnızca satılan bilet sayısı ve türü gibi finansal "
"bilgileri saklayabilirsiniz."
#: pretix/control/templates/pretixcontrol/event/dangerzone.html:76
#: pretix/control/templates/pretixcontrol/event/dangerzone.html:89
@@ -20072,8 +20080,11 @@ msgid "Failed to retrieve geo coordinates"
msgstr ""
#: pretix/control/templates/pretixcontrol/event/fragment_geodata_autoupdate.html:5
#, fuzzy
#| msgctxt "subevent"
#| msgid "No dates"
msgid "Retrieving geo coordinates …"
msgstr "Coğrafi koordinatlar alınıyor …"
msgstr "Tarih yok"
#: pretix/control/templates/pretixcontrol/event/fragment_geodata_autoupdate.html:6
#, fuzzy
@@ -20980,10 +20991,6 @@ msgid ""
"quota, you might run into situations where people are sent an email from the "
"waiting list but still are unable to book a seat."
msgstr ""
"Bekleme listesi, kullanılabilirliği esas olarak kotalara göre belirler. Bir "
"oturma planı kullanıyorsanız ve mevcut koltuk sayınız mevcut kotadan azsa, "
"insanlara bekleme listesinden bir e-posta gönderildiği ancak yine de bir "
"koltuk ayırtamadıkları durumlarla karşılaşabilirsiniz."
#: pretix/control/templates/pretixcontrol/event/settings.html:366
msgid ""
@@ -21004,8 +21011,10 @@ msgid "Manage waiting list"
msgstr "Bekleme listesini etkinleştir"
#: pretix/control/templates/pretixcontrol/event/settings.html:396
#, fuzzy
#| msgid "Event date"
msgid "Item metadata"
msgstr "Öğe meta verileri"
msgstr "Etkinlik tarihi"
#: pretix/control/templates/pretixcontrol/event/settings.html:398
#, fuzzy
@@ -21381,8 +21390,10 @@ msgstr ""
"tarih ve saat ayarları ve etkinlik adını içeren metinler."
#: pretix/control/templates/pretixcontrol/events/create_foundation.html:7
#, fuzzy
#| msgid "Event date"
msgid "Event type"
msgstr "Etkinlik türü"
msgstr "Etkinlik tarihi"
#: pretix/control/templates/pretixcontrol/events/create_foundation.html:13
msgid "Singular event or non-event shop"
@@ -24879,10 +24890,6 @@ msgid ""
"data such as event metadata and POS transactions will persist until you "
"uninstall or reset the software manually."
msgstr ""
"Cihaz yazılımı destekliyorsa, siparişler gibi kişisel veriler bir sonraki "
"senkronizasyon denemesinde cihazdan silinecektir. Olay meta verileri ve POS "
"işlemleri gibi kişisel olmayan veriler, yazılımı manuel olarak kaldırana "
"veya sıfırlayana kadar devam edecektir."
#: pretix/control/templates/pretixcontrol/organizers/devices.html:10
msgid ""
@@ -25337,10 +25344,10 @@ msgid ""
"can later set for your events and re-use in places like ticket layouts. This "
"is an useful timesaver if you create lots and lots of events."
msgstr ""
"Burada, daha sonra etkinlikleriniz için ayarlayabileceğiniz ve bilet "
"Burada daha sonra etkinlikleriniz için ayarlayabileceğiniz ve bilet "
"düzenleri gibi yerlerde yeniden kullanabileceğiniz bir dizi meta veri "
"özelliği (yani değişkenler) tanımlayabilirsiniz. Bu, çok sayıda etkinlik "
"oluşturursanız yararlı bir zaman tasarrufudur."
"özelliği (yani değişkenler) tanımlayabilirsiniz. Çok sayıda etkinlik "
"oluşturursanız, bu yararlı bir zaman çizelgesidir."
#: pretix/control/templates/pretixcontrol/organizers/properties.html:15
#: pretix/control/templates/pretixcontrol/organizers/property_edit.html:9
@@ -25948,8 +25955,10 @@ msgstr "E-posta içeriği"
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_create.html:20
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_update.html:34
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:29
#, fuzzy
#| msgid "Bancontact"
msgid "Content"
msgstr "Içerik"
msgstr "Bancontact"
#: pretix/control/templates/pretixcontrol/pdf/index.html:270
#: pretix/control/templates/pretixcontrol/pdf/placeholders.html:50
@@ -27436,7 +27445,11 @@ msgid "Quota unlimited"
msgstr "Kota adı"
#: pretix/control/templates/pretixcontrol/waitinglist/index.html:240
#, python-format
#, fuzzy, python-format
#| msgid ""
#| "\n"
#| " Waiting, product %(num)sx available\n"
#| " "
msgid ""
"\n"
" Waiting, product %(num)sx "
@@ -27444,8 +27457,8 @@ msgid ""
" "
msgstr ""
"\n"
" Bekliyor, ürün %(num)sx mevcut\n"
" "
" Bekliyor, ürün %(num)sx mevcut\n"
" "
#: pretix/control/templates/pretixcontrol/waitinglist/index.html:246
msgid "Waiting, product unavailable"
@@ -27808,7 +27821,7 @@ msgstr "Yakında"
msgid "{num} order"
msgid_plural "{num} orders"
msgstr[0] "{num} sipariş"
msgstr[1] "{num} siparişler"
msgstr[1] "{num} sipariş"
#: pretix/control/views/discounts.py:67 pretix/control/views/discounts.py:109
#: pretix/control/views/discounts.py:214
@@ -27891,9 +27904,10 @@ msgid "invalid item"
msgstr "geçersiz öğe"
#: pretix/control/views/event.py:802
#, python-format
#, fuzzy, python-format
#| msgid "Your order: {code}"
msgid "Your order: %(code)s"
msgstr "Siparişiniz: %(code)s"
msgstr "Siparişiniz: {code}"
#: pretix/control/views/event.py:811
msgid "Unknown email renderer."
@@ -29807,8 +29821,10 @@ msgid "Only include tickets for dates on or after this date."
msgstr ""
#: pretix/plugins/badges/exporters.py:472
#, fuzzy
#| msgid "Event date"
msgid "End event date"
msgstr "Etkinlik bitiş tarihi"
msgstr "Etkinlik tarihi"
#: pretix/plugins/badges/exporters.py:475
#, fuzzy
@@ -35568,8 +35584,8 @@ msgid ""
" "
msgstr ""
"\n"
" %(Datetime)s için takvim\n"
" "
" Bekliyor, ürün %(num)sx mevcut\n"
" "
#: pretix/presale/templates/pretixpresale/event/index.html:48
msgid "Your cart, general information, add products to your cart"
@@ -36387,7 +36403,9 @@ msgid ""
" "
msgstr ""
"\n"
" %(start_date)s'den\n"
" ……………………………………………"
"itibaren %(start_date)s\n"
"………………………………………\n"
" "
#: pretix/presale/templates/pretixpresale/fragment_calendar_nav.html:12
@@ -36423,15 +36441,22 @@ msgid "to"
msgstr "için"
#: pretix/presale/templates/pretixpresale/fragment_day_calendar.html:119
#, python-format
#, fuzzy, python-format
#| msgid ""
#| "\n"
#| " from "
#| "%(start_date)s\n"
#| " "
msgid ""
"\n"
" from %(start_date)s\n"
" "
msgstr ""
"\n"
" %(start_date)s'den\n"
" "
" ……………………………………………"
"itibaren %(start_date)s\n"
"………………………………………\n"
" "
#: pretix/presale/templates/pretixpresale/fragment_login_status.html:5
#, fuzzy
@@ -36514,15 +36539,22 @@ msgid "Save selection"
msgstr "Veri seçimi"
#: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:82
#, python-format
#, fuzzy, python-format
#| msgid ""
#| "\n"
#| " from "
#| "%(start_date)s\n"
#| " "
msgid ""
"\n"
" from %(start_date)s\n"
" "
msgstr ""
"\n"
" %(start_date)s'den\n"
" "
" ……………………………………………"
"itibaren %(start_date)s\n"
"………………………………………\n"
" "
#: pretix/presale/templates/pretixpresale/index.html:7
msgid "Hello!"
@@ -36977,8 +37009,10 @@ msgid "This feature is only available in test mode."
msgstr "Bu geri ödeme şu anda işleme alınamaz."
#: pretix/presale/views/event.py:985
#, fuzzy
#| msgid "This account is inactive."
msgid "Time machine disabled!"
msgstr "Zaman makinesi devre dışı!"
msgstr "Bu hesap aktif değildir."
#: pretix/presale/views/order.py:368 pretix/presale/views/order.py:433
#: pretix/presale/views/order.py:514

View File

@@ -8,16 +8,16 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 14:20+0000\n"
"PO-Revision-Date: 2024-12-25 23:27+0000\n"
"Last-Translator: Aarni Heinonen <vamoosev@gmail.com>\n"
"Language-Team: Chinese (Simplified Han script) <https://translate.pretix.eu/"
"projects/pretix/pretix/zh_Hans/>\n"
"PO-Revision-Date: 2024-04-10 23:00+0000\n"
"Last-Translator: Shiiko <shiiko@xlclan.com>\n"
"Language-Team: Chinese (Simplified) <https://translate.pretix.eu/projects/"
"pretix/pretix/zh_Hans/>\n"
"Language: zh_Hans\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.9.2\n"
"X-Generator: Weblate 5.4.3\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -37,11 +37,11 @@ msgstr "阿拉伯语"
#: pretix/_base_settings.py:83
msgid "Basque"
msgstr "巴斯克语"
msgstr ""
#: pretix/_base_settings.py:84
msgid "Catalan"
msgstr "加泰罗尼亚语"
msgstr ""
#: pretix/_base_settings.py:85
msgid "Chinese (simplified)"
@@ -99,7 +99,7 @@ msgstr "拉脱维亚语"
#: pretix/_base_settings.py:98
msgid "Norwegian Bokmål"
msgstr "挪威语"
msgstr ""
#: pretix/_base_settings.py:99
msgid "Polish"
@@ -123,11 +123,11 @@ msgstr "俄语"
#: pretix/_base_settings.py:104
msgid "Slovak"
msgstr "斯洛伐克语"
msgstr ""
#: pretix/_base_settings.py:105
msgid "Swedish"
msgstr "瑞典语"
msgstr ""
#: pretix/_base_settings.py:106
msgid "Spanish"
@@ -172,8 +172,10 @@ msgid "Allowed URIs list, space separated"
msgstr "允许的 URIs 列表, 用空格分隔"
#: pretix/api/models.py:47
#, fuzzy
#| msgid "Allowed URIs list, space separated"
msgid "Allowed Post Logout URIs list, space separated"
msgstr "允许的注销后 URI 列表,以空格分隔"
msgstr "允许的 URIs 列表, 用空格分隔"
#: pretix/api/models.py:51 pretix/base/models/customers.py:406
#: pretix/plugins/paypal/payment.py:113 pretix/plugins/paypal2/payment.py:110
@@ -245,9 +247,10 @@ msgid "Meta data property '{name}' does not exist."
msgstr "元数据属性“{name}”不存在."
#: pretix/api/serializers/event.py:249 pretix/api/serializers/event.py:552
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid "Meta data property '{name}' does not exist."
msgid "Meta data property '{name}' does not allow value '{value}'."
msgstr "元数据属性“{name}”不允许值“{value}”。"
msgstr "元数据属性“{name}”不存在."
#: pretix/api/serializers/event.py:293
#, python-brace-format

View File

@@ -8,16 +8,16 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 14:20+0000\n"
"PO-Revision-Date: 2025-01-04 19:00+0000\n"
"Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n"
"Language-Team: Chinese (Traditional Han script) <https://translate.pretix.eu/"
"projects/pretix/pretix/zh_Hant/>\n"
"PO-Revision-Date: 2024-01-22 17:08+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: Chinese (Traditional) <https://translate.pretix.eu/projects/"
"pretix/pretix/zh_Hant/>\n"
"Language: zh_Hant\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.9.2\n"
"X-Generator: Weblate 5.3.1\n"
#: pretix/_base_settings.py:79
msgid "English"
@@ -37,11 +37,11 @@ msgstr "阿拉伯語"
#: pretix/_base_settings.py:83
msgid "Basque"
msgstr "巴斯克語"
msgstr ""
#: pretix/_base_settings.py:84
msgid "Catalan"
msgstr "嘉泰羅尼亞語"
msgstr ""
#: pretix/_base_settings.py:85
msgid "Chinese (simplified)"
@@ -85,7 +85,7 @@ msgstr "希臘語"
#: pretix/_base_settings.py:95
msgid "Indonesian"
msgstr "印尼語"
msgstr ""
#: pretix/_base_settings.py:96
msgid "Italian"
@@ -97,7 +97,7 @@ msgstr "拉脫維亞語"
#: pretix/_base_settings.py:98
msgid "Norwegian Bokmål"
msgstr "挪威博克馬爾語"
msgstr ""
#: pretix/_base_settings.py:99
msgid "Polish"
@@ -121,11 +121,11 @@ msgstr "俄語"
#: pretix/_base_settings.py:104
msgid "Slovak"
msgstr "斯洛伐克語"
msgstr ""
#: pretix/_base_settings.py:105
msgid "Swedish"
msgstr "瑞典語"
msgstr ""
#: pretix/_base_settings.py:106
msgid "Spanish"
@@ -582,8 +582,10 @@ msgid "Customer account changed"
msgstr "客戶帳戶電子郵件更改"
#: pretix/api/webhooks.py:394
#, fuzzy
#| msgid "The customer account has been anonymized."
msgid "Customer account anonymized"
msgstr "客戶帳戶已匿名化"
msgstr "客戶帳戶已匿名化"
#: pretix/base/addressvalidation.py:100 pretix/base/addressvalidation.py:103
#: pretix/base/addressvalidation.py:108 pretix/base/forms/questions.py:960
@@ -645,7 +647,7 @@ msgstr "密碼"
#: pretix/base/auth.py:176 pretix/base/auth.py:183
msgid "Your password must contain both numeric and alphabetic characters."
msgstr "您的密碼必須包含數字和字母字元。"
msgstr ""
#: pretix/base/auth.py:202 pretix/base/auth.py:212
#, python-format
@@ -653,7 +655,7 @@ msgid "Your password may not be the same as your previous password."
msgid_plural ""
"Your password may not be the same as one of your %(history_length)s previous "
"passwords."
msgstr[0] "您的密碼可能與您之前的 %(history_length)s密碼之一不同。"
msgstr[0] ""
#: pretix/base/channels.py:168
msgid "Online shop"
@@ -661,13 +663,13 @@ msgstr "網上商店"
#: pretix/base/channels.py:174
msgid "API"
msgstr "API"
msgstr ""
#: pretix/base/channels.py:175
msgid ""
"API sales channels come with no built-in functionality, but may be used for "
"custom integrations."
msgstr "API銷售渠道沒有內建功能但可用於自定義整合。"
msgstr ""
#: pretix/base/context.py:45
#, python-brace-format
@@ -2887,7 +2889,7 @@ msgstr "優惠券代碼"
#: pretix/base/forms/__init__.py:118
#, python-brace-format
msgid "You can use {markup_name} in this field."
msgstr "您可以在此欄位中使用{markup_name}。"
msgstr ""
#: pretix/base/forms/__init__.py:178
#, python-format
@@ -3087,8 +3089,6 @@ msgid ""
"up. Please note: to use literal \"{\" or \"}\", you need to double them as "
"\"{{\" and \"}}\"."
msgstr ""
"您的佔位符語法有誤。 請檢查佔位符上的開頭“{”和結尾“}”花括號是否匹配。 "
"請注意:要使用字面“{”或“}”,您需要將它們加倍為“{{”和“}}”。"
#: pretix/base/forms/validators.py:72 pretix/control/views/event.py:758
#, fuzzy, python-format
@@ -3097,9 +3097,10 @@ msgid "Invalid placeholder: {%(value)s}"
msgstr "無效的佔位元: %(value)ss"
#: pretix/base/forms/widgets.py:68
#, python-format
#, fuzzy, python-format
#| msgid "Sample city"
msgid "Sample: %s"
msgstr "範例: %s"
msgstr "範例城市"
#: pretix/base/forms/widgets.py:71
#, python-brace-format
@@ -3338,7 +3339,7 @@ msgstr ""
#: pretix/base/invoice.py:858
msgid "Default invoice renderer (European-style letter)"
msgstr "預設發票渲染器(歐式信件)"
msgstr ""
#: pretix/base/invoice.py:947
msgctxt "invoice"
@@ -3347,13 +3348,14 @@ msgstr "(請隨時報價)"
#: pretix/base/invoice.py:994
msgid "Simplified invoice renderer"
msgstr "簡化的發票渲染器"
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 "活動日期: {date_range}"
msgstr "活動日期區間"
#: pretix/base/media.py:71
msgid "Barcode / QR-Code"
@@ -3574,8 +3576,10 @@ msgid "Maximum usages"
msgstr "最大使用量"
#: pretix/base/modelimport_vouchers.py:79
#, fuzzy
#| msgid "Maximum number of items per order"
msgid "The maximum number of usages must be set."
msgstr "必須設定最大使用次數。"
msgstr "每項訂單的最大商品數量"
#: pretix/base/modelimport_vouchers.py:88 pretix/base/models/vouchers.py:205
msgid "Minimum usages"
@@ -3610,7 +3614,7 @@ msgstr "優惠券價值"
#: pretix/base/modelimport_vouchers.py:165
msgid "It is pointless to set a value without a price mode."
msgstr "在沒有價格模式的情況下設定值是沒有意義的。"
msgstr ""
#: pretix/base/modelimport_vouchers.py:237 pretix/base/models/items.py:2081
#: pretix/base/models/vouchers.py:272
@@ -3739,18 +3743,18 @@ msgstr ""
#: pretix/base/models/checkin.py:65
msgctxt "checkin"
msgid "Ignore check-ins on this list in statistics"
msgstr "忽略統計中此列表中的簽到"
msgstr ""
#: pretix/base/models/checkin.py:69
msgctxt "checkin"
msgid "Tickets with a check-in on this list should be considered \"used\""
msgstr "此列表中有簽到的門票應被視為「已使用」"
msgstr ""
#: pretix/base/models/checkin.py:70
msgid ""
"This is relevant in various situations, e.g. for deciding if a ticket can "
"still be canceled by the customer."
msgstr "這與各種情況有關,例如用於決定客戶是否仍然可以取消門票。"
msgstr ""
#: pretix/base/models/checkin.py:74
msgctxt "checkin"
@@ -4061,8 +4065,7 @@ msgid ""
"By default, the discount is applied across the same selection of products "
"than the condition for the discount given above. If you want, you can "
"however also select a different selection of products."
msgstr "預設情況下,折扣適用於與上述折扣條件相同的產品選擇。 "
"然而,如果您願意,您也可以選擇不同的產品。"
msgstr ""
#: pretix/base/models/discount.py:138
#, fuzzy
@@ -4353,7 +4356,7 @@ msgstr "對客戶顯示簽到次數"
msgid ""
"This field will be shown to filter events in the public event list and "
"calendar."
msgstr "將顯示此欄位,以過濾公共活動列表和日曆中的活動。"
msgstr ""
#: pretix/base/models/event.py:1731 pretix/control/forms/organizer.py:269
#: pretix/control/forms/organizer.py:273
@@ -5896,8 +5899,10 @@ msgid "Team members"
msgstr "團隊成員"
#: pretix/base/models/organizer.py:289
#, fuzzy
#| msgid "Do you really want to disable two-factor authentication?"
msgid "Require all members of this team to use two-factor authentication"
msgstr "要求該團隊的所有成員使用雙因素身份驗證"
msgstr "你真的要禁用兩步驟驗證嗎?"
#: pretix/base/models/organizer.py:290
msgid ""
@@ -7817,9 +7822,10 @@ msgid "number of entries before {datetime}"
msgstr "今日條目數數量"
#: pretix/base/services/checkin.py:320
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid "number of entries today"
msgid "number of days with an entry since {datetime}"
msgstr "自 {datetime}以來條目的天數"
msgstr "今日條目數數量"
#: pretix/base/services/checkin.py:321
#, fuzzy, python-brace-format
@@ -13801,8 +13807,10 @@ msgstr ""
"的所有部分VIP區除外。"
#: pretix/control/forms/item.py:664
#, fuzzy
#| msgid "The ordered product \"{item}\" is no longer available."
msgid "Show product with info on why its unavailable"
msgstr "顯示產品,並瞭解為什麼它不可用"
msgstr "訂購的產品“{item}”不再可用"
#: pretix/control/forms/item.py:677
msgid ""
@@ -18873,8 +18881,10 @@ msgid "Calculation"
msgstr "取消"
#: pretix/control/templates/pretixcontrol/event/tax_edit.html:64
#, fuzzy
#| msgid "Reason:"
msgid "Reason"
msgstr "理由"
msgstr "理由"
#: pretix/control/templates/pretixcontrol/event/tax_edit.html:137
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:251
@@ -19946,8 +19956,11 @@ msgid ""
msgstr "目前不可用,因為已設定此產品的有限時間範圍"
#: pretix/control/templates/pretixcontrol/items/discounts.html:111
#, fuzzy
#| msgctxt "discount"
#| msgid "Condition"
msgid "Condition:"
msgstr "條件:"
msgstr "條件"
#: pretix/control/templates/pretixcontrol/items/discounts.html:126
msgid "Applies to:"
@@ -22009,8 +22022,10 @@ msgid "Channel type"
msgstr "掃描"
#: pretix/control/templates/pretixcontrol/organizers/channel_delete.html:5
#, fuzzy
#| msgid "Sales channel"
msgid "Delete sales channel:"
msgstr "銷售管道:"
msgstr "銷售管道"
#: pretix/control/templates/pretixcontrol/organizers/channel_delete.html:10
#, fuzzy
@@ -22029,8 +22044,10 @@ msgid ""
msgstr "無法刪除此成員資格,因為它已在訂單中使用。將其結束日期更改為過去。"
#: pretix/control/templates/pretixcontrol/organizers/channel_edit.html:6
#, fuzzy
#| msgid "Sales channel"
msgid "Sales channel:"
msgstr "銷售管道:"
msgstr "銷售管道"
#: pretix/control/templates/pretixcontrol/organizers/channels.html:8
msgid ""
@@ -26437,8 +26454,10 @@ msgid "Login from new source detected"
msgstr "未檢測到訂購號"
#: pretix/helpers/security.py:170
#, fuzzy
#| msgid "Unknown country code."
msgid "Unknown country"
msgstr "未知國家"
msgstr "未知國家代碼."
#: pretix/multidomain/models.py:36
#, fuzzy
@@ -29466,7 +29485,7 @@ msgstr ""
#: pretix/plugins/stripe/payment.py:350 pretix/plugins/stripe/payment.py:1552
msgid "Alipay"
msgstr "支付寶"
msgstr "Alipay"
#: pretix/plugins/stripe/payment.py:358 pretix/plugins/stripe/payment.py:1564
msgid "Bancontact"
@@ -30051,12 +30070,16 @@ msgid "Enter the entity number, reference number, and amount."
msgstr ""
#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:25
#, fuzzy
#| msgid "Invoice number"
msgid "Entity number:"
msgstr "公司編號"
msgstr "發票編號"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:26
#, fuzzy
#| msgid "Reference code"
msgid "Reference number:"
msgstr "參考代碼:"
msgstr "參考代碼"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/pending.html:35
msgid ""
@@ -31133,9 +31156,10 @@ msgstr "新價格:"
#: pretix/presale/templates/pretixpresale/event/voucher.html:176
#: pretix/presale/templates/pretixpresale/event/voucher.html:329
#: pretix/presale/templates/pretixpresale/event/voucher.html:331
#, python-format
#, fuzzy, python-format
#| msgid "Modify price for %(item)s"
msgid "Modify price for %(item)s, at least %(price)s"
msgstr "修改%(item)s的價格,至少 %(price)s"
msgstr "修改%(item)s 的價格"
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:153
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:294
@@ -31239,12 +31263,16 @@ msgid "Enter a voucher code below to buy this product."
msgstr "在下面輸入優惠券代碼以購買此票。"
#: pretix/presale/templates/pretixpresale/event/fragment_availability.html:10
#, fuzzy
#| msgid "Not available"
msgid "Not available yet."
msgstr "尚不可用。"
msgstr "無法使用"
#: pretix/presale/templates/pretixpresale/event/fragment_availability.html:14
#, fuzzy
#| msgid "Not available"
msgid "Not available any more."
msgstr "不再可用。"
msgstr "無法使用"
#: pretix/presale/templates/pretixpresale/event/fragment_availability.html:19
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:85
@@ -32587,7 +32615,7 @@ msgid ""
" "
msgstr ""
"\n"
" %(start_date)s\n"
" from %(start_date)s\n"
" "
#: pretix/presale/templates/pretixpresale/fragment_calendar_nav.html:12
@@ -33104,8 +33132,10 @@ msgid "This feature is only available in test mode."
msgstr "此禮品卡只能在測試模式下使用。"
#: pretix/presale/views/event.py:985
#, fuzzy
#| msgid "This account is disabled."
msgid "Time machine disabled!"
msgstr "時間機器被禁用"
msgstr "此帳戶已禁用"
#: pretix/presale/views/order.py:368 pretix/presale/views/order.py:433
#: pretix/presale/views/order.py:514
@@ -33236,12 +33266,14 @@ msgid ""
msgstr "你不能將自己添加到候補名單中,因為該商品目前有貨。"
#: pretix/presale/views/waiting.py:180
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid ""
#| "We've added you to the waiting list. You will receive an email as soon as "
#| "this product gets available again."
msgid ""
"We've added you to the waiting list. We will send an email to {email} as "
"soon as this product gets available again."
msgstr "我們已將您列入候補名單。 "
"一旦該產品再次上市,我們將立即向{email}傳送電子郵件。"
msgstr "我們已將你添加到候補名單一旦該產品再次,您將收到一封電子郵件。"
#: pretix/presale/views/waiting.py:208
msgid "We could not find you on our waiting list."

View File

@@ -289,7 +289,7 @@ def _render_nup(input_files: List[str], num_pages: int, output_file: BytesIO, op
pass
try:
badges_pdf = PdfReader(input_files.pop(0))
badges_pdf = PdfReader(input_files.pop())
offset = 0
for i, chunk_indices in enumerate(_chunks(range(num_pages), badges_per_page * max_nup_pages)):
chunk = []
@@ -298,7 +298,7 @@ def _render_nup(input_files: List[str], num_pages: int, output_file: BytesIO, op
# file has beforehand
if j - offset >= len(badges_pdf.pages):
offset += len(badges_pdf.pages)
badges_pdf = PdfReader(input_files.pop(0))
badges_pdf = PdfReader(input_files.pop())
chunk.append(badges_pdf.pages[j - offset])
# Reset some internal state from pypdf. This will make it a little slower, but will prevent us from
# running out of memory if we process a really large file.

View File

@@ -37,7 +37,7 @@ class PayPalEnvironment(VendorPayPalEnvironment):
'payer_id': self.merchant_id
},
key=None,
algorithm="none",
algorithm=None,
)
return ""

View File

@@ -743,7 +743,7 @@ class SSOLoginReturnView(RedirectBackMixin, View):
popup_origin,
)
nonce, redirect_to = re.split("[%#§]", request.GET['state'], maxsplit=1) # Allow § and # for backwards-compatibility for a while
nonce, redirect_to = re.split("[%#§]", request.GET['state'], 1) # Allow § and # for backwards-compatibility for a while
if nonce != request.session.get(f'pretix_customerauth_{self.provider.pk}_nonce'):
return self._fail(

View File

@@ -710,7 +710,7 @@ def can_generate_invoice(event, order, ignore_payments=False):
and (
event.settings.get('invoice_generate') in ('user', 'True')
or (
event.settings.get('invoice_generate') == 'paid'
event.settings.get('invoice_generate') in ('paid', 'user_paid')
and order.status == Order.STATUS_PAID
)
) and (

View File

@@ -11,7 +11,7 @@
"@babel/core": "^7.26.0",
"@babel/preset-env": "^7.26.0",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-node-resolve": "^16.0.0",
"@rollup/plugin-node-resolve": "^15.3.0",
"rollup": "^2.79.1",
"rollup-plugin-vue": "^5.0.1",
"vue": "^2.7.16",
@@ -1522,9 +1522,9 @@
}
},
"node_modules/@rollup/plugin-node-resolve": {
"version": "16.0.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.0.tgz",
"integrity": "sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==",
"version": "15.3.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.0.tgz",
"integrity": "sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==",
"dependencies": {
"@rollup/pluginutils": "^5.0.1",
"@types/resolve": "1.20.2",
@@ -4761,9 +4761,9 @@
}
},
"@rollup/plugin-node-resolve": {
"version": "16.0.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.0.tgz",
"integrity": "sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==",
"version": "15.3.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.0.tgz",
"integrity": "sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==",
"requires": {
"@rollup/pluginutils": "^5.0.1",
"@types/resolve": "1.20.2",

View File

@@ -7,7 +7,7 @@
"@babel/core": "^7.26.0",
"@babel/preset-env": "^7.26.0",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-node-resolve": "^16.0.0",
"@rollup/plugin-node-resolve": "^15.3.0",
"vue": "^2.7.16",
"rollup": "^2.79.1",
"rollup-plugin-vue": "^5.0.1",

View File

@@ -169,7 +169,7 @@ pre[lang=is], input[lang=is], textarea[lang=is], div[lang=is] { background-image
pre[lang=it], input[lang=it], textarea[lang=it], div[lang=it] { background-image: url(static('pretixbase/img/flags/it.png')); }
pre[lang=jm], input[lang=jm], textarea[lang=jm], div[lang=jm] { background-image: url(static('pretixbase/img/flags/jm.png')); }
pre[lang=jo], input[lang=jo], textarea[lang=jo], div[lang=jo] { background-image: url(static('pretixbase/img/flags/jo.png')); }
pre[lang=ja], input[lang=ja], textarea[lang=ja], div[lang=ja] { background-image: url(static('pretixbase/img/flags/jp.png')); }
pre[lang=jp], input[lang=jp], textarea[lang=jp], div[lang=jp] { background-image: url(static('pretixbase/img/flags/jp.png')); }
pre[lang=ke], input[lang=ke], textarea[lang=ke], div[lang=ke] { background-image: url(static('pretixbase/img/flags/ke.png')); }
pre[lang=kg], input[lang=kg], textarea[lang=kg], div[lang=kg] { background-image: url(static('pretixbase/img/flags/kg.png')); }
pre[lang=kh], input[lang=kh], textarea[lang=kh], div[lang=kh] { background-image: url(static('pretixbase/img/flags/kh.png')); }

View File

@@ -497,51 +497,6 @@ def test_event_create_with_clone(token_client, organizer, event, meta_prop, urls
assert cloned_event.plugins == ""
@pytest.mark.django_db
@pytest.mark.parametrize("urlstyle", [
'/api/v1/organizers/{}/events/{}/clone/',
'/api/v1/organizers/{}/events/?clone_from={}',
])
def test_event_create_with_clone_migrate_sales_channels(token_client, organizer, event, meta_prop, urlstyle):
with scopes_disabled():
all_channels = list(organizer.sales_channels.values_list("identifier", flat=True))
resp = token_client.post(
urlstyle.format(organizer.slug, event.slug),
{
"name": {
"de": "Demo Konference 2020 Test",
"en": "Demo Conference 2020 Test"
},
"live": False,
"testmode": True,
"currency": "EUR",
"date_from": "2018-12-27T10:00:00Z",
"date_to": "2018-12-28T10:00:00Z",
"date_admission": "2018-12-27T08:00:00Z",
"is_public": False,
"presale_start": None,
"presale_end": None,
"location": None,
"slug": "2030",
"sales_channels": all_channels,
"meta_data": {
"type": "Workshop"
},
"plugins": [
"pretix.plugins.ticketoutputpdf"
],
"timezone": "Europe/Vienna"
},
format='json'
)
assert resp.status_code == 201
with scopes_disabled():
cloned_event = Event.objects.get(organizer=organizer.pk, slug='2030')
assert cloned_event.all_sales_channels
assert not cloned_event.limit_sales_channels.exists()
@pytest.mark.django_db
def test_event_create_with_clone_unknown_source(user, user_client, organizer, event):
with scopes_disabled():

View File

@@ -526,7 +526,6 @@ def test_order_regenerate_secrets(token_client, organizer, event, order):
s = order.secret
with scopes_disabled():
ps = order.positions.first().secret
psw = order.positions.first().web_secret
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/{}/regenerate_secrets/'.format(
organizer.slug, event.slug, order.code
@@ -537,7 +536,6 @@ def test_order_regenerate_secrets(token_client, organizer, event, order):
assert s != order.secret
with scopes_disabled():
assert ps != order.positions.first().secret
assert psw != order.positions.first().web_secret
@pytest.mark.django_db
@@ -545,7 +543,6 @@ def test_position_regenerate_secrets(token_client, organizer, event, order):
with scopes_disabled():
p = order.positions.first()
ps = p.secret
psw = p.web_secret
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orderpositions/{}/regenerate_secrets/'.format(
organizer.slug, event.slug, p.pk,
@@ -555,7 +552,6 @@ def test_position_regenerate_secrets(token_client, organizer, event, order):
p.refresh_from_db()
with scopes_disabled():
assert ps != p.secret
assert psw != p.web_secret
@pytest.mark.django_db

View File

@@ -1133,49 +1133,6 @@ def test_order_mark_paid_expired_seat_taken(client, env):
assert o.status == Order.STATUS_EXPIRED
@pytest.mark.django_db
def test_order_mark_paid_expired_blocked(client, env):
with scopes_disabled():
o = Order.objects.get(id=env[2].id)
o.expires = now() - timedelta(days=5)
o.status = Order.STATUS_EXPIRED
o.sales_channel = env[0].organizer.sales_channels.get(identifier="bar")
olddate = o.expires
o.save()
seat_a1 = env[0].seats.create(seat_number="A1", product=env[3], seat_guid="A1", blocked=True)
p = o.positions.first()
p.seat = seat_a1
p.save()
q = Quota.objects.create(event=env[0], size=100)
q.items.add(env[3])
client.login(email='dummy@dummy.dummy', password='dummy')
response = client.post('/control/event/dummy/dummy/orders/FOO/transition', {
'status': 'p',
'payment_date': now().date().isoformat(),
'amount': str(o.pending_sum),
'force': 'on'
}, follow=True)
assert b'alert-danger' in response.content
with scopes_disabled():
o = Order.objects.get(id=env[2].id)
assert o.expires.strftime("%Y-%m-%d %H:%M:%S") == olddate.strftime("%Y-%m-%d %H:%M:%S")
assert o.status == Order.STATUS_EXPIRED
env[0].settings.seating_allow_blocked_seats_for_channel = ["bar"]
response = client.post('/control/event/dummy/dummy/orders/FOO/transition', {
'status': 'p',
'payment_date': now().date().isoformat(),
'amount': str(o.pending_sum),
'force': 'on'
}, follow=True)
assert b'alert-success' in response.content
with scopes_disabled():
o = Order.objects.get(id=env[2].id)
assert o.status == Order.STATUS_PAID
@pytest.mark.django_db
def test_order_go_lowercase(client, env):
client.login(email='dummy@dummy.dummy', password='dummy')

View File

@@ -1604,8 +1604,6 @@ class EventLocaleTest(EventTestMixin, SoupTest):
self.event.settings.locales = ['de', 'en']
self.event.settings.locale = 'de'
self.event.settings.timezone = 'UTC'
self.event.date_from = datetime.datetime(2024, 12, 26, 14, 0, tzinfo=datetime.timezone.utc)
self.event.save()
def test_german_by_default(self):
response = self.client.get(
@@ -1621,7 +1619,7 @@ class EventLocaleTest(EventTestMixin, SoupTest):
'/%s/%s/' % (self.orga.slug, self.event.slug)
)
self.assertEqual(response.status_code, 200)
self.assertIn('Thu, Dec. 26th,', response.rendered_content)
self.assertIn('Fri, Dec. 26th,', response.rendered_content)
self.assertIn('14:00', response.rendered_content)
def test_english_region_US(self):
@@ -1631,7 +1629,7 @@ class EventLocaleTest(EventTestMixin, SoupTest):
'/%s/%s/' % (self.orga.slug, self.event.slug)
)
self.assertEqual(response.status_code, 200)
self.assertIn('Thu, Dec. 26th,', response.rendered_content)
self.assertIn('Fri, Dec. 26th,', response.rendered_content)
self.assertIn('2 p.m.', response.rendered_content)
def test_german_region_US(self):
@@ -1641,5 +1639,5 @@ class EventLocaleTest(EventTestMixin, SoupTest):
'/%s/%s/' % (self.orga.slug, self.event.slug)
)
self.assertEqual(response.status_code, 200)
self.assertIn('Do, 26. Dezember', response.rendered_content)
self.assertIn('Fr, 26. Dezember', response.rendered_content)
self.assertIn('14:00', response.rendered_content)

View File

@@ -874,6 +874,21 @@ class OrdersTest(BaseOrdersTest):
{}, follow=True)
assert 'alert-danger' in response.content.decode()
def test_invoice_create_onlypaid(self):
self.event.settings.set('invoice_generate', 'user_paid')
response = self.client.post(
'/%s/%s/order/%s/%s/invoice' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
{}, follow=True)
assert 'alert-danger' in response.content.decode()
self.order.status = Order.STATUS_PAID
self.order.save()
response = self.client.post(
'/%s/%s/order/%s/%s/invoice' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
{}, follow=True)
assert 'alert-success' in response.content.decode()
with scopes_disabled():
assert self.order.invoices.exists()
def test_invoice_create_duplicate(self):
self.event.settings.set('invoice_generate', 'user')
with scopes_disabled():