Compare commits

..

23 Commits

Author SHA1 Message Date
Raphael Michel
e2fe2500ba Code style 2025-01-15 17:20:40 +01:00
Mira Weller
13aee2b3bb fix RelativeDateTimeField.set_event: apply relative_to filter not only to minutes, but to days as well 2025-01-14 13:49:08 +01:00
Mira Weller
ba9d0823c7 use namedtuples for the parts of RelDate[Time]{Field,Widget} 2025-01-14 13:49:08 +01:00
Mira Weller
87768a2b74 fix bug in RelativeDateTimeField.clean
validate days relation_to instead of minutes relation_to when "Relative date" is selected
2025-01-14 13:49:08 +01:00
Raphael Michel
ff6b4ae7bf Translations: Allow to change field order for relative date form field (#4738) 2025-01-14 13:48:37 +01:00
Raphael Michel
6b5fd07535 Questions: Increase field size for min/max number (#4741) 2025-01-14 11:18:28 +01:00
Nikolai
7a423ebead Translations: Update Danish
Currently translated at 47.9% (2799 of 5836 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/da/

powered by weblate
2025-01-14 10:57:01 +01:00
Raphael Michel
62c028d9ac Fix order availability with blocked seeat (Z#23178286) (#4734) 2025-01-13 12:49:49 +01:00
Hijiri
57f5eeff82 Update name scheme examples, adapt addressing system for Japan 2025-01-13 10:51:24 +01:00
Hijiri Umemoto
d92e82a133 Translations: Update Japanese
Currently translated at 100.0% (5836 of 5836 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ja/

powered by weblate
2025-01-13 10:47:57 +01:00
Hijiri Umemoto
5704142fe1 Translations: Update Korean
Currently translated at 0.4% (26 of 5836 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ko/

powered by weblate
2025-01-13 10:47:57 +01:00
Hijiri Umemoto
8c5768912c Translations: Update Japanese
Currently translated at 100.0% (5836 of 5836 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ja/

powered by weblate
2025-01-13 10:47:57 +01:00
Hijiri Umemoto
934567c811 Translations: Update Japanese
Currently translated at 100.0% (5836 of 5836 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ja/

powered by weblate
2025-01-13 10:47:57 +01:00
David Vaz
b16f54fad9 Translations: Update Portuguese (Portugal)
Currently translated at 85.5% (4991 of 5836 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/pt_PT/

powered by weblate
2025-01-13 10:47:57 +01:00
Martin Gross
5dcd1f229b Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (5836 of 5836 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de_Informal/

powered by weblate
2025-01-10 19:21:20 +01:00
Martin Gross
40e4f8a05a Translations: Update German
Currently translated at 100.0% (5836 of 5836 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de/

powered by weblate
2025-01-10 19:21:20 +01:00
Hijiri Umemoto
8d9295a628 Translations: Update Japanese
Currently translated at 100.0% (5836 of 5836 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ja/

powered by weblate
2025-01-10 19:21:20 +01:00
Bernd Mohring
063e1e16a3 Translations: Update German (informal) (de_Informal)
Currently translated at 100.0% (5836 of 5836 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de_Informal/

powered by weblate
2025-01-10 19:21:20 +01:00
Hijiri Umemoto
b5733a433d Translations: Update Japanese
Currently translated at 100.0% (5836 of 5836 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ja/

powered by weblate
2025-01-10 19:21:20 +01:00
Bernd Mohring
454354f148 Translations: Update German
Currently translated at 100.0% (5836 of 5836 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de/

powered by weblate
2025-01-10 19:21:20 +01:00
Hijiri Umemoto
8480f45997 Translations: Update Japanese
Currently translated at 100.0% (5836 of 5836 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ja/

powered by weblate
2025-01-10 19:21:20 +01:00
Hijiri Umemoto
b909b0b4bd Translations: Update Japanese
Currently translated at 100.0% (5836 of 5836 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ja/

powered by weblate
2025-01-10 19:21:20 +01:00
Hijiri Umemoto
c4b45b7d95 Translations: Update Japanese
Currently translated at 100.0% (5836 of 5836 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ja/

powered by weblate
2025-01-10 19:21:20 +01:00
16 changed files with 368 additions and 232 deletions

View File

@@ -0,0 +1,23 @@
# 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' 'Question', null=True, blank=True, on_delete=models.SET_NULL, related_name='dependent_questions'
) )
dependency_values = MultiStringField(default=[]) dependency_values = MultiStringField(default=[])
valid_number_min = models.DecimalField(decimal_places=6, max_digits=16, null=True, blank=True, valid_number_min = models.DecimalField(decimal_places=6, max_digits=30, null=True, blank=True,
verbose_name=_('Minimum value'), verbose_name=_('Minimum value'),
help_text=_('Currently not supported in our apps and during check-in')) help_text=_('Currently not supported in our apps and during check-in'))
valid_number_max = models.DecimalField(decimal_places=6, max_digits=16, null=True, blank=True, valid_number_max = models.DecimalField(decimal_places=6, max_digits=30, null=True, blank=True,
verbose_name=_('Maximum value'), verbose_name=_('Maximum value'),
help_text=_('Currently not supported in our apps and during check-in')) help_text=_('Currently not supported in our apps and during check-in'))
valid_date_min = models.DateField(null=True, blank=True, 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): for i, op in enumerate(positions):
if op.seat: if op.seat:
if not op.seat.is_available(ignore_orderpos=op): if not op.seat.is_available(ignore_orderpos=op, sales_channel=self.sales_channel.identifier):
raise Quota.QuotaExceededException(error_messages['seat_unavailable'].format(seat=op.seat)) raise Quota.QuotaExceededException(error_messages['seat_unavailable'].format(seat=op.seat))
if force: if force:
continue continue

View File

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

View File

@@ -3557,8 +3557,8 @@ PERSON_NAME_SCHEMES = OrderedDict([
str(p) for p in [d.get('family_name', ''), d.get('given_name', '')] if p str(p) for p in [d.get('family_name', ''), d.get('given_name', '')] if p
), ),
'sample': { 'sample': {
'given_name': '泽东', 'family_name': '',
'family_name': '', 'given_name': '',
'_scheme': 'family_nospace_given', '_scheme': 'family_nospace_given',
}, },
}), }),
@@ -3609,8 +3609,8 @@ PERSON_NAME_SCHEMES = OrderedDict([
'concatenation': lambda d: str(d.get('full_name', '')), 'concatenation': lambda d: str(d.get('full_name', '')),
'concatenation_all_components': lambda d: str(d.get('full_name', '')) + " (" + d.get('latin_transcription', '') + ")", 'concatenation_all_components': lambda d: str(d.get('full_name', '')) + " (" + d.get('latin_transcription', '') + ")",
'sample': { 'sample': {
'full_name': '庄司', 'full_name': '山田花子',
'latin_transcription': 'Shōji', 'latin_transcription': 'Yamada Hanako',
'_scheme': 'full_transcription', '_scheme': 'full_transcription',
}, },
}), }),
@@ -3701,6 +3701,7 @@ COUNTRIES_WITH_STATE_IN_ADDRESS = {
'BR': (['State'], 'short'), 'BR': (['State'], 'short'),
'CA': (['Province', 'Territory'], 'short'), 'CA': (['Province', 'Territory'], 'short'),
# 'CN': (['Province', 'Autonomous region', 'Munincipality'], 'long'), # 'CN': (['Province', 'Autonomous region', 'Munincipality'], 'long'),
'JP': (['Prefecture'], 'long'),
'MY': (['State', 'Federal territory'], 'long'), 'MY': (['State', 'Federal territory'], 'long'),
'MX': (['State', 'Federal district'], 'short'), 'MX': (['State', 'Federal district'], 'short'),
'US': (['State', 'Outlying area', 'District'], 'short'), 'US': (['State', 'Outlying area', 'District'], 'short'),

View File

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

View File

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

View File

@@ -539,8 +539,6 @@ class ItemCreateForm(I18nModelForm):
v.pk = None v.pk = None
v.item = instance v.item = instance
v.save() v.save()
if not variation.all_sales_channels:
v.limit_sales_channels.set(variation.limit_sales_channels.all())
for mv in variation.meta_values.all(): for mv in variation.meta_values.all():
mv.pk = None mv.pk = None
mv.variation = v mv.variation = v

View File

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

View File

@@ -5,8 +5,8 @@ msgstr ""
"Project-Id-Version: 1\n" "Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 14:20+0000\n" "POT-Creation-Date: 2024-12-16 14:20+0000\n"
"PO-Revision-Date: 2024-12-16 16:15+0000\n" "PO-Revision-Date: 2025-01-10 10:00+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n" "Last-Translator: Martin Gross <gross@rami.io>\n"
"Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix/de/" "Language-Team: German <https://translate.pretix.eu/projects/pretix/pretix/de/"
">\n" ">\n"
"Language: de\n" "Language: de\n"
@@ -14,7 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.8.4\n" "X-Generator: Weblate 5.9.2\n"
"X-Poedit-Bookmarks: -1,-1,904,-1,-1,-1,-1,-1,-1,-1\n" "X-Poedit-Bookmarks: -1,-1,904,-1,-1,-1,-1,-1,-1,-1\n"
#: pretix/_base_settings.py:79 #: pretix/_base_settings.py:79
@@ -19542,7 +19542,7 @@ msgid ""
msgstr "" msgstr ""
"Wenn Sie komplexere Funktionen wie zusätzliche Produkte, Produktvarianten " "Wenn Sie komplexere Funktionen wie zusätzliche Produkte, Produktvarianten "
"oder freie Kontingentstrukturen nutzen wollen, können Sie dies später über " "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." "Keine Sorge, alles was Sie hier eingeben, können Sie später noch ändern."
#: pretix/control/templates/pretixcontrol/event/quick_setup.html:132 #: 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 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:28
msgid "Additional options for" msgid "Additional options for"
msgstr "Zusätzliche Einstellungen für" msgstr "Zusätzliche Optionen für"
#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:64 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:64
msgid "More recommendations" msgid "More recommendations"

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: 1\n" "Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 14:20+0000\n" "POT-Creation-Date: 2024-12-16 14:20+0000\n"
"PO-Revision-Date: 2024-12-16 16:28+0000\n" "PO-Revision-Date: 2025-01-10 10:00+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n" "Last-Translator: Martin Gross <gross@rami.io>\n"
"Language-Team: German (informal) <https://translate.pretix.eu/projects/" "Language-Team: German (informal) <https://translate.pretix.eu/projects/"
"pretix/pretix/de_Informal/>\n" "pretix/pretix/de_Informal/>\n"
"Language: de_Informal\n" "Language: de_Informal\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.8.4\n" "X-Generator: Weblate 5.9.2\n"
#: pretix/_base_settings.py:79 #: pretix/_base_settings.py:79
msgid "English" msgid "English"
@@ -19511,7 +19511,7 @@ msgstr ""
"Wenn du komplexere Funktionen wie zusätzliche Produkte, Produktvarianten " "Wenn du komplexere Funktionen wie zusätzliche Produkte, Produktvarianten "
"oder freie Kontingentstrukturen nutzen willst, kannst du dies später über " "oder freie Kontingentstrukturen nutzen willst, kannst du dies später über "
"den Konfigurationsbereich \"Produkte\" in der linken Navigationsleiste tun. " "den Konfigurationsbereich \"Produkte\" in der linken Navigationsleiste tun. "
"Keine Sorge, alles was du hier gibst, kannst du später noch ändern." "Keine Sorge, alles was du hier eingibst, kannst du später noch ändern."
#: pretix/control/templates/pretixcontrol/event/quick_setup.html:132 #: pretix/control/templates/pretixcontrol/event/quick_setup.html:132
#: pretix/control/views/event.py:357 #: 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 " "your event, but if you're in a hurry and want to get started quickly, here's "
"a short version:" "a short version:"
msgstr "" msgstr ""
"Wir empfehlen, dass du dich die Zeit nimmst und die Einstellungen deiner " "Wir empfehlen, dass du dir die Zeit nimmst und die Einstellungen deiner "
"Veranstaltungen in Ruhe durchgehst. Wenn du aber schnell loslegen willst, " "Veranstaltungen in Ruhe durchgehst. Wenn du aber schnell loslegen willst, "
"ist hier die Kurzversion:" "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 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:28
msgid "Additional options for" msgid "Additional options for"
msgstr "Zusätzliche Einstellungen für" msgstr "Zusätzliche Optionen für"
#: pretix/presale/templates/pretixpresale/event/checkout_addons.html:64 #: pretix/presale/templates/pretixpresale/event/checkout_addons.html:64
msgid "More recommendations" msgid "More recommendations"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 14:20+0000\n" "POT-Creation-Date: 2024-12-16 14:20+0000\n"
"PO-Revision-Date: 2025-01-06 00:00+0000\n" "PO-Revision-Date: 2025-01-11 21:00+0000\n"
"Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n" "Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n"
"Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/pretix/" "Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/pretix/"
"ja/>\n" "ja/>\n"
@@ -539,7 +539,7 @@ msgstr ""
#: pretix/api/webhooks.py:354 #: pretix/api/webhooks.py:354
msgid "Shop taken live" msgid "Shop taken live"
msgstr "ショップが営業中になりました" msgstr "ショップが公開中になりました"
#: pretix/api/webhooks.py:358 #: pretix/api/webhooks.py:358
msgid "Shop taken offline" msgid "Shop taken offline"
@@ -2012,7 +2012,7 @@ msgstr "税率{rate}%での税金"
#: pretix/base/exporters/orderlist.py:276 #: pretix/base/exporters/orderlist.py:276
#, python-brace-format #, python-brace-format
msgid "Net at {rate} % tax" msgid "Net at {rate} % tax"
msgstr "税率{rate}%のネット" msgstr "税率{rate}%の税抜価格"
#: pretix/base/exporters/orderlist.py:277 #: pretix/base/exporters/orderlist.py:277
#, python-brace-format #, python-brace-format
@@ -2713,7 +2713,7 @@ msgstr "全て"
#: pretix/base/exporters/orderlist.py:1306 pretix/control/forms/filter.py:1417 #: pretix/base/exporters/orderlist.py:1306 pretix/control/forms/filter.py:1417
msgid "Live" msgid "Live"
msgstr "営業中" msgstr "公開中"
#: pretix/base/exporters/orderlist.py:1315 pretix/control/forms/filter.py:1425 #: pretix/base/exporters/orderlist.py:1315 pretix/control/forms/filter.py:1425
#: pretix/control/templates/pretixcontrol/pdf/index.html:252 #: pretix/control/templates/pretixcontrol/pdf/index.html:252
@@ -3268,7 +3268,7 @@ msgstr "税率"
#: pretix/base/invoice.py:623 #: pretix/base/invoice.py:623
msgctxt "invoice" msgctxt "invoice"
msgid "Net" msgid "Net"
msgstr "ネット" msgstr "税抜"
#: pretix/base/invoice.py:624 #: pretix/base/invoice.py:624
msgctxt "invoice" msgctxt "invoice"
@@ -3320,7 +3320,7 @@ msgstr "残高"
#: pretix/base/invoice.py:769 #: pretix/base/invoice.py:769
msgctxt "invoice" msgctxt "invoice"
msgid "Net value" msgid "Net value"
msgstr "純資産価値" msgstr "税抜価格"
#: pretix/base/invoice.py:770 #: pretix/base/invoice.py:770
msgctxt "invoice" msgctxt "invoice"
@@ -3362,7 +3362,7 @@ msgstr "デフォルトの請求書レンダラー(ヨーロッパスタイル
#: pretix/base/invoice.py:947 #: pretix/base/invoice.py:947
msgctxt "invoice" msgctxt "invoice"
msgid "(Please quote at all times.)" msgid "(Please quote at all times.)"
msgstr "すべてのアイテムについて見積もりをしてください。)" msgstr "問い合わせ時には、この番号をお知らせください。)"
#: pretix/base/invoice.py:994 #: pretix/base/invoice.py:994
msgid "Simplified invoice renderer" msgid "Simplified invoice renderer"
@@ -3667,7 +3667,7 @@ msgstr "タグ"
#: pretix/base/modelimport_vouchers.py:334 pretix/base/models/vouchers.py:297 #: pretix/base/modelimport_vouchers.py:334 pretix/base/models/vouchers.py:297
msgid "Shows hidden products that match this voucher" msgid "Shows hidden products that match this voucher"
msgstr "このクーポンに適合する非表示の商品を表示します\\" msgstr "このクーポンに適合する隠された商品を表示する"
#: pretix/base/modelimport_vouchers.py:343 pretix/base/models/vouchers.py:301 #: pretix/base/modelimport_vouchers.py:343 pretix/base/models/vouchers.py:301
msgid "Offer all add-on products for free when redeeming this voucher" msgid "Offer all add-on products for free when redeeming this voucher"
@@ -4336,7 +4336,7 @@ msgid ""
"If checked, an event can only be taken live if the property is set. In event " "If checked, an event can only be taken live if the property is set. In event "
"series, its always optional to set a value for individual dates" "series, its always optional to set a value for individual dates"
msgstr "" msgstr ""
"チェックされているとき、プロパティが設定されている場合にのみ、イベントを営業" "チェックされているとき、プロパティが設定されている場合にのみ、イベントを公開"
"中にすることができます。イベントシリーズでは、個々の日付に値を設定することは" "中にすることができます。イベントシリーズでは、個々の日付に値を設定することは"
"常にオプションです" "常にオプションです"
@@ -4588,7 +4588,7 @@ msgstr "申し訳ございません。情報が利用できません"
#: pretix/base/models/items.py:452 pretix/base/models/items.py:772 #: pretix/base/models/items.py:452 pretix/base/models/items.py:772
msgid "Don't use re-usable media, use regular one-off tickets" msgid "Don't use re-usable media, use regular one-off tickets"
msgstr "再利用可能なメディアを使用せず、通常の一回りのチケットを使用してください" msgstr "再利用可能なメディアを使用せず、通常の一回りのチケットを使用してください"
#: pretix/base/models/items.py:453 #: pretix/base/models/items.py:453
msgid "Require an existing medium to be re-used" msgid "Require an existing medium to be re-used"
@@ -4678,11 +4678,11 @@ msgstr "このイベントで待ちリストが有効になっている場合の
#: pretix/base/models/items.py:544 pretix/base/settings.py:1350 #: pretix/base/models/items.py:544 pretix/base/settings.py:1350
#: pretix/control/forms/event.py:1677 #: pretix/control/forms/event.py:1677
msgid "Show number of tickets left" msgid "Show number of tickets left"
msgstr "チケットの残り枚数を表示します" msgstr "チケットの残り枚数を表示す"
#: pretix/base/models/items.py:545 #: pretix/base/models/items.py:545
msgid "Publicly show how many tickets are still available." msgid "Publicly show how many tickets are still available."
msgstr "公に利用可能なチケットの数を表示してください。" msgstr "利用可能なチケットの数を公表します。"
#: pretix/base/models/items.py:552 pretix/control/forms/item.py:622 #: pretix/base/models/items.py:552 pretix/control/forms/item.py:622
msgid "Product picture" msgid "Product picture"
@@ -4822,7 +4822,7 @@ msgstr ""
#: pretix/base/models/items.py:672 #: pretix/base/models/items.py:672
msgid "Only sell tickets for this product on the selected sales channels." msgid "Only sell tickets for this product on the selected sales channels."
msgstr "この製品のチケットは選択した販売チャネルでのみ販売してください。" msgstr "この製品のチケットは選択した販売チャネルでのみ販売します。"
#: pretix/base/models/items.py:677 #: pretix/base/models/items.py:677
msgid "" msgid ""
@@ -5362,7 +5362,7 @@ msgstr "総容量"
#: pretix/base/models/items.py:2036 pretix/control/forms/item.py:448 #: pretix/base/models/items.py:2036 pretix/control/forms/item.py:448
msgid "Leave empty for an unlimited number of tickets." msgid "Leave empty for an unlimited number of tickets."
msgstr "チケットの数に制限はありません。" msgstr "空欄にすると、チケットの数が無制限になります。"
#: pretix/base/models/items.py:2040 pretix/base/models/orders.py:1487 #: pretix/base/models/items.py:2040 pretix/base/models/orders.py:1487
#: pretix/base/models/orders.py:2982 #: pretix/base/models/orders.py:2982
@@ -6245,11 +6245,11 @@ msgid ""
"option after consulting a tax counsel. No warranty given for correct tax " "option after consulting a tax counsel. No warranty given for correct tax "
"calculation. USE AT YOUR OWN RISK." "calculation. USE AT YOUR OWN RISK."
msgstr "" msgstr ""
"非推奨です。ほとんどのイベントは逆転納税の対象とならないため、課税の場所はイ" "非推奨です。ほとんどのイベントはリバースチャージ制度の対象とならず、イベント"
"ベントの場所となります。このオプションを有効にすると、EU外のすべての顧客およ" "の場所が課税の場所となります。このオプションを有効にすると、EU外のすべての顧"
"び有効なEUのVAT番号を入力した異なるEU諸国の事業顧客に対してVATを請求しません" "客および有効なEUのVAT番号を入力した異なるEU諸国の事業顧客に対してVATを請求し"
"。税務顧問と相談した後にのみこのオプションを有効にしてください。正しい税金の" "ません。税務顧問と相談した後にのみこのオプションを有効にしてください。正しい"
"計算については保証されません。自己責任でご利用ください。" "税金の計算については保証されません。自己責任でご利用ください。"
#: pretix/base/models/tax.py:374 pretix/plugins/stripe/payment.py:299 #: pretix/base/models/tax.py:374 pretix/plugins/stripe/payment.py:299
msgid "Merchant country" msgid "Merchant country"
@@ -6362,8 +6362,8 @@ msgstr "このバウチャーが有効になると、影響を受ける製品の
msgid "" msgid ""
"If activated, a holder of this voucher code can buy tickets, even if there " "If activated, a holder of this voucher code can buy tickets, even if there "
"are none left." "are none left."
msgstr "このバウチャーコードを持っている人は、有効になった場合でも、チケットを購入す" msgstr "このバウチャーコードを持っている人は、売り切れた場合でも、チケットを購入す"
"ことができます。" "ことができます。"
#: pretix/base/models/vouchers.py:254 pretix/control/forms/vouchers.py:69 #: pretix/base/models/vouchers.py:254 pretix/control/forms/vouchers.py:69
msgid "" msgid ""
@@ -7048,7 +7048,7 @@ msgstr "アドオンを含む価格"
#: pretix/base/services/placeholders.py:669 #: pretix/base/services/placeholders.py:669
#: pretix/base/services/placeholders.py:678 pretix/control/views/event.py:797 #: pretix/base/services/placeholders.py:678 pretix/control/views/event.py:797
msgid "John Doe" msgid "John Doe"
msgstr "John Doe" msgstr "山田 太郎"
#: pretix/base/pdf.py:177 #: pretix/base/pdf.py:177
#: pretix/control/templates/pretixcontrol/order/index.html:549 #: pretix/control/templates/pretixcontrol/order/index.html:549
@@ -7408,7 +7408,7 @@ msgstr "イベント終了"
#: pretix/base/reldate.py:37 #: pretix/base/reldate.py:37
msgid "Event admission" msgid "Event admission"
msgstr "イベントの入場" msgstr "イベントの入場"
#: pretix/base/reldate.py:38 #: pretix/base/reldate.py:38
msgid "Presale start" msgid "Presale start"
@@ -7635,7 +7635,7 @@ msgstr ""
#: pretix/base/services/cart.py:175 #: pretix/base/services/cart.py:175
#, python-format #, python-format
msgid "This voucher code can only be redeemed %d more times." msgid "This voucher code can only be redeemed %d more times."
msgstr "このバウチャーコードは、もう%d回しか引き換えることができません。" msgstr "このバウチャーコードは、あと%d回しか引き換えることができません。"
#: pretix/base/services/cart.py:176 #: pretix/base/services/cart.py:176
msgid "" msgid ""
@@ -8621,7 +8621,7 @@ msgstr "プラグイン: %s"
#: pretix/base/services/vouchers.py:56 pretix/control/logdisplay.py:484 #: pretix/base/services/vouchers.py:56 pretix/control/logdisplay.py:484
#, python-brace-format #, python-brace-format
msgid "The voucher has been sent to {recipient}." msgid "The voucher has been sent to {recipient}."
msgstr "そのバウチャーは{recipient}に送信されました。" msgstr "バウチャーは{recipient}あてに送信されました。"
#: pretix/base/settings.py:125 #: pretix/base/settings.py:125
msgid "Allow usage of restricted plugins" msgid "Allow usage of restricted plugins"
@@ -9238,7 +9238,7 @@ msgstr "開始日を表示します"
#: pretix/base/settings.py:1025 #: pretix/base/settings.py:1025
msgid "Show the presale start date before presale has started." msgid "Show the presale start date before presale has started."
msgstr "プレセールの開始日を表示する前に、プレセール開始される前です。" msgstr "プレセールが始まる前に、プレセール開始日を表示します。"
#: pretix/base/settings.py:1040 pretix/base/settings.py:1051 #: pretix/base/settings.py:1040 pretix/base/settings.py:1051
msgid "Do not generate invoices" msgid "Do not generate invoices"
@@ -9467,7 +9467,7 @@ msgstr "全ての売り切れ商品を非表示にしてください"
#: pretix/base/settings.py:1351 pretix/control/forms/event.py:1678 #: pretix/base/settings.py:1351 pretix/control/forms/event.py:1678
msgid "Publicly show how many tickets of a certain type are still available." msgid "Publicly show how many tickets of a certain type are still available."
msgstr "特定の種類のチケットの残り枚数を公開してください。" msgstr "特定の種類のチケットの残り枚数を公開する。"
#: pretix/base/settings.py:1360 #: pretix/base/settings.py:1360
msgid "Ask search engines not to index the ticket shop" msgid "Ask search engines not to index the ticket shop"
@@ -9696,8 +9696,8 @@ msgid ""
"from the page as soon as they clicked a link in the email. Does not affect " "from the page as soon as they clicked a link in the email. Does not affect "
"orders performed through other sales channels." "orders performed through other sales channels."
msgstr "" msgstr ""
"電源が入っている場合、チケットは購入直後に直接ダウンロードできません。ファイ" "オンになっている場合、チケットは購入直後に直接ダウンロードできません。ファイ"
"ルサイズが大きくない場合、支払い確認のメールに添付され、顧客はメール内のリン" "ルサイズが大きくなければ、支払い確認のメールに添付され、顧客はメール内のリン"
"クをクリックするとすぐにページからダウンロードできます。他の販売チャネルを通" "クをクリックするとすぐにページからダウンロードできます。他の販売チャネルを通"
"じて行われた注文には影響しません。" "じて行われた注文には影響しません。"
@@ -10162,7 +10162,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/event/mail.html:39 #: pretix/control/templates/pretixcontrol/event/mail.html:39
#: pretix/control/templates/pretixcontrol/organizers/mail.html:40 #: pretix/control/templates/pretixcontrol/organizers/mail.html:40
msgid "Sender address" msgid "Sender address"
msgstr "送り主の住所" msgstr "送信元のアドレス"
#: pretix/base/settings.py:2137 pretix/control/forms/mailsetup.py:36 #: pretix/base/settings.py:2137 pretix/control/forms/mailsetup.py:36
#: pretix/control/forms/mailsetup.py:109 #: pretix/control/forms/mailsetup.py:109
@@ -10312,8 +10312,8 @@ msgstr ""
"こんにちは、\n" "こんにちは、\n"
"\n" "\n"
"{event}の注文を承りました。\n" "{event}の注文を承りました。\n"
"イベント主催者の承認が必要な商品をご注文いただいたため、次のメールをお待ちい" "イベント主催者の承認が必要な商品をご注文いただいたため、\n"
"ただくようお願い申し上げます。\n" "次のメールをお待ちいただくようお願い申し上げます。\n"
"\n" "\n"
"注文の詳細の変更と確認は、以下のURLから可能です。\n" "注文の詳細の変更と確認は、以下のURLから可能です。\n"
"{url}\n" "{url}\n"
@@ -11460,7 +11460,7 @@ msgstr "氏Surname/Family Name"
#: pretix/base/settings.py:3685 #: pretix/base/settings.py:3685
msgctxt "person_name_sample" msgctxt "person_name_sample"
msgid "John" msgid "John"
msgstr "ジョン" msgstr "太郎"
#: pretix/base/settings.py:3467 pretix/base/settings.py:3483 #: pretix/base/settings.py:3467 pretix/base/settings.py:3483
#: pretix/base/settings.py:3499 pretix/base/settings.py:3515 #: pretix/base/settings.py:3499 pretix/base/settings.py:3515
@@ -11469,7 +11469,7 @@ msgstr "ジョン"
#: pretix/base/settings.py:3655 pretix/base/settings.py:3686 #: pretix/base/settings.py:3655 pretix/base/settings.py:3686
msgctxt "person_name_sample" msgctxt "person_name_sample"
msgid "Doe" msgid "Doe"
msgstr "Doe" msgstr "山田"
#: pretix/base/settings.py:3473 pretix/base/settings.py:3489 #: pretix/base/settings.py:3473 pretix/base/settings.py:3489
#: pretix/base/settings.py:3521 pretix/base/settings.py:3640 #: pretix/base/settings.py:3521 pretix/base/settings.py:3640
@@ -11497,7 +11497,7 @@ msgstr "ミドルネーム"
#: pretix/control/forms/organizer.py:651 #: pretix/control/forms/organizer.py:651
msgctxt "person_name_sample" msgctxt "person_name_sample"
msgid "John Doe" msgid "John Doe"
msgstr "John Doe" msgstr "山田 太郎"
#: pretix/base/settings.py:3593 #: pretix/base/settings.py:3593
msgid "Calling name" msgid "Calling name"
@@ -12183,7 +12183,7 @@ msgstr "あなたのイベントは終了します"
#: pretix/base/timeline.py:76 #: pretix/base/timeline.py:76
msgctxt "timeline" msgctxt "timeline"
msgid "Admissions for your event start" msgid "Admissions for your event start"
msgstr "イベントの入場始まります" msgstr "イベントの入場始まります"
#: pretix/base/timeline.py:84 #: pretix/base/timeline.py:84
msgctxt "timeline" msgctxt "timeline"
@@ -13214,7 +13214,7 @@ msgstr "支払い期限"
#: pretix/control/forms/filter.py:1196 pretix/control/forms/filter.py:1671 #: pretix/control/forms/filter.py:1196 pretix/control/forms/filter.py:1671
msgid "Shop live and presale running" msgid "Shop live and presale running"
msgstr "営業中かつプレセールが開催中です" msgstr "公開中かつ予約販売が開催中です"
#: pretix/control/forms/filter.py:1197 pretix/control/forms/filter.py:2013 #: pretix/control/forms/filter.py:1197 pretix/control/forms/filter.py:2013
msgid "Inactive" msgid "Inactive"
@@ -13314,7 +13314,7 @@ msgstr "有効なメンバーシップがあります"
#: pretix/control/forms/filter.py:1670 #: pretix/control/forms/filter.py:1670
msgid "Shop live" msgid "Shop live"
msgstr "お店が営業中" msgstr "ショップが公開中"
#: pretix/control/forms/filter.py:1672 #: pretix/control/forms/filter.py:1672
msgid "Shop not live" msgid "Shop not live"
@@ -13657,8 +13657,8 @@ msgid ""
"as-a-Service company)." "as-a-Service company)."
msgstr "" msgstr ""
"私は他のイベント主催者のチケットを販売するためにPretixを使用しています" "私は他のイベント主催者のチケットを販売するためにPretixを使用しています"
"チケット販売会社)、または他の人にPretixの機能を提供していますSoftware-" "チケット販売会社)、または他の人にoretixの機能を提供していますSaaS会社"
"as-a-Service会社)。" ")。"
#: pretix/control/forms/global_settings.py:162 #: pretix/control/forms/global_settings.py:162
msgid "I'm not sure which option applies." msgid "I'm not sure which option applies."
@@ -14325,7 +14325,7 @@ msgstr ""
#: pretix/control/forms/orders.py:714 pretix/plugins/sendmail/forms.py:196 #: pretix/control/forms/orders.py:714 pretix/plugins/sendmail/forms.py:196
msgid "Attach tickets" msgid "Attach tickets"
msgstr "チケットを添付します" msgstr "チケットを添付す"
#: pretix/control/forms/orders.py:715 pretix/plugins/sendmail/forms.py:197 #: pretix/control/forms/orders.py:715 pretix/plugins/sendmail/forms.py:197
msgid "" msgid ""
@@ -14347,8 +14347,8 @@ msgstr "受取人"
#: pretix/control/forms/orders.py:777 #: pretix/control/forms/orders.py:777
msgid "" msgid ""
"Cancel the order. All tickets will no longer work. This can not be reverted." "Cancel the order. All tickets will no longer work. This can not be reverted."
msgstr "注文をキャンセルします。すべてのチケットはもはや有効ではありません。これは元" msgstr "注文をキャンセルす。すべてのチケットはもはや有効ではありません。これは元"
"戻すことができません。" "戻すことができません。"
#: pretix/control/forms/orders.py:778 #: pretix/control/forms/orders.py:778
msgid "" msgid ""
@@ -15525,8 +15525,8 @@ msgstr "未確認のタイプの電子メールが送信されました。"
msgid "" msgid ""
"The email has been sent without attached tickets since they would have been " "The email has been sent without attached tickets since they would have been "
"too large to be likely to arrive." "too large to be likely to arrive."
msgstr "チケットを添付すると、サイズが大きすぎて届可能性が低いため、メールはチケッ" msgstr "チケットサイズが大きすぎて届かない可能性があるため、チケットを添付せずにメ"
"トを添付せずに送信されました。" "ールが送信されました。"
#: pretix/control/logdisplay.py:422 #: pretix/control/logdisplay.py:422
msgid "A custom email has been sent." msgid "A custom email has been sent."
@@ -15753,7 +15753,7 @@ msgstr "そのバウチャーは作成されました。"
#: pretix/control/logdisplay.py:485 #: pretix/control/logdisplay.py:485
msgid "The voucher has been created and sent to a person on the waiting list." msgid "The voucher has been created and sent to a person on the waiting list."
msgstr "そのバウチャー作成され、空席待ちリストの人に送信されました。" msgstr "バウチャー作成され、空席待ちリストの人に送信されました。"
#: pretix/control/logdisplay.py:486 #: pretix/control/logdisplay.py:486
msgid "" msgid ""
@@ -16528,8 +16528,8 @@ msgstr "お帰りなさい!"
msgid "" msgid ""
"You configured your account to require authentication with a second medium, " "You configured your account to require authentication with a second medium, "
"e.g. your phone. Please enter your verification code here:" "e.g. your phone. Please enter your verification code here:"
msgstr "アカウントの設定で、第二の認証手段(例:携帯電話)が必要になるように構成しま" msgstr "アカウントの設定で、第二の認証手段(例:携帯電話)が必要になるように構成され"
"した。こちらに確認コードを入力してください:" "ています。こちらに確認コードを入力してください:"
#: pretix/control/templates/pretixcontrol/auth/login_2fa.html:14 #: pretix/control/templates/pretixcontrol/auth/login_2fa.html:14
msgid "Token" msgid "Token"
@@ -16835,7 +16835,7 @@ msgstr "セキュリティ上の理由から、続行する前にパスワード
#: pretix/control/templates/pretixcontrol/base.html:454 #: pretix/control/templates/pretixcontrol/base.html:454
#, python-format #, python-format
msgid "Times displayed in %(tz)s" msgid "Times displayed in %(tz)s"
msgstr "%(tz)sで表示される時間" msgstr "表示される時間帯 %(tz)s"
#: pretix/control/templates/pretixcontrol/base.html:460 #: pretix/control/templates/pretixcontrol/base.html:460
msgid "running in development mode" msgid "running in development mode"
@@ -18253,7 +18253,7 @@ msgstr "チケットショップを公開するためには、まず以下の問
#: pretix/control/templates/pretixcontrol/event/live.html:51 #: pretix/control/templates/pretixcontrol/event/live.html:51
#: pretix/control/templates/pretixcontrol/event/live.html:65 #: pretix/control/templates/pretixcontrol/event/live.html:65
msgid "Go live" msgid "Go live"
msgstr "営業を開始します" msgstr "オンラインにする"
#: pretix/control/templates/pretixcontrol/event/live.html:59 #: pretix/control/templates/pretixcontrol/event/live.html:59
msgid "If you want to, you can publish your ticket shop now." msgid "If you want to, you can publish your ticket shop now."
@@ -18420,7 +18420,7 @@ msgstr "支払い済みの注文"
#: pretix/control/templates/pretixcontrol/event/mail.html:96 #: pretix/control/templates/pretixcontrol/event/mail.html:96
msgid "Free order" msgid "Free order"
msgstr "自由な順序" msgstr "無料の注文"
#: pretix/control/templates/pretixcontrol/event/mail.html:99 #: pretix/control/templates/pretixcontrol/event/mail.html:99
#: pretix/control/templates/pretixcontrol/order/index.html:248 #: pretix/control/templates/pretixcontrol/order/index.html:248
@@ -18446,7 +18446,7 @@ msgstr "注文のカスタム電子メール"
#: pretix/control/templates/pretixcontrol/event/mail.html:120 #: pretix/control/templates/pretixcontrol/event/mail.html:120
msgid "Reminder to download tickets" msgid "Reminder to download tickets"
msgstr "チケットダウンロードすることをお知らせします" msgstr "チケットダウンロードをリマインドする"
#: pretix/control/templates/pretixcontrol/event/mail.html:123 #: pretix/control/templates/pretixcontrol/event/mail.html:123
msgid "Order approval process" msgid "Order approval process"
@@ -20044,8 +20044,9 @@ msgid ""
"tickets\" or \"buy 2 tickets, get 1 free\"." "tickets\" or \"buy 2 tickets, get 1 free\"."
msgstr "" msgstr ""
"自動割引を使用すると、特定の条件に基づいて顧客の購入に自動的に割引を適用する" "自動割引を使用すると、特定の条件に基づいて顧客の購入に自動的に割引を適用する"
"ことができます。たとえば、「3枚以上のチケットを購入すると20割引」や「2枚の" "ことができます。たとえば、「3枚以上のチケットを購入すると20パーセント割引」や"
"チケットを購入すると1枚無料」などのグループ割引を作成することができます。" "「2枚のチケットを購入すると1枚無料」などのグループ割引を作成することができま"
"す。"
#: pretix/control/templates/pretixcontrol/items/discounts.html:15 #: pretix/control/templates/pretixcontrol/items/discounts.html:15
msgid "" msgid ""
@@ -20158,7 +20159,7 @@ msgstr "新しい商品を作成"
#: pretix/control/templates/pretixcontrol/items/index.html:101 #: pretix/control/templates/pretixcontrol/items/index.html:101
msgid "Personalized admission ticket" msgid "Personalized admission ticket"
msgstr "サンプル用チケット" msgstr "記名式入場券"
#: pretix/control/templates/pretixcontrol/items/index.html:103 #: pretix/control/templates/pretixcontrol/items/index.html:103
msgid "Admission ticket without personalization" msgid "Admission ticket without personalization"
@@ -20196,7 +20197,7 @@ msgstr "<strong>plus</strong> %(rate)s%% %(taxname)s"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:409 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:409
#, python-format #, python-format
msgid "incl. %(rate)s%% %(taxname)s" msgid "incl. %(rate)s%% %(taxname)s"
msgstr "%(taxname)s%(rate)s を含む" msgstr "%(taxname)s%(rate)s パーセントを含む"
#: pretix/control/templates/pretixcontrol/items/question.html:6 #: pretix/control/templates/pretixcontrol/items/question.html:6
#: pretix/control/templates/pretixcontrol/items/question.html:9 #: pretix/control/templates/pretixcontrol/items/question.html:9
@@ -20404,7 +20405,7 @@ msgstr "このクォータの実際の結果を変更する可能性があるプ
#: pretix/control/templates/pretixcontrol/items/quota.html:86 #: pretix/control/templates/pretixcontrol/items/quota.html:86
#, python-format #, python-format
msgid "This quota is currently overbooked by %(num)s tickets." msgid "This quota is currently overbooked by %(num)s tickets."
msgstr "このクォータは現在%(num)s枚のチケット過剰予約されています。" msgstr "このクォータは現在%(num)s枚のチケット過剰予約されています。"
#: pretix/control/templates/pretixcontrol/items/quota.html:93 #: pretix/control/templates/pretixcontrol/items/quota.html:93
msgid "" msgid ""
@@ -21125,7 +21126,7 @@ msgstr "エントリーのスキャン: %(date)s"
#: pretix/control/templates/pretixcontrol/order/index.html:422 #: pretix/control/templates/pretixcontrol/order/index.html:422
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:54 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:54
msgid "Voucher code used:" msgid "Voucher code used:"
msgstr "割引コード使用済:" msgstr "使用するバウチャーコード:"
#: pretix/control/templates/pretixcontrol/order/index.html:424 #: pretix/control/templates/pretixcontrol/order/index.html:424
#, python-format #, python-format
@@ -21886,7 +21887,7 @@ msgstr "保留中(確認済み)"
#: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:26 #: pretix/control/templates/pretixcontrol/orders/fragment_order_status.html:26
#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:19 #: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:19
msgid "Canceled (paid fee)" msgid "Canceled (paid fee)"
msgstr "キャンセル(料金支払い済み)" msgstr "キャンセル済み(支払い済み手数料"
#: pretix/control/templates/pretixcontrol/orders/import_process.html:6 #: pretix/control/templates/pretixcontrol/orders/import_process.html:6
#: pretix/control/templates/pretixcontrol/orders/import_process.html:8 #: pretix/control/templates/pretixcontrol/orders/import_process.html:8
@@ -22486,7 +22487,7 @@ msgstr "デバイスを接続"
#: pretix/control/templates/pretixcontrol/organizers/devices.html:81 #: pretix/control/templates/pretixcontrol/organizers/devices.html:81
msgid "Hardware model" msgid "Hardware model"
msgstr "ハードウェアモデル" msgstr "ハードウェアの機種"
#: pretix/control/templates/pretixcontrol/organizers/devices.html:139 #: pretix/control/templates/pretixcontrol/organizers/devices.html:139
msgid "Not yet initialized" msgid "Not yet initialized"
@@ -25009,7 +25010,7 @@ msgstr "選択したリストは削除されました。"
#: pretix/control/views/dashboards.py:115 #: pretix/control/views/dashboards.py:115
msgid "Attendees (ordered)" msgid "Attendees (ordered)"
msgstr "出席者(順番に" msgstr "参加者(注文済み"
#: pretix/control/views/dashboards.py:125 #: pretix/control/views/dashboards.py:125
msgid "Attendees (paid)" msgid "Attendees (paid)"
@@ -25047,11 +25048,11 @@ msgstr "ここをクリックして変更してください"
#: pretix/control/views/dashboards.py:273 #: pretix/control/views/dashboards.py:273
msgid "live" msgid "live"
msgstr "営業中" msgstr "公開中"
#: pretix/control/views/dashboards.py:274 #: pretix/control/views/dashboards.py:274
msgid "live and in test mode" msgid "live and in test mode"
msgstr "営業中かつテストモード" msgstr "公開中かつテストモード"
#: pretix/control/views/dashboards.py:275 #: pretix/control/views/dashboards.py:275
msgid "not yet public" msgid "not yet public"
@@ -25188,7 +25189,7 @@ msgstr "無効なチケット出力タイプをリクエストしました。"
#: pretix/control/views/event.py:972 #: pretix/control/views/event.py:972
msgid "Your shop is live now!" msgid "Your shop is live now!"
msgstr "あなたのショップは営業中です!" msgstr "あなたのショップは公開中です!"
#: pretix/control/views/event.py:980 #: pretix/control/views/event.py:980
msgid "We've taken your shop down. You can re-enable it whenever you want!" msgid "We've taken your shop down. You can re-enable it whenever you want!"
@@ -25549,7 +25550,7 @@ msgstr "検証コードが間違っています。もう一度お試しくださ
#: pretix/control/views/mailsetup.py:221 #: pretix/control/views/mailsetup.py:221
msgid "Sender address verification" msgid "Sender address verification"
msgstr "送り主の住所確認" msgstr "送信元のアドレス確認"
#: pretix/control/views/mailsetup.py:277 #: pretix/control/views/mailsetup.py:277
#, python-format #, python-format
@@ -27348,7 +27349,7 @@ msgstr "払い戻しをエクスポート"
#: pretix/plugins/banktransfer/signals.py:123 #: pretix/plugins/banktransfer/signals.py:123
msgid "The invoice was sent to the designated email address." msgid "The invoice was sent to the designated email address."
msgstr "請求書は指定されたメールアドレスに送信されました。" msgstr "請求書は指定されたメールアドレスあてに送信されました。"
#: pretix/plugins/banktransfer/signals.py:132 #: pretix/plugins/banktransfer/signals.py:132
#, python-brace-format #, python-brace-format
@@ -29514,7 +29515,7 @@ msgstr "ストライプアカウント"
#: pretix/plugins/stripe/payment.py:261 #: pretix/plugins/stripe/payment.py:261
msgctxt "stripe" msgctxt "stripe"
msgid "Live" msgid "Live"
msgstr "営業中" msgstr "公開中"
#: pretix/plugins/stripe/payment.py:262 #: pretix/plugins/stripe/payment.py:262
msgctxt "stripe" msgctxt "stripe"
@@ -30753,7 +30754,7 @@ msgstr "このショップは現在あなたとあなたのチームだけが見
#: pretix/presale/templates/pretixpresale/event/base.html:34 #: pretix/presale/templates/pretixpresale/event/base.html:34
msgid "Take it live now" msgid "Take it live now"
msgstr "今すぐ営業を始める" msgstr "今すぐ公開する"
#: pretix/presale/templates/pretixpresale/event/base.html:44 #: pretix/presale/templates/pretixpresale/event/base.html:44
#: pretix/presale/templates/pretixpresale/event/base.html:105 #: pretix/presale/templates/pretixpresale/event/base.html:105
@@ -30818,9 +30819,10 @@ msgid ""
"href=\"%(time_machine_link)s\"><span class=\"fa fa-clock-o\" aria-" "href=\"%(time_machine_link)s\"><span class=\"fa fa-clock-o\" aria-"
"hidden=\"true\"></span>time machine</a>." "hidden=\"true\"></span>time machine</a>."
msgstr "" msgstr ""
"異なる時点であなたのショップを表示するには、<a href=\"%(time_machine_link)s\"" "<a href=\"%(time_machine_link)s\"><span class=\"fa fa-clock-o\" aria-hidden="
"><span class=\"fa fa-clock-o\" aria-hidden=\"true\"" "\"true\""
"></span>タイムマシン</a>を有効にすることができます。" "></span>タイムマシン</a>を有効にすることで、異なる時刻におけるあなたのショッ"
"プを表示することができます。"
#: pretix/presale/templates/pretixpresale/event/base.html:163 #: pretix/presale/templates/pretixpresale/event/base.html:163
#: pretix/presale/templates/pretixpresale/event/base.html:210 #: pretix/presale/templates/pretixpresale/event/base.html:210
@@ -31009,7 +31011,7 @@ msgstr "注文を確定"
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:209 #: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:209
msgid "Submit registration" msgid "Submit registration"
msgstr "登録を送信してください" msgstr "予約を送信する"
#: pretix/presale/templates/pretixpresale/event/checkout_customer.html:18 #: pretix/presale/templates/pretixpresale/event/checkout_customer.html:18
msgid "Log in with a customer account" msgid "Log in with a customer account"
@@ -31343,7 +31345,7 @@ msgstr "<strong>plus</strong> %(rate)s%% %(name)s"
#: pretix/presale/templates/pretixpresale/event/voucher.html:366 #: pretix/presale/templates/pretixpresale/event/voucher.html:366
#, python-format #, python-format
msgid "incl. %(rate)s%% %(name)s" msgid "incl. %(rate)s%% %(name)s"
msgstr "%(name)s %(rate)sを含む" msgstr "%(name)s %(rate)sパーセントを含む"
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:200 #: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:200
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:207 #: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:207
@@ -31761,7 +31763,7 @@ msgstr "注文が確定しました"
#: pretix/presale/templates/pretixpresale/event/fragment_downloads.html:14 #: pretix/presale/templates/pretixpresale/event/fragment_downloads.html:14
msgid "Please check your email account, we've sent you your tickets." msgid "Please check your email account, we've sent you your tickets."
msgstr "メールアカウントを確認してください。チケットを送信しました。" msgstr "メールが届いているかご確認ください。チケットを送信しました。"
#: pretix/presale/templates/pretixpresale/event/fragment_downloads.html:16 #: pretix/presale/templates/pretixpresale/event/fragment_downloads.html:16
msgid "Please check your email account, we've sent you an email." msgid "Please check your email account, we've sent you an email."
@@ -32091,12 +32093,12 @@ msgid ""
"your order to be sent to you again." "your order to be sent to you again."
msgstr "" msgstr ""
"注文の状況や詳細を確認または変更したい場合は、注文手続き中に当社から送られた" "注文の状況や詳細を確認または変更したい場合は、注文手続き中に当社から送られた"
"メールのリンクをクリックしてください。リンクが見つからない場合は、以下のボタ" "メールのリンクをクリックしてください。リンクが見つからない場合は、つぎのボタ"
"ンをクリックして、注文のリンクを再度送付してもらうこともできます。" "ンをクリックして、注文のリンクを再度送付してもらうこともできます。"
#: pretix/presale/templates/pretixpresale/event/index.html:256 #: pretix/presale/templates/pretixpresale/event/index.html:256
msgid "Resend order link" msgid "Resend order link"
msgstr "注文リンクを再送してください" msgstr "注文リンクを再送する"
#: pretix/presale/templates/pretixpresale/event/offline.html:4 #: pretix/presale/templates/pretixpresale/event/offline.html:4
#: pretix/presale/templates/pretixpresale/event/offline.html:8 #: pretix/presale/templates/pretixpresale/event/offline.html:8
@@ -32382,7 +32384,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/order.html:467 #: pretix/presale/templates/pretixpresale/event/order.html:467
msgid "You can cancel this order using the following button." msgid "You can cancel this order using the following button."
msgstr "のボタンを使用して、この注文をキャンセルすることができます。" msgstr "つぎのボタンを使用して、この注文をキャンセルすることができます。"
#: pretix/presale/templates/pretixpresale/event/order_cancel.html:11 #: pretix/presale/templates/pretixpresale/event/order_cancel.html:11
#, python-format #, python-format
@@ -32547,7 +32549,7 @@ msgstr "チケットを変更"
msgid "" msgid ""
"If you want to make changes to the components of your ticket, you can click " "If you want to make changes to the components of your ticket, you can click "
"on the following button." "on the following button."
msgstr "チケットのコンポーネントを変更したい場合は、以下のボタンをクリックしてくださ" msgstr "チケットのコンポーネントを変更したい場合は、つぎのボタンをクリックしてくださ"
"い。" "い。"
#: pretix/presale/templates/pretixpresale/event/position.html:73 #: pretix/presale/templates/pretixpresale/event/position.html:73
@@ -32587,7 +32589,7 @@ msgstr "支払い済みの注文"
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4 #: pretix/presale/templates/pretixpresale/event/resend_link.html:4
#: pretix/presale/templates/pretixpresale/event/resend_link.html:11 #: pretix/presale/templates/pretixpresale/event/resend_link.html:11
msgid "Resend order links" msgid "Resend order links"
msgstr "注文リンクを再送してください" msgstr "注文リンクを再送する"
#: pretix/presale/templates/pretixpresale/event/resend_link.html:15 #: pretix/presale/templates/pretixpresale/event/resend_link.html:15
msgid "" msgid ""
@@ -33081,7 +33083,7 @@ msgstr "これからのイベントを見る"
#: pretix/presale/templates/pretixpresale/organizers/index.html:169 #: pretix/presale/templates/pretixpresale/organizers/index.html:169
msgid "No public upcoming events found." msgid "No public upcoming events found."
msgstr "公開される今後のイベントが見つかりません。" msgstr "今後一般に公表されるイベントが見つかりません。"
#: pretix/presale/templates/pretixpresale/organizers/index.html:169 #: pretix/presale/templates/pretixpresale/organizers/index.html:169
msgid "Show past events" msgid "Show past events"
@@ -33297,7 +33299,7 @@ msgstr "この注文については、チケットのダウンロードはまだ
#: pretix/presale/views/order.py:1118 #: pretix/presale/views/order.py:1118
msgid "Please click the link we sent you via email to download your tickets." msgid "Please click the link we sent you via email to download your tickets."
msgstr "メールで送られたリンクをクリックしてチケットをダウンロードしてください。" msgstr "メールで送られたリンクをクリックしてチケットをダウンロードしてください。"
#: pretix/presale/views/order.py:1601 #: pretix/presale/views/order.py:1601
#, python-brace-format #, python-brace-format

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 14:20+0000\n" "POT-Creation-Date: 2024-12-16 14:20+0000\n"
"PO-Revision-Date: 2024-12-31 18:00+0000\n" "PO-Revision-Date: 2025-01-11 21:00+0000\n"
"Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n" "Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n"
"Language-Team: Korean <https://translate.pretix.eu/projects/pretix/pretix/ko/" "Language-Team: Korean <https://translate.pretix.eu/projects/pretix/pretix/ko/"
">\n" ">\n"
@@ -170,10 +170,8 @@ msgid "Allowed URIs list, space separated"
msgstr "허용된 URI 리스트, 스페이스로 구분" msgstr "허용된 URI 리스트, 스페이스로 구분"
#: pretix/api/models.py:47 #: pretix/api/models.py:47
#, fuzzy
#| msgid "Allowed URIs list, space separated"
msgid "Allowed Post Logout 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/api/models.py:51 pretix/base/models/customers.py:406
#: pretix/plugins/paypal/payment.py:113 pretix/plugins/paypal2/payment.py:110 #: pretix/plugins/paypal/payment.py:113 pretix/plugins/paypal2/payment.py:110
@@ -17954,10 +17952,8 @@ msgid "December"
msgstr "" msgstr ""
#: pretix/control/templates/pretixcontrol/global_sysreport.html:32 #: pretix/control/templates/pretixcontrol/global_sysreport.html:32
#, fuzzy
#| msgid "Generate tickets"
msgid "Generate report" msgid "Generate report"
msgstr "티켓 생성" msgstr "보고서를 생성"
#: pretix/control/templates/pretixcontrol/global_update.html:7 #: pretix/control/templates/pretixcontrol/global_update.html:7
msgid "Update check results" msgid "Update check results"
@@ -19895,11 +19891,8 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/orders/bulk_action.html:5 #: pretix/control/templates/pretixcontrol/orders/bulk_action.html:5
#: pretix/control/templates/pretixcontrol/orders/bulk_action.html:7 #: pretix/control/templates/pretixcontrol/orders/bulk_action.html:7
#, fuzzy
#| msgid "1 order"
#| msgid_plural "%(s)s orders"
msgid "Modify orders" msgid "Modify orders"
msgstr "%(s)s개 주문" msgstr "주문을 수정"
#: pretix/control/templates/pretixcontrol/orders/bulk_action.html:12 #: pretix/control/templates/pretixcontrol/orders/bulk_action.html:12
#, python-format #, python-format
@@ -22091,11 +22084,8 @@ msgid "Begin"
msgstr "" msgstr ""
#: pretix/control/templates/pretixcontrol/subevents/index.html:176 #: pretix/control/templates/pretixcontrol/subevents/index.html:176
#, fuzzy
#| msgid "1 order"
#| msgid_plural "%(s)s orders"
msgid "Show orders" msgid "Show orders"
msgstr "%(s)s개 주문" msgstr "주문을 표시"
#: pretix/control/templates/pretixcontrol/subevents/index.html:187 #: pretix/control/templates/pretixcontrol/subevents/index.html:187
msgctxt "subevent" msgctxt "subevent"
@@ -26628,10 +26618,8 @@ msgid ""
msgstr "" msgstr ""
#: pretix/plugins/returnurl/views.py:37 #: pretix/plugins/returnurl/views.py:37
#, fuzzy
#| msgid "Redirection URIs"
msgid "Base redirection URLs" msgid "Base redirection URLs"
msgstr "리다이렉션URI" msgstr "기본 리다이렉션 URL"
#: pretix/plugins/returnurl/views.py:38 #: pretix/plugins/returnurl/views.py:38
msgid "" msgid ""
@@ -27315,10 +27303,8 @@ msgid "Publishable key"
msgstr "" msgstr ""
#: pretix/plugins/stripe/payment.py:280 #: pretix/plugins/stripe/payment.py:280
#, fuzzy
#| msgid "Generate tickets"
msgid "Generate API keys" msgid "Generate API keys"
msgstr "티켓 생성" msgstr "API 키 생성"
#: pretix/plugins/stripe/payment.py:282 #: pretix/plugins/stripe/payment.py:282
msgid "" msgid ""
@@ -28495,11 +28481,8 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/base.html:127 #: pretix/presale/templates/pretixpresale/event/base.html:127
#: pretix/presale/templates/pretixpresale/event/base.html:201 #: 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." msgid "This ticket shop is currently in test mode."
msgstr "티켓이 %(count)s회 사용되었습니다." msgstr "이 티켓 상점은 현재 테스트 모드입니다."
#: pretix/presale/templates/pretixpresale/event/base.html:130 #: pretix/presale/templates/pretixpresale/event/base.html:130
#: pretix/presale/templates/pretixpresale/event/base.html:204 #: pretix/presale/templates/pretixpresale/event/base.html:204
@@ -29761,11 +29744,8 @@ msgid "Shop offline"
msgstr "" msgstr ""
#: pretix/presale/templates/pretixpresale/event/offline.html:9 #: 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." msgid "This ticket shop is currently turned off."
msgstr "티켓이 %(count)s회 사용되었습니다." msgstr "이 티켓 상점은 현재 비활성화되어 있습니다."
#: pretix/presale/templates/pretixpresale/event/offline.html:10 #: pretix/presale/templates/pretixpresale/event/offline.html:10
msgid "It is only accessible to authenticated team members." msgid "It is only accessible to authenticated team members."
@@ -30208,11 +30188,8 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/position_modify.html:5 #: pretix/presale/templates/pretixpresale/event/position_modify.html:5
#: pretix/presale/templates/pretixpresale/event/position_modify.html:8 #: pretix/presale/templates/pretixpresale/event/position_modify.html:8
#, fuzzy
#| msgid "1 order"
#| msgid_plural "%(s)s orders"
msgid "Modify ticket" msgid "Modify ticket"
msgstr "%(s)s개 주문" msgstr "티켓 수정"
#: pretix/presale/templates/pretixpresale/event/resend_link.html:4 #: pretix/presale/templates/pretixpresale/event/resend_link.html:4
#: pretix/presale/templates/pretixpresale/event/resend_link.html:11 #: pretix/presale/templates/pretixpresale/event/resend_link.html:11

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-16 14:20+0000\n" "POT-Creation-Date: 2024-12-16 14:20+0000\n"
"PO-Revision-Date: 2024-12-13 08:00+0000\n" "PO-Revision-Date: 2025-01-10 20:00+0000\n"
"Last-Translator: Vasco Baleia <vb2003.12@gmail.com>\n" "Last-Translator: David Vaz <davidmgvaz@gmail.com>\n"
"Language-Team: Portuguese (Portugal) <https://translate.pretix.eu/projects/" "Language-Team: Portuguese (Portugal) <https://translate.pretix.eu/projects/"
"pretix/pretix/pt_PT/>\n" "pretix/pretix/pt_PT/>\n"
"Language: pt_PT\n" "Language: pt_PT\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n" "Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.8.4\n" "X-Generator: Weblate 5.9.2\n"
#: pretix/_base_settings.py:79 #: pretix/_base_settings.py:79
msgid "English" msgid "English"
@@ -34876,7 +34876,7 @@ msgstr "Nenhuma associação é armazenada em sua conta."
#| msgid "+ %(count)s invited" #| msgid "+ %(count)s invited"
msgid "%(counter)s item" msgid "%(counter)s item"
msgid_plural "%(counter)s items" msgid_plural "%(counter)s items"
msgstr[0] "+%(count)s convidados" msgstr[0] "+%(count)s convidado"
msgstr[1] "+%(count)s convidados" msgstr[1] "+%(count)s convidados"
#: pretix/presale/templates/pretixpresale/organizers/customer_orders.html:78 #: pretix/presale/templates/pretixpresale/organizers/customer_orders.html:78

View File

@@ -673,12 +673,7 @@ class ItemsTest(ItemFormTest):
with scopes_disabled(): with scopes_disabled():
q = Question.objects.create(event=self.event1, question="Size", type="N") q = Question.objects.create(event=self.event1, question="Size", type="N")
q.items.add(self.item2) q.items.add(self.item2)
self.item2.limit_sales_channels.set(self.orga1.sales_channels.filter(identifier__in=["web", "bar"])) self.item2.sales_channels = ["web", "bar"]
self.item2.all_sales_channels = False
self.item2.save()
self.var2.limit_sales_channels.set(self.orga1.sales_channels.filter(identifier__in=["web"]))
self.var2.all_sales_channels = False
self.var2.save()
prop = self.event1.item_meta_properties.create(name="Foo") prop = self.event1.item_meta_properties.create(name="Foo")
self.item2.meta_values.create(property=prop, value="Bar") self.item2.meta_values.create(property=prop, value="Bar")
@@ -695,7 +690,6 @@ class ItemsTest(ItemFormTest):
with scopes_disabled(): with scopes_disabled():
i_old = Item.objects.get(name__icontains='Business') i_old = Item.objects.get(name__icontains='Business')
i_new = Item.objects.get(name__icontains='Intermediate') i_new = Item.objects.get(name__icontains='Intermediate')
v2_new = i_new.variations.get(value__icontains='Gold')
assert i_new.category == i_old.category assert i_new.category == i_old.category
assert i_new.description == i_old.description assert i_new.description == i_old.description
assert i_new.active == i_old.active assert i_new.active == i_old.active
@@ -704,8 +698,7 @@ class ItemsTest(ItemFormTest):
assert i_new.require_voucher == i_old.require_voucher assert i_new.require_voucher == i_old.require_voucher
assert i_new.hide_without_voucher == i_old.hide_without_voucher assert i_new.hide_without_voucher == i_old.hide_without_voucher
assert i_new.allow_cancel == i_old.allow_cancel assert i_new.allow_cancel == i_old.allow_cancel
assert set(i_new.limit_sales_channels.values_list("identifier", flat=True)) == {"web", "bar"} assert set(i_new.limit_sales_channels.all()) == set(i_old.limit_sales_channels.all())
assert set(v2_new.limit_sales_channels.values_list("identifier", flat=True)) == {"web"}
assert i_new.meta_data == i_old.meta_data == {"Foo": "Bar"} assert i_new.meta_data == i_old.meta_data == {"Foo": "Bar"}
assert set(i_new.questions.all()) == set(i_old.questions.all()) assert set(i_new.questions.all()) == set(i_old.questions.all())
assert set([str(v.value) for v in i_new.variations.all()]) == set([str(v.value) for v in i_old.variations.all()]) assert set([str(v.value) for v in i_new.variations.all()]) == set([str(v.value) for v in i_old.variations.all()])

View File

@@ -1133,6 +1133,49 @@ def test_order_mark_paid_expired_seat_taken(client, env):
assert o.status == Order.STATUS_EXPIRED 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 @pytest.mark.django_db
def test_order_go_lowercase(client, env): def test_order_go_lowercase(client, env):
client.login(email='dummy@dummy.dummy', password='dummy') client.login(email='dummy@dummy.dummy', password='dummy')