mirror of
https://github.com/pretix/pretix.git
synced 2026-06-10 01:15:05 +00:00
Compare commits
12 Commits
v2026.5.1
...
pajowu/fon
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
69ea5b4069 | ||
|
|
d555b23275 | ||
|
|
375c42dff5 | ||
|
|
21225e7753 | ||
|
|
759ced7268 | ||
|
|
5920419e6b | ||
|
|
7c00383b62 | ||
|
|
4361641857 | ||
|
|
ac8f40353e | ||
|
|
d648c83e4c | ||
|
|
5cd1775e1d | ||
|
|
15d4676f98 |
@@ -64,8 +64,8 @@ Backend
|
||||
|
||||
.. automodule:: pretix.control.signals
|
||||
:members: nav_event, html_head, html_page_start, quota_detail_html, nav_topbar, nav_global, nav_organizer, nav_event_settings,
|
||||
order_info, event_settings_widget, oauth_application_registered, order_position_buttons, subevent_forms,
|
||||
item_formsets, order_search_filter_q, order_search_forms
|
||||
order_info, order_approve_info, event_settings_widget, oauth_application_registered,
|
||||
order_position_buttons, subevent_forms, item_formsets, order_search_filter_q, order_search_forms
|
||||
|
||||
.. automodule:: pretix.base.signals
|
||||
:no-index:
|
||||
|
||||
@@ -93,7 +93,7 @@ dependencies = [
|
||||
"redis==7.4.*",
|
||||
"reportlab==4.5.*",
|
||||
"requests==2.32.*",
|
||||
"sentry-sdk==2.60.*",
|
||||
"sentry-sdk==2.61.*",
|
||||
"sepaxml==2.7.*",
|
||||
"stripe==7.9.*",
|
||||
"text-unidecode==1.*",
|
||||
@@ -111,7 +111,7 @@ dev = [
|
||||
"aiohttp==3.13.*",
|
||||
"coverage",
|
||||
"coveralls",
|
||||
"fakeredis==2.35.*",
|
||||
"fakeredis==2.36.*",
|
||||
"flake8==7.3.*",
|
||||
"freezegun",
|
||||
"isort==8.0.*",
|
||||
|
||||
@@ -19,4 +19,4 @@
|
||||
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
|
||||
# <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
__version__ = "2026.5.0"
|
||||
__version__ = "2026.6.0.dev0"
|
||||
|
||||
@@ -83,7 +83,8 @@ from pretix.base.templatetags.money import money_filter
|
||||
from pretix.base.templatetags.phone_format import phone_format
|
||||
from pretix.helpers.daterange import datetimerange
|
||||
from pretix.helpers.reportlab import (
|
||||
ThumbnailingImageReader, register_ttf_font_if_new, reshaper,
|
||||
ThumbnailingImageReader, find_font_supporting_text,
|
||||
register_ttf_font_if_new, reshaper,
|
||||
)
|
||||
from pretix.presale.style import get_fonts
|
||||
|
||||
@@ -805,7 +806,10 @@ class Renderer:
|
||||
else:
|
||||
self.bg_bytes = None
|
||||
self.bg_pdf = None
|
||||
self.event_fonts = list(get_fonts(event, pdf_support_required=True).keys()) + ['Open Sans']
|
||||
|
||||
event_fonts = get_fonts(event, pdf_support_required=True) | {'Open Sans': {"bold", "italic", "bolditalic"}}
|
||||
# sorted by font name to match ordering of libpretixprint
|
||||
self.event_fonts = dict(sorted(event_fonts.items(), key=lambda x: x[0]))
|
||||
|
||||
@classmethod
|
||||
def _register_fonts(cls, event: Event = None):
|
||||
@@ -1004,7 +1008,25 @@ class Renderer:
|
||||
)
|
||||
canvas.restoreState()
|
||||
|
||||
def _text_paragraph(self, op: OrderPosition, order: Order, o: dict, legacy_lineheight=False, override_fontsize=None):
|
||||
def _prepare_text_paragraph_text(self, op: OrderPosition, order: Order, o: dict):
|
||||
# add an almost-invisible space   after hyphens as word-wrap in ReportLab only works on space chars
|
||||
text = conditional_escape(
|
||||
self._get_text_content(op, order, o) or "",
|
||||
).replace("\n", "<br/>\n").replace("-", "- ")
|
||||
|
||||
# reportlab does not support unicode combination characters
|
||||
# It's important we do this before we use ArabicReshaper
|
||||
text = unicodedata.normalize("NFC", text)
|
||||
|
||||
# reportlab does not support RTL, ligature-heavy scripts like Arabic. Therefore, we use ArabicReshaper
|
||||
# to resolve all ligatures and python-bidi to switch RTL texts.
|
||||
try:
|
||||
text = "<br/>".join(get_display(reshaper.reshape(l)) for l in text.split("<br/>"))
|
||||
except:
|
||||
logger.exception('Reshaping/Bidi fixes failed on string {}'.format(repr(text)))
|
||||
return text
|
||||
|
||||
def _get_text_paragraph_font(self, o: dict, text: str):
|
||||
font = o['fontfamily']
|
||||
|
||||
# Since pdfmetrics.registerFont is global, we want to make sure that no one tries to sneak in a font, they
|
||||
@@ -1018,6 +1040,14 @@ class Renderer:
|
||||
if o['italic']:
|
||||
font += ' I'
|
||||
|
||||
font = find_font_supporting_text(self.event_fonts, text, font)
|
||||
|
||||
return font
|
||||
|
||||
def _text_paragraph(self, op: OrderPosition, order: Order, o: dict, legacy_lineheight=False, override_fontsize=None):
|
||||
text = self._prepare_text_paragraph_text(op, order, o)
|
||||
font = self._get_text_paragraph_font(o, text)
|
||||
|
||||
fontsize = override_fontsize if override_fontsize is not None else float(o['fontsize'])
|
||||
try:
|
||||
ad = getAscentDescent(font, fontsize)
|
||||
@@ -1046,21 +1076,6 @@ class Renderer:
|
||||
alignment=align_map[o['align']],
|
||||
splitLongWords=o.get('splitlongwords', True),
|
||||
)
|
||||
# add an almost-invisible space   after hyphens as word-wrap in ReportLab only works on space chars
|
||||
text = conditional_escape(
|
||||
self._get_text_content(op, order, o) or "",
|
||||
).replace("\n", "<br/>\n").replace("-", "- ")
|
||||
|
||||
# reportlab does not support unicode combination characters
|
||||
# It's important we do this before we use ArabicReshaper
|
||||
text = unicodedata.normalize("NFC", text)
|
||||
|
||||
# reportlab does not support RTL, ligature-heavy scripts like Arabic. Therefore, we use ArabicReshaper
|
||||
# to resolve all ligatures and python-bidi to switch RTL texts.
|
||||
try:
|
||||
text = "<br/>".join(get_display(reshaper.reshape(l)) for l in text.split("<br/>"))
|
||||
except:
|
||||
logger.exception('Reshaping/Bidi fixes failed on string {}'.format(repr(text)))
|
||||
|
||||
p = Paragraph(text, style=style)
|
||||
return p, ad, lineheight
|
||||
|
||||
@@ -461,3 +461,31 @@ class SalesChannelCheckboxSelectMultiple(forms.CheckboxSelectMultiple):
|
||||
**super().create_option(name, value, label, selected, index, subindex, attrs),
|
||||
"plugin_missing": plugin and plugin not in self.event.get_plugins(),
|
||||
}
|
||||
|
||||
|
||||
class ModelChoiceIteratorWithNone(forms.models.ModelChoiceIterator):
|
||||
# see django.forms.models.ModelChoiceIterator for original implementation
|
||||
def __iter__(self):
|
||||
if self.field.empty_label is not None:
|
||||
yield ("", self.field.empty_label)
|
||||
if self.field.none_label is not None:
|
||||
yield ("_none", self.field.none_label)
|
||||
queryset = self.queryset
|
||||
# Can't use iterator() when queryset uses prefetch_related()
|
||||
if not queryset._prefetch_related_lookups:
|
||||
queryset = queryset.iterator()
|
||||
for obj in queryset:
|
||||
yield self.choice(obj)
|
||||
|
||||
|
||||
class ModelChoiceFieldWithNone(forms.ModelChoiceField):
|
||||
iterator = ModelChoiceIteratorWithNone
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.none_label = kwargs.pop("none_label", None)
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def to_python(self, value):
|
||||
if value == "_none":
|
||||
return value
|
||||
return super().to_python(value)
|
||||
|
||||
@@ -29,17 +29,30 @@ class Select2Mixin:
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def options(self, name, value, attrs=None):
|
||||
if value and value[0]:
|
||||
for i, selected in enumerate(self.choices.queryset.filter(pk__in=value)):
|
||||
yield self.create_option(
|
||||
None,
|
||||
self.choices.field.prepare_value(selected),
|
||||
self.choices.field.label_from_instance(selected),
|
||||
True,
|
||||
i,
|
||||
subindex=None,
|
||||
attrs=attrs
|
||||
)
|
||||
if not value or not value[0]:
|
||||
return
|
||||
has_none = "_none" in value
|
||||
if has_none:
|
||||
value = [v for v in value if v != "_none"]
|
||||
yield self.create_option(
|
||||
None,
|
||||
"_none",
|
||||
self.choices.field.none_label,
|
||||
True,
|
||||
0,
|
||||
subindex=None,
|
||||
attrs=attrs
|
||||
)
|
||||
for i, selected in enumerate(self.choices.queryset.filter(pk__in=value)):
|
||||
yield self.create_option(
|
||||
None,
|
||||
self.choices.field.prepare_value(selected),
|
||||
self.choices.field.label_from_instance(selected),
|
||||
True,
|
||||
i + (1 if has_none else 0),
|
||||
subindex=None,
|
||||
attrs=attrs
|
||||
)
|
||||
return
|
||||
|
||||
def optgroups(self, name, value, attrs=None):
|
||||
|
||||
@@ -261,6 +261,16 @@ As with all event plugin signals, the ``sender`` keyword argument will contain t
|
||||
Additionally, the argument ``order`` and ``request`` are available.
|
||||
"""
|
||||
|
||||
order_approve_info = EventPluginSignal()
|
||||
"""
|
||||
Arguments: ``order``, ``request``
|
||||
|
||||
This signal is sent out to display additional information on the order approve page
|
||||
|
||||
As with all event plugin signals, the ``sender`` keyword argument will contain the event.
|
||||
Additionally, the argument ``order`` and ``request`` are available.
|
||||
"""
|
||||
|
||||
order_position_buttons = EventPluginSignal()
|
||||
"""
|
||||
Arguments: ``order``, ``position``, ``request``
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{% extends "pretixcontrol/event/base.html" %}
|
||||
{% load eventsignal %}
|
||||
{% load i18n %}
|
||||
{% block title %}
|
||||
{% trans "Approve order" %}
|
||||
@@ -7,6 +8,9 @@
|
||||
<h1>
|
||||
{% trans "Approve order" %}
|
||||
</h1>
|
||||
|
||||
{% eventsignal request.event "pretix.control.signals.order_approve_info" order=order request=request %}
|
||||
|
||||
<p>{% blocktrans trimmed %}
|
||||
Do you really want to approve this order?
|
||||
{% endblocktrans %}</p>
|
||||
|
||||
@@ -145,11 +145,21 @@ def event_list(request):
|
||||
if 'can_copy' in request.GET:
|
||||
qs = EventWizardCopyForm.copy_from_queryset(request.user, request.session)
|
||||
else:
|
||||
qs = request.user.get_events_with_any_permission(request)
|
||||
permission = request.GET.get('permission')
|
||||
if permission:
|
||||
qs = request.user.get_events_with_permission(permission, request)
|
||||
else:
|
||||
qs = request.user.get_events_with_any_permission(request)
|
||||
|
||||
name_slug_q = Q(name__icontains=i18ncomp(query)) | Q(slug__icontains=query)
|
||||
organizer = request.GET.get('organizer')
|
||||
if organizer:
|
||||
qs = qs.filter(organizer__slug=organizer)
|
||||
else:
|
||||
name_slug_q |= Q(organizer__name__icontains=i18ncomp(query)) | Q(organizer__slug__icontains=query)
|
||||
|
||||
qs = qs.filter(
|
||||
Q(name__icontains=i18ncomp(query)) | Q(slug__icontains=query) |
|
||||
Q(organizer__name__icontains=i18ncomp(query)) | Q(organizer__slug__icontains=query)
|
||||
name_slug_q
|
||||
).annotate(
|
||||
min_from=Min('subevents__date_from'),
|
||||
max_from=Max('subevents__date_from'),
|
||||
@@ -162,10 +172,19 @@ def event_list(request):
|
||||
total = qs.count()
|
||||
pagesize = 20
|
||||
offset = (page - 1) * pagesize
|
||||
results = []
|
||||
if page == 1 and 'include_none' in request.GET and not query:
|
||||
results.append({
|
||||
'id': "_none",
|
||||
'text': _("No event"),
|
||||
'name': _("No event"),
|
||||
'type': "event",
|
||||
})
|
||||
results += [
|
||||
serialize_event(e) for e in qs.select_related('organizer')[offset:offset + pagesize]
|
||||
]
|
||||
doc = {
|
||||
'results': [
|
||||
serialize_event(e) for e in qs.select_related('organizer')[offset:offset + pagesize]
|
||||
],
|
||||
'results': results,
|
||||
'pagination': {
|
||||
"more": total >= (offset + pagesize)
|
||||
}
|
||||
|
||||
@@ -70,37 +70,40 @@ reshaper = SimpleLazyObject(lambda: ArabicReshaper(configuration={
|
||||
}))
|
||||
|
||||
|
||||
def font_supports_text(text, font_name):
|
||||
if not text:
|
||||
return True
|
||||
font = pdfmetrics.getFont(font_name)
|
||||
return all(
|
||||
ord(c) in font.face.charToGlyph or not c.isprintable()
|
||||
for c in text
|
||||
)
|
||||
|
||||
|
||||
def find_font_supporting_text(fonts, text, preferred_font):
|
||||
if font_supports_text(text, preferred_font):
|
||||
return preferred_font
|
||||
for family, styles in fonts.items():
|
||||
if font_supports_text(text, family):
|
||||
if (preferred_font.endswith("It") or preferred_font.endswith(" I")) and "italic" in styles:
|
||||
return family + " I"
|
||||
if (preferred_font.endswith("Bd") or preferred_font.endswith(" B")) and "bold" in styles:
|
||||
return family + " B"
|
||||
return family
|
||||
return preferred_font
|
||||
|
||||
|
||||
class FontFallbackParagraph(Paragraph):
|
||||
def __init__(self, text, style=None, *args, **kwargs):
|
||||
if style is None:
|
||||
style = ParagraphStyle(name='paragraphImplicitDefaultStyle')
|
||||
|
||||
if not self._font_supports_text(text, style.fontName):
|
||||
newFont = self._find_font(text, style.fontName)
|
||||
if newFont:
|
||||
logger.debug(f"replacing {style.fontName} with {newFont} for {text!r}")
|
||||
style = style.clone(name=style.name + '_' + newFont, fontName=newFont)
|
||||
|
||||
supporting_font = find_font_supporting_text(get_fonts(pdf_support_required=True), text, style.fontName)
|
||||
if supporting_font != style.fontName:
|
||||
logger.debug(f"replacing {style.fontName} with {supporting_font} for {text!r}")
|
||||
style = style.clone(name=style.name + '_' + supporting_font, fontName=supporting_font)
|
||||
super().__init__(text, style, *args, **kwargs)
|
||||
|
||||
def _font_supports_text(self, text, font_name):
|
||||
if not text:
|
||||
return True
|
||||
font = pdfmetrics.getFont(font_name)
|
||||
return all(
|
||||
ord(c) in font.face.charToGlyph or not c.isprintable()
|
||||
for c in text
|
||||
)
|
||||
|
||||
def _find_font(self, text, original_font):
|
||||
for family, styles in get_fonts(pdf_support_required=True).items():
|
||||
if self._font_supports_text(text, family):
|
||||
if (original_font.endswith("It") or original_font.endswith(" I")) and "italic" in styles:
|
||||
return family + " I"
|
||||
if (original_font.endswith("Bd") or original_font.endswith(" B")) and "bold" in styles:
|
||||
return family + " B"
|
||||
return family
|
||||
|
||||
|
||||
def register_ttf_font_if_new(name, path):
|
||||
from reportlab.pdfbase import pdfmetrics
|
||||
|
||||
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-05-27 15:47+0000\n"
|
||||
"PO-Revision-Date: 2026-05-01 21:00+0000\n"
|
||||
"Last-Translator: Paul Berschick <paul@plainschwarz.com>\n"
|
||||
"PO-Revision-Date: 2026-05-29 17: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.17\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: htmlcov/d_daa1541d0cbf5e2b_dashboards_py.html:670
|
||||
#: pretix/control/templates/pretixcontrol/events/index.html:166
|
||||
@@ -620,16 +620,17 @@ msgstr ""
|
||||
"como variaciones o paquetes."
|
||||
|
||||
#: pretix/api/webhooks.py:413
|
||||
#, fuzzy
|
||||
#| msgid "Quota handling"
|
||||
msgid "Quota changed"
|
||||
msgstr "Gestión de cuotas"
|
||||
msgstr "Se ha modificado la cuota"
|
||||
|
||||
#: pretix/api/webhooks.py:414
|
||||
msgid ""
|
||||
"This includes related events like creation, deletion, opening or closing of "
|
||||
"quotas. No webhook is sent for changes to the resulting availability."
|
||||
msgstr ""
|
||||
"Esto incluye acciones relacionadas, como la creación, la eliminación, la "
|
||||
"apertura o el cierre de cuotas. No se envía ningún webhook cuando se "
|
||||
"producen cambios en la disponibilidad resultante."
|
||||
|
||||
#: pretix/api/webhooks.py:419
|
||||
msgid "Shop taken live"
|
||||
@@ -3418,11 +3419,13 @@ msgid ""
|
||||
"The field \"%(label)s\" may not contain special characters such as "
|
||||
"\"%(chars)s\"."
|
||||
msgstr ""
|
||||
"El campo «%(label)s» no puede contener caracteres especiales como «%(chars)s"
|
||||
"»."
|
||||
|
||||
#: pretix/base/forms/questions.py:305
|
||||
#, python-format
|
||||
msgid "The field \"%(label)s\" may not contain an URL (%(url)s)."
|
||||
msgstr ""
|
||||
msgstr "El campo «%(label)s» no puede contener una URL (%(url)s)."
|
||||
|
||||
#: pretix/base/forms/questions.py:338
|
||||
msgctxt "phonenumber"
|
||||
@@ -8361,19 +8364,14 @@ msgid "Program times"
|
||||
msgstr "Horarios del programa"
|
||||
|
||||
#: pretix/base/pdf.py:503
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "2017-05-31 10:00 – 12:00\n"
|
||||
#| "2017-05-31 14:00 – 16:00\n"
|
||||
#| "2017-05-31 14:00 – 2017-06-01 14:00"
|
||||
msgid ""
|
||||
"2017-05-31 10:00 – 12:00, Room 1\n"
|
||||
"2017-05-31 14:00 – 16:00, Room 2\n"
|
||||
"2017-05-31 14:00 – 2017-06-01 14:00, Building A"
|
||||
msgstr ""
|
||||
"2017-05-31 10:00 – 12:00\n"
|
||||
"2017-05-31 14:00 – 16:00\n"
|
||||
"2017-05-31 14:00 – 2017-06-01 14:00"
|
||||
"31 de mayo de 2017, de 10:00 a 12:00, Sala 1\n"
|
||||
"31 de mayo de 2017, de 14:00 a 16:00, Sala 2\n"
|
||||
"31 de mayo de 2017, de 14:00 a 1 de junio de 2017, 14:00, Edificio A"
|
||||
|
||||
#: pretix/base/pdf.py:507
|
||||
msgid "Reusable Medium ID"
|
||||
@@ -8903,13 +8901,7 @@ msgid "This voucher code is not known in our database."
|
||||
msgstr "Este vale de compra no se conoce en nuestra base de datos."
|
||||
|
||||
#: pretix/base/services/cart.py:165
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
#| "%(number)s matching products."
|
||||
#| msgid_plural ""
|
||||
#| "The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
#| "%(number)s matching products."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
"%(number)s matching product."
|
||||
@@ -8917,22 +8909,14 @@ msgid_plural ""
|
||||
"The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
"%(number)s matching products."
|
||||
msgstr[0] ""
|
||||
"El vale de compra \"%(voucher)s\" solo se puede utilizar si selecciona al "
|
||||
"menos %(number)s productos coincidentes."
|
||||
"El código de descuento «%(voucher)s» solo se puede utilizar si seleccionas "
|
||||
"al menos%(number)s productos que cumplan los requisitos."
|
||||
msgstr[1] ""
|
||||
"Los vales de compra \"%(voucher)s\" solo se pueden utilizar si selecciona al "
|
||||
"menos %(number)s productos coincidentes."
|
||||
"El código de descuento «%(voucher)s» solo se puede utilizar si seleccionas "
|
||||
"al menos %(number)s productos que cumplan los requisitos."
|
||||
|
||||
#: pretix/base/services/cart.py:170
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
#| "%(number)s matching products. We have therefore removed some positions "
|
||||
#| "from your cart that can no longer be purchased like this."
|
||||
#| msgid_plural ""
|
||||
#| "The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
#| "%(number)s matching products. We have therefore removed some positions "
|
||||
#| "from your cart that can no longer be purchased like this."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
"%(number)s matching product. We have therefore removed some positions from "
|
||||
@@ -8942,13 +8926,15 @@ msgid_plural ""
|
||||
"%(number)s matching products. We have therefore removed some positions from "
|
||||
"your cart that can no longer be purchased like this."
|
||||
msgstr[0] ""
|
||||
"El vale de compra \"%(voucher)s\" solo se puede utilizar si selecciona al "
|
||||
"menos %(number)s productos coincidentes. Por lo tanto, hemos eliminado "
|
||||
"algunas posiciones de su carrito que ya no se pueden comprar así."
|
||||
"El código promocional «%(voucher)s» solo se puede utilizar si seleccionas al "
|
||||
"menos %(number)s producto que cumpla los requisitos. Por lo tanto, hemos "
|
||||
"eliminado de tu carrito algunos artículos que ya no se pueden comprar de "
|
||||
"esta forma."
|
||||
msgstr[1] ""
|
||||
"Los vale de compra \"%(voucher)s\" solo se pueden utilizar si selecciona al "
|
||||
"menos %(number)s productos coincidentes. Por lo tanto, hemos eliminado "
|
||||
"algunas posiciones de su carrito que ya no se pueden comprar así."
|
||||
"El código promocional «%(voucher)s» solo se puede utilizar si seleccionas al "
|
||||
"menos %(number)s productos que cumplan los requisitos. Por lo tanto, hemos "
|
||||
"eliminado de tu carrito algunos artículos que ya no se pueden comprar de "
|
||||
"esta forma."
|
||||
|
||||
#: pretix/base/services/cart.py:176
|
||||
msgid ""
|
||||
@@ -14254,6 +14240,8 @@ msgid ""
|
||||
"You entered an URL, which is not allowed. Please remove %(match)s from your "
|
||||
"input."
|
||||
msgstr ""
|
||||
"Ha introducido una URL que no está permitida. Elimina %(match)s de su "
|
||||
"entrada."
|
||||
|
||||
#: pretix/base/views/errors.py:48
|
||||
msgid ""
|
||||
@@ -16194,14 +16182,8 @@ msgid "inactive"
|
||||
msgstr "inactivo"
|
||||
|
||||
#: pretix/control/forms/item.py:1414
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Sample Conference Center\n"
|
||||
#| "Heidelberg, Germany"
|
||||
msgid "Sample Conference Center, Heidelberg, Germany"
|
||||
msgstr ""
|
||||
"Ejemplo de Centro de Conferencia \n"
|
||||
"Heidelberg, Alemania"
|
||||
msgstr "Ejemplo de Centro de Conferencia : Heidelberg, Alemania"
|
||||
|
||||
#: pretix/control/forms/mailsetup.py:42
|
||||
msgid "Hostname"
|
||||
@@ -23659,11 +23641,8 @@ msgid "Quota history"
|
||||
msgstr "Historial de cuotas"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/quota_bulk_edit.html:6
|
||||
#, fuzzy
|
||||
#| msgctxt "subevent"
|
||||
#| msgid "Change multiple dates"
|
||||
msgid "Change multiple quotas"
|
||||
msgstr "Cambiar varias fechas"
|
||||
msgstr "Modificar varias cuotas"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/quota_bulk_edit.html:8
|
||||
#: pretix/control/templates/pretixcontrol/organizers/device_bulk_edit.html:8
|
||||
@@ -23713,18 +23692,15 @@ msgstr ""
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/quota_delete_bulk.html:4
|
||||
#: pretix/control/templates/pretixcontrol/items/quota_delete_bulk.html:6
|
||||
#, fuzzy
|
||||
#| msgid "Delete quota"
|
||||
msgid "Delete quotas"
|
||||
msgstr "Borrar cuota"
|
||||
msgstr "Eliminar cuotas"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/quota_delete_bulk.html:10
|
||||
#, fuzzy, python-format
|
||||
#| msgid "Are you sure you want to delete the following dates?"
|
||||
#, python-format
|
||||
msgid "Are you sure you want to delete the following quota?"
|
||||
msgid_plural "Are you sure you want to delete the following %(num)s quotas?"
|
||||
msgstr[0] "¿Está seguro de que desea borrar las fechas siguientes?"
|
||||
msgstr[1] "¿Está seguro de que desea borrar las fechas siguientes?"
|
||||
msgstr[0] "¿Está seguro de que desea eliminar la siguiente cuota?"
|
||||
msgstr[1] "¿Está seguro de que desea eliminar las siguientes %(num)s cuotas?"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/quotas.html:9
|
||||
msgid ""
|
||||
@@ -24329,12 +24305,15 @@ msgid ""
|
||||
"generated once the customer pays the invoice or selects a payment method "
|
||||
"that requires an invoice."
|
||||
msgstr ""
|
||||
"Este pedido se modificó después de que se generara la última factura. Aún no "
|
||||
"se ha generado una nueva factura, ya que las facturas están configuradas "
|
||||
"para generarse al realizar el pago o si así lo exige la forma de pago. Se "
|
||||
"generará una nueva factura una vez que el cliente abone la factura o "
|
||||
"seleccione una forma de pago que requiera una factura."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:152
|
||||
#, fuzzy
|
||||
#| msgid "Request invoice"
|
||||
msgid "Reissue invoice"
|
||||
msgstr "Solicitar factura"
|
||||
msgstr "Reemitir factura"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:161
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:413
|
||||
@@ -24765,23 +24744,16 @@ msgid "How should the refund be sent?"
|
||||
msgstr "¿Cómo se debe de realizar este reembolso?"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/refund_choose.html:25
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Any payments that you selected for automatical refunds will be "
|
||||
#| "immediately communicate the refund request to the respective payment "
|
||||
#| "provider. Manual refunds will be created as pending refunds, you can then "
|
||||
#| "later mark them as done once you actually transferred the money back to "
|
||||
#| "the customer."
|
||||
msgid ""
|
||||
"Any payments you selected for automatic refunds will have the refund request "
|
||||
"sent immediately to the respective payment provider. Manual refunds will be "
|
||||
"created as pending refunds, which you can later mark as done once you have "
|
||||
"actually transferred the money back to the customer."
|
||||
msgstr ""
|
||||
"Cualquier pago que haya seleccionado de manera automática para reembolso "
|
||||
"será comunicado inmediatamente a la entidad de pago correspondiente. Los "
|
||||
"devoluciones manuales se crearán como reembolsos pendientes, podrá marcarlos "
|
||||
"como hechos una vez que se haya transferido el dinero al cliente."
|
||||
"Los pagos que hayas seleccionado para reembolsos automáticos se enviarán "
|
||||
"inmediatamente al proveedor de pagos correspondiente. Los reembolsos "
|
||||
"manuales se crearán como reembolsos pendientes, que podrás marcar como "
|
||||
"completados más adelante, una vez que hayas devuelto el dinero al cliente."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/refund_choose.html:32
|
||||
msgid "Refund to original payment method"
|
||||
@@ -29337,11 +29309,8 @@ msgid "The new question has been created."
|
||||
msgstr "La nueva pregunta ha sido creada."
|
||||
|
||||
#: pretix/control/views/item.py:918
|
||||
#, fuzzy
|
||||
#| msgctxt "subevent"
|
||||
#| msgid "The selected dates have been deleted or disabled."
|
||||
msgid "The selected quotas have been deleted or disabled."
|
||||
msgstr "Las fechas seleccionadas se han borrado o desactivado."
|
||||
msgstr "Las cuotas seleccionadas se han eliminado o desactivado."
|
||||
|
||||
#: pretix/control/views/item.py:1074
|
||||
msgid "The new quota has been created."
|
||||
@@ -30073,11 +30042,9 @@ msgstr ""
|
||||
"Este plugin no está permitido actualmente para su cuenta de organizador."
|
||||
|
||||
#: pretix/control/views/organizer.py:832
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "This plugin can be enabled or disabled for events individually."
|
||||
#, python-brace-format
|
||||
msgid "This plugin cannot be activated for event {}."
|
||||
msgstr ""
|
||||
"Este plugin se puede activar o desactivar para eventos de forma individual."
|
||||
msgstr "Este complemento no se puede activar para el evento {}."
|
||||
|
||||
#: pretix/control/views/organizer.py:901
|
||||
msgid "The team has been created. You can now add members to the team."
|
||||
@@ -31122,10 +31089,9 @@ msgid "{width} x {height} mm label"
|
||||
msgstr "etiqueta {width} x {height} mm"
|
||||
|
||||
#: pretix/plugins/badges/templates.py:265
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "{width} x {height} mm label"
|
||||
#, python-brace-format
|
||||
msgid "{width} x {height} inch label"
|
||||
msgstr "etiqueta {width} x {height} mm"
|
||||
msgstr "Etiqueta de {width} x {height} pulgadas"
|
||||
|
||||
#: pretix/plugins/badges/templates/pretixplugins/badges/control_order_info.html:16
|
||||
#: pretix/plugins/badges/templates/pretixplugins/badges/index.html:27
|
||||
|
||||
@@ -4,16 +4,16 @@ msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-05-27 15:47+0000\n"
|
||||
"PO-Revision-Date: 2026-05-08 04:00+0000\n"
|
||||
"Last-Translator: corentin-spec <corentin@spectentaculaire.fr>\n"
|
||||
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix/fr/"
|
||||
">\n"
|
||||
"PO-Revision-Date: 2026-05-29 17:00+0000\n"
|
||||
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
|
||||
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"fr/>\n"
|
||||
"Language: fr\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.17.1\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: htmlcov/d_daa1541d0cbf5e2b_dashboards_py.html:670
|
||||
#: pretix/control/templates/pretixcontrol/events/index.html:166
|
||||
@@ -618,16 +618,17 @@ msgstr ""
|
||||
"aux objets imbriqués tels que les variantes ou les lots."
|
||||
|
||||
#: pretix/api/webhooks.py:413
|
||||
#, fuzzy
|
||||
#| msgid "Quota handling"
|
||||
msgid "Quota changed"
|
||||
msgstr "Traitement des quotas"
|
||||
msgstr "Quota modifié"
|
||||
|
||||
#: pretix/api/webhooks.py:414
|
||||
msgid ""
|
||||
"This includes related events like creation, deletion, opening or closing of "
|
||||
"quotas. No webhook is sent for changes to the resulting availability."
|
||||
msgstr ""
|
||||
"Cela inclut les événements associés, tels que la création, la suppression, "
|
||||
"l'ouverture ou la suppression de quotas. Aucun webhook n'est envoyé en cas "
|
||||
"de modification de la disponibilité qui en résulte."
|
||||
|
||||
#: pretix/api/webhooks.py:419
|
||||
msgid "Shop taken live"
|
||||
@@ -3422,11 +3423,13 @@ msgid ""
|
||||
"The field \"%(label)s\" may not contain special characters such as "
|
||||
"\"%(chars)s\"."
|
||||
msgstr ""
|
||||
"Le champ « %(label)s » ne doit pas contenir de caractères spéciaux tels que "
|
||||
"«%(chars)s »."
|
||||
|
||||
#: pretix/base/forms/questions.py:305
|
||||
#, python-format
|
||||
msgid "The field \"%(label)s\" may not contain an URL (%(url)s)."
|
||||
msgstr ""
|
||||
msgstr "Le champ « %(label)s » ne doit pas contenir d'URL (%(url)s)."
|
||||
|
||||
#: pretix/base/forms/questions.py:338
|
||||
msgctxt "phonenumber"
|
||||
@@ -8409,19 +8412,14 @@ msgid "Program times"
|
||||
msgstr "Horaires du programme"
|
||||
|
||||
#: pretix/base/pdf.py:503
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "2017-05-31 10:00 – 12:00\n"
|
||||
#| "2017-05-31 14:00 – 16:00\n"
|
||||
#| "2017-05-31 14:00 – 2017-06-01 14:00"
|
||||
msgid ""
|
||||
"2017-05-31 10:00 – 12:00, Room 1\n"
|
||||
"2017-05-31 14:00 – 16:00, Room 2\n"
|
||||
"2017-05-31 14:00 – 2017-06-01 14:00, Building A"
|
||||
msgstr ""
|
||||
"2017-05-31 10:00 – 12:00\n"
|
||||
"2017-05-31 14:00 – 16:00\n"
|
||||
"2017-05-31 14:00 – 2017-06-01 14:00"
|
||||
"31 mai 2017, de 10 h à 12 h, salle 1\n"
|
||||
"31 mai 2017, de 14 h à 16 h, salle 2\n"
|
||||
"Du 31 mai 2017 à 1 h du matin au 1er juin 2017 à 14 h, bâtiment A"
|
||||
|
||||
#: pretix/base/pdf.py:507
|
||||
msgid "Reusable Medium ID"
|
||||
@@ -8957,13 +8955,7 @@ msgid "This voucher code is not known in our database."
|
||||
msgstr "Ce code promotionnel n'est pas connu dans notre base de données."
|
||||
|
||||
#: pretix/base/services/cart.py:165
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
#| "%(number)s matching products."
|
||||
#| msgid_plural ""
|
||||
#| "The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
#| "%(number)s matching products."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
"%(number)s matching product."
|
||||
@@ -8971,22 +8963,14 @@ msgid_plural ""
|
||||
"The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
"%(number)s matching products."
|
||||
msgstr[0] ""
|
||||
"Le code promo \"%(voucher)s\" ne peut être utilisé que si vous sélectionnez "
|
||||
"Le code promo « %(voucher)s » ne peut être utilisé que si vous sélectionnez "
|
||||
"au moins %(number)s produit correspondant."
|
||||
msgstr[1] ""
|
||||
"Le code promo \"%(voucher)s\" ne peut être utilisé que si vous sélectionnez "
|
||||
"Le code promo « %(voucher)s » ne peut être utilisé que si vous sélectionnez "
|
||||
"au moins %(number)s produits correspondants."
|
||||
|
||||
#: pretix/base/services/cart.py:170
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
#| "%(number)s matching products. We have therefore removed some positions "
|
||||
#| "from your cart that can no longer be purchased like this."
|
||||
#| msgid_plural ""
|
||||
#| "The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
#| "%(number)s matching products. We have therefore removed some positions "
|
||||
#| "from your cart that can no longer be purchased like this."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
"%(number)s matching product. We have therefore removed some positions from "
|
||||
@@ -14379,6 +14363,8 @@ msgid ""
|
||||
"You entered an URL, which is not allowed. Please remove %(match)s from your "
|
||||
"input."
|
||||
msgstr ""
|
||||
"Vous avez saisi une URL, ce qui n'est pas autorisé. Veuillez supprimer %"
|
||||
"(match)s de votre saisie."
|
||||
|
||||
#: pretix/base/views/errors.py:48
|
||||
msgid ""
|
||||
@@ -16328,14 +16314,8 @@ msgid "inactive"
|
||||
msgstr "inactif"
|
||||
|
||||
#: pretix/control/forms/item.py:1414
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Sample Conference Center\n"
|
||||
#| "Heidelberg, Germany"
|
||||
msgid "Sample Conference Center, Heidelberg, Germany"
|
||||
msgstr ""
|
||||
"Exemple de centre de conférence\n"
|
||||
"Centre des Congrès, France"
|
||||
msgstr "Centre de conférences d'exemple, Heidelberg, Allemagne"
|
||||
|
||||
#: pretix/control/forms/mailsetup.py:42
|
||||
msgid "Hostname"
|
||||
@@ -23831,11 +23811,8 @@ msgid "Quota history"
|
||||
msgstr "Historique des quotas"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/quota_bulk_edit.html:6
|
||||
#, fuzzy
|
||||
#| msgctxt "subevent"
|
||||
#| msgid "Change multiple dates"
|
||||
msgid "Change multiple quotas"
|
||||
msgstr "Modifier plusieurs dates"
|
||||
msgstr "Modifier plusieurs quotas"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/quota_bulk_edit.html:8
|
||||
#: pretix/control/templates/pretixcontrol/organizers/device_bulk_edit.html:8
|
||||
@@ -23883,18 +23860,15 @@ msgstr "Les produits suivants pourraient ne plus être disponibles à la vente
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/quota_delete_bulk.html:4
|
||||
#: pretix/control/templates/pretixcontrol/items/quota_delete_bulk.html:6
|
||||
#, fuzzy
|
||||
#| msgid "Delete quota"
|
||||
msgid "Delete quotas"
|
||||
msgstr "Supprimer le quota"
|
||||
msgstr "Supprimer les quotas"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/quota_delete_bulk.html:10
|
||||
#, fuzzy, python-format
|
||||
#| msgid "Are you sure you want to delete the following dates?"
|
||||
#, python-format
|
||||
msgid "Are you sure you want to delete the following quota?"
|
||||
msgid_plural "Are you sure you want to delete the following %(num)s quotas?"
|
||||
msgstr[0] "Voulez-vous vraiment supprimer les dates suivantes ?"
|
||||
msgstr[1] "Voulez-vous vraiment supprimer les dates suivantes ?"
|
||||
msgstr[0] "Êtes-vous sûr de vouloir supprimer le quota suivant ?"
|
||||
msgstr[1] "Êtes-vous sûr de vouloir supprimer les %(num)s quotas suivants ?"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/quotas.html:9
|
||||
msgid ""
|
||||
@@ -24503,12 +24477,15 @@ msgid ""
|
||||
"generated once the customer pays the invoice or selects a payment method "
|
||||
"that requires an invoice."
|
||||
msgstr ""
|
||||
"Cette commande a été modifiée après l'émission de la dernière facture. "
|
||||
"Aucune nouvelle facture n'a encore été générée, car les factures sont "
|
||||
"configurées pour être émises lors du paiement ou si le mode de paiement "
|
||||
"l'exige. Une nouvelle facture sera générée dès que le client aura réglé la "
|
||||
"facture ou choisi un mode de paiement nécessitant une facture."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:152
|
||||
#, fuzzy
|
||||
#| msgid "Request invoice"
|
||||
msgid "Reissue invoice"
|
||||
msgstr "Demande de facture"
|
||||
msgstr "Réémettre une facture"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:161
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:413
|
||||
@@ -24942,25 +24919,17 @@ msgid "How should the refund be sent?"
|
||||
msgstr "Comment le remboursement doit-il être envoyé ?"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/refund_choose.html:25
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Any payments that you selected for automatical refunds will be "
|
||||
#| "immediately communicate the refund request to the respective payment "
|
||||
#| "provider. Manual refunds will be created as pending refunds, you can then "
|
||||
#| "later mark them as done once you actually transferred the money back to "
|
||||
#| "the customer."
|
||||
msgid ""
|
||||
"Any payments you selected for automatic refunds will have the refund request "
|
||||
"sent immediately to the respective payment provider. Manual refunds will be "
|
||||
"created as pending refunds, which you can later mark as done once you have "
|
||||
"actually transferred the money back to the customer."
|
||||
msgstr ""
|
||||
"Tous les paiements que vous avez sélectionnés pour des remboursements "
|
||||
"automatiques seront immédiatement communiqués à la demande de remboursement "
|
||||
"au fournisseur de paiement respectif. Les remboursements manuels seront "
|
||||
"créés en tant que remboursements en attente, vous pourrez ensuite les "
|
||||
"marquer comme terminés une fois que vous aurez effectivement transféré "
|
||||
"l’argent au client."
|
||||
"Pour tous les paiements que vous avez sélectionnés pour un remboursement "
|
||||
"automatique, la demande de remboursement sera immédiatement transmise au "
|
||||
"prestataire de paiement concerné. Les remboursements manuels seront "
|
||||
"enregistrés comme remboursements en attente ; vous pourrez les marquer comme "
|
||||
"effectués une fois que vous aurez effectivement reversé l'argent au client."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/refund_choose.html:32
|
||||
msgid "Refund to original payment method"
|
||||
@@ -29558,11 +29527,8 @@ msgid "The new question has been created."
|
||||
msgstr "La nouvelle question a été créée."
|
||||
|
||||
#: pretix/control/views/item.py:918
|
||||
#, fuzzy
|
||||
#| msgctxt "subevent"
|
||||
#| msgid "The selected dates have been deleted or disabled."
|
||||
msgid "The selected quotas have been deleted or disabled."
|
||||
msgstr "Les dates sélectionnées ont été supprimées ou désactivées."
|
||||
msgstr "Les quotas sélectionnés ont été supprimés ou désactivés."
|
||||
|
||||
#: pretix/control/views/item.py:1074
|
||||
msgid "The new quota has been created."
|
||||
@@ -30302,12 +30268,9 @@ msgstr ""
|
||||
"Ce plugin n'est actuellement pas autorisé pour ce compte d'organisateur."
|
||||
|
||||
#: pretix/control/views/organizer.py:832
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "This plugin can be enabled or disabled for events individually."
|
||||
#, python-brace-format
|
||||
msgid "This plugin cannot be activated for event {}."
|
||||
msgstr ""
|
||||
"Ce plugin peut être activé ou désactivé individuellement pour chaque "
|
||||
"événement."
|
||||
msgstr "Ce plugin ne peut pas être activé pour l'événement {}."
|
||||
|
||||
#: pretix/control/views/organizer.py:901
|
||||
msgid "The team has been created. You can now add members to the team."
|
||||
@@ -31362,10 +31325,9 @@ msgid "{width} x {height} mm label"
|
||||
msgstr "{width} x {height} mm étiquette"
|
||||
|
||||
#: pretix/plugins/badges/templates.py:265
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "{width} x {height} mm label"
|
||||
#, python-brace-format
|
||||
msgid "{width} x {height} inch label"
|
||||
msgstr "{width} x {height} mm étiquette"
|
||||
msgstr "{width} x {height} pouce étiquette"
|
||||
|
||||
#: pretix/plugins/badges/templates/pretixplugins/badges/control_order_info.html:16
|
||||
#: pretix/plugins/badges/templates/pretixplugins/badges/index.html:27
|
||||
|
||||
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-05-27 15:47+0000\n"
|
||||
"PO-Revision-Date: 2026-05-12 06:34+0000\n"
|
||||
"Last-Translator: Yasunobu YesNo Kawaguchi <kawaguti@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-06-01 09:00+0000\n"
|
||||
"Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n"
|
||||
"Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"ja/>\n"
|
||||
"Language: ja\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.17.1\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: htmlcov/d_daa1541d0cbf5e2b_dashboards_py.html:670
|
||||
#: pretix/control/templates/pretixcontrol/events/index.html:166
|
||||
@@ -608,20 +608,20 @@ msgstr ""
|
||||
"更を含みます。"
|
||||
|
||||
#: pretix/api/webhooks.py:413
|
||||
#, fuzzy
|
||||
#| msgid "Quota handling"
|
||||
msgid "Quota changed"
|
||||
msgstr "クォータの処理"
|
||||
msgstr "クォータが変更されました"
|
||||
|
||||
#: pretix/api/webhooks.py:414
|
||||
msgid ""
|
||||
"This includes related events like creation, deletion, opening or closing of "
|
||||
"quotas. No webhook is sent for changes to the resulting availability."
|
||||
msgstr ""
|
||||
"これには、クォータの作成、削除、開始または終了といった関連イベントが含まれま"
|
||||
"す。結果として得られる可用性の変更については、Webhookが送信されません。"
|
||||
|
||||
#: pretix/api/webhooks.py:419
|
||||
msgid "Shop taken live"
|
||||
msgstr "ショップが公開中になりました"
|
||||
msgstr "ショップがオンラインになりました"
|
||||
|
||||
#: pretix/api/webhooks.py:423
|
||||
msgid "Shop taken offline"
|
||||
@@ -3394,11 +3394,13 @@ msgid ""
|
||||
"The field \"%(label)s\" may not contain special characters such as "
|
||||
"\"%(chars)s\"."
|
||||
msgstr ""
|
||||
"フィールド「%(label)s」には、\"%(chars)s\" のような特殊文字を含めることはでき"
|
||||
"ません。"
|
||||
|
||||
#: pretix/base/forms/questions.py:305
|
||||
#, python-format
|
||||
msgid "The field \"%(label)s\" may not contain an URL (%(url)s)."
|
||||
msgstr ""
|
||||
msgstr "フィールド「%(label)s」には URL (%(url)s) を含めることができません。"
|
||||
|
||||
#: pretix/base/forms/questions.py:338
|
||||
msgctxt "phonenumber"
|
||||
@@ -8189,19 +8191,14 @@ msgid "Program times"
|
||||
msgstr "プログラム時間"
|
||||
|
||||
#: pretix/base/pdf.py:503
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "2017-05-31 10:00 – 12:00\n"
|
||||
#| "2017-05-31 14:00 – 16:00\n"
|
||||
#| "2017-05-31 14:00 – 2017-06-01 14:00"
|
||||
msgid ""
|
||||
"2017-05-31 10:00 – 12:00, Room 1\n"
|
||||
"2017-05-31 14:00 – 16:00, Room 2\n"
|
||||
"2017-05-31 14:00 – 2017-06-01 14:00, Building A"
|
||||
msgstr ""
|
||||
"2017-05-31 10:00 – 12:00\n"
|
||||
"2017-05-31 14:00 – 16:00\n"
|
||||
"2017-05-31 14:00 – 2017-06-01 14:00"
|
||||
"2017-05-31 10:00 – 12:00、部屋1\n"
|
||||
"2017-05-31 14:00 – 16:00、部屋2\n"
|
||||
"2017-05-31 14:00 – 2017-06-01 14:00、ビルA"
|
||||
|
||||
#: pretix/base/pdf.py:507
|
||||
msgid "Reusable Medium ID"
|
||||
@@ -8710,13 +8707,7 @@ msgid "This voucher code is not known in our database."
|
||||
msgstr "このバウチャーコードは、当社のデータベースには登録されていません。"
|
||||
|
||||
#: pretix/base/services/cart.py:165
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
#| "%(number)s matching products."
|
||||
#| msgid_plural ""
|
||||
#| "The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
#| "%(number)s matching products."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
"%(number)s matching product."
|
||||
@@ -8728,15 +8719,7 @@ msgstr[0] ""
|
||||
"した場合にのみ使用できます。"
|
||||
|
||||
#: pretix/base/services/cart.py:170
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
#| "%(number)s matching products. We have therefore removed some positions "
|
||||
#| "from your cart that can no longer be purchased like this."
|
||||
#| msgid_plural ""
|
||||
#| "The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
#| "%(number)s matching products. We have therefore removed some positions "
|
||||
#| "from your cart that can no longer be purchased like this."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The voucher code \"%(voucher)s\" can only be used if you select at least "
|
||||
"%(number)s matching product. We have therefore removed some positions from "
|
||||
@@ -13837,6 +13820,8 @@ msgid ""
|
||||
"You entered an URL, which is not allowed. Please remove %(match)s from your "
|
||||
"input."
|
||||
msgstr ""
|
||||
"URL を入力しましたが、許可されていません。入力から %(match)s を削除してくださ"
|
||||
"い。"
|
||||
|
||||
#: pretix/base/views/errors.py:48
|
||||
msgid ""
|
||||
@@ -15733,14 +15718,8 @@ msgid "inactive"
|
||||
msgstr "無効"
|
||||
|
||||
#: pretix/control/forms/item.py:1414
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Sample Conference Center\n"
|
||||
#| "Heidelberg, Germany"
|
||||
msgid "Sample Conference Center, Heidelberg, Germany"
|
||||
msgstr ""
|
||||
"サンプル・カンファレンスセンター\n"
|
||||
"ドイツ、ハイデルベルク"
|
||||
msgstr "サンプル・カンファレンスセンター, ドイツ, ハイデルベルク"
|
||||
|
||||
#: pretix/control/forms/mailsetup.py:42
|
||||
msgid "Hostname"
|
||||
@@ -22981,11 +22960,8 @@ msgid "Quota history"
|
||||
msgstr "クォータ履歴"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/quota_bulk_edit.html:6
|
||||
#, fuzzy
|
||||
#| msgctxt "subevent"
|
||||
#| msgid "Change multiple dates"
|
||||
msgid "Change multiple quotas"
|
||||
msgstr "複数の日付を変更"
|
||||
msgstr "複数のクォータを変更"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/quota_bulk_edit.html:8
|
||||
#: pretix/control/templates/pretixcontrol/organizers/device_bulk_edit.html:8
|
||||
@@ -23031,17 +23007,14 @@ msgstr "以下の製品は販売できなくなる可能性があります:"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/quota_delete_bulk.html:4
|
||||
#: pretix/control/templates/pretixcontrol/items/quota_delete_bulk.html:6
|
||||
#, fuzzy
|
||||
#| msgid "Delete quota"
|
||||
msgid "Delete quotas"
|
||||
msgstr "クォータを削除"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/quota_delete_bulk.html:10
|
||||
#, fuzzy, python-format
|
||||
#| msgid "Are you sure you want to delete the following dates?"
|
||||
#, python-format
|
||||
msgid "Are you sure you want to delete the following quota?"
|
||||
msgid_plural "Are you sure you want to delete the following %(num)s quotas?"
|
||||
msgstr[0] "以下の日付を削除してもよろしいですか?"
|
||||
msgstr[0] "以下の%(num)sのクォータを削除してもよろしいですか?"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/items/quotas.html:9
|
||||
msgid ""
|
||||
@@ -23634,12 +23607,14 @@ msgid ""
|
||||
"generated once the customer pays the invoice or selects a payment method "
|
||||
"that requires an invoice."
|
||||
msgstr ""
|
||||
"この注文は、最後の請求書が生成された後に変更されました。新しい請求書はまだ作"
|
||||
"成されていません。請求書は支払い時に生成されるか、支払方法によって必要とされ"
|
||||
"る場合に設定されているためです。お客様が請求書を支払うか、請求書が必要な支払"
|
||||
"方法を選択すると、新しい請求書が生成されます。"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:152
|
||||
#, fuzzy
|
||||
#| msgid "Request invoice"
|
||||
msgid "Reissue invoice"
|
||||
msgstr "請求書を要求"
|
||||
msgstr "請求書を再発行する"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:161
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:413
|
||||
@@ -24064,22 +24039,15 @@ msgid "How should the refund be sent?"
|
||||
msgstr "どのように払い戻しますか?"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/refund_choose.html:25
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Any payments that you selected for automatical refunds will be "
|
||||
#| "immediately communicate the refund request to the respective payment "
|
||||
#| "provider. Manual refunds will be created as pending refunds, you can then "
|
||||
#| "later mark them as done once you actually transferred the money back to "
|
||||
#| "the customer."
|
||||
msgid ""
|
||||
"Any payments you selected for automatic refunds will have the refund request "
|
||||
"sent immediately to the respective payment provider. Manual refunds will be "
|
||||
"created as pending refunds, which you can later mark as done once you have "
|
||||
"actually transferred the money back to the customer."
|
||||
msgstr ""
|
||||
"自動払い戻しに選択した支払いは、該当する決済プロバイダーに払い戻し要求が即座"
|
||||
"に通知されます。手動払い戻しは保留中の払い戻しとして作成され、実際に顧客に送"
|
||||
"金した後で完了済みとしてマークできます。"
|
||||
"自動返金をご選択いただいたすべての支払いについては、返金リクエストが直ちに該"
|
||||
"当する決済プロバイダーへ送信されます。手動返金は保留中の返金として作成され、"
|
||||
"実際に顧客に返金した後で完了としてマークできます。"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/refund_choose.html:32
|
||||
msgid "Refund to original payment method"
|
||||
@@ -28504,11 +28472,8 @@ msgid "The new question has been created."
|
||||
msgstr "新しい質問が作成されました。"
|
||||
|
||||
#: pretix/control/views/item.py:918
|
||||
#, fuzzy
|
||||
#| msgctxt "subevent"
|
||||
#| msgid "The selected dates have been deleted or disabled."
|
||||
msgid "The selected quotas have been deleted or disabled."
|
||||
msgstr "選択した日付は削除されたか無効になっています。"
|
||||
msgstr "選択したクォータは削除されたか無効です。"
|
||||
|
||||
#: pretix/control/views/item.py:1074
|
||||
msgid "The new quota has been created."
|
||||
@@ -29215,10 +29180,9 @@ msgid "This plugin is currently not allowed for this organizer account."
|
||||
msgstr "このプラグインは現在、この主催者アカウントでは許可されていません。"
|
||||
|
||||
#: pretix/control/views/organizer.py:832
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "This plugin can be enabled or disabled for events individually."
|
||||
#, python-brace-format
|
||||
msgid "This plugin cannot be activated for event {}."
|
||||
msgstr "このプラグインは、イベントごとに個別に有効化または無効化できます。"
|
||||
msgstr "このプラグインは、イベント{}に対してアクティベートできません。"
|
||||
|
||||
#: pretix/control/views/organizer.py:901
|
||||
msgid "The team has been created. You can now add members to the team."
|
||||
@@ -30236,10 +30200,9 @@ msgid "{width} x {height} mm label"
|
||||
msgstr "{width} x {height} mm ラベル"
|
||||
|
||||
#: pretix/plugins/badges/templates.py:265
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "{width} x {height} mm label"
|
||||
#, python-brace-format
|
||||
msgid "{width} x {height} inch label"
|
||||
msgstr "{width} x {height} mm ラベル"
|
||||
msgstr "{width} x {height} インチラベル"
|
||||
|
||||
#: pretix/plugins/badges/templates/pretixplugins/badges/control_order_info.html:16
|
||||
#: pretix/plugins/badges/templates/pretixplugins/badges/index.html:27
|
||||
|
||||
@@ -8,16 +8,16 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-05-27 15:47+0000\n"
|
||||
"PO-Revision-Date: 2026-02-01 21:00+0000\n"
|
||||
"Last-Translator: z3rrry <z3rrry@gmail.com>\n"
|
||||
"Language-Team: Korean <https://translate.pretix.eu/projects/pretix/pretix/ko/"
|
||||
">\n"
|
||||
"PO-Revision-Date: 2026-06-01 09:00+0000\n"
|
||||
"Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n"
|
||||
"Language-Team: Korean <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"ko/>\n"
|
||||
"Language: ko\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.15.2\n"
|
||||
"X-Generator: Weblate 2026.5\n"
|
||||
|
||||
#: htmlcov/d_daa1541d0cbf5e2b_dashboards_py.html:670
|
||||
#: pretix/control/templates/pretixcontrol/events/index.html:166
|
||||
@@ -48,7 +48,7 @@ msgstr "사전판매 시작하지 않음"
|
||||
#: pretix/control/templates/pretixcontrol/subevents/index.html:176
|
||||
#: pretix/control/views/dashboards.py:549
|
||||
msgid "On sale"
|
||||
msgstr ""
|
||||
msgstr "세일 중"
|
||||
|
||||
#: pretix/_base_settings.py:89
|
||||
msgid "English"
|
||||
@@ -427,10 +427,8 @@ msgstr ""
|
||||
|
||||
#: pretix/api/serializers/organizer.py:495
|
||||
#: pretix/control/views/organizer.py:1035
|
||||
#, fuzzy
|
||||
#| msgid "pretix account invitation"
|
||||
msgid "Account invitation"
|
||||
msgstr "프레틱스 계정 초대"
|
||||
msgstr "계정 초대"
|
||||
|
||||
#: pretix/api/serializers/organizer.py:516
|
||||
#: pretix/control/views/organizer.py:1134
|
||||
@@ -18087,10 +18085,8 @@ msgid "A payment has been performed."
|
||||
msgstr "수동 거래가 수행되었습니다."
|
||||
|
||||
#: pretix/control/logdisplay.py:807
|
||||
#, fuzzy
|
||||
#| msgid "A manual transaction has been performed."
|
||||
msgid "A refund has been performed. "
|
||||
msgstr "수동 거래가 수행되었습니다."
|
||||
msgstr "환불이 처리되었습니다. "
|
||||
|
||||
#: pretix/control/logdisplay.py:808
|
||||
#, python-brace-format
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-05-27 15:47+0000\n"
|
||||
"PO-Revision-Date: 2026-05-21 15:08+0000\n"
|
||||
"PO-Revision-Date: 2026-06-01 09: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"
|
||||
@@ -595,16 +595,16 @@ msgid ""
|
||||
msgstr "這包括新增或刪除的產品,以及對變體或捆綁等巢狀物件的更改。"
|
||||
|
||||
#: pretix/api/webhooks.py:413
|
||||
#, fuzzy
|
||||
#| msgid "Quota handling"
|
||||
msgid "Quota changed"
|
||||
msgstr "額度處理"
|
||||
msgstr "配額改變了"
|
||||
|
||||
#: pretix/api/webhooks.py:414
|
||||
msgid ""
|
||||
"This includes related events like creation, deletion, opening or closing of "
|
||||
"quotas. No webhook is sent for changes to the resulting availability."
|
||||
msgstr ""
|
||||
"這包括建立、刪除、開啟或關閉配額等相關事件。 沒有傳送webhook來更改結果的可用"
|
||||
"性。"
|
||||
|
||||
#: pretix/api/webhooks.py:419
|
||||
msgid "Shop taken live"
|
||||
@@ -650,7 +650,7 @@ msgstr "優惠券已更改"
|
||||
msgid ""
|
||||
"Only includes explicit changes to the voucher, not e.g. an increase of the "
|
||||
"number of redemptions."
|
||||
msgstr ""
|
||||
msgstr "僅包括對代金券的明確更改,例如不包括兌換次數的增加。"
|
||||
|
||||
#: pretix/api/webhooks.py:460
|
||||
msgid "Voucher deleted"
|
||||
@@ -669,22 +669,16 @@ msgid "Customer account anonymized"
|
||||
msgstr "客戶帳戶已匿名化"
|
||||
|
||||
#: pretix/api/webhooks.py:476
|
||||
#, fuzzy
|
||||
#| msgid "Gift card code"
|
||||
msgid "Gift card added"
|
||||
msgstr "禮品卡代碼"
|
||||
msgstr "添加了禮品卡"
|
||||
|
||||
#: pretix/api/webhooks.py:480
|
||||
#, fuzzy
|
||||
#| msgid "Gift card code"
|
||||
msgid "Gift card modified"
|
||||
msgstr "禮品卡代碼"
|
||||
msgstr "禮品卡修改了"
|
||||
|
||||
#: pretix/api/webhooks.py:484
|
||||
#, fuzzy
|
||||
#| msgid "Gift card transactions"
|
||||
msgid "Gift card used in transaction"
|
||||
msgstr "禮品卡交易"
|
||||
msgstr "交易中使用的禮品卡"
|
||||
|
||||
#: pretix/base/addressvalidation.py:100 pretix/base/addressvalidation.py:103
|
||||
#: pretix/base/addressvalidation.py:108 pretix/base/forms/questions.py:1074
|
||||
|
||||
@@ -58,10 +58,11 @@ from django.utils.translation import gettext_lazy as _ # NOQA
|
||||
|
||||
_config = configparser.RawConfigParser()
|
||||
if 'PRETIX_CONFIG_FILE' in os.environ:
|
||||
_config.read_file(open(os.environ.get('PRETIX_CONFIG_FILE'), encoding='utf-8'))
|
||||
config_files = [os.environ['PRETIX_CONFIG_FILE']]
|
||||
else:
|
||||
_config.read(['/etc/pretix/pretix.cfg', os.path.expanduser('~/.pretix.cfg'), 'pretix.cfg'],
|
||||
encoding='utf-8')
|
||||
config_files = ['/etc/pretix/pretix.cfg', os.path.expanduser('~/.pretix.cfg'), 'pretix.cfg']
|
||||
|
||||
_config.read(config_files, encoding='utf-8')
|
||||
config = EnvOrParserConfig(_config)
|
||||
|
||||
CONFIG_FILE = config
|
||||
@@ -704,7 +705,7 @@ if config.has_option('sentry', 'dsn') and not any(c in sys.argv for c in ('shell
|
||||
from sentry_sdk.integrations.logging import (
|
||||
LoggingIntegration, ignore_logger,
|
||||
)
|
||||
from sentry_sdk.scrubber import EventScrubber, DEFAULT_DENYLIST
|
||||
from sentry_sdk.scrubber import DEFAULT_DENYLIST, EventScrubber
|
||||
|
||||
from .sentry import PretixSentryIntegration, setup_custom_filters
|
||||
|
||||
@@ -895,3 +896,14 @@ VITE_DEV_SERVER = f"http://localhost:{VITE_DEV_SERVER_PORT}"
|
||||
VITE_DEV_MODE = DEBUG
|
||||
VITE_IGNORE = False # Used to ignore `collectstatic`/`rebuild`
|
||||
PRETIX_WIDGET_VITE = os.environ.get('PRETIX_WIDGET_VITE', '') not in ('', '0')
|
||||
|
||||
if DEBUG:
|
||||
# Reload if settings file changes
|
||||
config_files_to_watch = [Path(x).absolute() for x in config_files]
|
||||
|
||||
from django.dispatch import receiver
|
||||
from django.utils.autoreload import BaseReloader, autoreload_started
|
||||
|
||||
@receiver(autoreload_started, dispatch_uid="pretix_watch_config_file")
|
||||
def watch_config_file(sender: BaseReloader, *args, **kwargs):
|
||||
sender.extra_files.update(config_files_to_watch)
|
||||
|
||||
@@ -639,11 +639,13 @@ var form_handlers = function (el) {
|
||||
).append(" ").append($("<div>").text(res.organizer).html())
|
||||
);
|
||||
}
|
||||
$ret.append(
|
||||
$("<span>").addClass("event-daterange").append(
|
||||
$("<span>").addClass("fa fa-calendar fa-fw")
|
||||
).append(" ").append(res.date_range)
|
||||
);
|
||||
if (res.date_range) {
|
||||
$ret.append(
|
||||
$("<span>").addClass("event-daterange").append(
|
||||
$("<span>").addClass("fa fa-calendar fa-fw")
|
||||
).append(" ").append(res.date_range)
|
||||
);
|
||||
}
|
||||
return $ret;
|
||||
},
|
||||
}).on("select2:select", function () {
|
||||
|
||||
Reference in New Issue
Block a user