From 592b98b83a7d484b7e874e4abbdc03c57f8a9682 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 26 Mar 2025 16:08:03 +0100 Subject: [PATCH 01/89] Bump version to 2025.4.0.dev0 --- src/pretix/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pretix/__init__.py b/src/pretix/__init__.py index 69fc637da..ddbdb6af2 100644 --- a/src/pretix/__init__.py +++ b/src/pretix/__init__.py @@ -19,4 +19,4 @@ # You should have received a copy of the GNU Affero General Public License along with this program. If not, see # . # -__version__ = "2025.3.0" +__version__ = "2025.4.0.dev0" -- 2.54.0 From 42399c3488236f1cd965ec16109c4647a56e9409 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 27 Mar 2025 11:04:02 +0100 Subject: [PATCH 02/89] Date picker: Guess default time 23:59 for end dates (Z#23182900) (#4917) * Date picker: Guess default time 23:59 for end dates (Z#23182900) * Update src/pretix/static/pretixcontrol/js/ui/main.js Co-authored-by: luelista * Update src/pretix/static/pretixpresale/js/ui/main.js Co-authored-by: luelista --------- Co-authored-by: luelista --- src/pretix/static/pretixcontrol/js/ui/main.js | 6 +++++- src/pretix/static/pretixpresale/js/ui/main.js | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/pretix/static/pretixcontrol/js/ui/main.js b/src/pretix/static/pretixcontrol/js/ui/main.js index 331196c34..776751d1b 100644 --- a/src/pretix/static/pretixcontrol/js/ui/main.js +++ b/src/pretix/static/pretixcontrol/js/ui/main.js @@ -205,7 +205,11 @@ var form_handlers = function (el) { return; } if ($timepicker.val() === "") { - date.set({'hour': 0, 'minute': 0, 'second': 0}); + if (/_(until|end|to)(_|$)/.test($(this).attr("name"))) { + date.set({'hour': 23, 'minute': 59, 'second': 59}); + } else { + date.set({'hour': 0, 'minute': 0, 'second': 0}); + } $timepicker.data('DateTimePicker').date(date); } }); diff --git a/src/pretix/static/pretixpresale/js/ui/main.js b/src/pretix/static/pretixpresale/js/ui/main.js index d914fb4a1..869dd946d 100644 --- a/src/pretix/static/pretixpresale/js/ui/main.js +++ b/src/pretix/static/pretixpresale/js/ui/main.js @@ -91,7 +91,11 @@ var form_handlers = function (el) { return; } if ($timepicker.val() === "") { - date.set({'hour': 0, 'minute': 0, 'second': 0}); + if (/_(until|end|to)(_|$)/.test($(this).attr("name"))) { + date.set({'hour': 23, 'minute': 59, 'second': 59}); + } else { + date.set({'hour': 0, 'minute': 0, 'second': 0}); + } $timepicker.data('DateTimePicker').date(date); } }); -- 2.54.0 From bacb40fd7fcbc14d4626de325bc3ec74bbb530d0 Mon Sep 17 00:00:00 2001 From: CVZ-es Date: Wed, 26 Mar 2025 16:33:13 +0100 Subject: [PATCH 03/89] Translations: Update French Currently translated at 100.0% (5863 of 5863 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/fr/ powered by weblate --- src/pretix/locale/fr/LC_MESSAGES/django.po | 65 +++++++--------------- 1 file changed, 20 insertions(+), 45 deletions(-) diff --git a/src/pretix/locale/fr/LC_MESSAGES/django.po b/src/pretix/locale/fr/LC_MESSAGES/django.po index 483378bd7..ab244740e 100644 --- a/src/pretix/locale/fr/LC_MESSAGES/django.po +++ b/src/pretix/locale/fr/LC_MESSAGES/django.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:44+0000\n" -"PO-Revision-Date: 2025-03-17 17:00+0000\n" +"PO-Revision-Date: 2025-03-27 00:00+0000\n" "Last-Translator: CVZ-es \n" "Language-Team: French \n" @@ -13,7 +13,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.10.3\n" +"X-Generator: Weblate 5.10.4\n" #: pretix/_base_settings.py:87 msgid "English" @@ -12238,18 +12238,14 @@ msgid "MA" msgstr "MA" #: pretix/base/settings.py:3720 pretix/base/settings.py:3722 -#, fuzzy -#| msgid "Provider name" msgctxt "address" msgid "Province" -msgstr "Nom du fournisseur" +msgstr "Province" #: pretix/base/settings.py:3721 -#, fuzzy -#| msgid "Use feature" msgctxt "address" msgid "Prefecture" -msgstr "Utiliser la fonction" +msgstr "Préfecture" #: pretix/base/settings.py:3810 pretix/control/forms/event.py:228 msgid "" @@ -14846,6 +14842,9 @@ msgid "" "only use characters A-Z, a-z, 0-9, and common special characters " "({characters})." msgstr "" +"Le mot de passe contient des caractères qui ne sont pas pris en charge par " +"notre système de messagerie. Veuillez utiliser uniquement les caractères A-" +"Z, a-z, 0-9 et les caractères spéciaux courants ({characters})." #: pretix/control/forms/mailsetup.py:70 msgid "Use STARTTLS" @@ -15209,10 +15208,9 @@ msgid "Recipient" msgstr "Destinataire" #: pretix/control/forms/orders.py:768 -#, fuzzy, python-brace-format -#| msgid "Attach ticket files" +#, python-brace-format msgid "Attach {file}" -msgstr "Joindre les fichiers de tickets" +msgstr "Joindre {file}" #: pretix/control/forms/orders.py:796 msgid "" @@ -18007,13 +18005,7 @@ msgid "Delete check-ins" msgstr "Supprimer les enregistrements" #: pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html:15 -#, fuzzy, python-format -#| msgid "" -#| "Are you sure you want to permanently delete the check-ins of one " -#| "ticket." -#| msgid_plural "" -#| "Are you sure you want to permanently delete the check-ins of " -#| "%(count)s tickets?" +#, python-format msgid "" "Are you sure you want to permanently delete the check-ins of one " "ticket?" @@ -19572,10 +19564,8 @@ msgid "Disabled" msgstr "Désactivé" #: pretix/control/templates/pretixcontrol/event/payment.html:57 -#, fuzzy -#| msgid "Enable waiting list" msgid "Enable additional payment plugins" -msgstr "Activer la liste d'attente" +msgstr "Activer des plugins de paiement supplémentaires" #: pretix/control/templates/pretixcontrol/event/payment.html:66 msgid "Deadlines" @@ -19680,10 +19670,8 @@ msgid "Your changes have been saved." msgstr "Vos modifications ont été enregistrées." #: pretix/control/templates/pretixcontrol/event/plugins.html:34 -#, fuzzy -#| msgid "Check results" msgid "Search results" -msgstr "Vérifier les résultats" +msgstr "Résultats de la recherche" #: pretix/control/templates/pretixcontrol/event/plugins.html:56 msgid "Top recommendation" @@ -19703,16 +19691,12 @@ msgstr "Non disponible" #: pretix/control/templates/pretixcontrol/event/plugins.html:93 #: pretix/control/templates/pretixcontrol/event/plugins.html:105 -#, fuzzy -#| msgid "Login settings" msgid "Open plugin settings" -msgstr "Paramètres de connexion" +msgstr "Ouvrir les paramètres du plugin" #: pretix/control/templates/pretixcontrol/event/plugins.html:94 -#, fuzzy -#| msgid "Go to shop" msgid "Go to" -msgstr "Accéder à la boutique" +msgstr "Aller à" #: pretix/control/templates/pretixcontrol/event/plugins.html:116 #: pretix/control/templates/pretixcontrol/oauth/app_delete.html:15 @@ -22598,11 +22582,8 @@ msgid "Subject:" msgstr "Sujet :" #: pretix/control/templates/pretixcontrol/order/mail_history.html:59 -#, fuzzy -#| msgctxt "attachment_filename" -#| msgid "Calendar invite" msgid "Calendar invite" -msgstr "Invitation au calendrier" +msgstr "Invitation à l'agenda" #: pretix/control/templates/pretixcontrol/order/pay.html:5 #: pretix/control/templates/pretixcontrol/order/pay.html:9 @@ -26677,13 +26658,11 @@ msgstr "Fonctionnalités de l’API" #: pretix/control/views/event.py:444 msgid "The plugin {} is now active, you can configure it here:" -msgstr "" +msgstr "Le plugin {} est maintenant actif, vous pouvez le configurer ici :" #: pretix/control/views/event.py:453 -#, fuzzy -#| msgid "The relevant plugin is currently not active." msgid "The plugin {} is now active." -msgstr "Le plugin correspondant n'est pas activé." +msgstr "Le plugin {} est maintenant actif." #: pretix/control/views/event.py:516 msgid "" @@ -27171,12 +27150,10 @@ msgid "Access for the selected application has been revoked." msgstr "L’accès à l’application sélectionnée a été révoqué." #: pretix/control/views/orders.py:192 -#, fuzzy -#| msgid "We could not save your changes. See below for details." msgid "We could not process your input. See below for details." msgstr "" -"Nous n'avons pas pu enregistrer vos modifications. Voir ci-dessous pour plus " -"de détails." +"Nous n'avons pas pu traiter votre demande. Voir ci-dessous pour plus de " +"détails." #: pretix/control/views/orders.py:265 #, python-brace-format @@ -32299,10 +32276,8 @@ msgstr "" "moderne et une connexion Internet décente." #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/form.html:14 -#, fuzzy -#| msgid "Open Layout Designer" msgid "Open layout editor" -msgstr "Ouvrir l'outil de mise en page" +msgstr "Ouvrir l'éditeur de mise en page" #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/form.html:18 msgid "Advanced mode (multiple layouts)" -- 2.54.0 From 736792fc01ed25b94d9c2d4aaef36c90d22846bc Mon Sep 17 00:00:00 2001 From: CVZ-es Date: Wed, 26 Mar 2025 16:35:01 +0100 Subject: [PATCH 04/89] Translations: Update French Currently translated at 100.0% (236 of 236 strings) Translation: pretix/pretix (JavaScript parts) Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/fr/ powered by weblate --- src/pretix/locale/fr/LC_MESSAGES/djangojs.po | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/pretix/locale/fr/LC_MESSAGES/djangojs.po b/src/pretix/locale/fr/LC_MESSAGES/djangojs.po index c9b7d14f5..8d490cf9c 100644 --- a/src/pretix/locale/fr/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/fr/LC_MESSAGES/djangojs.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: French\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:46+0000\n" -"PO-Revision-Date: 2025-01-16 10:32+0000\n" +"PO-Revision-Date: 2025-03-27 00:00+0000\n" "Last-Translator: CVZ-es \n" "Language-Team: French \n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.9.2\n" +"X-Generator: Weblate 5.10.4\n" #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62 @@ -187,7 +187,7 @@ msgstr "Changer de liste d'enregistrement" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33 msgid "Search results" -msgstr "Résultats de recherche" +msgstr "Résultats de la recherche" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34 msgid "No tickets found" @@ -685,10 +685,8 @@ msgid "Calculating default price…" msgstr "Calcul du prix par défaut …" #: pretix/static/pretixcontrol/js/ui/plugins.js:69 -#, fuzzy -#| msgid "Search results" msgid "No results" -msgstr "Résultats de recherche" +msgstr "Aucun résultat" #: pretix/static/pretixcontrol/js/ui/question.js:42 msgid "Others" -- 2.54.0 From 6f3c2ed4448725e123b35d0280e73a3ee050aef3 Mon Sep 17 00:00:00 2001 From: CVZ-es Date: Wed, 26 Mar 2025 16:37:25 +0100 Subject: [PATCH 05/89] Translations: Update Spanish Currently translated at 100.0% (5863 of 5863 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/es/ powered by weblate --- src/pretix/locale/es/LC_MESSAGES/django.po | 69 +++++++--------------- 1 file changed, 22 insertions(+), 47 deletions(-) diff --git a/src/pretix/locale/es/LC_MESSAGES/django.po b/src/pretix/locale/es/LC_MESSAGES/django.po index 8dd94923f..87eb2a9d6 100644 --- a/src/pretix/locale/es/LC_MESSAGES/django.po +++ b/src/pretix/locale/es/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:44+0000\n" -"PO-Revision-Date: 2025-03-19 01:00+0000\n" -"Last-Translator: Hector \n" +"PO-Revision-Date: 2025-03-27 00:00+0000\n" +"Last-Translator: CVZ-es \n" "Language-Team: Spanish \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.10.3\n" +"X-Generator: Weblate 5.10.4\n" #: pretix/_base_settings.py:87 msgid "English" @@ -12111,18 +12111,14 @@ msgid "MA" msgstr "Ma" #: pretix/base/settings.py:3720 pretix/base/settings.py:3722 -#, fuzzy -#| msgid "Provider name" msgctxt "address" msgid "Province" -msgstr "Nombre del proveedor" +msgstr "Provincia" #: pretix/base/settings.py:3721 -#, fuzzy -#| msgid "Use feature" msgctxt "address" msgid "Prefecture" -msgstr "Función de uso" +msgstr "Prefectura" #: pretix/base/settings.py:3810 pretix/control/forms/event.py:228 msgid "" @@ -14713,6 +14709,9 @@ msgid "" "only use characters A-Z, a-z, 0-9, and common special characters " "({characters})." msgstr "" +"La contraseña contiene caracteres no admitidos por nuestro sistema de correo " +"electrónico. Por favor, utilice sólo caracteres A-Z, a-z, 0-9 y caracteres " +"especiales comunes ({characters})." #: pretix/control/forms/mailsetup.py:70 msgid "Use STARTTLS" @@ -15074,10 +15073,9 @@ msgid "Recipient" msgstr "Destinatario" #: pretix/control/forms/orders.py:768 -#, fuzzy, python-brace-format -#| msgid "Attach ticket files" +#, python-brace-format msgid "Attach {file}" -msgstr "Adjuntar archivos de entradas" +msgstr "Adjuntar {file}" #: pretix/control/forms/orders.py:796 msgid "" @@ -17872,13 +17870,7 @@ msgid "Delete check-ins" msgstr "Eliminar los check-in" #: pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html:15 -#, fuzzy, python-format -#| msgid "" -#| "Are you sure you want to permanently delete the check-ins of one " -#| "ticket." -#| msgid_plural "" -#| "Are you sure you want to permanently delete the check-ins of " -#| "%(count)s tickets?" +#, python-format msgid "" "Are you sure you want to permanently delete the check-ins of one " "ticket?" @@ -17886,8 +17878,8 @@ msgid_plural "" "Are you sure you want to permanently delete the check-ins of " "%(count)s tickets?" msgstr[0] "" -"¿Está seguro de que desea eliminar permanentemente los registros de " -"check-in?." +"¿Está seguro de que desea eliminar permanentemente los registros de check-in?." msgstr[1] "" "¿Estás seguro de que deseas eliminar permanentemente los registros de " "%(count)s check-in?" @@ -19428,10 +19420,8 @@ msgid "Disabled" msgstr "Deshabilitado" #: pretix/control/templates/pretixcontrol/event/payment.html:57 -#, fuzzy -#| msgid "Enable waiting list" msgid "Enable additional payment plugins" -msgstr "Habilitar lista de espera" +msgstr "Habilitar plugins de pago adicionales" #: pretix/control/templates/pretixcontrol/event/payment.html:66 msgid "Deadlines" @@ -19531,10 +19521,8 @@ msgid "Your changes have been saved." msgstr "Los cambios se han guardado." #: pretix/control/templates/pretixcontrol/event/plugins.html:34 -#, fuzzy -#| msgid "Check results" msgid "Search results" -msgstr "Comprobar resultados" +msgstr "Resultados de la búsqueda" #: pretix/control/templates/pretixcontrol/event/plugins.html:56 msgid "Top recommendation" @@ -19554,16 +19542,12 @@ msgstr "No disponible" #: pretix/control/templates/pretixcontrol/event/plugins.html:93 #: pretix/control/templates/pretixcontrol/event/plugins.html:105 -#, fuzzy -#| msgid "Login settings" msgid "Open plugin settings" -msgstr "Configuración de inicio de sesión" +msgstr "Abrir la configuración del plugin" #: pretix/control/templates/pretixcontrol/event/plugins.html:94 -#, fuzzy -#| msgid "Go to shop" msgid "Go to" -msgstr "Ir a la tienda" +msgstr "Ir a" #: pretix/control/templates/pretixcontrol/event/plugins.html:116 #: pretix/control/templates/pretixcontrol/oauth/app_delete.html:15 @@ -22431,11 +22415,8 @@ msgid "Subject:" msgstr "Asunto:" #: pretix/control/templates/pretixcontrol/order/mail_history.html:59 -#, fuzzy -#| msgctxt "attachment_filename" -#| msgid "Calendar invite" msgid "Calendar invite" -msgstr "Invitación al calendario" +msgstr "Invitación para el calendario" #: pretix/control/templates/pretixcontrol/order/pay.html:5 #: pretix/control/templates/pretixcontrol/order/pay.html:9 @@ -26473,13 +26454,11 @@ msgstr "Funciones API" #: pretix/control/views/event.py:444 msgid "The plugin {} is now active, you can configure it here:" -msgstr "" +msgstr "El plugin {} está ahora activo, puede configurarlo aquí:" #: pretix/control/views/event.py:453 -#, fuzzy -#| msgid "The relevant plugin is currently not active." msgid "The plugin {} is now active." -msgstr "El plugin correspondiente no está activado." +msgstr "El plugin {} ya está activo." #: pretix/control/views/event.py:516 msgid "" @@ -26962,11 +26941,9 @@ msgid "Access for the selected application has been revoked." msgstr "Se ha revocado el acceso a la aplicación seleccionada." #: pretix/control/views/orders.py:192 -#, fuzzy -#| msgid "We could not save your changes. See below for details." msgid "We could not process your input. See below for details." msgstr "" -"No se han podido guardar los cambios. Consulta los detalles a continuación." +"No hemos podido procesar su entrada. Consulta los detalles a continuación." #: pretix/control/views/orders.py:265 #, python-brace-format @@ -32038,10 +32015,8 @@ msgstr "" "conexión a Internet decente." #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/form.html:14 -#, fuzzy -#| msgid "Open Layout Designer" msgid "Open layout editor" -msgstr "Abrir herramienta de diseño" +msgstr "Abrir el editor de diseño" #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/form.html:18 msgid "Advanced mode (multiple layouts)" -- 2.54.0 From 8c9a94f87ef3765428da948f86e8c85a89bf0a12 Mon Sep 17 00:00:00 2001 From: CVZ-es Date: Wed, 26 Mar 2025 16:38:33 +0100 Subject: [PATCH 06/89] Translations: Update Spanish Currently translated at 100.0% (236 of 236 strings) Translation: pretix/pretix (JavaScript parts) Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/es/ powered by weblate --- src/pretix/locale/es/LC_MESSAGES/djangojs.po | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/pretix/locale/es/LC_MESSAGES/djangojs.po b/src/pretix/locale/es/LC_MESSAGES/djangojs.po index a211261b5..f25d5072a 100644 --- a/src/pretix/locale/es/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/es/LC_MESSAGES/djangojs.po @@ -8,16 +8,16 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:46+0000\n" -"PO-Revision-Date: 2025-01-21 00:00+0000\n" -"Last-Translator: Hector \n" -"Language-Team: Spanish \n" +"PO-Revision-Date: 2025-03-27 00:00+0000\n" +"Last-Translator: CVZ-es \n" +"Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.9.2\n" +"X-Generator: Weblate 5.10.4\n" #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62 @@ -188,7 +188,7 @@ msgstr "Cambiar lista de registro" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33 msgid "Search results" -msgstr "Resultados de búsqueda" +msgstr "Resultados de la búsqueda" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34 msgid "No tickets found" @@ -684,10 +684,8 @@ msgid "Calculating default price…" msgstr "Calculando el precio por defecto…" #: pretix/static/pretixcontrol/js/ui/plugins.js:69 -#, fuzzy -#| msgid "Search results" msgid "No results" -msgstr "Resultados de búsqueda" +msgstr "No hay resultados" #: pretix/static/pretixcontrol/js/ui/question.js:42 msgid "Others" -- 2.54.0 From 6c7041c87529b532c6f08791c9b82df75968d9d6 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 27 Mar 2025 12:09:04 +0100 Subject: [PATCH 07/89] Add a label for empty salutation option (Z#23183319) (#4913) --- src/pretix/base/forms/questions.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/pretix/base/forms/questions.py b/src/pretix/base/forms/questions.py index f223ee952..774060c9f 100644 --- a/src/pretix/base/forms/questions.py +++ b/src/pretix/base/forms/questions.py @@ -127,7 +127,13 @@ class NamePartsWidget(forms.MultiWidget): if fname == 'title' and self.titles: widgets.append(Select(attrs=a, choices=[('', '')] + [(d, d) for d in self.titles[1]])) elif fname == 'salutation': - widgets.append(Select(attrs=a, choices=[('', '---'), ('empty', '')] + PERSON_NAME_SALUTATIONS)) + widgets.append(Select( + attrs=a, + choices=[ + ('', '---'), + ('empty', '({})'.format(pgettext_lazy("name_salutation", "not specified"))), + ] + PERSON_NAME_SALUTATIONS + )) else: widgets.append(self.widget(attrs=a)) super().__init__(widgets, attrs) @@ -245,7 +251,10 @@ class NamePartsFormField(forms.MultiValueField): d.pop('validators', None) field = forms.ChoiceField( **d, - choices=[('', '---'), ('empty', '')] + PERSON_NAME_SALUTATIONS + choices=[ + ('', '---'), + ('empty', '({})'.format(pgettext_lazy("name_salutation", "not specified"))), + ] + PERSON_NAME_SALUTATIONS ) else: field = forms.CharField(**defaults) -- 2.54.0 From 1c8bcca8466360939295db2e2b042e70a1c49e6d Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Thu, 27 Mar 2025 13:18:59 +0100 Subject: [PATCH 08/89] [A11y] Improve focus management for widget overlay --- .../static/pretixpresale/js/widget/widget.js | 98 ++++++++++++++----- 1 file changed, 71 insertions(+), 27 deletions(-) diff --git a/src/pretix/static/pretixpresale/js/widget/widget.js b/src/pretix/static/pretixpresale/js/widget/widget.js index ce984b5ab..4ca8b3aa3 100644 --- a/src/pretix/static/pretixpresale/js/widget/widget.js +++ b/src/pretix/static/pretixpresale/js/widget/widget.js @@ -77,6 +77,13 @@ var strings = { 'FR': django.gettext('Fr'), 'SA': django.gettext('Sa'), 'SU': django.gettext('Su'), + 'MONDAY': django.gettext('Monday'), + 'TUESDAY': django.gettext('Tuesday'), + 'WEDNESDAY': django.gettext('Wednesday'), + 'THURSDAY': django.gettext('Thursday'), + 'FRIDAY': django.gettext('Friday'), + 'SATURDAY': django.gettext('Saturday'), + 'SUNDAY': django.gettext('Sunday'), }, 'months': { '01': django.gettext('January'), @@ -964,10 +971,10 @@ Vue.component('pretix-widget-event-form', { template: ('
' // Back navigation + '' @@ -1119,6 +1126,11 @@ Vue.component('pretix-widget-event-form', { back_to_list: function() { this.$root.target_url = this.$root.parent_stack.pop(); this.$root.error = null; + if (!this.$root.subevent) { + // reset if we are not in a series + this.$root.name = null; + this.$root.frontpage_text = null; + } this.$root.subevent = null; this.$root.offset = 0; this.$root.append_events = false; @@ -1130,6 +1142,12 @@ Vue.component('pretix-widget-event-form', { } else { this.$root.view = "weeks"; } + + var $el = this.$root.$el; + this.$root.$nextTick(function() { + // wait for redraw, then focus content element for better a11y + $el.focus(); + }); }, calculate_buy_disabled: function() { var i, j, k; @@ -1197,7 +1215,7 @@ Vue.component('pretix-widget-event-list-filter-form', { }); Vue.component('pretix-widget-event-list-entry', { - template: ('' + template: ('' + '
{{ event.name }}
' + '' + '
{{ location }}
' // hidden by css for now, but @@ -1237,7 +1255,7 @@ Vue.component('pretix-widget-event-list-entry', { Vue.component('pretix-widget-event-list', { template: ('
' + '' @@ -1256,6 +1274,10 @@ Vue.component('pretix-widget-event-list', { }, methods: { back_to_calendar: function () { + // make sure to always focus content element + this.$nextTick(function () { + this.$root.$el.focus(); + }); this.$root.offset = 0; this.$root.append_events = false; if (this.$root.weeks) { @@ -1280,7 +1302,7 @@ Vue.component('pretix-widget-event-list', { }); Vue.component('pretix-widget-event-calendar-event', { - template: ('' + template: ('' + '' + '{{ event.name }}' + '' @@ -1288,7 +1310,8 @@ Vue.component('pretix-widget-event-calendar-event', { + '
{{ event.availability.text }}
' + '
'), props: { - event: Object + event: Object, + describedby: String, }, computed: { classObject: function () { @@ -1316,11 +1339,11 @@ Vue.component('pretix-widget-event-calendar-event', { Vue.component('pretix-widget-event-week-cell', { template: ('
' - + '
' + + '
' + '{{ dayhead }}' + '
' + '
' - + '' + + '' + '
' + '
'), props: { @@ -1346,6 +1369,9 @@ Vue.component('pretix-widget-event-week-cell', { } }, computed: { + id: function () { + return this.day ? this.$root.html_id + '-' + this.day.date : ''; + }, dayhead: function () { if (!this.day) { return; @@ -1381,7 +1407,7 @@ Vue.component('pretix-widget-event-week-cell', { Vue.component('pretix-widget-event-calendar-cell', { template: ('' - + '
' + + '
' + '{{ daynum }}' + '
' + '
' @@ -1417,6 +1443,9 @@ Vue.component('pretix-widget-event-calendar-cell', { } return this.day.date.substr(8); }, + date: function () { + return this.day ? (new Date(this.day.date)).toLocaleDateString() : ''; + }, classObject: function () { var o = {}; if (this.day && this.day.events.length > 0) { @@ -1474,26 +1503,26 @@ Vue.component('pretix-widget-event-calendar', { // Calendar navigation + '' // Calendar - + '' + + '
' + '' + '' - + '' - + '' - + '' - + '' - + '' - + '' - + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + '' + '' + '' @@ -1507,7 +1536,10 @@ Vue.component('pretix-widget-event-calendar', { }, monthname: function () { return strings['months'][this.$root.date.substr(5, 2)] + ' ' + this.$root.date.substr(0, 4); - } + }, + id: function () { + return this.$root.html_id + "-event-calendar-table"; + }, }, methods: { back_to_list: function () { @@ -1526,7 +1558,7 @@ Vue.component('pretix-widget-event-calendar', { } this.$root.date = String(curYear) + "-" + padNumber(curMonth, 2) + "-01"; this.$root.loading++; - this.$root.reload(); + this.$root.reload({focus: '#'+this.id}); }, nextmonth: function () { var curMonth = parseInt(this.$root.date.substr(5, 2)); @@ -1538,7 +1570,7 @@ Vue.component('pretix-widget-event-calendar', { } this.$root.date = String(curYear) + "-" + padNumber(curMonth, 2) + "-01"; this.$root.loading++; - this.$root.reload(); + this.$root.reload({focus: '#'+this.id}); } }, }); @@ -1573,7 +1605,7 @@ Vue.component('pretix-widget-event-week-calendar', { + '' // Actual calendar - + '
' + + '
' + '
' + '' + '' @@ -1591,6 +1623,9 @@ Vue.component('pretix-widget-event-week-calendar', { var curYear = this.$root.week[0]; return curWeek + ' / ' + curYear; }, + id: function () { + return this.$root.html_id + "-event-week-table"; + }, }, methods: { back_to_list: function () { @@ -1609,7 +1644,7 @@ Vue.component('pretix-widget-event-week-calendar', { } this.$root.week = [curYear, curWeek]; this.$root.loading++; - this.$root.reload(); + this.$root.reload({focus: '#'+this.id}); }, nextweek: function () { var curWeek = this.$root.week[1]; @@ -1621,13 +1656,13 @@ Vue.component('pretix-widget-event-week-calendar', { } this.$root.week = [curYear, curWeek]; this.$root.loading++; - this.$root.reload(); + this.$root.reload({focus: '#'+this.id}); } }, }); Vue.component('pretix-widget', { - template: ('
' + template: ('
' + '
' + shared_loading_fragment + '
{{ $root.error }}
' @@ -1737,7 +1772,7 @@ var shared_root_methods = { } }); }, - reload: function () { + reload: function (opt = {}) { var url; if (this.$root.is_button) { return; @@ -1854,6 +1889,15 @@ var shared_root_methods = { // If we're on desktop and someone selects a seating-only event in a calendar, let's open it right away, // but only if the person didn't close it before. root.startseating() + } else { + // make sure to only move focus to content element when it had focus before the reload/click + // this is needed because reload is also called on initial load and we do not want to move focus on initial load + if (root.$el.contains(document.activeElement)) { + root.$nextTick(function() { + // wait for redraw, then focus content element for better a11y + (opt.focus ? document.querySelector(opt.focus) : root.$el).focus(); + }); + } } }, function (error) { root.categories = []; -- 2.54.0 From f70874b21ce985804aa1b27d38f2eabcf0b9df25 Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Thu, 27 Mar 2025 13:20:13 +0100 Subject: [PATCH 09/89] [A11y] Widget: add missing labels to dialog and iframe --- src/pretix/static/pretixpresale/js/widget/widget.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/pretix/static/pretixpresale/js/widget/widget.js b/src/pretix/static/pretixpresale/js/widget/widget.js index 4ca8b3aa3..4cb77c7eb 100644 --- a/src/pretix/static/pretixpresale/js/widget/widget.js +++ b/src/pretix/static/pretixpresale/js/widget/widget.js @@ -45,6 +45,7 @@ var strings = { 'loading_error_429': django.pgettext('widget', 'There are currently a lot of users in this ticket shop. Please ' + 'open the shop in a new tab to continue.'), 'open_new_tab': django.pgettext('widget', 'Open ticket shop'), + 'checkout': django.pgettext('widget', 'Checkout'), 'cart_error': django.pgettext('widget', 'The cart could not be created. Please try again later'), 'cart_error_429': django.pgettext('widget', 'We could not create your cart, since there are currently too many ' + 'users in this ticket shop. Please click "Continue" to retry in a new tab.'), @@ -827,17 +828,18 @@ var shared_loading_fragment = ( ); var shared_iframe_fragment = ( - '
' + '
' + '
' + '' + '
' + '
' + '' + '' @@ -869,7 +871,7 @@ var shared_lightbox_fragment = ( + '
{{$root.lightbox.description}}
' + '' + '' + '
' + '
' -- 2.54.0 From 1a1948e3fa4126dbae73783d788aab10c48e2864 Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Thu, 27 Mar 2025 13:21:25 +0100 Subject: [PATCH 10/89] [A11y] Improve HTML-output for date-ranges --- src/pretix/helpers/daterange.py | 37 +++++++++---- .../pretixpresale/organizers/index.html | 6 ++- src/pretix/presale/views/organizer.py | 3 +- src/tests/base/test_models.py | 16 ++++-- src/tests/helpers/test_daterange.py | 54 +++++++++++++------ 5 files changed, 82 insertions(+), 34 deletions(-) diff --git a/src/pretix/helpers/daterange.py b/src/pretix/helpers/daterange.py index 3003f3a4b..edd9d7ab3 100644 --- a/src/pretix/helpers/daterange.py +++ b/src/pretix/helpers/daterange.py @@ -33,7 +33,10 @@ # License for the specific language governing permissions and limitations under the License. from django.utils.html import format_html -from django.utils.translation import get_language, gettext_lazy as _ +from django.utils.safestring import mark_safe +from django.utils.translation import ( + get_language, gettext_lazy as _, pgettext_lazy, +) from pretix.helpers.templatetags.date_fast import date_fast as _date @@ -48,23 +51,28 @@ def daterange(df, dt, as_html=False): else: if as_html: base_format = format_html("{{}}", _date(df, "Y-m-d"), _date(dt, "Y-m-d")) + until = format_html( + " {until} ", + until=pgettext_lazy("timerange", "until") + ) else: base_format = "{}{}{}" + until = " – " if lng.startswith("de"): if df.year == dt.year and df.month == dt.month and df.day == dt.day: return format_html(base_format, _date(df, "D, j. F Y")) elif df.year == dt.year and df.month == dt.month: - return format_html(base_format, _date(df, "j."), "–", _date(dt, "j. F Y")) + return format_html(base_format, _date(df, "j."), mark_safe(until.strip()), _date(dt, "j. F Y")) elif df.year == dt.year: - return format_html(base_format, _date(df, "j. F"), " – ", _date(dt, "j. F Y")) + return format_html(base_format, _date(df, "j. F"), until, _date(dt, "j. F Y")) elif lng.startswith("en"): if df.year == dt.year and df.month == dt.month and df.day == dt.day: return format_html(base_format, _date(df, "D, N jS, Y")) elif df.year == dt.year and df.month == dt.month: - return format_html(base_format, _date(df, "N jS"), " – ", _date(dt, "jS, Y")) + return format_html(base_format, _date(df, "N jS"), until, _date(dt, "jS, Y")) elif df.year == dt.year: - return format_html(base_format, _date(df, "N jS"), " – ", _date(dt, "N jS, Y")) + return format_html(base_format, _date(df, "N jS"), until, _date(dt, "N jS, Y")) elif lng.startswith("es"): if df.year == dt.year and df.month == dt.month and df.day == dt.day: return format_html(base_format, _date(df, "DATE_FORMAT")) @@ -72,14 +80,14 @@ def daterange(df, dt, as_html=False): return format_html( base_format, _date(df, "j"), - " - ", + until, "{} de {} de {}".format(_date(dt, "j"), _date(dt, "F"), _date(dt, "Y")) ) elif df.year == dt.year: return format_html( base_format, "{} de {}".format(_date(df, "j"), _date(df, "F")), - " - ", + until, "{} de {} de {}".format(_date(dt, "j"), _date(dt, "F"), _date(dt, "Y")) ) @@ -89,24 +97,31 @@ def daterange(df, dt, as_html=False): if as_html: base_format = "" return format_html( - "{date_from} – {date_to}", + "{date_from}{until}{date_to}", date_from=format_html(base_format, _date(df, "Y-m-d"), _date(df, "DATE_FORMAT")), date_to=format_html(base_format, _date(dt, "Y-m-d"), _date(dt, "DATE_FORMAT")), + until=until, ) - return _("{date_from} – {date_to}").format( + return _("{date_from}{until}{date_to}").format( date_from=_date(df, "DATE_FORMAT"), date_to=_date(dt, "DATE_FORMAT"), + until=until, ) def datetimerange(df, dt, as_html=False): if as_html: base_format = format_html("{{}}", _date(df, "Y-m-d H:i"), _date(dt, "Y-m-d H:i")) + until = format_html( + " {until} ", + until=pgettext_lazy("timerange", "until") + ) else: base_format = "{}{}{}" + until = " – " if df.year == dt.year and df.month == dt.month and df.day == dt.day: - return format_html(base_format, _date(df, "SHORT_DATE_FORMAT") + " " + _date(df, "TIME_FORMAT"), " – ", _date(dt, "TIME_FORMAT")) + return format_html(base_format, _date(df, "SHORT_DATE_FORMAT") + " " + _date(df, "TIME_FORMAT"), until, _date(dt, "TIME_FORMAT")) else: - return format_html(base_format, _date(df, "SHORT_DATETIME_FORMAT"), " – ", _date(dt, "SHORT_DATETIME_FORMAT")) + return format_html(base_format, _date(df, "SHORT_DATETIME_FORMAT"), until, _date(dt, "SHORT_DATETIME_FORMAT")) diff --git a/src/pretix/presale/templates/pretixpresale/organizers/index.html b/src/pretix/presale/templates/pretixpresale/organizers/index.html index 4a7bb8224..4deb234f5 100644 --- a/src/pretix/presale/templates/pretixpresale/organizers/index.html +++ b/src/pretix/presale/templates/pretixpresale/organizers/index.html @@ -1,5 +1,6 @@ {% extends "pretixpresale/organizers/base.html" %} {% load i18n %} +{% load date_fast %} {% load icon %} {% load rich_text %} {% load tz %} @@ -68,9 +69,10 @@
{% icon "clock-o" %} - {{ e.date_from|date:"TIME_FORMAT" }} + {% if e.settings.show_date_to and e.date_to and e.date_to.date == e.date_from.date %} - – {{ e.date_to|date:"TIME_FORMAT" }} + {% trans "until" context "timerange" %} + {% endif %} {% endtimezone %} diff --git a/src/pretix/presale/views/organizer.py b/src/pretix/presale/views/organizer.py index 89a1a2070..b0098ee6b 100644 --- a/src/pretix/presale/views/organizer.py +++ b/src/pretix/presale/views/organizer.py @@ -479,7 +479,8 @@ class OrganizerIndex(OrganizerViewMixin, EventListMixin, ListView): if event.has_subevents: event.daterange = daterange( event.min_from.astimezone(event.tzname), - (event.max_fromto or event.max_to or event.max_from).astimezone(event.tzname) + (event.max_fromto or event.max_to or event.max_from).astimezone(event.tzname), + as_html=True, ) query_data = self.request.GET.copy() diff --git a/src/tests/base/test_models.py b/src/tests/base/test_models.py index b68d5b977..a98eca66d 100644 --- a/src/tests/base/test_models.py +++ b/src/tests/base/test_models.py @@ -2476,18 +2476,26 @@ class EventTest(TestCase): datetime.datetime(2025, 3, 9, 21, 0, 0, tzinfo=tz), datetime.datetime(2025, 3, 10, 3, 0, 0, tzinfo=tz), 'March 9th – 10th, 2025', - '', + ' ' + ' until ' + '', 'March 9th – 10th, 2025 20:00–02:00', - ' ' + ' ' + ' until ' + ' ' '' ), ( datetime.datetime(2025, 3, 9, 21, 0, 0, tzinfo=tz), datetime.datetime(2025, 3, 12, 14, 0, 0, tzinfo=tz), 'March 9th – 12th, 2025', - '', + ' ' + ' until ' + '', 'March 9th – 12th, 2025', - '', + ' ' + ' until ' + '', ), ( datetime.datetime(2025, 3, 9, 21, 0, 0, tzinfo=tz), diff --git a/src/tests/helpers/test_daterange.py b/src/tests/helpers/test_daterange.py index 9fc493450..8acd60716 100644 --- a/src/tests/helpers/test_daterange.py +++ b/src/tests/helpers/test_daterange.py @@ -73,7 +73,9 @@ def test_same_month_german(): df = date(2003, 2, 1) dt = date(2003, 2, 3) assert daterange(df, dt) == "1.–3. Februar 2003" - assert daterange(df, dt, as_html=True) == '' + assert daterange(df, dt, as_html=True) == '' \ + ' bis ' \ + '' def test_same_month_english(): @@ -81,15 +83,19 @@ def test_same_month_english(): df = date(2003, 2, 1) dt = date(2003, 2, 3) assert daterange(df, dt) == "Feb. 1st – 3rd, 2003" - assert daterange(df, dt, as_html=True) == '' + assert daterange(df, dt, as_html=True) == ' ' \ + ' until ' \ + '' def test_same_month_spanish(): with translation.override('es'): df = date(2003, 2, 1) dt = date(2003, 2, 3) - assert daterange(df, dt) == "1 - 3 de febrero de 2003" - assert daterange(df, dt, as_html=True) == ' - ' + assert daterange(df, dt) == "1 – 3 de febrero de 2003" + assert daterange(df, dt, as_html=True) == ' ' \ + ' hasta ' \ + '' def test_same_year_german(): @@ -97,7 +103,9 @@ def test_same_year_german(): df = date(2003, 2, 1) dt = date(2003, 4, 3) assert daterange(df, dt) == "1. Februar – 3. April 2003" - assert daterange(df, dt, as_html=True) == '' + assert daterange(df, dt, as_html=True) == ' ' \ + ' bis ' \ + '' def test_same_year_english(): @@ -105,15 +113,19 @@ def test_same_year_english(): df = date(2003, 2, 1) dt = date(2003, 4, 3) assert daterange(df, dt) == "Feb. 1st – April 3rd, 2003" - assert daterange(df, dt, as_html=True) == '' + assert daterange(df, dt, as_html=True) == ' ' \ + ' until ' \ + '' def test_same_year_spanish(): with translation.override('es'): df = date(2003, 2, 1) dt = date(2003, 4, 3) - assert daterange(df, dt) == "1 de febrero - 3 de abril de 2003" - assert daterange(df, dt, as_html=True) == ' - ' + assert daterange(df, dt) == "1 de febrero – 3 de abril de 2003" + assert daterange(df, dt, as_html=True) == ' ' \ + ' hasta ' \ + '' def test_different_dates_german(): @@ -121,7 +133,9 @@ def test_different_dates_german(): df = date(2003, 2, 1) dt = date(2005, 4, 3) assert daterange(df, dt) == "1. Februar 2003 – 3. April 2005" - assert daterange(df, dt, as_html=True) == '' + assert daterange(df, dt, as_html=True) == ' ' \ + ' bis ' \ + '' def test_different_dates_english(): @@ -129,7 +143,9 @@ def test_different_dates_english(): df = date(2003, 2, 1) dt = date(2005, 4, 3) assert daterange(df, dt) == "Feb. 1, 2003 – April 3, 2005" - assert daterange(df, dt, as_html=True) == '' + assert daterange(df, dt, as_html=True) == ' ' \ + ' until ' \ + '' def test_different_dates_spanish(): @@ -137,7 +153,8 @@ def test_different_dates_spanish(): df = date(2003, 2, 1) dt = date(2005, 4, 3) assert daterange(df, dt) == "1 de febrero de 2003 – 3 de abril de 2005" - assert daterange(df, dt, as_html=True) == ' – ' \ + assert daterange(df, dt, as_html=True) == ' ' \ + ' hasta ' \ '' @@ -146,7 +163,8 @@ def test_different_dates_other_lang(): df = date(2003, 2, 1) dt = date(2005, 4, 3) assert daterange(df, dt) == "01 Şubat 2003 – 03 Nisan 2005" - assert daterange(df, dt, as_html=True) == ' – ' \ + assert daterange(df, dt, as_html=True) == ' ' \ + ' until ' \ '' @@ -155,13 +173,15 @@ def test_datetime_same_day(): df = datetime(2003, 2, 1, 9, 0) dt = datetime(2003, 2, 1, 10, 0) assert datetimerange(df, dt) == "01.02.2003 09:00 – 10:00" - assert datetimerange(df, dt, as_html=True) == ' – ' \ + assert datetimerange(df, dt, as_html=True) == ' ' \ + ' bis ' \ '' with language('en', 'US'): df = datetime(2003, 2, 1, 9, 0) dt = datetime(2003, 2, 1, 10, 0) assert datetimerange(df, dt) == "02/01/2003 9 a.m. – 10 a.m." - assert datetimerange(df, dt, as_html=True) == ' – ' \ + assert datetimerange(df, dt, as_html=True) == ' ' \ + ' until ' \ '' @@ -170,11 +190,13 @@ def test_datetime_different_day(): df = datetime(2003, 2, 1, 9, 0) dt = datetime(2003, 2, 2, 10, 0) assert datetimerange(df, dt) == "01.02.2003 09:00 – 02.02.2003 10:00" - assert datetimerange(df, dt, as_html=True) == ' – ' \ + assert datetimerange(df, dt, as_html=True) == ' ' \ + ' bis ' \ '' with language('en', 'US'): df = datetime(2003, 2, 1, 9, 0) dt = datetime(2003, 2, 2, 10, 0) assert datetimerange(df, dt) == "02/01/2003 9 a.m. – 02/02/2003 10 a.m." - assert datetimerange(df, dt, as_html=True) == ' – ' \ + assert datetimerange(df, dt, as_html=True) == ' ' \ + ' until ' \ '' -- 2.54.0 From 0b8a7349c71f95777f1ce6df4d03b3b846ef4d18 Mon Sep 17 00:00:00 2001 From: Phin Wolkwitz Date: Thu, 27 Mar 2025 15:36:20 +0100 Subject: [PATCH 11/89] Discounts: Add applicability date ranges (Z#23151897) (#4927) * Add event date fields, add preliminary range check * Remove function, use filtered queryset for subevent id limit * Improve and fix date range check * Add formfields * Add tests * Improve tests * Add new fields to API and documentation * Add migration * Change description according to suggestion * Change discount apply signature, remove unnecessary query * Rename new fields, simplify range check * Rename fields in template * Apply suggestions from code review Co-authored-by: Raphael Michel --------- Co-authored-by: Raphael Michel --- doc/api/resources/discounts.rst | 14 + src/pretix/api/serializers/discount.py | 11 +- src/pretix/api/serializers/order.py | 3 +- ...ent_date_from_discount_event_date_until.py | 23 + src/pretix/base/models/discount.py | 24 +- src/pretix/base/services/cart.py | 3 +- src/pretix/base/services/cross_selling.py | 3 +- src/pretix/base/services/orders.py | 3 +- src/pretix/base/services/pricing.py | 13 +- src/pretix/control/forms/discounts.py | 6 + .../pretixcontrol/items/discount.html | 2 + src/tests/api/test_discounts.py | 2 + src/tests/base/test_pricing_discount.py | 579 ++++++++++-------- 13 files changed, 412 insertions(+), 274 deletions(-) create mode 100644 src/pretix/base/migrations/0279_discount_event_date_from_discount_event_date_until.py diff --git a/doc/api/resources/discounts.rst b/doc/api/resources/discounts.rst index 70f5c2400..1e89d9184 100644 --- a/doc/api/resources/discounts.rst +++ b/doc/api/resources/discounts.rst @@ -35,6 +35,10 @@ subevent_mode strings Determines h ``"same"`` (discount is only applied for groups within the same date), or ``"distinct"`` (discount is only applied for groups with no two same dates). +subevent_date_from datetime The first date time of a subevent to which this discount can be applied + (or ``null``). Ignored in non-series events. +subevent_date_until datetime The last date time of a subevent to which this discount can be applied + (or ``null``). Ignored in non-series events. condition_all_products boolean If ``true``, the discount condition applies to all items. condition_limit_products list of integers If ``condition_all_products`` is not set, this is a list of internal item IDs that the discount condition applies to. @@ -105,6 +109,8 @@ Endpoints "available_from": null, "available_until": null, "subevent_mode": "mixed", + "subevent_date_from": null, + "subevent_date_until": null, "condition_all_products": true, "condition_limit_products": [], "condition_apply_to_addons": true, @@ -163,6 +169,8 @@ Endpoints "available_from": null, "available_until": null, "subevent_mode": "mixed", + "subevent_date_from": null, + "subevent_date_until": null, "condition_all_products": true, "condition_limit_products": [], "condition_apply_to_addons": true, @@ -207,6 +215,8 @@ Endpoints "available_from": null, "available_until": null, "subevent_mode": "mixed", + "subevent_date_from": null, + "subevent_date_until": null, "condition_all_products": true, "condition_limit_products": [], "condition_apply_to_addons": true, @@ -240,6 +250,8 @@ Endpoints "available_from": null, "available_until": null, "subevent_mode": "mixed", + "subevent_date_from": null, + "subevent_date_until": null, "condition_all_products": true, "condition_limit_products": [], "condition_apply_to_addons": true, @@ -302,6 +314,8 @@ Endpoints "available_from": null, "available_until": null, "subevent_mode": "mixed", + "subevent_date_from": null, + "subevent_date_until": null, "condition_all_products": true, "condition_limit_products": [], "condition_apply_to_addons": true, diff --git a/src/pretix/api/serializers/discount.py b/src/pretix/api/serializers/discount.py index 1f632c1b7..9cf4ae748 100644 --- a/src/pretix/api/serializers/discount.py +++ b/src/pretix/api/serializers/discount.py @@ -38,11 +38,12 @@ class DiscountSerializer(SalesChannelMigrationMixin, I18nAwareModelSerializer): class Meta: model = Discount fields = ('id', 'active', 'internal_name', 'position', 'all_sales_channels', 'limit_sales_channels', - 'available_from', 'available_until', 'subevent_mode', 'condition_all_products', - 'condition_limit_products', 'condition_apply_to_addons', 'condition_min_count', 'condition_min_value', - 'benefit_discount_matching_percent', 'benefit_only_apply_to_cheapest_n_matches', - 'benefit_same_products', 'benefit_limit_products', 'benefit_apply_to_addons', - 'benefit_ignore_voucher_discounted', 'condition_ignore_voucher_discounted') + 'available_from', 'available_until', 'subevent_mode', 'subevent_date_from', 'subevent_date_until', + 'condition_all_products', 'condition_limit_products', 'condition_apply_to_addons', + 'condition_min_count', 'condition_min_value', 'benefit_discount_matching_percent', + 'benefit_only_apply_to_cheapest_n_matches', 'benefit_same_products', 'benefit_limit_products', + 'benefit_apply_to_addons', 'benefit_ignore_voucher_discounted', + 'condition_ignore_voucher_discounted') def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) diff --git a/src/pretix/api/serializers/order.py b/src/pretix/api/serializers/order.py index 162a21d6a..1eb02e493 100644 --- a/src/pretix/api/serializers/order.py +++ b/src/pretix/api/serializers/order.py @@ -1518,7 +1518,8 @@ class OrderCreateSerializer(I18nAwareModelSerializer): self.context['event'], order.sales_channel, [ - (cp.item_id, cp.subevent_id, cp.price, bool(cp.addon_to), cp.is_bundled, pos._voucher_discount) + (cp.item_id, cp.subevent_id, cp.subevent.date_from if cp.subevent_id else None, cp.price, + bool(cp.addon_to), cp.is_bundled, pos._voucher_discount) for cp in order_positions ] ) diff --git a/src/pretix/base/migrations/0279_discount_event_date_from_discount_event_date_until.py b/src/pretix/base/migrations/0279_discount_event_date_from_discount_event_date_until.py new file mode 100644 index 000000000..609230e8a --- /dev/null +++ b/src/pretix/base/migrations/0279_discount_event_date_from_discount_event_date_until.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.19 on 2025-03-18 09:12 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pretixbase', '0278_login_source_add_unique_together'), + ] + + operations = [ + migrations.AddField( + model_name='discount', + name='subevent_date_from', + field=models.DateTimeField(blank=True, null=True), + ), + migrations.AddField( + model_name='discount', + name='subevent_date_until', + field=models.DateTimeField(blank=True, null=True), + ), + ] diff --git a/src/pretix/base/models/discount.py b/src/pretix/base/models/discount.py index be2b3d0ac..dc99e4bda 100644 --- a/src/pretix/base/models/discount.py +++ b/src/pretix/base/models/discount.py @@ -36,7 +36,9 @@ from django_scopes import ScopedManager from pretix.base.decimal import round_decimal from pretix.base.models.base import LoggedModel -PositionInfo = namedtuple('PositionInfo', ['item_id', 'subevent_id', 'line_price_gross', 'is_addon_to', 'voucher_discount']) +PositionInfo = namedtuple('PositionInfo', + ['item_id', 'subevent_id', 'subevent_date_from', 'line_price_gross', 'is_addon_to', + 'voucher_discount']) class Discount(LoggedModel): @@ -171,6 +173,17 @@ class Discount(LoggedModel): "access to sold-out quota will still receive the discount."), ) + subevent_date_from = models.DateTimeField( + verbose_name=pgettext_lazy("subevent", "Available for dates starting from"), + null=True, + blank=True, + ) + subevent_date_until = models.DateTimeField( + verbose_name=pgettext_lazy("subevent", "Available for dates starting until"), + null=True, + blank=True, + ) + # more feature ideas: # - max_usages_per_order # - promote_to_user_if_almost_satisfied @@ -355,11 +368,15 @@ class Discount(LoggedModel): # First, filter out everything not even covered by our product scope condition_candidates = [ idx - for idx, (item_id, subevent_id, line_price_gross, is_addon_to, voucher_discount) in positions.items() + for idx, (item_id, subevent_id, subevent_date_from, line_price_gross, is_addon_to, voucher_discount) in + positions.items() if ( (self.condition_all_products or item_id in limit_products) and (self.condition_apply_to_addons or not is_addon_to) and (not self.condition_ignore_voucher_discounted or voucher_discount is None or voucher_discount == Decimal('0.00')) + and (not subevent_id or ( + self.subevent_date_from is None or subevent_date_from >= self.subevent_date_from)) and ( + self.subevent_date_until is None or subevent_date_from <= self.subevent_date_until) ) ] @@ -369,7 +386,8 @@ class Discount(LoggedModel): benefit_products = {p.pk for p in self.benefit_limit_products.all()} benefit_candidates = [ idx - for idx, (item_id, subevent_id, line_price_gross, is_addon_to, voucher_discount) in positions.items() + for idx, (item_id, subevent_id, subevent_date_from, line_price_gross, is_addon_to, voucher_discount) in + positions.items() if ( item_id in benefit_products and (self.benefit_apply_to_addons or not is_addon_to) and diff --git a/src/pretix/base/services/cart.py b/src/pretix/base/services/cart.py index 1263a24c0..d3e359013 100644 --- a/src/pretix/base/services/cart.py +++ b/src/pretix/base/services/cart.py @@ -1398,7 +1398,8 @@ class CartManager: self.event, self._sales_channel.identifier, [ - (cp.item_id, cp.subevent_id, cp.line_price_gross, bool(cp.addon_to), cp.is_bundled, cp.listed_price - cp.price_after_voucher) + (cp.item_id, cp.subevent_id, cp.subevent.date_from if cp.subevent_id else None, cp.line_price_gross, + bool(cp.addon_to), cp.is_bundled, cp.listed_price - cp.price_after_voucher) for cp in positions ] ) diff --git a/src/pretix/base/services/cross_selling.py b/src/pretix/base/services/cross_selling.py index e81abd665..fe48d1e01 100644 --- a/src/pretix/base/services/cross_selling.py +++ b/src/pretix/base/services/cross_selling.py @@ -120,7 +120,8 @@ class CrossSellingService: self.event, self.sales_channel, [ - (cp.item_id, cp.subevent_id, cp.line_price_gross, bool(cp.addon_to), cp.is_bundled, + (cp.item_id, cp.subevent_id, cp.subevent.date_from if cp.subevent_id else None, cp.line_price_gross, + bool(cp.addon_to), cp.is_bundled, cp.listed_price - cp.price_after_voucher) for cp in self.cartpositions ], diff --git a/src/pretix/base/services/orders.py b/src/pretix/base/services/orders.py index afa71dad1..4fc0ae150 100644 --- a/src/pretix/base/services/orders.py +++ b/src/pretix/base/services/orders.py @@ -875,7 +875,8 @@ def _check_positions(event: Event, now_dt: datetime, time_machine_now_dt: dateti event, sales_channel.identifier, [ - (cp.item_id, cp.subevent_id, cp.line_price_gross, bool(cp.addon_to), cp.is_bundled, cp.listed_price - cp.price_after_voucher) + (cp.item_id, cp.subevent_id, cp.subevent.date_from if cp.subevent_id else None, cp.line_price_gross, + bool(cp.addon_to), cp.is_bundled, cp.listed_price - cp.price_after_voucher) for cp in sorted_positions ] ) diff --git a/src/pretix/base/services/pricing.py b/src/pretix/base/services/pricing.py index ee9390030..ac6b1a13e 100644 --- a/src/pretix/base/services/pricing.py +++ b/src/pretix/base/services/pricing.py @@ -21,6 +21,7 @@ # import re from collections import defaultdict +from datetime import datetime from decimal import Decimal from typing import List, Optional, Tuple, Union @@ -162,14 +163,14 @@ def get_line_price(price_after_voucher: Decimal, custom_price_input: Decimal, cu def apply_discounts(event: Event, sales_channel: Union[str, SalesChannel], - positions: List[Tuple[int, Optional[int], Decimal, bool, bool, Decimal]], + positions: List[Tuple[int, Optional[int], Optional[datetime], Decimal, bool, bool, Decimal]], collect_potential_discounts: Optional[defaultdict]=None) -> List[Tuple[Decimal, Optional[Discount]]]: """ Applies any dynamic discounts to a cart :param event: Event the cart belongs to :param sales_channel: Sales channel the cart was created with - :param positions: Tuple of the form ``(item_id, subevent_id, line_price_gross, is_addon_to, is_bundled, voucher_discount)`` + :param positions: Tuple of the form ``(item_id, subevent_id, subevent_date_from, line_price_gross, is_addon_to, is_bundled, voucher_discount)`` :param collect_potential_discounts: If a `defaultdict(list)` is supplied, all discounts that could be applied to the cart based on the "consumed" items, but lack matching "benefitting" items will be collected therein. The dict will contain a mapping from index in the `positions` list of the item that could be consumed, to a list @@ -191,12 +192,14 @@ def apply_discounts(event: Event, sales_channel: Union[str, SalesChannel], ).prefetch_related('condition_limit_products', 'benefit_limit_products').order_by('position', 'pk') for discount in discount_qs: result = discount.apply({ - idx: PositionInfo(item_id, subevent_id, line_price_gross, is_addon_to, voucher_discount) - for idx, (item_id, subevent_id, line_price_gross, is_addon_to, is_bundled, voucher_discount) in enumerate(positions) + idx: PositionInfo(item_id, subevent_id, subevent_date_from, line_price_gross, is_addon_to, voucher_discount) + for + idx, (item_id, subevent_id, subevent_date_from, line_price_gross, is_addon_to, is_bundled, voucher_discount) + in enumerate(positions) if not is_bundled and idx not in new_prices }, collect_potential_discounts) for k in result.keys(): result[k] = (result[k], discount) new_prices.update(result) - return [new_prices.get(idx, (p[2], None)) for idx, p in enumerate(positions)] + return [new_prices.get(idx, (p[3], None)) for idx, p in enumerate(positions)] diff --git a/src/pretix/control/forms/discounts.py b/src/pretix/control/forms/discounts.py index aac9e0827..44ad2386c 100644 --- a/src/pretix/control/forms/discounts.py +++ b/src/pretix/control/forms/discounts.py @@ -45,6 +45,8 @@ class DiscountForm(I18nModelForm): 'limit_sales_channels', 'available_from', 'available_until', + 'subevent_date_from', + 'subevent_date_until', 'subevent_mode', 'condition_all_products', 'condition_limit_products', @@ -62,6 +64,8 @@ class DiscountForm(I18nModelForm): field_classes = { 'available_from': SplitDateTimeField, 'available_until': SplitDateTimeField, + 'subevent_date_from': SplitDateTimeField, + 'subevent_date_until': SplitDateTimeField, 'condition_limit_products': ItemMultipleChoiceField, 'benefit_limit_products': ItemMultipleChoiceField, 'limit_sales_channels': SafeModelMultipleChoiceField, @@ -70,6 +74,8 @@ class DiscountForm(I18nModelForm): 'subevent_mode': forms.RadioSelect, 'available_from': SplitDateTimePickerWidget(), 'available_until': SplitDateTimePickerWidget(attrs={'data-date-after': '#id_available_from_0'}), + 'subevent_date_from': SplitDateTimePickerWidget(), + 'subevent_date_until': SplitDateTimePickerWidget(attrs={'data-date-after': '#id_subevent_date_from_0'}), 'condition_limit_products': forms.CheckboxSelectMultiple(attrs={ 'data-inverse-dependency': '<[name$=all_products]', 'class': 'scrolling-multiple-choice', diff --git a/src/pretix/control/templates/pretixcontrol/items/discount.html b/src/pretix/control/templates/pretixcontrol/items/discount.html index a7ea79b89..526572960 100644 --- a/src/pretix/control/templates/pretixcontrol/items/discount.html +++ b/src/pretix/control/templates/pretixcontrol/items/discount.html @@ -26,6 +26,8 @@ {% bootstrap_field form.condition_ignore_voucher_discounted layout="control" %} {% if form.subevent_mode %} {% bootstrap_field form.subevent_mode layout="control" %} + {% bootstrap_field form.subevent_date_from layout="control" %} + {% bootstrap_field form.subevent_date_until layout="control" %} {% endif %}
{% endif %} +
+
+
+ +
+
+

+
+ +

+ {% blocktrans trimmed %} + You can upload a PDF to use as a custom background. + The paper size will match the PDF. + {% endblocktrans %} +

+

+ + + {% trans "Upload PDF as background" %} + + +

+

+ + + {% trans "Download current background" %} + +

+
+
+
+
+ +

+ {% blocktrans trimmed %} + To manually change the paper size, you need to create a new, empty background. + {% endblocktrans %} +

+
+
+

@@ -195,45 +241,12 @@
-

-

- - - {% trans "Upload custom background" %} - - -
-
-

- {% blocktrans trimmed %} - After you changed the page size, you need to create a new empty background. If you - want to use a custom background, it already needs to have the correct size. - {% endblocktrans %} -

-
- -
-
-
-
-
-
diff --git a/src/pretix/static/pretixcontrol/js/ui/editor.js b/src/pretix/static/pretixcontrol/js/ui/editor.js index 5df1b3dda..fa9914b5b 100644 --- a/src/pretix/static/pretixcontrol/js/ui/editor.js +++ b/src/pretix/static/pretixcontrol/js/ui/editor.js @@ -922,7 +922,6 @@ var editor = { $("#toolbox-heading").text(gettext("Ticket design")); $("#pdf-info-width").val(editor._px2mm(editor.pdf_viewport.width).toFixed(2)); $("#pdf-info-height").val(editor._px2mm(editor.pdf_viewport.height).toFixed(2)); - editor._paper_size_warning(); } editor._update_toolbox_values(); }, -- 2.54.0 From f455152447a0ef994668095b967360637d93d9fb Mon Sep 17 00:00:00 2001 From: luelista Date: Mon, 31 Mar 2025 12:13:04 +0200 Subject: [PATCH 19/89] Show link to stripe payment receipt in backend (Z#23187178) (#4961) * Show link to stripe payment receipt in backend (Z#23187178) * Revert "Show link to stripe payment receipt in backend (Z#23187178)" This reverts commit 4a261ac1aca03908e01c6c6cb3ab17f7f3cab6a4. * Show link to stripe payment receipt in backend payment details (Z#23187178) --- .../stripe/templates/pretixplugins/stripe/control.html | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/control.html b/src/pretix/plugins/stripe/templates/pretixplugins/stripe/control.html index 5f90f887b..80fa46f8f 100644 --- a/src/pretix/plugins/stripe/templates/pretixplugins/stripe/control.html +++ b/src/pretix/plugins/stripe/templates/pretixplugins/stripe/control.html @@ -84,4 +84,12 @@
{{ payment_info.message }}
{% endif %} + + {% if payment_info.latest_charge.receipt_url %} +

+ + {% trans "Payment receipt" %} + +

+ {% endif %} {% endif %} -- 2.54.0 From 5138e86cf1ce5d5f78892227353027486efe6c27 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 31 Mar 2025 12:14:00 +0200 Subject: [PATCH 20/89] Order search: Keep searching in canceled positions (Z#23187097) (#4963) --- src/pretix/api/views/order.py | 2 +- src/pretix/control/forms/filter.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pretix/api/views/order.py b/src/pretix/api/views/order.py index 5148f29df..a13731d5f 100644 --- a/src/pretix/api/views/order.py +++ b/src/pretix/api/views/order.py @@ -185,7 +185,7 @@ with scopes_disabled(): | Q(full_invoice_no__iexact=u) ).values_list('order_id', flat=True) - matching_positions = OrderPosition.objects.filter( + matching_positions = OrderPosition.all.filter( Q(order=OuterRef('pk')) & Q( Q(attendee_name_cached__icontains=u) | Q(attendee_email__icontains=u) | Q(secret__istartswith=u) diff --git a/src/pretix/control/forms/filter.py b/src/pretix/control/forms/filter.py index 14a0439b5..1c3a71195 100644 --- a/src/pretix/control/forms/filter.py +++ b/src/pretix/control/forms/filter.py @@ -267,7 +267,7 @@ class OrderFilterForm(FilterForm): Q(invoice_no__in=invoice_nos) | Q(full_invoice_no__iexact=u) ).values_list('order_id', flat=True) - matching_positions = OrderPosition.objects.filter( + matching_positions = OrderPosition.all.filter( Q( Q(attendee_name_cached__icontains=u) | Q(attendee_email__icontains=u) | Q(company__icontains=u) -- 2.54.0 From b5544b120d3eebea8822d5fd329d33c482fa99ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Mar 2025 12:14:53 +0200 Subject: [PATCH 21/89] Update djangorestframework requirement from ==3.15.* to ==3.16.* (#4965) Updates the requirements on [djangorestframework](https://github.com/encode/django-rest-framework) to permit the latest version. - [Release notes](https://github.com/encode/django-rest-framework/releases) - [Commits](https://github.com/encode/django-rest-framework/compare/3.15.0...3.16.0) --- updated-dependencies: - dependency-name: djangorestframework dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index a99ea20ac..53d47e6f5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,7 +54,7 @@ dependencies = [ "django-redis==5.4.*", "django-scopes==2.0.*", "django-statici18n==2.6.*", - "djangorestframework==3.15.*", + "djangorestframework==3.16.*", "dnspython==2.7.*", "drf_ujson2==1.7.*", "geoip2==5.*", -- 2.54.0 From a3d721c08b8f6b359e845330feafbf7e3217f1b7 Mon Sep 17 00:00:00 2001 From: Renne Rocha Date: Mon, 31 Mar 2025 07:15:17 -0300 Subject: [PATCH 22/89] Add Federal district (DF) to state dropdown for Brazil (BR) (#4966) --- src/pretix/base/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pretix/base/settings.py b/src/pretix/base/settings.py index 9faa33722..722be491e 100644 --- a/src/pretix/base/settings.py +++ b/src/pretix/base/settings.py @@ -3705,7 +3705,7 @@ COUNTRIES_WITH_STATE_IN_ADDRESS = { # are actually *used* in postal addresses. This is obviously not complete and opinionated. # Country: [(List of subdivision types as defined by pycountry), (short or long form to be used)] 'AU': (['State', 'Territory'], 'short'), - 'BR': (['State'], 'short'), + 'BR': (['Federal district', 'State'], 'short'), 'CA': (['Province', 'Territory'], 'short'), # 'CN': (['Province', 'Autonomous region', 'Munincipality'], 'long'), 'JP': (['Prefecture'], 'long'), -- 2.54.0 From 804b048dbb3596f98d03823c43c72db7a8fac2dd Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 31 Mar 2025 12:26:46 +0200 Subject: [PATCH 23/89] =?UTF-8?q?Check-in=20API:=20Return=20order=20locale?= =?UTF-8?q?,=20and=20allow=20to=20use=20order=20locale=20for=20=E2=80=A6?= =?UTF-8?q?=20(#4969)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Check-in API: Return order locale, and allow to use order locale for reasons * Fix failing tests --- doc/api/resources/checkin.rst | 9 +++++++- src/pretix/api/serializers/checkin.py | 1 + src/pretix/api/serializers/order.py | 3 ++- src/pretix/api/views/checkin.py | 9 ++++++-- src/tests/api/test_checkin.py | 3 +++ src/tests/api/test_checkinrpc.py | 31 +++++++++++++++++++++++++-- 6 files changed, 50 insertions(+), 6 deletions(-) diff --git a/doc/api/resources/checkin.rst b/doc/api/resources/checkin.rst index 36549fe10..7f6861da8 100644 --- a/doc/api/resources/checkin.rst +++ b/doc/api/resources/checkin.rst @@ -54,6 +54,11 @@ Checking a ticket in this request twice with the same nonce, the second request will also succeed but will always create only one check-in object even when the previous request was successful as well. This allows for a certain level of idempotency and enables you to re-try after a connection failure. + :json string status: ``"ok"``, ``"incomplete"``, or ``"error"`` :>json string reason: Reason code, only set on status ``"error"``, see below for possible values. :>json string reason_explanation: Human-readable explanation, only set on status ``"error"`` and reason ``"rules"``, can be null. @@ -62,7 +67,9 @@ Checking a ticket in will only include check-ins for the selected list. (2) An additional boolean property ``require_attention`` will inform you whether either the order or the item have the ``checkin_attention`` flag set. (3) If ``attendee_name`` is empty, it may automatically fall - back to values from a parent product or from invoice addresses. + back to values from a parent product or from invoice addresses. (4) Additional properties + ``order__status``, ``order__valid_if_pending``, ``order__require_approval``, and + ``order__locale`` are included with details form the order for convenience. :>json boolean require_attention: Whether or not the ``require_attention`` flag is set on the item or order. :>json list checkin_texts: List of additional texts to show to the user. :>json object list: Excerpt of information about the matching :ref:`check-in list ` (if any was found), diff --git a/src/pretix/api/serializers/checkin.py b/src/pretix/api/serializers/checkin.py index c13a14a62..564665f3a 100644 --- a/src/pretix/api/serializers/checkin.py +++ b/src/pretix/api/serializers/checkin.py @@ -84,6 +84,7 @@ class CheckinRPCRedeemInputSerializer(serializers.Serializer): type = serializers.ChoiceField(choices=Checkin.CHECKIN_TYPES, default=Checkin.TYPE_ENTRY) ignore_unpaid = serializers.BooleanField(default=False, required=False) questions_supported = serializers.BooleanField(default=True, required=False) + use_order_locale = serializers.BooleanField(default=False, required=False) nonce = serializers.CharField(required=False, allow_null=True) datetime = serializers.DateTimeField(required=False, allow_null=True) answers = serializers.JSONField(required=False, allow_null=True) diff --git a/src/pretix/api/serializers/order.py b/src/pretix/api/serializers/order.py index 1eb02e493..147810a43 100644 --- a/src/pretix/api/serializers/order.py +++ b/src/pretix/api/serializers/order.py @@ -607,6 +607,7 @@ class CheckinListOrderPositionSerializer(OrderPositionSerializer): order__status = serializers.SlugRelatedField(read_only=True, slug_field='status', source='order') order__valid_if_pending = serializers.SlugRelatedField(read_only=True, slug_field='valid_if_pending', source='order') order__require_approval = serializers.SlugRelatedField(read_only=True, slug_field='require_approval', source='order') + order__locale = serializers.SlugRelatedField(read_only=True, slug_field='locale', source='order') class Meta: model = OrderPosition @@ -615,7 +616,7 @@ class CheckinListOrderPositionSerializer(OrderPositionSerializer): 'attendee_email', 'voucher', 'tax_rate', 'tax_value', 'secret', 'addon_to', 'subevent', 'checkins', 'print_logs', 'downloads', 'answers', 'tax_rule', 'pseudonymization_id', 'pdf_data', 'seat', 'require_attention', 'order__status', 'order__valid_if_pending', 'order__require_approval', - 'valid_from', 'valid_until', 'blocked') + 'order__locale', 'valid_from', 'valid_until', 'blocked') def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) diff --git a/src/pretix/api/views/checkin.py b/src/pretix/api/views/checkin.py index 311a6bd60..521687caa 100644 --- a/src/pretix/api/views/checkin.py +++ b/src/pretix/api/views/checkin.py @@ -420,7 +420,7 @@ def _checkin_list_position_queryset(checkinlists, ignore_status=False, ignore_pr def _redeem_process(*, checkinlists, raw_barcode, answers_data, datetime, force, checkin_type, ignore_unpaid, nonce, untrusted_input, user, auth, expand, pdf_data, request, questions_supported, canceled_supported, - source_type='barcode', legacy_url_support=False, simulate=False, gate=None): + source_type='barcode', legacy_url_support=False, simulate=False, gate=None, use_order_locale=False): if not checkinlists: raise ValidationError('No check-in list passed.') @@ -694,7 +694,11 @@ def _redeem_process(*, checkinlists, raw_barcode, answers_data, datetime, force, pass # 6. Pass to our actual check-in logic - with language(op.order.event.settings.locale): + if use_order_locale: + locale = op.order.locale + else: + locale = op.order.event.settings.locale + with language(locale): try: perform_checkin( op=op, @@ -909,6 +913,7 @@ class CheckinRPCRedeemView(views.APIView): expand=self.request.query_params.getlist('expand'), pdf_data=self.request.query_params.get('pdf_data', 'false') == 'true', questions_supported=s.validated_data['questions_supported'], + use_order_locale=s.validated_data['use_order_locale'], canceled_supported=True, request=self.request, # this is not clean, but we need it in the serializers for URL generation legacy_url_support=False, diff --git a/src/tests/api/test_checkin.py b/src/tests/api/test_checkin.py index 361e9d391..52af8a8cf 100644 --- a/src/tests/api/test_checkin.py +++ b/src/tests/api/test_checkin.py @@ -108,6 +108,7 @@ TEST_ORDERPOSITION1_RES = { "order__status": "p", "order__require_approval": False, "order__valid_if_pending": False, + "order__locale": "en", "order": "FOO", "positionid": 1, "item": 1, @@ -146,6 +147,7 @@ TEST_ORDERPOSITION2_RES = { "order__status": "p", "order__require_approval": False, "order__valid_if_pending": False, + "order__locale": "en", "order": "FOO", "positionid": 2, "item": 1, @@ -184,6 +186,7 @@ TEST_ORDERPOSITION3_RES = { "order__status": "p", "order__require_approval": False, "order__valid_if_pending": False, + "order__locale": "en", "order": "FOO", "positionid": 3, "item": 1, diff --git a/src/tests/api/test_checkinrpc.py b/src/tests/api/test_checkinrpc.py index 8a91bfcaf..d2fdd397d 100644 --- a/src/tests/api/test_checkinrpc.py +++ b/src/tests/api/test_checkinrpc.py @@ -28,6 +28,7 @@ from django.core.files.base import ContentFile from django.utils.timezone import now from django_countries.fields import Country from django_scopes import scopes_disabled +from freezegun import freeze_time from i18nfield.strings import LazyI18nString from tests.const import SAMPLE_PNG @@ -148,6 +149,7 @@ TEST_ORDERPOSITION1_RES = { "order__status": "p", "order__require_approval": False, "order__valid_if_pending": False, + "order__locale": "en", "order": "FOO", "positionid": 1, "item": 1, @@ -200,7 +202,7 @@ def clist_event2(event2): return c -def _redeem(token_client, org, clist, p, body=None, query=''): +def _redeem(token_client, org, clist, p, body=None, query='', headers={}): body = body or {} if isinstance(clist, list): body['lists'] = [c.pk for c in clist] @@ -209,7 +211,7 @@ def _redeem(token_client, org, clist, p, body=None, query=''): body['secret'] = p return token_client.post('/api/v1/organizers/{}/checkinrpc/redeem/{}'.format( org.slug, query, - ), body, format='json') + ), body, format='json', headers={}) @pytest.mark.django_db @@ -1050,3 +1052,28 @@ def test_checkin_no_pdf_data(token_client, event, team, organizer, clist_all, or resp = token_client.get( '/api/v1/organizers/{}/checkinrpc/search/?list={}&search=dummy&pdf_data=true'.format(organizer.slug, clist_all.pk)) assert not resp.data['results'][0].get('pdf_data') + + +@pytest.mark.django_db +def test_reason_explanation_localization(token_client, organizer, clist, other_item, event, order): + event.settings.locales = ["de", "en"] + order.locale = "de" + order.save() + with scopes_disabled(): + p = order.positions.first() + p.valid_from = datetime.datetime(2020, 1, 1, 12, 0, 0, tzinfo=event.timezone) + p.save() + with freeze_time("2020-01-01 10:45:00"): + resp = _redeem(token_client, organizer, clist, 'z3fsn8jyufm5kpk768q69gkbyr5f4h6w', {}) + assert resp.status_code == 400 + assert resp.data["status"] == "error" + assert resp.data["reason"] == "invalid_time" + assert resp.data["reason_explanation"] == "This ticket is only valid after 2020-01-01 12:00." + + resp = _redeem(token_client, organizer, clist, 'z3fsn8jyufm5kpk768q69gkbyr5f4h6w', { + "use_order_locale": True + }) + assert resp.status_code == 400 + assert resp.data["status"] == "error" + assert resp.data["reason"] == "invalid_time" + assert resp.data["reason_explanation"] == "Erst ab 01.01.2020 12:00 gültig." -- 2.54.0 From d8ec489b13b9bdf4603aad708027774552a4a59a Mon Sep 17 00:00:00 2001 From: luelista Date: Mon, 31 Mar 2025 12:27:45 +0200 Subject: [PATCH 24/89] OrderChangeManager: Fix for change_tax_rule and recalculate_taxes in same transaction (Z#23187299) (#4964) * Add test case * Do not overwrite tax_rule in PriceOperation --- src/pretix/base/services/orders.py | 2 +- src/tests/base/test_orders.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/pretix/base/services/orders.py b/src/pretix/base/services/orders.py index 4fc0ae150..197ee2240 100644 --- a/src/pretix/base/services/orders.py +++ b/src/pretix/base/services/orders.py @@ -2309,7 +2309,7 @@ class OrderChangeManager: op.position.tax_rate = op.price.rate op.position.tax_value = op.price.tax op.position.tax_code = op.price.code - op.position.save() + op.position.save(update_fields=['price', 'tax_rate', 'tax_value', 'tax_code']) elif isinstance(op, self.TaxRuleOperation): if isinstance(op.position, OrderPosition): self.order.log_action('pretix.event.order.changed.tax_rule', user=self.user, auth=self.auth, data={ diff --git a/src/tests/base/test_orders.py b/src/tests/base/test_orders.py index 689832907..7be563b7c 100644 --- a/src/tests/base/test_orders.py +++ b/src/tests/base/test_orders.py @@ -3243,6 +3243,18 @@ class OrderChangeManagerTests(TestCase): assert nop.tax_rate == Decimal('0.00') assert nop.tax_value == Decimal('0.00') + @classscope(attr='o') + def test_change_taxrate_and_keep_net(self): + self.ocm.change_tax_rule(self.op1, self.tr19) + self.ocm.recalculate_taxes(keep='net') + self.ocm.commit() + self.order.refresh_from_db() + nop = self.order.positions.first() + assert nop.price == Decimal('25.59') + assert nop.tax_rule == self.tr19 + assert nop.tax_rate == Decimal('19.00') + assert nop.tax_value == Decimal('4.09') + @classscope(attr='o') def test_change_taxrate_to_country_specific(self): self.tr19.eu_reverse_charge = True -- 2.54.0 From d88e47d76b95dfef2b69bad39a9e761675e8f85f Mon Sep 17 00:00:00 2001 From: Hijiri Umemoto Date: Mon, 31 Mar 2025 08:28:29 +0200 Subject: [PATCH 25/89] Translations: Update Japanese Currently translated at 100.0% (5863 of 5863 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ja/ powered by weblate --- src/pretix/locale/ja/LC_MESSAGES/django.po | 66 +++++++--------------- 1 file changed, 20 insertions(+), 46 deletions(-) diff --git a/src/pretix/locale/ja/LC_MESSAGES/django.po b/src/pretix/locale/ja/LC_MESSAGES/django.po index dc91f0402..1a169271b 100644 --- a/src/pretix/locale/ja/LC_MESSAGES/django.po +++ b/src/pretix/locale/ja/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:44+0000\n" -"PO-Revision-Date: 2025-03-17 17:00+0000\n" +"PO-Revision-Date: 2025-03-31 15:00+0000\n" "Last-Translator: Hijiri Umemoto \n" "Language-Team: Japanese \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.10.3\n" +"X-Generator: Weblate 5.10.4\n" #: pretix/_base_settings.py:87 msgid "English" @@ -11782,18 +11782,14 @@ msgid "MA" msgstr "MA" #: pretix/base/settings.py:3720 pretix/base/settings.py:3722 -#, fuzzy -#| msgid "Provider name" msgctxt "address" msgid "Province" -msgstr "イベント名" +msgstr "州・省" #: pretix/base/settings.py:3721 -#, fuzzy -#| msgid "Price effect" msgctxt "address" msgid "Prefecture" -msgstr "価格の効果" +msgstr "県" #: pretix/base/settings.py:3810 pretix/control/forms/event.py:228 msgid "" @@ -14321,6 +14317,9 @@ msgid "" "only use characters A-Z, a-z, 0-9, and common special characters " "({characters})." msgstr "" +"パスワードには、当社のメールシステムでサポートされていない文字が含まれていま" +"す。文字A-Z、a-z、0-9、および一般的な特殊文字({characters})" +"のみを使用してください 。" #: pretix/control/forms/mailsetup.py:70 msgid "Use STARTTLS" @@ -14670,10 +14669,9 @@ msgid "Recipient" msgstr "受取人" #: pretix/control/forms/orders.py:768 -#, fuzzy, python-brace-format -#| msgid "Attach ticket files" +#, python-brace-format msgid "Attach {file}" -msgstr "チケットのファイルを添付" +msgstr "添付する {file}" #: pretix/control/forms/orders.py:796 msgid "" @@ -17394,22 +17392,15 @@ msgid "Delete check-ins" msgstr "チケットのチェックインが完了しました" #: pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html:15 -#, fuzzy, python-format -#| msgid "" -#| "Are you sure you want to permanently delete the check-ins of one " -#| "ticket." -#| msgid_plural "" -#| "Are you sure you want to permanently delete the check-ins of " -#| "%(count)s tickets?" +#, python-format msgid "" "Are you sure you want to permanently delete the check-ins of one " "ticket?" msgid_plural "" "Are you sure you want to permanently delete the check-ins of " "%(count)s tickets?" -msgstr[0] "" -"%(count)s 枚のチケットについて、チェックインを永久に削除して" -"も構いませんか?" +msgstr[0] "%(count)s " +"枚のチケットについて、チェックインを永久に削除しても構いませんか?" #: pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html:24 #: pretix/control/templates/pretixcontrol/checkin/list_delete.html:18 @@ -18914,10 +18905,8 @@ msgid "Disabled" msgstr "無効です" #: pretix/control/templates/pretixcontrol/event/payment.html:57 -#, fuzzy -#| msgid "Enable waiting list" msgid "Enable additional payment plugins" -msgstr "待ちリストを有効にする" +msgstr "追加の支払い方法のプラグインを有効にする" #: pretix/control/templates/pretixcontrol/event/payment.html:66 msgid "Deadlines" @@ -19015,10 +19004,8 @@ msgid "Your changes have been saved." msgstr "変更が保存されました。" #: pretix/control/templates/pretixcontrol/event/plugins.html:34 -#, fuzzy -#| msgid "Check results" msgid "Search results" -msgstr "結果を確認します" +msgstr "結果を検索する" #: pretix/control/templates/pretixcontrol/event/plugins.html:56 msgid "Top recommendation" @@ -19038,16 +19025,12 @@ msgstr "売り切れ又は在庫なし" #: pretix/control/templates/pretixcontrol/event/plugins.html:93 #: pretix/control/templates/pretixcontrol/event/plugins.html:105 -#, fuzzy -#| msgid "Login settings" msgid "Open plugin settings" -msgstr "ログイン設定" +msgstr "プラグインの設定を開く" #: pretix/control/templates/pretixcontrol/event/plugins.html:94 -#, fuzzy -#| msgid "Go to shop" msgid "Go to" -msgstr "ショップに行く" +msgstr "進む" #: pretix/control/templates/pretixcontrol/event/plugins.html:116 #: pretix/control/templates/pretixcontrol/oauth/app_delete.html:15 @@ -21828,9 +21811,6 @@ msgid "Subject:" msgstr "Subject:" #: pretix/control/templates/pretixcontrol/order/mail_history.html:59 -#, fuzzy -#| msgctxt "attachment_filename" -#| msgid "Calendar invite" msgid "Calendar invite" msgstr "カレンダーの招待" @@ -25771,13 +25751,11 @@ msgstr "APIの機能" #: pretix/control/views/event.py:444 msgid "The plugin {} is now active, you can configure it here:" -msgstr "" +msgstr "プラグイン {} が現在有効です。こちらで設定できます:" #: pretix/control/views/event.py:453 -#, fuzzy -#| msgid "The relevant plugin is currently not active." msgid "The plugin {} is now active." -msgstr "関連するプラグインは、現在無効です。" +msgstr "プラグイン {} が現在有効です。" #: pretix/control/views/event.py:516 msgid "" @@ -26250,10 +26228,8 @@ msgid "Access for the selected application has been revoked." msgstr "選択されたアプリケーションへのアクセスが取り消されました。" #: pretix/control/views/orders.py:192 -#, fuzzy -#| msgid "We could not save your changes. See below for details." msgid "We could not process your input. See below for details." -msgstr "変更を保存できませんでした。詳細は下記参照。" +msgstr "入力内容を処理できませんでした。詳細は下記参照。" #: pretix/control/views/orders.py:265 #, python-brace-format @@ -31191,10 +31167,8 @@ msgstr "" "が、最新のブラウザと良好なインターネット接続が必要です。" #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/form.html:14 -#, fuzzy -#| msgid "Open Layout Designer" msgid "Open layout editor" -msgstr "レイアウトデザイナーを開く" +msgstr "レイアウト・エディターを開く" #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/form.html:18 msgid "Advanced mode (multiple layouts)" -- 2.54.0 From 5768fbca54054f12eb5d6b6f7759452008ef4ac2 Mon Sep 17 00:00:00 2001 From: Hijiri Umemoto Date: Mon, 31 Mar 2025 08:25:42 +0200 Subject: [PATCH 26/89] Translations: Update Japanese Currently translated at 100.0% (236 of 236 strings) Translation: pretix/pretix (JavaScript parts) Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/ja/ powered by weblate --- src/pretix/locale/ja/LC_MESSAGES/djangojs.po | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/pretix/locale/ja/LC_MESSAGES/djangojs.po b/src/pretix/locale/ja/LC_MESSAGES/djangojs.po index 3c853eff4..5f70a7733 100644 --- a/src/pretix/locale/ja/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/ja/LC_MESSAGES/djangojs.po @@ -8,16 +8,16 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:46+0000\n" -"PO-Revision-Date: 2025-01-18 18:00+0000\n" +"PO-Revision-Date: 2025-03-31 15:00+0000\n" "Last-Translator: Hijiri Umemoto \n" -"Language-Team: Japanese \n" +"Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.9.2\n" +"X-Generator: Weblate 5.10.4\n" #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62 @@ -188,7 +188,7 @@ msgstr "チェックインリストを切り替え" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33 msgid "Search results" -msgstr "検索結果" +msgstr "結果を検索する" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34 msgid "No tickets found" @@ -678,10 +678,8 @@ msgid "Calculating default price…" msgstr "デフォルトの料金を計算中…" #: pretix/static/pretixcontrol/js/ui/plugins.js:69 -#, fuzzy -#| msgid "Search results" msgid "No results" -msgstr "検索結果" +msgstr "結果なし" #: pretix/static/pretixcontrol/js/ui/question.js:42 msgid "Others" -- 2.54.0 From f3bd9188462b2ccdfa077926331fd74475025667 Mon Sep 17 00:00:00 2001 From: Fernando Luiz Date: Mon, 31 Mar 2025 22:27:17 +0200 Subject: [PATCH 27/89] Translations: Update Portuguese (Brazil) Currently translated at 92.1% (5401 of 5863 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/pt_BR/ powered by weblate --- src/pretix/locale/pt_BR/LC_MESSAGES/django.po | 125 ++++++++++++------ 1 file changed, 83 insertions(+), 42 deletions(-) diff --git a/src/pretix/locale/pt_BR/LC_MESSAGES/django.po b/src/pretix/locale/pt_BR/LC_MESSAGES/django.po index 80d536365..2f26d5843 100644 --- a/src/pretix/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/pretix/locale/pt_BR/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:44+0000\n" -"PO-Revision-Date: 2025-03-21 00:00+0000\n" -"Last-Translator: Renne Rocha \n" +"PO-Revision-Date: 2025-04-01 05:00+0000\n" +"Last-Translator: Fernando Luiz \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" @@ -12016,11 +12016,9 @@ msgid "MA" msgstr "MA" #: pretix/base/settings.py:3720 pretix/base/settings.py:3722 -#, fuzzy -#| msgid "Provider name" msgctxt "address" msgid "Province" -msgstr "Nome do provedor" +msgstr "Província" #: pretix/base/settings.py:3721 #, fuzzy @@ -13686,7 +13684,7 @@ msgstr "Acompanhamento configurado" #: pretix/control/forms/filter.py:242 msgid "Follow-up due" -msgstr "" +msgstr "Acompanhamento pendente" #: pretix/control/forms/filter.py:462 pretix/control/forms/filter.py:1898 #: pretix/control/forms/filter.py:2153 pretix/control/forms/filter.py:2457 @@ -14134,7 +14132,7 @@ msgstr "" #: pretix/control/forms/global_settings.py:103 msgid "ApplePay MerchantID Domain Association" -msgstr "" +msgstr "Associação de Domínio ApplePay MerchantID" #: pretix/control/forms/global_settings.py:104 #, python-brace-format @@ -14499,12 +14497,17 @@ msgid "" "restrict the validity of the gift card. A validity of gift cards can be set " "in your organizer settings." msgstr "" +"Não defina uma validade específica para produtos de vale-presente, pois isso " +"não restringirá a validade do vale-presente. Uma validade de vale-presente " +"pode ser definida nas configurações do seu organizador." #: pretix/control/forms/item.py:785 pretix/control/forms/item.py:1052 msgid "" "If a valid membership is required, at least one valid membership type needs " "to be selected." msgstr "" +"Se for necessária uma associação válida, pelo menos um tipo de associação " +"válido precisa ser selecionado." #: pretix/control/forms/item.py:796 msgid "" @@ -14599,6 +14602,8 @@ msgid "" "only use characters A-Z, a-z, 0-9, and common special characters " "({characters})." msgstr "" +"A senha contém caracteres não suportados pelo nosso sistema de e-mail. Use " +"apenas caracteres A-Z, a-z, 0-9 e caracteres especiais comuns ({characters})." #: pretix/control/forms/mailsetup.py:70 msgid "Use STARTTLS" @@ -14751,6 +14756,8 @@ msgid "" "Will be included in the notification email when the respective placeholder " "is present in the configured email text." msgstr "" +"Será incluído no e-mail de notificação quando o respectivo espaço reservado " +"estiver presente no texto do e-mail configurado." #: pretix/control/forms/orders.py:229 msgid "A mail will only be sent if the order is fully paid after this." @@ -14823,11 +14830,11 @@ msgstr "" #: pretix/control/forms/orders.py:312 msgid "Allow to overbook quotas when performing this operation" -msgstr "" +msgstr "Permitir overbooking de cotas ao executar esta operação" #: pretix/control/forms/orders.py:328 msgid "Add-on to" -msgstr "" +msgstr "Add-on para" #: pretix/control/forms/orders.py:333 #: pretix/control/templates/pretixcontrol/checkin/index.html:104 @@ -14885,6 +14892,8 @@ msgid "" "This affects both the ticket secret (often used as a QR code) as well as the " "link used to individually access the ticket." msgstr "" +"Isso afeta tanto o segredo do ingresso (geralmente usado como um código QR) " +"quanto o link usado para acessar o ingresso individualmente." #: pretix/control/forms/orders.py:501 msgid "Cancel this position" @@ -14896,7 +14905,7 @@ msgstr "Dividir em novo pedido" #: pretix/control/forms/orders.py:571 msgid "(No membership)" -msgstr "" +msgstr "(Sem assinatura)" #: pretix/control/forms/orders.py:602 msgid "Remove this fee" @@ -14926,6 +14935,9 @@ msgid "" "to the order page to the user and the user will need to download his tickets " "again. The old versions will be invalid." msgstr "" +"Regenera os segredos do pedido e do ingresso. Você precisará reenviar o link " +"para a página do pedido para o usuário e o usuário precisará baixar seus " +"tíquetes novamente. As versões antigas serão inválidas." #: pretix/control/forms/orders.py:724 pretix/plugins/sendmail/forms.py:196 msgid "Attach tickets" @@ -14950,10 +14962,9 @@ msgid "Recipient" msgstr "Destinatário" #: pretix/control/forms/orders.py:768 -#, fuzzy, python-brace-format -#| msgid "Attach ticket files" +#, python-brace-format msgid "Attach {file}" -msgstr "Anexar arquivos do ingresso" +msgstr "Anexar {file}" #: pretix/control/forms/orders.py:796 msgid "" @@ -15003,7 +15014,7 @@ msgstr "" #: pretix/control/forms/orders.py:870 msgid "Create refund in the manual refund to-do list" -msgstr "" +msgstr "Criar reembolso na lista de tarefas de reembolso manual" #: pretix/control/forms/orders.py:873 msgid "" @@ -15013,12 +15024,20 @@ msgid "" "manual refund to-do list. Do not check if you want to refund some of the " "orders by offsetting with different orders or issuing gift cards." msgstr "" +"Serão criados reembolsos manuais que serão listados na lista de afazeres de " +"reembolso manual. Quando combinados com a funcionalidade de reembolso " +"automático, apenas pagamentos com um método de pagamento que não suporte " +"reembolsos automáticos estarão na sua lista de afazeres de reembolso manual. " +"Não marque se você deseja reembolsar alguns dos pedidos compensando com " +"pedidos diferentes ou emitindo vales-presente." #: pretix/control/forms/orders.py:879 msgid "" "Refund order value to a gift card instead instead of the original payment " "method" msgstr "" +"Reembolsar o valor do pedido para um vale-presente em vez do método de " +"pagamento original" #: pretix/control/forms/orders.py:885 msgid "Gift card validity" @@ -15299,7 +15318,7 @@ msgstr "" #: pretix/control/forms/organizer.py:1109 msgid "Invalidate old client secret and generate a new one" -msgstr "" +msgstr "Invalidar segredo antigo do cliente e gerar um novo" #: pretix/control/forms/organizer.py:1142 msgid "Organizer short name" @@ -15405,7 +15424,7 @@ msgstr "Dia" #: pretix/control/forms/rrule.py:112 pretix/control/forms/rrule.py:151 msgid "Weekend day" -msgstr "" +msgstr "Dia do fim de semana" #: pretix/control/forms/subevents.py:118 msgid "Keep the current values" @@ -15693,7 +15712,7 @@ msgstr "Posição #{posid} criada: {item} ({price})." #: pretix/control/logdisplay.py:233 #, python-brace-format msgid "A new secret has been generated for position #{posid}." -msgstr "" +msgstr "Um novo segredo foi gerado para a posição #{posid}." #: pretix/control/logdisplay.py:241 #, python-brace-format @@ -15724,6 +15743,7 @@ msgstr "Um bloqueio foi removido para a posição #{posid}." msgid "" "Position #{posid} ({old_item}, {old_price}) split into new order: {order}" msgstr "" +"Posição #{posid} ({old_item}, {old_price}) dividida em novo pedido: {order}" #: pretix/control/logdisplay.py:304 #, python-brace-format @@ -15860,7 +15880,7 @@ msgstr "As configurações de um provedor de pagamento foram alteradas." #: pretix/control/logdisplay.py:431 pretix/control/logdisplay.py:740 msgid "The settings of a ticket output provider have been changed." -msgstr "" +msgstr "As configurações de um provedor de saída de ingressos foram alteradas." #: pretix/control/logdisplay.py:437 msgid "Blocked manually" @@ -15885,11 +15905,11 @@ msgstr "O pedido foi marcado como não pago." #: pretix/control/logdisplay.py:446 msgid "The order's secret has been changed." -msgstr "" +msgstr "O segredo do pedido foi alterado." #: pretix/control/logdisplay.py:447 msgid "The order's expiry date has been changed." -msgstr "" +msgstr "A data de validade do pedido foi alterada." #: pretix/control/logdisplay.py:448 msgid "The order has been set to be usable before it is paid." @@ -15990,7 +16010,7 @@ msgstr "A data de acompanhamento do pedido foi atualizada." #: pretix/control/logdisplay.py:474 msgid "The order's flag to require attention at check-in has been toggled." -msgstr "" +msgstr "O marcador do pedido para exigir atenção no check-in foi alternado." #: pretix/control/logdisplay.py:476 msgid "The order's check-in text has been changed." @@ -16000,6 +16020,8 @@ msgstr "O texto de check-in do pedido foi alterado." msgid "" "The order's flag to be considered valid even if unpaid has been toggled." msgstr "" +"O marcador do pedido para ser considerado válido mesmo se não pago foi " +"alternado." #: pretix/control/logdisplay.py:479 #, python-brace-format @@ -16296,6 +16318,7 @@ msgstr "O webhook foi alterado." #: pretix/control/logdisplay.py:639 msgid "The webhook call retry jobs have been manually expedited." msgstr "" +"Os trabalhos de repetição de chamada do webhook foram agilizados manualmente." #: pretix/control/logdisplay.py:640 msgid "The webhook call retry jobs have been dropped." @@ -16431,6 +16454,8 @@ msgid "" "A first login using {agent_type} on {os_type} from {country} has been " "detected." msgstr "" +"Foi detectado um primeiro login usando {agent_type} em {os_type} de " +"{country}." #: pretix/control/logdisplay.py:680 pretix/control/views/user.py:490 #: pretix/control/views/user.py:550 pretix/control/views/user.py:609 @@ -16444,7 +16469,7 @@ msgstr "A autenticação de dois fatores foi desativada." #: pretix/control/logdisplay.py:682 pretix/control/views/user.py:642 msgid "Your two-factor emergency codes have been regenerated." -msgstr "" +msgstr "Seus códigos de emergência de dois fatores foram regenerados." #: pretix/control/logdisplay.py:683 msgid "A two-factor emergency code has been generated." @@ -16511,19 +16536,19 @@ msgstr "Um cupom foi enviado para uma pessoa na lista de espera." #: pretix/control/logdisplay.py:701 msgid "An entry has been removed from the waiting list." -msgstr "" +msgstr "Uma inscrição foi removida da lista de espera." #: pretix/control/logdisplay.py:702 msgid "An entry has been transferred to another waiting list." -msgstr "" +msgstr "Uma inscrição foi transferida para outra lista de espera." #: pretix/control/logdisplay.py:703 msgid "An entry has been changed on the waiting list." -msgstr "" +msgstr "Uma entrada foi alterada na lista de espera." #: pretix/control/logdisplay.py:704 msgid "An entry has been added to the waiting list." -msgstr "" +msgstr "Uma entrada foi adicionada à lista de espera." #: pretix/control/logdisplay.py:705 msgid "The team has been created." @@ -16607,6 +16632,8 @@ msgstr "O token de acesso ao dispositivo foi regerado." #: pretix/control/logdisplay.py:723 msgid "The device has notified the server of an hardware or software update." msgstr "" +"O dispositivo notificou o servidor sobre uma atualização de hardware ou " +"software." #: pretix/control/logdisplay.py:724 msgid "The gift card has been created." @@ -17187,6 +17214,9 @@ msgid "" "you can log in first and then click this link again to " "accept the invitation with your existing account." msgstr "" +"Se você já tem uma conta neste site com um endereço de e-mail diferente, " +"você pode fazer login primeiro e depois clicar neste " +"link novamente para aceitar o convite com sua conta existente." #: pretix/control/templates/pretixcontrol/auth/invite.html:23 #: pretix/control/templates/pretixcontrol/auth/register.html:18 @@ -17556,7 +17586,7 @@ msgstr "ID do dispositivo" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:6 msgid "Receipt ID" -msgstr "" +msgstr "ID do Recibo" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:11 msgid "ID" @@ -17622,7 +17652,7 @@ msgstr "Código do comerciante" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:80 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:110 msgid "Card Entry Mode" -msgstr "" +msgstr "Modo de entrada de Cartão" #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:58 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:82 @@ -17692,13 +17722,7 @@ msgid "Delete check-ins" msgstr "Excluir check-ins" #: pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html:15 -#, fuzzy, python-format -#| msgid "" -#| "Are you sure you want to permanently delete the check-ins of one " -#| "ticket." -#| msgid_plural "" -#| "Are you sure you want to permanently delete the check-ins of " -#| "%(count)s tickets?" +#, python-format msgid "" "Are you sure you want to permanently delete the check-ins of one " "ticket?" @@ -17907,7 +17931,7 @@ msgstr "Marcado automaticamente como não presente: %(date)s" #: pretix/control/templates/pretixcontrol/order/index.html:397 #, python-format msgid "Additional entry scan: %(date)s" -msgstr "" +msgstr "Verificação de entrada adicional: %(date)s" #: pretix/control/templates/pretixcontrol/checkin/checkins.html:85 #, python-format @@ -17918,7 +17942,7 @@ msgstr "Leitura offline. Hora do upload: %(date)s" #: pretix/control/templates/pretixcontrol/order/index.html:399 #, python-format msgid "Automatically checked in: %(date)s" -msgstr "" +msgstr "Check-in automático: %(date)s" #: pretix/control/templates/pretixcontrol/checkin/checkins.html:92 msgid "Failed in offline mode" @@ -18007,7 +18031,7 @@ msgstr "Fez checkin mas saiu" #: pretix/control/templates/pretixcontrol/checkin/index.html:186 msgid "Checked in automatically" -msgstr "" +msgstr "Check-in feito automaticamente" #: pretix/control/templates/pretixcontrol/checkin/index.html:198 #, python-format @@ -18016,11 +18040,11 @@ msgstr "Saída: %(date)s" #: pretix/control/templates/pretixcontrol/checkin/index.html:213 msgid "Check-In selected attendees" -msgstr "" +msgstr "Check-in dos participantes selecionados" #: pretix/control/templates/pretixcontrol/checkin/index.html:217 msgid "Check-Out selected attendees" -msgstr "" +msgstr "Desmarcar os participantes selecionados" #: pretix/control/templates/pretixcontrol/checkin/index.html:226 msgid "Delete all check-ins of selected attendees" @@ -18136,6 +18160,11 @@ msgid "" "do this process by printing out the list on paper, using this web interface " "or by using one of our mobile or desktop apps to automatically scan tickets." msgstr "" +"Você pode criar listas de check-in que você pode usar, por exemplo, na " +"entrada do seu evento para rastrear quem está vindo e se eles realmente " +"compraram um ingresso. Você pode fazer esse processo imprimindo a lista em " +"papel, usando esta interface da web ou usando um dos nossos aplicativos " +"móveis ou de desktop para escanear ingressos automaticamente." #: pretix/control/templates/pretixcontrol/checkin/lists.html:17 msgid "" @@ -18146,6 +18175,13 @@ msgid "" "festival with festival passes that allow access to every or multiple " "performances as well as tickets only valid for single performances." msgstr "" +"Você pode criar várias listas de check-in para separar várias partes do seu " +"evento, por exemplo, se você tiver entradas separadas para vários tipos de " +"ingresso. Listas de check-in diferentes são completamente independentes: se " +"um ingresso aparecer em duas listas, ele será válido uma vez em cada lista. " +"Isso pode ser útil se você executar um festival com passes de festival que " +"permitem acesso a todas ou várias apresentações, bem como ingressos válidos " +"apenas para apresentações únicas." #: pretix/control/templates/pretixcontrol/checkin/lists.html:26 msgid "" @@ -18154,14 +18190,19 @@ msgid "" "are connected on the organizer level, you do not have to create a new device " "for every event but can reuse them over and over again." msgstr "" +"Se você tiver as permissões apropriadas de nível de organizador, você pode " +"conectar novos dispositivos à sua conta e usá-los para validar ingressos. " +"Como os dispositivos são conectados no nível do organizador, você não " +"precisa criar um novo dispositivo para cada evento, mas pode reutilizá-los " +"várias vezes." #: pretix/control/templates/pretixcontrol/checkin/lists.html:58 msgid "Your search did not match any check-in lists." -msgstr "" +msgstr "Sua pesquisa não encontrou nenhuma lista de check-in." #: pretix/control/templates/pretixcontrol/checkin/lists.html:60 msgid "You haven't created any check-in lists yet." -msgstr "" +msgstr "Você ainda não criou nenhuma lista de check-in." #: pretix/control/templates/pretixcontrol/checkin/lists.html:68 #: pretix/control/templates/pretixcontrol/checkin/lists.html:80 -- 2.54.0 From 17df83a9fbb8975d22d10d073f7e6c9035bb8fd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=EC=A0=95=ED=99=94?= Date: Wed, 2 Apr 2025 03:55:44 +0200 Subject: [PATCH 28/89] Translations: Update Korean Currently translated at 13.7% (805 of 5863 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ko/ powered by weblate --- src/pretix/locale/ko/LC_MESSAGES/django.po | 526 ++++++++++++--------- 1 file changed, 303 insertions(+), 223 deletions(-) diff --git a/src/pretix/locale/ko/LC_MESSAGES/django.po b/src/pretix/locale/ko/LC_MESSAGES/django.po index 6dc617118..a30d9d058 100644 --- a/src/pretix/locale/ko/LC_MESSAGES/django.po +++ b/src/pretix/locale/ko/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:44+0000\n" -"PO-Revision-Date: 2025-03-19 12:00+0000\n" +"PO-Revision-Date: 2025-04-02 10:00+0000\n" "Last-Translator: 조정화 \n" "Language-Team: Korean \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.10.3\n" +"X-Generator: Weblate 5.10.4\n" #: pretix/_base_settings.py:87 msgid "English" @@ -3595,17 +3595,17 @@ msgstr "유효한 언어 코드를 입력하세요." #: pretix/base/modelimport_orders.py:559 pretix/base/modelimport_orders.py:561 msgid "Please enter a valid sales channel." -msgstr "" +msgstr "유효한 판매 채널을 입력하세요." #: pretix/base/modelimport_orders.py:585 #: pretix/base/modelimport_vouchers.py:291 msgid "Multiple matching seats were found." -msgstr "" +msgstr "일치하는 좌석이 여러 개 발견되었습니다." #: pretix/base/modelimport_orders.py:587 #: pretix/base/modelimport_vouchers.py:293 msgid "No matching seat was found." -msgstr "" +msgstr "일치하는 좌석을 찾을 수 없습니다." #: pretix/base/modelimport_orders.py:590 #: pretix/base/modelimport_vouchers.py:296 pretix/base/services/cart.py:212 @@ -3613,11 +3613,11 @@ msgstr "" #: pretix/base/services/modelimport.py:246 msgid "" "The seat you selected has already been taken. Please select a different seat." -msgstr "" +msgstr "선택하신 좌석은 이미 예약되었습니다. 다른 좌석을 선택해 주세요." #: pretix/base/modelimport_orders.py:593 pretix/base/services/cart.py:209 msgid "You need to select a specific seat." -msgstr "" +msgstr "특정 좌석을 선택해야 합니다." #: pretix/base/modelimport_orders.py:647 pretix/base/models/items.py:1670 #: pretix/base/models/items.py:1765 pretix/control/forms/item.py:149 @@ -3625,150 +3625,151 @@ msgstr "" #: pretix/control/templates/pretixcontrol/items/question_edit.html:17 #: pretix/control/templates/pretixcontrol/items/questions.html:21 msgid "Question" -msgstr "" +msgstr "질문" #: pretix/base/modelimport_orders.py:657 pretix/base/modelimport_orders.py:665 #: pretix/base/models/items.py:1829 pretix/base/models/items.py:1847 msgid "Invalid option selected." -msgstr "" +msgstr "잘못된 옵션이 선택되었습니다." #: pretix/base/modelimport_orders.py:659 pretix/base/modelimport_orders.py:667 msgid "Ambiguous option selected." -msgstr "" +msgstr "모호한 옵션이 선택되었습니다" #: pretix/base/modelimport_orders.py:698 pretix/base/models/orders.py:239 #: pretix/control/forms/orders.py:696 pretix/control/forms/organizer.py:840 msgid "Customer" -msgstr "" +msgstr "고객" #: pretix/base/modelimport_orders.py:711 msgid "No matching customer was found." -msgstr "" +msgstr "일치하는 고객을 찾을수 없습니다" #: pretix/base/modelimport_vouchers.py:50 pretix/base/models/vouchers.py:488 msgid "A voucher with this code already exists." -msgstr "" +msgstr "이 코드가 포함된 바우처가 이미 존재합니다" #: pretix/base/modelimport_vouchers.py:68 pretix/base/models/memberships.py:57 #: pretix/base/models/vouchers.py:196 pretix/control/views/vouchers.py:120 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:52 msgid "Maximum usages" -msgstr "" +msgstr "최대 사용량" #: pretix/base/modelimport_vouchers.py:79 msgid "The maximum number of usages must be set." -msgstr "" +msgstr "최대 사용 횟수를 설정해야 합니다." #: pretix/base/modelimport_vouchers.py:88 pretix/base/models/vouchers.py:205 msgid "Minimum usages" -msgstr "" +msgstr "최소 사용량" #: pretix/base/modelimport_vouchers.py:103 pretix/base/models/vouchers.py:213 msgid "Maximum discount budget" -msgstr "" +msgstr "최대 할인 예산" #: pretix/base/modelimport_vouchers.py:119 pretix/base/models/vouchers.py:225 #: pretix/control/forms/filter.py:2103 msgid "Reserve ticket from quota" -msgstr "" +msgstr "쿼터에서 티켓 예약하기" #: pretix/base/modelimport_vouchers.py:127 pretix/base/models/vouchers.py:233 msgid "Allow to bypass quota" -msgstr "" +msgstr "할당량 우회를 허용합니다" #: pretix/base/modelimport_vouchers.py:135 pretix/base/models/vouchers.py:239 msgid "Price mode" -msgstr "" +msgstr "가격 모드" #: pretix/base/modelimport_vouchers.py:150 #, python-brace-format msgid "Could not parse {value} as a price mode, use one of {options}." -msgstr "" +msgstr "{value}를 가격 모드로 구문 분석할 수 없으며. {options} 중 하나를 사용해 " +"주십시요" #: pretix/base/modelimport_vouchers.py:160 pretix/base/models/vouchers.py:245 msgid "Voucher value" -msgstr "" +msgstr "바우처 가치" #: pretix/base/modelimport_vouchers.py:165 msgid "It is pointless to set a value without a price mode." -msgstr "" +msgstr "가격 모드 없이 값을 설정하는 것은 무의미합니다." #: pretix/base/modelimport_vouchers.py:237 pretix/base/models/items.py:2092 #: pretix/base/models/vouchers.py:272 #: pretix/control/templates/pretixcontrol/items/quota_edit.html:8 #: pretix/control/templates/pretixcontrol/items/quota_edit.html:15 msgid "Quota" -msgstr "" +msgstr "쿼터" #: pretix/base/modelimport_vouchers.py:253 msgid "You cannot specify a quota if you specified a product." -msgstr "" +msgstr "제품을 지정한 경우 할당량을 지정할 수 없습니다." #: pretix/base/modelimport_vouchers.py:282 pretix/base/models/vouchers.py:495 msgid "You need to choose a date if you select a seat." -msgstr "" +msgstr "좌석을 선택하려면 날짜를 선택해야 합니다." #: pretix/base/modelimport_vouchers.py:299 pretix/base/models/vouchers.py:513 msgid "You need to choose a specific product if you select a seat." -msgstr "" +msgstr "좌석을 지정하려면 특별상품을 선택해야 합니다" #: pretix/base/modelimport_vouchers.py:302 pretix/base/models/vouchers.py:516 msgid "Seat-specific vouchers can only be used once." -msgstr "" +msgstr "좌석별 바우처는 한 번만 사용할 수 있습니다." #: pretix/base/modelimport_vouchers.py:306 pretix/base/models/vouchers.py:519 #, python-brace-format msgid "You need to choose the product \"{prod}\" for this seat." -msgstr "" +msgstr "이 좌석의 제품 \"{prod}\"를 선택해야 합니다." #: pretix/base/modelimport_vouchers.py:318 pretix/base/models/vouchers.py:285 #: pretix/control/templates/pretixcontrol/vouchers/index.html:129 #: pretix/control/templates/pretixcontrol/vouchers/tags.html:42 #: pretix/control/views/vouchers.py:120 msgid "Tag" -msgstr "" +msgstr "정가표" #: pretix/base/modelimport_vouchers.py:334 pretix/base/models/vouchers.py:297 msgid "Shows hidden products that match this voucher" -msgstr "" +msgstr "이 바우처와 일치하는 숨겨진 제품을 표시합니다" #: pretix/base/modelimport_vouchers.py:343 pretix/base/models/vouchers.py:301 msgid "Offer all add-on products for free when redeeming this voucher" -msgstr "" +msgstr "이 바우처를 사용할 때 모든 추가 기능 제품을 무료로 제공합니다" #: pretix/base/modelimport_vouchers.py:351 pretix/base/models/vouchers.py:305 msgid "" "Include all bundled products without a designated price when redeeming this " "voucher" -msgstr "" +msgstr "이 바우처를 사용할 때 지정된 가격 없이 모든 묶음 제품을 포함하세요" #: pretix/base/models/auth.py:248 msgid "Is active" -msgstr "" +msgstr "활성화된 상태" #: pretix/base/models/auth.py:250 msgid "Is site admin" -msgstr "" +msgstr "싸이트 관리자" #: pretix/base/models/auth.py:252 msgid "Date joined" -msgstr "" +msgstr "가입 날짜" #: pretix/base/models/auth.py:254 msgid "Force user to select a new password" -msgstr "" +msgstr "사용자에게 새 비밀번호를 선택하기를 요구합니다" #: pretix/base/models/auth.py:264 msgid "Two-factor authentication is required to log in" -msgstr "" +msgstr "로그인하려면 이중 인증이 필요합니다" #: pretix/base/models/auth.py:268 msgid "Receive notifications according to my settings below" -msgstr "" +msgstr "아래 설정에 따라 알림 받기를 하십시오" #: pretix/base/models/auth.py:269 msgid "If turned off, you will not get any notifications." -msgstr "" +msgstr "전원을 끄면 알림을 받을 수 없습니다." #: pretix/base/models/auth.py:283 #: pretix/control/templates/pretixcontrol/orders/bulk_action.html:23 @@ -3780,31 +3781,31 @@ msgstr "" #: pretix/control/templates/pretixcontrol/users/form.html:6 #: pretix/control/views/organizer.py:156 tests/base/test_mail.py:149 msgid "User" -msgstr "" +msgstr "사용자" #: pretix/base/models/auth.py:284 pretix/control/navigation.py:411 #: pretix/control/templates/pretixcontrol/users/index.html:5 #: pretix/control/templates/pretixcontrol/users/index.html:7 msgid "Users" -msgstr "" +msgstr "사용자들" #: pretix/base/models/auth.py:342 msgid "Account information changed" -msgstr "" +msgstr "계좌 정보가 변경되었습니다" #: pretix/base/models/auth.py:360 #: pretix/control/templates/pretixcontrol/auth/forgot.html:7 msgid "Password recovery" -msgstr "" +msgstr "비밀번호가 복구되었습니다" #: pretix/base/models/checkin.py:55 msgid "All products (including newly created ones)" -msgstr "" +msgstr "모든 제품(새로 생성된 제품 포함)" #: pretix/base/models/checkin.py:56 pretix/plugins/badges/exporters.py:436 #: pretix/plugins/checkinlists/exporters.py:844 msgid "Limit to products" -msgstr "" +msgstr "제품에 대한 제한입니다" #: pretix/base/models/checkin.py:60 msgid "" @@ -3812,140 +3813,146 @@ msgid "" "and valid for check-in regardless of which date they are purchased for. You " "can limit their validity through the advanced check-in rules, though." msgstr "" +"\"모든 날짜\"를 선택하면 티켓은 이 목록의 일부로 간주되며 구매 날짜에 " +"관계없이 체크인에 유효합니다. 하지만 고급 체크인 규칙을 통해 티켓의 유효성을 " +"제한할 수 있습니다." #: pretix/base/models/checkin.py:65 msgctxt "checkin" msgid "Ignore check-ins on this list in statistics" -msgstr "" +msgstr "통계에서 이 목록의 체크인 무시합니다" #: pretix/base/models/checkin.py:69 msgctxt "checkin" msgid "Tickets with a check-in on this list should be considered \"used\"" -msgstr "" +msgstr "이 목록에 체크인된 티켓은 \"사용된\" 것으로 간주해야 합니다" #: pretix/base/models/checkin.py:70 msgid "" "This is relevant in various situations, e.g. for deciding if a ticket can " "still be canceled by the customer." -msgstr "" +msgstr "이는 고객이 티켓을 취소할 수 있는지 여부를 결정하는 등 다양한 상황에서 " +"중요합니다." #: pretix/base/models/checkin.py:74 msgctxt "checkin" msgid "Include pending orders" -msgstr "" +msgstr "대기 중인 주문 포함됩니다" #: pretix/base/models/checkin.py:76 msgid "" "With this option, people will be able to check in even if the order has not " "been paid." -msgstr "" +msgstr "이 옵션을 사용하면 주문이 결제되지 않았더라도 체크인할 수 있습니다." #: pretix/base/models/checkin.py:79 msgid "Allow checking in add-on tickets by scanning the main ticket" -msgstr "" +msgstr "메인 티켓을 스캔하여 추가 티켓 체크인 허용합니다" #: pretix/base/models/checkin.py:81 msgid "" "A scan will only be possible if the check-in list is configured such that " "there is always exactly one matching add-on ticket. Ambiguous scans will be " "rejected.." -msgstr "" +msgstr "체크인 목록이 항상 정확히 일치하는 추가 티켓이 하나만 있도록 구성된 경우에만 " +"스캔이 가능합니다. 모호한 스캔은 거부됩니다." #: pretix/base/models/checkin.py:85 pretix/control/navigation.py:640 #: pretix/control/templates/pretixcontrol/organizers/gates.html:5 msgid "Gates" -msgstr "" +msgstr "개찰구" #: pretix/base/models/checkin.py:86 msgid "" "Does not have any effect for the validation of tickets, only for the " "automatic configuration of check-in devices." -msgstr "" +msgstr "티켓 검증에는 아무런 영향을 미치지 않으며, 체크인 장치의 자동 구성에만 " +"해당됩니다." #: pretix/base/models/checkin.py:90 msgid "Allow re-entering after an exit scan" -msgstr "" +msgstr "종료 스캔 후 재진입 허용합니다" #: pretix/base/models/checkin.py:94 msgid "Allow multiple entries per ticket" -msgstr "" +msgstr "티켓당 여러 개의 항목 허용합니다" #: pretix/base/models/checkin.py:95 msgid "" "Use this option to turn off warnings if a ticket is scanned a second time." -msgstr "" +msgstr "이 옵션을 사용하여 티켓이 두 번째로 스캔될 경우 경고를 끄세요." #: pretix/base/models/checkin.py:99 msgid "Automatically check out everyone at" -msgstr "" +msgstr "모든 사람을 자동으로 체크아웃합니다" #: pretix/base/models/checkin.py:336 msgid "Entry" -msgstr "" +msgstr "항목" #: pretix/base/models/checkin.py:337 msgid "Exit" -msgstr "" +msgstr "출입구" #: pretix/base/models/checkin.py:355 msgid "Unknown ticket" -msgstr "" +msgstr "무명인 티켓" #: pretix/base/models/checkin.py:356 msgid "Ticket not paid" -msgstr "" +msgstr "미결제 티켓" #: pretix/base/models/checkin.py:357 msgid "Forbidden by custom rule" -msgstr "" +msgstr "관습 규칙에 의해 금지됨" #: pretix/base/models/checkin.py:358 msgid "Ticket code revoked/changed" -msgstr "" +msgstr "티켓 코드가 취소/변경되었습니다" #: pretix/base/models/checkin.py:359 msgid "Information required" -msgstr "" +msgstr "필수 정보" #: pretix/base/models/checkin.py:360 msgid "Ticket already used" -msgstr "" +msgstr "이미 사용된 티켓" #: pretix/base/models/checkin.py:361 msgid "Ticket type not allowed here" -msgstr "" +msgstr "여기서는 티켓 유형이 허용되지 않습니다" #: pretix/base/models/checkin.py:362 msgid "Ticket code is ambiguous on list" -msgstr "" +msgstr "티켓 코드가 목록에 모호합니다" #: pretix/base/models/checkin.py:363 msgid "Server error" -msgstr "" +msgstr "서버 에러" #: pretix/base/models/checkin.py:364 msgid "Ticket blocked" -msgstr "" +msgstr "차단된 티켓" #: pretix/base/models/checkin.py:365 msgid "Order not approved" -msgstr "" +msgstr "주문이 승인되지 않았습니다" #: pretix/base/models/checkin.py:366 msgid "Ticket not valid at this time" -msgstr "" +msgstr "현재 티켓이 유효하지 않습니다" #: pretix/base/models/customers.py:55 msgid "Provider name" -msgstr "" +msgstr "제공자 이름" #: pretix/base/models/customers.py:60 msgid "Login button label" -msgstr "" +msgstr "로그인 버튼 분류" #: pretix/base/models/customers.py:64 msgid "Single-sign-on method" -msgstr "" +msgstr "단일 로그인 방법" #: pretix/base/models/customers.py:85 pretix/base/models/devices.py:71 #: pretix/base/models/items.py:1675 pretix/base/models/items.py:1923 @@ -3953,12 +3960,15 @@ msgid "" "You can enter any value here to make it easier to match the data with other " "sources. If you do not input one, we will generate one automatically." msgstr "" +"다른 소스와 데이터를 더 쉽게 일치시키기 위해 여기에 임의의 값을 입력할 수 " +"있습니다. 하나를 입력하지 않으면 자동으로 하나를 생성합니다." #: pretix/base/models/customers.py:90 msgid "" "The identifier may only contain letters, numbers, dots, dashes, and " "underscores. It must start and end with a letter or number." -msgstr "" +msgstr "식별자에는 문자, 숫자, 점, 대시 및 밑줄만 포함할 수 있습니다. 문자 또는 " +"숫자로 시작하고 끝나야 합니다." #: pretix/base/models/customers.py:195 pretix/control/forms/filter.py:1500 #: pretix/control/forms/filter.py:1572 @@ -3967,74 +3977,74 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:135 #: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:35 msgid "disabled" -msgstr "" +msgstr "비활성화됨" #: pretix/base/models/customers.py:310 pretix/base/models/orders.py:1538 #: pretix/base/models/orders.py:3266 pretix/base/settings.py:1111 msgid "Company name" -msgstr "" +msgstr "회사 이름" #: pretix/base/models/customers.py:314 pretix/base/models/orders.py:1542 #: pretix/base/models/orders.py:3273 pretix/base/settings.py:82 #: pretix/plugins/stripe/payment.py:272 msgid "Select country" -msgstr "" +msgstr "국가를 선택하세요" #: pretix/base/models/customers.py:381 msgctxt "openidconnect" msgid "Confidential" -msgstr "" +msgstr "기밀사항" #: pretix/base/models/customers.py:382 msgctxt "openidconnect" msgid "Public" -msgstr "" +msgstr "대중적인" #: pretix/base/models/customers.py:388 msgctxt "openidconnect" msgid "Authorization code" -msgstr "" +msgstr "승인코드" #: pretix/base/models/customers.py:389 msgctxt "openidconnect" msgid "Implicit" -msgstr "" +msgstr "함축적인" #: pretix/base/models/customers.py:393 msgid "OpenID Connect access (required)" -msgstr "" +msgstr "OpenID 접속 이용 방법(필수)" #: pretix/base/models/customers.py:394 msgid "Profile data (name, addresses)" -msgstr "" +msgstr "프로필 데이터(이름, 주소)" #: pretix/base/models/customers.py:414 msgid "Client type" -msgstr "" +msgstr "고객 유형" #: pretix/base/models/customers.py:417 msgid "Grant type" -msgstr "" +msgstr "보조금 유형" #: pretix/base/models/customers.py:420 msgid "Require PKCE extension" -msgstr "" +msgstr "(Proof for Code Exchange)공개 클라이언트 는 연장이 필요합니다" #: pretix/base/models/customers.py:432 msgid "Allowed access scopes" -msgstr "" +msgstr "허용된 접근 범위" #: pretix/base/models/customers.py:433 msgid "Separate multiple values with spaces" -msgstr "" +msgstr "여러 값을 공백으로 구분합니다" #: pretix/base/models/devices.py:70 pretix/base/models/items.py:1674 msgid "Internal identifier" -msgstr "" +msgstr "내부 식별자" #: pretix/base/models/devices.py:90 pretix/base/models/items.py:1787 msgid "This identifier is already used for a different question." -msgstr "" +msgstr "이 식별자는 이미 다른 질문에 사용되고 있습니다." #: pretix/base/models/devices.py:113 pretix/control/forms/checkin.py:196 #: pretix/control/forms/checkin.py:217 pretix/control/forms/filter.py:2394 @@ -4043,65 +4053,65 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/gates.html:16 #: pretix/plugins/checkinlists/exporters.py:765 msgid "Gate" -msgstr "" +msgstr "개찰구" #: pretix/base/models/devices.py:131 #: pretix/control/templates/pretixcontrol/organizers/devices.html:83 msgid "Setup date" -msgstr "" +msgstr "설정 날짜" #: pretix/base/models/devices.py:134 msgid "Initialization date" -msgstr "" +msgstr "초기화 날짜" #: pretix/base/models/discount.py:47 msgctxt "subevent" msgid "Dates can be mixed without limitation" -msgstr "" +msgstr "날짜는 제한 없이 혼합할 수 있습니다" #: pretix/base/models/discount.py:48 msgctxt "subevent" msgid "All matching products must be for the same date" -msgstr "" +msgstr "모든 일치하는 제품은 동일한 날짜여야 합니다" #: pretix/base/models/discount.py:49 msgctxt "subevent" msgid "Each matching product must be for a different date" -msgstr "" +msgstr "각 일치하는 제품은 서로 다른 날짜여야 합니다" #: pretix/base/models/discount.py:67 pretix/base/models/items.py:1160 #: pretix/base/models/items.py:1480 pretix/base/models/items.py:1707 #: pretix/base/models/organizer.py:553 msgid "Position" -msgstr "" +msgstr "위치" #: pretix/base/models/discount.py:70 msgid "All supported sales channels" -msgstr "" +msgstr "모든 지원되는 판매 채널입니다" #: pretix/base/models/discount.py:91 msgid "Event series handling" -msgstr "" +msgstr "이벤트 시리즈 처리입니다" #: pretix/base/models/discount.py:99 msgid "Apply to all products (including newly created ones)" -msgstr "" +msgstr "모든 제품(새로 생성된 제품 포함)에 적용합니다" #: pretix/base/models/discount.py:103 msgid "Apply to specific products" -msgstr "" +msgstr "특정 제품에 적용합니다" #: pretix/base/models/discount.py:108 msgid "Count add-on products" -msgstr "" +msgstr "추가된 제품을 포함합니다" #: pretix/base/models/discount.py:109 pretix/base/models/discount.py:164 msgid "Discounts never apply to bundled products" -msgstr "" +msgstr "묶음 제품에는 할인이 적용되지 않습니다" #: pretix/base/models/discount.py:113 pretix/base/models/discount.py:168 msgid "Ignore products discounted by a voucher" -msgstr "" +msgstr "바우처로 할인된 제품 무시합니다" #: pretix/base/models/discount.py:114 msgid "" @@ -4110,18 +4120,21 @@ msgid "" "use a voucher only to e.g. unlock a hidden product or gain access to sold-" "out quota will still be considered." msgstr "" +"이 옵션을 선택하면 이미 바우처를 통해 할인을 받은 제품은 이 할인에 포함되지 " +"않습니다. 그러나 숨겨진 제품의 잠금을 해제하거나 매진된 할당량에 액세스하는 " +"경우에만 바우처를 사용하는 제품은 여전히 고려됩니다." #: pretix/base/models/discount.py:119 msgid "Minimum number of matching products" -msgstr "" +msgstr "일치하는 제품의 최소 숫자" #: pretix/base/models/discount.py:123 msgid "Minimum gross value of matching products" -msgstr "" +msgstr "매칭 제품의 최소 총 가치" #: pretix/base/models/discount.py:131 msgid "Apply discount to same set of products" -msgstr "" +msgstr "동일한 제품 세트에 할인 적용합니다" #: pretix/base/models/discount.py:132 msgid "" @@ -4129,18 +4142,20 @@ msgid "" "than the condition for the discount given above. If you want, you can " "however also select a different selection of products." msgstr "" +"기본적으로 할인은 위에서 제시한 할인 조건과 동일한 제품 선택에 적용됩니다. " +"그러나 원하는 경우 다른 제품 선택을 할 수도 있습니다." #: pretix/base/models/discount.py:138 msgid "Apply discount to specific products" -msgstr "" +msgstr "특정 제품에 할인 적용합니다" #: pretix/base/models/discount.py:143 msgid "Percentual discount on matching products" -msgstr "" +msgstr "매칭 제품에 대한 백분율 할인" #: pretix/base/models/discount.py:150 msgid "Apply discount only to this number of matching products" -msgstr "" +msgstr "이 일치하는 제품 수에만 할인 적용합니다" #: pretix/base/models/discount.py:152 msgid "" @@ -4151,10 +4166,15 @@ msgid "" "discounted. If you want to grant the discount on all matching products, keep " "this field empty." msgstr "" +"이 옵션을 사용하면 \"X get Y 할인/무료 구매\" 유형의 할인을 생성할 수 " +"있습니다. 예를 들어, \"최소 매칭 상품 수\"를 4개로 설정하고 이 값을 2개로 " +"설정하면 고객의 장바구니가 4개의 티켓 그룹으로 나뉘고 각 그룹 내에서 가장 " +"저렴한 티켓 2장이 할인됩니다. 모든 매칭 상품에 대한 할인을 부여하려면 이 " +"필드를 비워두세요." #: pretix/base/models/discount.py:163 msgid "Apply to add-on products" -msgstr "" +msgstr "추가제품을 사용합니다" #: pretix/base/models/discount.py:169 msgid "" @@ -4163,44 +4183,49 @@ msgid "" "to e.g. unlock a hidden product or gain access to sold-out quota will still " "receive the discount." msgstr "" +"이 옵션을 선택하면 이미 바우처를 통해 할인을 받은 제품은 할인되지 않습니다. " +"그러나 숨겨진 제품의 잠금을 해제하거나 매진된 할당량에 액세스하는 경우에만 " +"바우처를 사용하는 제품은 여전히 할인을 받을 수 있습니다." #: pretix/base/models/discount.py:201 msgid "" "You can either set a minimum number of matching products or a minimum value, " "not both." -msgstr "" +msgstr "일치하는 제품의 최소 개수를 설정하거나 둘 다 설정할 수 없습니다." #: pretix/base/models/discount.py:206 msgid "" "You need to either set a minimum number of matching products or a minimum " "value." -msgstr "" +msgstr "일치하는 제품의 최소 개수를 설정하거나 최소 값을 설정해야 합니다." #: pretix/base/models/discount.py:211 msgid "" "You cannot apply the discount only to some of the matched products if you " "are matching on a minimum value." -msgstr "" +msgstr "최소한의 값으로 일치하는 경우 일부 일치하는 제품에만 할인을 적용할 수 " +"없습니다." #: pretix/base/models/discount.py:217 msgid "" "You cannot apply the discount only to bookings of different dates if you are " "matching on a minimum value." -msgstr "" +msgstr "최소한의 값으로 일치하는 경우 다른 날짜의 예약에만 할인을 적용할 수 없습니다." #: pretix/base/models/discount.py:224 msgid "" "You cannot apply the discount to a different set of products if the discount " "is only valid for bookings of different dates." -msgstr "" +msgstr "할인이 다른 날짜의 예약에만 유효한 경우 다른 제품 세트에 할인을 적용할 수 " +"없습니다." #: pretix/base/models/event.py:88 msgid "The end of the presale period has to be later than its start." -msgstr "" +msgstr "사전 판매 기간의 종료 시점은 시작 시점보다 늦어야 합니다." #: pretix/base/models/event.py:90 msgid "The end of the event has to be later than its start." -msgstr "" +msgstr "행사의 종료는 시작보다 늦어야 합니다." #: pretix/base/models/event.py:577 msgid "" @@ -4210,20 +4235,24 @@ msgid "" "you can also choose to use a random value. This will be used in URLs, order " "codes, invoice numbers, and bank transfer references." msgstr "" +"짧아야 하며 소문자, 숫자, 점, 대시만 포함해야 하며 이벤트 중 고유해야 " +"합니다. 쉽게 기억할 수 있는 약어 또는 10자 미만의 날짜를 추천하지만 임의의 " +"값을 사용할 수도 있습니다. URL, 주문 코드, 송장 번호 및 은행 송금 참조에 " +"사용됩니다." #: pretix/base/models/event.py:584 pretix/base/models/organizer.py:87 msgid "The slug may only contain letters, numbers, dots and dashes." -msgstr "" +msgstr "슬러그에는 문자, 숫자, 점, 대시만 포함될 수 있습니다." #: pretix/base/models/event.py:601 pretix/base/models/event.py:1477 msgid "Show in lists" -msgstr "" +msgstr "목록을 보여주십시오" #: pretix/base/models/event.py:602 msgid "" "If selected, this event will show up publicly on the list of events for your " "organizer account." -msgstr "" +msgstr "이 이벤트가 선택되면 주최자 계정의 이벤트 목록에 공개적으로 표시됩니다." #: pretix/base/models/event.py:606 pretix/base/models/event.py:1492 #: pretix/control/forms/subevents.py:100 @@ -4231,15 +4260,17 @@ msgid "" "Optional. No products will be sold after this date. If you do not set this " "value, the presale will end after the end date of your event." msgstr "" +"선택 사항입니다. 이 날짜 이후에는 제품이 판매되지 않습니다. 이 값을 설정하지 " +"않으면 이벤트 종료일 이후에 사전 판매가 종료됩니다." #: pretix/base/models/event.py:612 pretix/base/models/event.py:1498 #: pretix/control/forms/subevents.py:94 msgid "Optional. No products will be sold before this date." -msgstr "" +msgstr "선택 사항입니다. 이 날짜 이전에는 어떤 제품도 판매되지 않습니다." #: pretix/base/models/event.py:637 pretix/control/navigation.py:65 msgid "Plugins" -msgstr "" +msgstr "플로그인" #: pretix/base/models/event.py:644 pretix/base/pdf.py:229 #: pretix/control/forms/event.py:273 pretix/control/forms/filter.py:1677 @@ -4249,20 +4280,20 @@ msgstr "" #: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:7 #: pretix/presale/views/widget.py:682 msgid "Event series" -msgstr "" +msgstr "행사 시리즈" #: pretix/base/models/event.py:648 pretix/base/models/event.py:1526 msgid "Seating plan" -msgstr "" +msgstr "좌석 계획" #: pretix/base/models/event.py:655 pretix/base/models/items.py:675 msgid "Sell on all sales channels" -msgstr "" +msgstr "모든 판매 채널에서 판매합니다" #: pretix/base/models/event.py:660 pretix/base/models/items.py:680 #: pretix/base/models/items.py:1229 pretix/base/payment.py:417 msgid "Restrict to specific sales channels" -msgstr "" +msgstr "특정 판매 채널로 제한합니다" #: pretix/base/models/event.py:668 pretix/control/navigation.py:344 #: pretix/control/navigation.py:470 @@ -4275,129 +4306,132 @@ msgstr "" #: pretix/plugins/reports/accountingreport.py:104 #: pretix/plugins/reports/accountingreport.py:107 msgid "Events" -msgstr "" +msgstr "행사" #: pretix/base/models/event.py:1305 msgid "" "You have configured at least one paid product but have not enabled any " "payment methods." -msgstr "" +msgstr "하나 이상의 유료 상품을 구성했지만 결제 수단을 활성화하지 않았습니다." #: pretix/base/models/event.py:1308 msgid "" "You have configured at least one paid product but have not configured a " "currency." -msgstr "" +msgstr "하나 이상의 유료 상품을 구성했지만 통화를 구성하지 않았습니다." #: pretix/base/models/event.py:1311 msgid "You need to configure at least one quota to sell anything." -msgstr "" +msgstr "무언가를 판매하려면 최소한 하나의 할당량을 설정해야 합니다." #: pretix/base/models/event.py:1316 #, python-brace-format msgid "You need to fill the meta parameter \"{property}\"." -msgstr "" +msgstr "메타 매개변수 \"{property}\"를 입력해야 합니다." #: pretix/base/models/event.py:1423 msgid "" "Once created an event cannot change between an series and a single event." -msgstr "" +msgstr "이벤트를 생성한 후에는 시리즈와 단일 이벤트를 변경할 수 없습니다." #: pretix/base/models/event.py:1429 msgid "The event slug cannot be changed." -msgstr "" +msgstr "이벤트 슬러그는 변경할 수 없습니다." #: pretix/base/models/event.py:1432 msgid "This slug has already been used for a different event." -msgstr "" +msgstr "이 슬러그는 이미 다른 이벤트에 사용되었습니다." #: pretix/base/models/event.py:1438 msgid "The event cannot end before it starts." -msgstr "" +msgstr "이벤트는 시작하기 전에 종료될 수 없습니다." #: pretix/base/models/event.py:1444 msgid "The event's presale cannot end before it starts." -msgstr "" +msgstr "이벤트의 사전 판매는 시작 전에 종료될 수 없습니다." #: pretix/base/models/event.py:1474 msgid "" "Only with this checkbox enabled, this date is visible in the frontend to " "users." -msgstr "" +msgstr "이 체크박스가 활성화된 경우에만 이 날짜가 사용자의 프런트엔드에 표시됩니다." #: pretix/base/models/event.py:1478 msgid "" "If selected, this event will show up publicly on the list of dates for your " "event." -msgstr "" +msgstr "이 이벤트가 선택되면 이벤트 날짜 목록에 공개적으로 표시됩니다." #: pretix/base/models/event.py:1523 pretix/base/settings.py:3025 msgid "Frontpage text" -msgstr "" +msgstr "첫 페이지 텍스트" #: pretix/base/models/event.py:1540 msgid "Date in event series" -msgstr "" +msgstr "이벤트 시리즈의 날짜" #: pretix/base/models/event.py:1541 msgid "Dates in event series" -msgstr "" +msgstr "이벤트 시리즈의 날짜들" #: pretix/base/models/event.py:1686 msgid "One or more variations do not belong to this event." -msgstr "" +msgstr "하나 이상의 변형은 이 이벤트에 속하지 않습니다." #: pretix/base/models/event.py:1716 pretix/base/models/items.py:2207 msgid "Can not contain spaces or special characters except underscores" -msgstr "" +msgstr "밑줄을 제외한 공백이나 특수 문자를 포함할 수 없습니다" #: pretix/base/models/event.py:1721 pretix/base/models/items.py:2212 msgid "The property name may only contain letters, numbers and underscores." -msgstr "" +msgstr "속성 이름에는 문자, 숫자 및 밑줄만 포함될 수 있습니다." #: pretix/base/models/event.py:1726 msgid "Default value" -msgstr "" +msgstr "기본값" #: pretix/base/models/event.py:1728 #: pretix/control/templates/pretixcontrol/organizers/properties.html:50 msgid "Can only be changed by organizer-level administrators" -msgstr "" +msgstr "주최자 수준의 관리자만 변경할 수 있습니다" #: pretix/base/models/event.py:1730 msgid "Required for events" -msgstr "" +msgstr "행사 요구사항" #: pretix/base/models/event.py:1731 msgid "" "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" msgstr "" +"이 옵션을 선택하면 속성이 설정된 경우에만 이벤트를 실시간으로 실행할 수 " +"있습니다. 이벤트 시리즈의 경우 개별 날짜에 대한 값을 설정하는 것이 항상 선택 " +"사항입니다" #: pretix/base/models/event.py:1737 pretix/base/models/items.py:2224 msgid "Valid values" -msgstr "" +msgstr "유효값" #: pretix/base/models/event.py:1740 #: pretix/control/templates/pretixcontrol/organizers/properties.html:45 msgid "Show filter option to customers" -msgstr "" +msgstr "고객에게 필터 옵션 표시함" #: pretix/base/models/event.py:1741 msgid "" "This field will be shown to filter events in the public event list and " "calendar." -msgstr "" +msgstr "이 필드는 공개 이벤트 목록과 캘린더에서 이벤트를 필터링하도록 표시됩니다." #: pretix/base/models/event.py:1744 pretix/control/forms/organizer.py:269 #: pretix/control/forms/organizer.py:273 msgid "Public name" -msgstr "" +msgstr "공식적인 이름" #: pretix/base/models/event.py:1748 #: pretix/control/templates/pretixcontrol/organizers/properties.html:40 msgid "Can be used for filtering" -msgstr "" +msgstr "필터링에 사용할수 있습니다" #: pretix/base/models/event.py:1749 msgid "" @@ -4405,40 +4439,42 @@ msgid "" "can also be used for hidden filter parameters in the frontend (e.g. using " "the widget)." msgstr "" +"이 필드는 백엔드에서 이벤트나 보고서를 필터링하는 데 표시되며, " +"프론트엔드에서 숨겨진 필터 매개변수(예: 위젯 사용)에도 사용할 수 있습니다." #: pretix/base/models/event.py:1759 msgid "A property can either be required or have a default value, not both." -msgstr "" +msgstr "속성은 필수일 수도 있고 기본값일 수도 있지만 둘 다 필요하지는 않습니다." #: pretix/base/models/event.py:1839 pretix/base/models/organizer.py:516 msgid "Link text" -msgstr "" +msgstr "링크 문자" #: pretix/base/models/event.py:1842 pretix/base/models/organizer.py:519 msgid "Link URL" -msgstr "" +msgstr "링크 URL" #: pretix/base/models/exports.py:42 pretix/control/navigation.py:229 #: pretix/control/navigation.py:650 msgid "Export" -msgstr "" +msgstr "내보내기" #: pretix/base/models/exports.py:59 msgid "Additional recipients" -msgstr "" +msgstr "추가적인 수신자" #: pretix/base/models/exports.py:61 pretix/base/models/exports.py:66 #: pretix/base/models/exports.py:71 msgid "You can specify multiple recipients separated by commas." -msgstr "" +msgstr "여러 수신자를 쉼표로 구분하여 지정할 수 있습니다." #: pretix/base/models/exports.py:64 msgid "Additional recipients (Cc)" -msgstr "" +msgstr "추가적인 수신자들(Cc)" #: pretix/base/models/exports.py:69 msgid "Additional recipients (Bcc)" -msgstr "" +msgstr "추가적인 수신자들 (BCC)" #: pretix/base/models/exports.py:74 pretix/control/forms/event.py:1099 #: pretix/control/forms/event.py:1173 pretix/control/forms/event.py:1183 @@ -4449,7 +4485,7 @@ msgstr "" #: pretix/plugins/sendmail/forms.py:57 pretix/plugins/sendmail/forms.py:73 #: pretix/plugins/sendmail/models.py:248 msgid "Subject" -msgstr "" +msgstr "주제" #: pretix/base/models/exports.py:78 pretix/control/forms/orders.py:759 #: pretix/control/forms/orders.py:782 pretix/control/forms/orders.py:950 @@ -4457,67 +4493,67 @@ msgstr "" #: pretix/plugins/sendmail/forms.py:58 pretix/plugins/sendmail/forms.py:78 #: pretix/plugins/sendmail/models.py:249 msgid "Message" -msgstr "" +msgstr "메시지" #: pretix/base/models/exports.py:85 msgid "Requested start time" -msgstr "" +msgstr "요청된 시작시간" #: pretix/base/models/exports.py:86 msgid "The actual start time might be delayed depending on system load." -msgstr "" +msgstr "시스템 부하에 따라 실제 시작 시간이 지연될 수 있습니다." #: pretix/base/models/fields.py:33 msgid "No value can contain the delimiter character." -msgstr "" +msgstr "어떤 값도 구분 문자를 포함할 수 없습니다." #: pretix/base/models/giftcards.py:81 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:50 msgid "Owned by ticket holder" -msgstr "" +msgstr "티켓 소지자 소유" #: pretix/base/models/giftcards.py:93 msgid "The gift card code may only contain letters, numbers, dots and dashes." -msgstr "" +msgstr "기프트 카드 코드에는 문자, 숫자, 점, 대시만 포함될 수 있습니다." #: pretix/base/models/giftcards.py:105 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:39 msgctxt "giftcard" msgid "Special terms and conditions" -msgstr "" +msgstr "특별 약관" #: pretix/base/models/giftcards.py:219 pretix/base/models/giftcards.py:223 msgid "Manual transaction" -msgstr "" +msgstr "수동 거래" #: pretix/base/models/invoices.py:185 #, python-format msgctxt "invoice" msgid "Tax ID: %s" -msgstr "" +msgstr "세금 ID: %s" #: pretix/base/models/invoices.py:191 pretix/base/services/invoices.py:139 #, python-format msgctxt "invoice" msgid "VAT-ID: %s" -msgstr "" +msgstr "부가가치세-ID: %s" #: pretix/base/models/items.py:93 msgid "Category name" -msgstr "" +msgstr "카테고리 이름" #: pretix/base/models/items.py:97 pretix/base/models/items.py:484 msgid "" "If you set this, this will be used instead of the public name in the backend." -msgstr "" +msgstr "카테고리 이름 이것을 설정하면 백엔드의 공용 이름 대신 사용됩니다." #: pretix/base/models/items.py:101 msgid "Category description" -msgstr "" +msgstr "카테고리 설명" #: pretix/base/models/items.py:108 msgid "Products in this category are add-on products" -msgstr "" +msgstr "이 카테고리의 제품은 추가 제품입니다" #: pretix/base/models/items.py:109 msgid "" @@ -4525,122 +4561,125 @@ msgid "" "their own. They can only be bought in combination with a product that has " "this category configured as a possible source for add-ons." msgstr "" +"선택하면 이 카테고리에 속하는 제품은 자체적으로 판매되지 않습니다. 이 " +"카테고리가 추가 기능의 가능한 소스로 구성된 제품과 결합해야만 구매할 수 " +"있습니다." #: pretix/base/models/items.py:114 pretix/base/models/items.py:159 #: pretix/control/forms/item.py:99 msgid "Normal category" -msgstr "" +msgstr "정상범주" #: pretix/base/models/items.py:115 pretix/control/forms/item.py:112 msgid "Normal + cross-selling category" -msgstr "" +msgstr "일반 + 교차 판매 카테고리" #: pretix/base/models/items.py:116 pretix/control/forms/item.py:107 msgid "Cross-selling category" -msgstr "" +msgstr "교차 판매 카테고리" #: pretix/base/models/items.py:124 msgid "Always show in cross-selling step" -msgstr "" +msgstr "교차 판매 단계에서 항상 표시합니다" #: pretix/base/models/items.py:125 msgid "" "Only show products that qualify for a discount according to discount rules" -msgstr "" +msgstr "할인 규정에 따라 할인 혜택을 받을 수 있는 제품만 표시합니다" #: pretix/base/models/items.py:126 msgid "Only show if the cart contains one of the following products" -msgstr "" +msgstr "카트에 다음 제품 중 하나가 포함되어 있는지만 표시합다" #: pretix/base/models/items.py:129 msgid "Cross-selling condition" -msgstr "" +msgstr "교차 판매 조건" #: pretix/base/models/items.py:137 msgid "Cross-selling condition products" -msgstr "" +msgstr "교차 판매 조건 제품" #: pretix/base/models/items.py:143 #: pretix/control/templates/pretixcontrol/items/categories.html:3 #: pretix/control/templates/pretixcontrol/items/categories.html:5 #: pretix/control/templates/pretixcontrol/items/categories.html:33 msgid "Product categories" -msgstr "" +msgstr "제품 카테고리" #: pretix/base/models/items.py:149 #, python-brace-format msgid "{category} ({category_type})" -msgstr "" +msgstr "{category}({category_type})" #: pretix/base/models/items.py:155 msgid "Add-on category" -msgstr "" +msgstr "추가된 카테고리" #: pretix/base/models/items.py:222 pretix/base/models/items.py:278 msgid "Disable product for this date" -msgstr "" +msgstr "이 날짜의 비활성화 된 제품" #: pretix/base/models/items.py:226 pretix/base/models/items.py:282 #: pretix/base/models/items.py:564 msgid "This product will not be sold before the given date." -msgstr "" +msgstr "이 제품은 지정된 날짜 이전에 판매되지 않습니다." #: pretix/base/models/items.py:231 pretix/base/models/items.py:287 #: pretix/base/models/items.py:574 msgid "This product will not be sold after the given date." -msgstr "" +msgstr "이 제품은 지정된 날짜 후에 판매되지 않습니다." #: pretix/base/models/items.py:436 msgid "Event validity (default)" -msgstr "" +msgstr "이벤트 유효성(기본값)" #: pretix/base/models/items.py:437 msgid "Fixed time frame" -msgstr "" +msgstr "고정된 시간 프레임" #: pretix/base/models/items.py:438 msgid "Dynamic validity" -msgstr "" +msgstr "동적 유효성" #: pretix/base/models/items.py:444 pretix/control/forms/item.py:661 #: pretix/control/templates/pretixcontrol/subevents/fragment_unavail_mode_indicator.html:3 msgid "Hide product if unavailable" -msgstr "" +msgstr "사용할 수 없는 경우 제품 숨기기" #: pretix/base/models/items.py:445 pretix/control/forms/item.py:662 #: pretix/control/templates/pretixcontrol/subevents/fragment_unavail_mode_indicator.html:5 msgid "Show product with info on why it’s unavailable" -msgstr "" +msgstr "제품을 사용할 수 없는 이유에 대한 정보를 표시합니다" #: pretix/base/models/items.py:456 pretix/base/models/items.py:781 msgid "Don't use re-usable media, use regular one-off tickets" -msgstr "" +msgstr "재사용 가능한 미디어를 사용하지 말고 일반 일회용 티켓을 사용하세요" #: pretix/base/models/items.py:457 msgid "Require an existing medium to be re-used" -msgstr "" +msgstr "기존 매체를 재사용해야 합니다" #: pretix/base/models/items.py:458 msgid "Require a previously unknown medium to be newly added" -msgstr "" +msgstr "이전에 알려지지 않은 매체를 새로 추가해야 합니다" #: pretix/base/models/items.py:459 msgid "Require either an existing or a new medium to be used" -msgstr "" +msgstr "기존 매체 또는 새 매체를 사용해야 합니다" #: pretix/base/models/items.py:475 pretix/base/models/items.py:1457 msgid "Category" -msgstr "" +msgstr "카테고리" #: pretix/base/models/items.py:476 msgid "" "If you have many products, you can optionally sort them into categories to " "keep things organized." -msgstr "" +msgstr "제품이 많은 경우, 선택적으로 카테고리별로 분류하여 정리할 수 있습니다." #: pretix/base/models/items.py:493 msgid "This is shown below the product name in lists." -msgstr "" +msgstr "이것은 목록에 있는 제품명 아래에 나와 있습니다." #: pretix/base/models/items.py:498 msgid "" @@ -4648,6 +4687,8 @@ msgid "" "each of the variations. If a variation does not have a special price or if " "you do not have variations, this price will be used." msgstr "" +"이 제품에 여러 가지 변형이 있는 경우 각 변형에 대해 다른 가격을 설정할 수 " +"있습니다. 변형에 특별한 가격이 없거나 변형이 없는 경우 이 가격이 사용됩니다." #: pretix/base/models/items.py:506 msgid "" @@ -4657,10 +4698,14 @@ msgid "" "event. This is currently not supported for products that are bought as an " "add-on to other products." msgstr "" +"이 옵션이 활성화되어 있으면 사용자가 직접 가격을 선택할 수 있습니다. 위에서 " +"설정한 가격은 사용자가 입력해야 하는 최소 가격으로 해석됩니다. 예를 들어 " +"이벤트에 대한 추가 기부금을 모으는 데 사용할 수 있습니다. 현재 다른 제품에 " +"추가로 구매하는 제품에는 지원되지 않습니다." #: pretix/base/models/items.py:512 pretix/base/models/items.py:1175 msgid "Suggested price" -msgstr "" +msgstr "제시된 가격" #: pretix/base/models/items.py:513 pretix/base/models/items.py:1176 msgid "" @@ -4669,44 +4714,47 @@ msgid "" "have without the free price option. This will be ignored if a voucher is " "used that lowers the price." msgstr "" +"이 가격은 입력 필드의 기본값으로 사용됩니다. 사용자는 무료 가격 옵션이 없는 " +"이 제품의 가격보다 낮지는 않지만 더 낮은 값을 선택할 수 있습니다. 가격을 " +"낮추는 바우처를 사용하는 경우 이는 무시됩니다." #: pretix/base/models/items.py:527 msgid "Whether or not buying this product allows a person to enter your event" -msgstr "" +msgstr "이벤트에 참여할 수 있는지 여부는 이 제품을 사거나 안사느냐에 달렸습니다" #: pretix/base/models/items.py:532 msgid "Is a personalized ticket" -msgstr "" +msgstr "개인 맞춤 티켓입니다" #: pretix/base/models/items.py:534 msgid "Whether or not buying this product allows to enter attendee information" -msgstr "" +msgstr "참석자 정보를 입력할 수 있는지 여부는 이 제품을 구매하거나 안하거나 입니다" #: pretix/base/models/items.py:543 msgid "Show a waiting list for this ticket" -msgstr "" +msgstr "이 티켓의 대기 목록 표시입니다" #: pretix/base/models/items.py:544 msgid "This will only work if waiting lists are enabled for this event." -msgstr "" +msgstr "이 이벤트에 대기자 명단이 활성화된 경우에만 작동합니다." #: pretix/base/models/items.py:548 pretix/base/settings.py:1355 #: pretix/control/forms/event.py:1679 msgid "Show number of tickets left" -msgstr "" +msgstr "남은 티켓 수 표시입니다" #: pretix/base/models/items.py:549 msgid "Publicly show how many tickets are still available." -msgstr "" +msgstr "공개적으로 몇 장의 티켓이 아직 남아 있는지 보여줍니다." #: pretix/base/models/items.py:556 pretix/control/forms/item.py:626 msgid "Product picture" -msgstr "" +msgstr "제품 사진" #: pretix/base/models/items.py:585 msgctxt "hidden_if_available_legacy" msgid "Only show after sellout of" -msgstr "" +msgstr "매진된 후에만 표시합니다" #: pretix/base/models/items.py:586 msgid "" @@ -4716,10 +4764,14 @@ msgid "" "out. There might be a short period in which both products are visible while " "all tickets in the referenced quota are reserved, but not yet sold." msgstr "" +"여기에서 할당량을 선택하면 해당 할당량을 사용할 수 없는 경우에만 이 제품이 " +"표시됩니다. 매진된 제품을 숨길 수 있는 옵션과 결합하면 매진된 제품을 더 비싼 " +"제품으로 교체할 수 있습니다. 참조된 할당량의 모든 티켓이 예약되었지만 아직 " +"판매되지 않은 상태에서 두 제품이 모두 표시되는 기간이 짧을 수 있습니다." #: pretix/base/models/items.py:596 msgid "Only show after sellout of" -msgstr "" +msgstr "매진된 후에만 표시입니다" #: pretix/base/models/items.py:597 msgid "" @@ -4730,12 +4782,17 @@ msgid "" "products are visible while all tickets of the referenced product are " "reserved, but not yet sold." msgstr "" +"여기에서 제품을 선택하면 해당 제품이 매진되었을 때만 표시됩니다. 매진된 " +"제품을 숨길 수 있는 옵션과 결합하면 더 저렴한 옵션이 매진되면 더 비싼 " +"제품으로 교환할 수 있습니다. 참조된 제품의 모든 티켓이 예약되었지만 아직 " +"판매되지 않은 상태에서 두 제품 모두 보이는 기간이 짧을 수 있습니다." #: pretix/base/models/items.py:611 msgid "" "To buy this product, the user needs a voucher that applies to this product " "either directly or via a quota." -msgstr "" +msgstr "이 제품을 구매하려면 사용자가 직접 또는 할당량을 통해 이 제품에 적용되는 " +"바우처가 필요합니다." #: pretix/base/models/items.py:617 msgid "" @@ -4744,12 +4801,16 @@ msgid "" "paid and completed. You can use this e.g. for discounted tickets that are " "only available to specific groups." msgstr "" +"이 제품이 주문의 일부인 경우, 주문은 \"승인\" 상태가 되며 결제 및 완료되기 " +"전에 사용자의 확인이 필요합니다. 예를 들어 특정 그룹만 이용할 수 있는 할인 " +"티켓의 경우 이 제품을 사용할 수 있습니다." #: pretix/base/models/items.py:624 msgid "" "This product will be hidden from the event page until the user enters a " "voucher that unlocks this product." -msgstr "" +msgstr "이 제품은 사용자가 이 제품을 잠금 해제하는 바우처를 입력할 때까지 이벤트 " +"페이지에서 숨겨집니다." #: pretix/base/models/items.py:630 msgid "" @@ -4757,6 +4818,9 @@ msgid "" "products. Do not check this option if you want to use this " "product as an add-on product, but only for fixed bundles!" msgstr "" +"이 옵션이 설정되면 제품은 번들 제품의 일부로만 판매됩니다. 이 제품을 애드온 " +"제품으로 사용하고 싶다면 고정 묶음에만 이 옵션을 not으로 " +"확인하세요!" #: pretix/base/models/items.py:637 msgid "" @@ -4764,6 +4828,9 @@ msgid "" "event apply. If this is unchecked, orders containing this product can not be " "canceled by users but only by you." msgstr "" +"이 옵션을 선택하면 이 이벤트의 일반적인 취소 및 주문 변경 설정이 적용됩니다. " +"이 옵션을 선택하지 않으면 이 제품이 포함된 주문은 사용자가 취소할 수 없으며 " +"사용자만 취소할 수 있습니다." #: pretix/base/models/items.py:644 msgid "" @@ -4771,6 +4838,8 @@ msgid "" "many times. If you keep the field empty or set it to 0, there is no special " "limit for this product." msgstr "" +"이 제품은 카트에 이 정도 이상 추가해야만 구매할 수 있습니다. 필드를 " +"비워두거나 0으로 설정하면 이 제품에는 특별한 제한이 없습니다." #: pretix/base/models/items.py:651 msgid "" @@ -4779,6 +4848,9 @@ msgid "" "product. The limit for the maximum number of items in the whole order " "applies regardless." msgstr "" +"이 제품은 한 주문 내에서 최대 이 횟수까지만 구매할 수 있습니다. 필드를 " +"비워두거나 0으로 설정하면 이 제품에는 특별한 제한이 없습니다. 전체 주문에서 " +"최대 품목 수에 대한 제한은 상관없이 적용됩니다." #: pretix/base/models/items.py:658 pretix/base/models/items.py:1243 msgid "" @@ -4787,12 +4859,15 @@ msgid "" "tickets to indicate to the person at check-in that the student ID card still " "needs to be checked." msgstr "" +"이 값을 설정하면 체크인 앱에 이 티켓에 특별한 주의가 필요하다는 눈에 보이는 " +"경고가 표시됩니다. 예를 들어 학생 티켓의 경우 이를 사용하여 체크인 시 학생 " +"신분증을 여전히 확인해야 함을 체크인 상대방에게 표시할 수 있습니다." #: pretix/base/models/items.py:665 pretix/base/models/items.py:1250 msgid "" "This text will be shown by the check-in app if a ticket of this type is " "scanned." -msgstr "" +msgstr "이 유형의 티켓이 스캔되면 체크인 앱에 이 텍스트가 표시됩니다." #: pretix/base/models/items.py:671 pretix/base/models/items.py:1171 msgid "" @@ -4800,30 +4875,35 @@ msgid "" "current price is a discounted one. This is just a cosmetic setting and will " "not actually impact pricing." msgstr "" +"설정하면 현재 가격 옆에 표시되어 현재 가격이 할인된 가격임을 보여줍니다. " +"이는 단지 외형적인 설정일 뿐이며 실제로 가격에 영향을 미치지 않습니다." #: pretix/base/models/items.py:681 msgid "Only sell tickets for this product on the selected sales channels." -msgstr "" +msgstr "이 제품의 티켓은 선택된 판매 채널에서만 판매됩니다." #: pretix/base/models/items.py:686 msgid "" "When a customer buys this product, they will get a gift card with a value " "corresponding to the product price." -msgstr "" +msgstr "고객이 이 제품을 구매하면 제품 가격에 해당하는 금액의 기프트 카드를 받게 " +"됩니다." #: pretix/base/models/items.py:696 msgid "Allowed membership types" -msgstr "" +msgstr "멤버십유형을 허용합니다" #: pretix/base/models/items.py:701 pretix/base/models/items.py:1199 msgid "" "Do not show this unless the customer is logged in and has a valid " "membership. Be aware that this means it will never be visible in the widget." msgstr "" +"고객이 로그인하여 유효한 멤버십을 가지고 있지 않는 한 이 메시지를 표시하지 " +"마십시오. 이는 위젯에 절대 표시되지 않는다는 것을 의미합니다." #: pretix/base/models/items.py:710 msgid "This product creates a membership of type" -msgstr "" +msgstr "이 제품은 다음과 같은 유형의 멤버십을 생성합니다" #: pretix/base/models/items.py:713 msgid "" -- 2.54.0 From 9a61de9a22e005c1486da1f23068baaae20ccfcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Alejandro?= Date: Thu, 3 Apr 2025 13:09:18 +0200 Subject: [PATCH 29/89] Translations: Update French Currently translated at 100.0% (5863 of 5863 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/fr/ powered by weblate --- src/pretix/locale/fr/LC_MESSAGES/django.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pretix/locale/fr/LC_MESSAGES/django.po b/src/pretix/locale/fr/LC_MESSAGES/django.po index ab244740e..f0bec7933 100644 --- a/src/pretix/locale/fr/LC_MESSAGES/django.po +++ b/src/pretix/locale/fr/LC_MESSAGES/django.po @@ -4,8 +4,8 @@ msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:44+0000\n" -"PO-Revision-Date: 2025-03-27 00:00+0000\n" -"Last-Translator: CVZ-es \n" +"PO-Revision-Date: 2025-04-03 20:00+0000\n" +"Last-Translator: Loïc Alejandro \n" "Language-Team: French \n" "Language: fr\n" @@ -29084,9 +29084,9 @@ msgid "" "After completing your purchase, we will ask you to transfer the money to our " "bank account, using a personal reference code." msgstr "" -"Après avoir effectué votre achat, nous vous demanderons de virer l'argent " -"sur le compte bancaire suivant, en mentionnant la référence suivante dans " -"l'objet du virement." +"Après avoir effectué votre achat, nous vous demanderons de transférer " +"l'argent sur notre compte bancaire, en utilisant un code de référence " +"personnel." #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_confirm.html:43 #, python-format -- 2.54.0 From fa468366c764041fb875a562fffce82d83b64db3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 6 Apr 2025 09:19:39 +0200 Subject: [PATCH 30/89] Bump @rollup/plugin-node-resolve in /src/pretix/static/npm_dir (#4974) Bumps [@rollup/plugin-node-resolve](https://github.com/rollup/plugins/tree/HEAD/packages/node-resolve) from 16.0.0 to 16.0.1. - [Changelog](https://github.com/rollup/plugins/blob/master/packages/node-resolve/CHANGELOG.md) - [Commits](https://github.com/rollup/plugins/commits/node-resolve-v16.0.1/packages/node-resolve) --- updated-dependencies: - dependency-name: "@rollup/plugin-node-resolve" dependency-version: 16.0.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/pretix/static/npm_dir/package-lock.json | 15 ++++++++------- src/pretix/static/npm_dir/package.json | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/pretix/static/npm_dir/package-lock.json b/src/pretix/static/npm_dir/package-lock.json index 396ab7943..a96af2174 100644 --- a/src/pretix/static/npm_dir/package-lock.json +++ b/src/pretix/static/npm_dir/package-lock.json @@ -11,7 +11,7 @@ "@babel/core": "^7.26.9", "@babel/preset-env": "^7.26.9", "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^16.0.0", + "@rollup/plugin-node-resolve": "^16.0.1", "rollup": "^2.79.1", "rollup-plugin-vue": "^5.0.1", "vue": "^2.7.16", @@ -1517,9 +1517,10 @@ } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.0.tgz", - "integrity": "sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==", + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz", + "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==", + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -4742,9 +4743,9 @@ } }, "@rollup/plugin-node-resolve": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.0.tgz", - "integrity": "sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==", + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz", + "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==", "requires": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", diff --git a/src/pretix/static/npm_dir/package.json b/src/pretix/static/npm_dir/package.json index 25009bb9b..fa57b3d99 100644 --- a/src/pretix/static/npm_dir/package.json +++ b/src/pretix/static/npm_dir/package.json @@ -7,7 +7,7 @@ "@babel/core": "^7.26.9", "@babel/preset-env": "^7.26.9", "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^16.0.0", + "@rollup/plugin-node-resolve": "^16.0.1", "vue": "^2.7.16", "rollup": "^2.79.1", "rollup-plugin-vue": "^5.0.1", -- 2.54.0 From 957462739add6c99f4bb363fa27dfca70b1e6d67 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 6 Apr 2025 09:19:47 +0200 Subject: [PATCH 31/89] Bump @babel/core from 7.26.9 to 7.26.10 in /src/pretix/static/npm_dir (#4975) Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.26.9 to 7.26.10. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.26.10/packages/babel-core) --- updated-dependencies: - dependency-name: "@babel/core" dependency-version: 7.26.10 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/pretix/static/npm_dir/package-lock.json | 130 ++++++++++---------- src/pretix/static/npm_dir/package.json | 2 +- 2 files changed, 66 insertions(+), 66 deletions(-) diff --git a/src/pretix/static/npm_dir/package-lock.json b/src/pretix/static/npm_dir/package-lock.json index a96af2174..aff10f1e1 100644 --- a/src/pretix/static/npm_dir/package-lock.json +++ b/src/pretix/static/npm_dir/package-lock.json @@ -8,7 +8,7 @@ "name": "pretix", "version": "0.0.0", "dependencies": { - "@babel/core": "^7.26.9", + "@babel/core": "^7.26.10", "@babel/preset-env": "^7.26.9", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^16.0.1", @@ -53,21 +53,21 @@ } }, "node_modules/@babel/core": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", - "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", + "@babel/generator": "^7.26.10", "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.9", - "@babel/parser": "^7.26.9", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.9", - "@babel/types": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -102,13 +102,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", - "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -401,12 +401,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", - "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.26.9" + "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -1405,30 +1405,30 @@ } }, "node_modules/@babel/template": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", - "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", - "@babel/parser": "^7.26.9", - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.9", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1437,9 +1437,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", - "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.25.9", @@ -3795,20 +3795,20 @@ "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==" }, "@babel/core": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", - "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", + "@babel/generator": "^7.26.10", "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.9", - "@babel/parser": "^7.26.9", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.9", - "@babel/types": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -3829,12 +3829,12 @@ } }, "@babel/generator": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", - "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", "requires": { - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -4047,11 +4047,11 @@ } }, "@babel/parser": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", - "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", "requires": { - "@babel/types": "^7.26.9" + "@babel/types": "^7.27.0" } }, "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { @@ -4668,33 +4668,33 @@ } }, "@babel/template": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", "requires": { "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" } }, "@babel/traverse": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", - "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", "requires": { "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", - "@babel/parser": "^7.26.9", - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.9", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", - "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", "requires": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" diff --git a/src/pretix/static/npm_dir/package.json b/src/pretix/static/npm_dir/package.json index fa57b3d99..8abd706bc 100644 --- a/src/pretix/static/npm_dir/package.json +++ b/src/pretix/static/npm_dir/package.json @@ -4,7 +4,7 @@ "private": true, "scripts": {}, "dependencies": { - "@babel/core": "^7.26.9", + "@babel/core": "^7.26.10", "@babel/preset-env": "^7.26.9", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^16.0.1", -- 2.54.0 From 1bbefddc11279f3be23b08abb621b005ce0b096a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 6 Apr 2025 09:23:56 +0200 Subject: [PATCH 32/89] Update flake8 requirement from ==7.1.* to ==7.2.* (#4972) * Update flake8 requirement from ==7.1.* to ==7.2.* Updates the requirements on [flake8](https://github.com/pycqa/flake8) to permit the latest version. - [Commits](https://github.com/pycqa/flake8/compare/7.1.0...7.2.0) --- updated-dependencies: - dependency-name: flake8 dependency-type: direct:production ... Signed-off-by: dependabot[bot] * Resolve warning --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Raphael Michel --- pyproject.toml | 2 +- src/pretix/base/signals.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 53d47e6f5..3ce622298 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -111,7 +111,7 @@ dev = [ "coverage", "coveralls", "fakeredis==2.26.*", - "flake8==7.1.*", + "flake8==7.2.*", "freezegun", "isort==6.0.*", "pep8-naming==0.14.*", diff --git a/src/pretix/base/signals.py b/src/pretix/base/signals.py index 71a920b59..7b996cffe 100644 --- a/src/pretix/base/signals.py +++ b/src/pretix/base/signals.py @@ -46,7 +46,6 @@ app_cache = {} def _populate_app_cache(): - global app_cache apps.check_apps_ready() for ac in apps.app_configs.values(): app_cache[ac.name] = ac -- 2.54.0 From 277a5bffa8391222d9da930435456138297017d2 Mon Sep 17 00:00:00 2001 From: luelista Date: Mon, 7 Apr 2025 13:49:19 +0200 Subject: [PATCH 33/89] Allow changing ticket secret via API (Z#23188201) (#4989) --- doc/api/resources/orders.rst | 5 +++++ src/pretix/api/serializers/orderchange.py | 6 +++++- src/pretix/base/services/orders.py | 17 +++++++++++++++ src/tests/api/test_order_change.py | 25 +++++++++++++++++++++++ 4 files changed, 52 insertions(+), 1 deletion(-) diff --git a/doc/api/resources/orders.rst b/doc/api/resources/orders.rst index de6da4fd4..df5e00e6d 100644 --- a/doc/api/resources/orders.rst +++ b/doc/api/resources/orders.rst @@ -1943,9 +1943,14 @@ Manipulating individual positions * ``valid_until`` + * ``secret`` + Changing parameters such as ``item`` or ``price`` will **not** automatically trigger creation of a new invoice, you need to take care of that yourself. + Changing ``secret`` does not cause a new PDF ticket to be sent to the customer, nor does it cause the old secret + to be added to the revocation list, even if your ticket generator uses one. + **Example request**: .. sourcecode:: http diff --git a/src/pretix/api/serializers/orderchange.py b/src/pretix/api/serializers/orderchange.py index 5998f7eeb..8c3cb896a 100644 --- a/src/pretix/api/serializers/orderchange.py +++ b/src/pretix/api/serializers/orderchange.py @@ -251,7 +251,7 @@ class OrderPositionChangeSerializer(serializers.ModelSerializer): class Meta: model = OrderPosition fields = ( - 'item', 'variation', 'subevent', 'seat', 'price', 'tax_rule', 'valid_from', 'valid_until' + 'item', 'variation', 'subevent', 'seat', 'price', 'tax_rule', 'valid_from', 'valid_until', 'secret' ) def __init__(self, *args, **kwargs): @@ -319,6 +319,7 @@ class OrderPositionChangeSerializer(serializers.ModelSerializer): tax_rule = validated_data.get('tax_rule', instance.tax_rule) valid_from = validated_data.get('valid_from', instance.valid_from) valid_until = validated_data.get('valid_until', instance.valid_until) + secret = validated_data.get('secret', instance.secret) change_item = None if item != instance.item or variation != instance.variation: @@ -351,6 +352,9 @@ class OrderPositionChangeSerializer(serializers.ModelSerializer): if valid_until != instance.valid_until: ocm.change_valid_until(instance, valid_until) + if secret != instance.secret: + ocm.change_ticket_secret(instance, secret) + if self.context.get('commit', True): ocm.commit() instance.refresh_from_db() diff --git a/src/pretix/base/services/orders.py b/src/pretix/base/services/orders.py index 197ee2240..863f9bfdf 100644 --- a/src/pretix/base/services/orders.py +++ b/src/pretix/base/services/orders.py @@ -1564,6 +1564,7 @@ class OrderChangeManager: AddFeeOperation = namedtuple('AddFeeOperation', ('fee', 'price_diff')) CancelFeeOperation = namedtuple('CancelFeeOperation', ('fee', 'price_diff')) RegenerateSecretOperation = namedtuple('RegenerateSecretOperation', ('position',)) + ChangeSecretOperation = namedtuple('ChangeSecretOperation', ('position', 'new_secret')) ChangeValidFromOperation = namedtuple('ChangeValidFromOperation', ('position', 'valid_from')) ChangeValidUntilOperation = namedtuple('ChangeValidUntilOperation', ('position', 'valid_until')) AddBlockOperation = namedtuple('AddBlockOperation', ('position', 'block_name', 'ignore_from_quota_while_blocked')) @@ -1671,6 +1672,9 @@ class OrderChangeManager: def regenerate_secret(self, position: OrderPosition): self._operations.append(self.RegenerateSecretOperation(position)) + def change_ticket_secret(self, position: OrderPosition, new_secret: str): + self._operations.append(self.ChangeSecretOperation(position, new_secret)) + def change_valid_from(self, position: OrderPosition, new_value: datetime): self._operations.append(self.ChangeValidFromOperation(position, new_value)) @@ -2441,6 +2445,19 @@ class OrderChangeManager: 'position': op.position.pk, 'positionid': op.position.positionid, }) + elif isinstance(op, self.ChangeSecretOperation): + if OrderPosition.all.filter(order__event=self.event, secret=op.new_secret).exists(): + raise OrderError('You cannot assign a position secret that already exists.') + op.position.secret = op.new_secret + op.position.save(update_fields=["secret"]) + if op.position in secret_dirty: + secret_dirty.remove(op.position) + tickets.invalidate_cache.apply_async(kwargs={'event': self.event.pk, + 'order': self.order.pk}) + self.order.log_action('pretix.event.order.changed.secret', user=self.user, auth=self.auth, data={ + 'position': op.position.pk, + 'positionid': op.position.positionid, + }) elif isinstance(op, self.ChangeValidFromOperation): self.order.log_action('pretix.event.order.changed.valid_from', user=self.user, auth=self.auth, data={ 'position': op.position.pk, diff --git a/src/tests/api/test_order_change.py b/src/tests/api/test_order_change.py index a956950f3..ec9394f68 100644 --- a/src/tests/api/test_order_change.py +++ b/src/tests/api/test_order_change.py @@ -1468,6 +1468,31 @@ def test_position_update_change_price_and_tax_rule(token_client, organizer, even assert op.tax_rule == tr +@pytest.mark.django_db +def test_position_update_secret(token_client, organizer, event, order, item): + with scopes_disabled(): + order.positions.create(item=item, price=Decimal('23.00'), secret='alreadyused') + p = order.positions.first() + psw = p.web_secret + resp = token_client.patch( + '/api/v1/organizers/{}/events/{}/orderpositions/{}/'.format( + organizer.slug, event.slug, p.pk, + ), format='json', data={'secret': 'nobodyknows'} + ) + assert resp.status_code == 200 + p.refresh_from_db() + with scopes_disabled(): + assert 'nobodyknows' == p.secret + assert psw == p.web_secret + + resp = token_client.patch( + '/api/v1/organizers/{}/events/{}/orderpositions/{}/'.format( + organizer.slug, event.slug, p.pk, + ), format='json', data={'secret': 'alreadyused'} + ) + assert resp.status_code == 400 + + @pytest.mark.django_db def test_position_add_simple(token_client, organizer, event, order, quota, item): with scopes_disabled(): -- 2.54.0 From 899994ef1e93dc80c432a360872933cae20c8ed6 Mon Sep 17 00:00:00 2001 From: luelista Date: Mon, 7 Apr 2025 13:51:59 +0200 Subject: [PATCH 34/89] Improve SOLD OUT / FULLY BOOKED message logic (Z#23187802) (#4988) Show SOLD OUT instead of FULLY BOOKED if ticket is not free of charge even if a voucher gives 100% off --- .../pretixpresale/event/fragment_addon_choice.html | 4 ++-- .../pretixpresale/event/fragment_availability.html | 6 +++--- .../pretixpresale/event/fragment_product_list.html | 4 ++-- .../presale/templates/pretixpresale/event/voucher.html | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html b/src/pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html index 5498b63fc..63686ed41 100644 --- a/src/pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html +++ b/src/pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html @@ -220,7 +220,7 @@ {% endif %}
{% else %} - {% include "pretixpresale/event/fragment_availability.html" with price=var.display_price.gross avail=var.cached_availability.0 event=event item=item var=var %} + {% include "pretixpresale/event/fragment_availability.html" with price=var.display_price.gross original_price=var.original_price.gross avail=var.cached_availability.0 event=event item=item var=var %} {% endif %}
@@ -366,7 +366,7 @@ {% endif %}
{% else %} - {% include "pretixpresale/event/fragment_availability.html" with price=item.display_price.gross avail=item.cached_availability.0 event=event item=item var=0 %} + {% include "pretixpresale/event/fragment_availability.html" with price=item.display_price.gross original_price=item.original_price.gross avail=item.cached_availability.0 event=event item=item var=0 %} {% endif %}
diff --git a/src/pretix/presale/templates/pretixpresale/event/fragment_availability.html b/src/pretix/presale/templates/pretixpresale/event/fragment_availability.html index bd9f326ce..176d155dc 100644 --- a/src/pretix/presale/templates/pretixpresale/event/fragment_availability.html +++ b/src/pretix/presale/templates/pretixpresale/event/fragment_availability.html @@ -19,10 +19,10 @@
{% elif avail <= 10 %}
- {% if price != None and not price %} - {% trans "FULLY BOOKED" %} - {% else %} + {% if price or original_price %} {% trans "SOLD OUT" %} + {% else %} + {% trans "FULLY BOOKED" %} {% endif %} {% if allow_waitinglist and item.allow_waitinglist %}
diff --git a/src/pretix/presale/templates/pretixpresale/event/fragment_product_list.html b/src/pretix/presale/templates/pretixpresale/event/fragment_product_list.html index a3834b9d4..0f9ce76a6 100644 --- a/src/pretix/presale/templates/pretixpresale/event/fragment_product_list.html +++ b/src/pretix/presale/templates/pretixpresale/event/fragment_product_list.html @@ -238,7 +238,7 @@ {% endif %}
{% else %} - {% include "pretixpresale/event/fragment_availability.html" with price=var.display_price.gross avail=var.cached_availability.0 event=event item=item var=var %} + {% include "pretixpresale/event/fragment_availability.html" with price=var.display_price.gross original_price=var.original_price.gross avail=var.cached_availability.0 event=event item=item var=var %} {% endif %}
@@ -391,7 +391,7 @@ {% endif %}
{% else %} - {% include "pretixpresale/event/fragment_availability.html" with price=item.display_price.gross avail=item.cached_availability.0 event=event item=item var=0 %} + {% include "pretixpresale/event/fragment_availability.html" with price=item.display_price.gross original_price=item.original_price.gross avail=item.cached_availability.0 event=event item=item var=0 %} {% endif %}
diff --git a/src/pretix/presale/templates/pretixpresale/event/voucher.html b/src/pretix/presale/templates/pretixpresale/event/voucher.html index 556222f22..715e9e2f9 100644 --- a/src/pretix/presale/templates/pretixpresale/event/voucher.html +++ b/src/pretix/presale/templates/pretixpresale/event/voucher.html @@ -255,7 +255,7 @@ {% endif %}
{% else %} - {% include "pretixpresale/event/fragment_availability.html" with price=var.display_price.gross avail=var.cached_availability.0 item=item %} + {% include "pretixpresale/event/fragment_availability.html" with price=var.display_price.gross original_price=var.original_price.gross avail=var.cached_availability.0 item=item %} {% endif %}
@@ -411,7 +411,7 @@ {% endif %}
{% else %} - {% include "pretixpresale/event/fragment_availability.html" with price=item.display_price.gross avail=item.cached_availability.0 item=item %} + {% include "pretixpresale/event/fragment_availability.html" with price=item.display_price.gross original_price=item.original_price.gross avail=item.cached_availability.0 item=item %} {% endif %}
-- 2.54.0 From b4d8e9ccc45c180202fde917592b16d936a958a4 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 7 Apr 2025 14:34:32 +0200 Subject: [PATCH 35/89] Backend event list: Sort event series by their actual dates, like in the frontend (Z#23187301) (#4993) --- .../templates/pretixcontrol/events/index.html | 25 +++++++++++-------- .../pretixcontrol/organizers/detail.html | 25 +++++++++++-------- src/pretix/control/views/main.py | 4 +-- src/pretix/control/views/organizer.py | 4 +-- 4 files changed, 32 insertions(+), 26 deletions(-) diff --git a/src/pretix/control/templates/pretixcontrol/events/index.html b/src/pretix/control/templates/pretixcontrol/events/index.html index 08b32fb9e..ae09794ab 100644 --- a/src/pretix/control/templates/pretixcontrol/events/index.html +++ b/src/pretix/control/templates/pretixcontrol/events/index.html @@ -110,23 +110,26 @@ {% if not hide_orga %}
{% endif %}
' + strings['days']['MO'] + '' + strings['days']['TU'] + '' + strings['days']['WE'] + '' + strings['days']['TH'] + '' + strings['days']['FR'] + '' + strings['days']['SA'] + '' + strings['days']['SU'] + '' + strings['days']['MO'] + '' + strings['days']['TU'] + '' + strings['days']['WE'] + '' + strings['days']['TH'] + '' + strings['days']['FR'] + '' + strings['days']['SA'] + '' + strings['days']['SU'] + '
{{ e.organizer }} {% if e.has_subevents %} - {{ e.min_from|default_if_none:""|date:"SHORT_DATETIME_FORMAT" }} + + {% trans "Event series" %} +
+ + {% if e.min_from %} + {{ e.min_from|date:"SHORT_DATETIME_FORMAT" }} –
+ {{ e.max_fromto|default_if_none:e.max_to|default_if_none:e.max_from|date:"SHORT_DATETIME_FORMAT" }} + {% else %} + {% trans "No dates" context "subevent" %} + {% endif %} +
{% else %} {{ e.get_short_date_from_display }} - {% endif %} - {% if e.has_subevents %} - {% trans "Series" %} - {% endif %} - {% if e.settings.show_date_to and e.date_to %} - –
- {% if e.has_subevents %} - {{ e.max_fromto|default_if_none:e.max_from|default_if_none:e.max_to|default_if_none:""|date:"SHORT_DATETIME_FORMAT" }} - {% else %} + {% if e.settings.show_date_to and e.date_to %} + –
{{ e.get_short_date_to_display }} {% endif %} {% endif %} {% if e.settings.timezone != request.timezone %} - + {% endif %}
diff --git a/src/pretix/control/templates/pretixcontrol/organizers/detail.html b/src/pretix/control/templates/pretixcontrol/organizers/detail.html index 2d865bd25..7c2373e72 100644 --- a/src/pretix/control/templates/pretixcontrol/organizers/detail.html +++ b/src/pretix/control/templates/pretixcontrol/organizers/detail.html @@ -86,23 +86,26 @@ {% if e.has_subevents %} - {{ e.min_from|default_if_none:""|date:"SHORT_DATETIME_FORMAT" }} + + {% trans "Event series" %} +
+ + {% if e.min_from %} + {{ e.min_from|date:"SHORT_DATETIME_FORMAT" }} –
+ {{ e.max_fromto|default_if_none:e.max_to|default_if_none:e.max_from|date:"SHORT_DATETIME_FORMAT" }} + {% else %} + {% trans "No dates" context "subevent" %} + {% endif %} +
{% else %} {{ e.get_short_date_from_display }} - {% endif %} - {% if e.has_subevents %} - {% trans "Series" %} - {% endif %} - {% if e.settings.show_date_to and e.date_to %} - –
- {% if e.has_subevents %} - {{ e.max_fromto|default_if_none:e.max_from|default_if_none:e.max_to|default_if_none:""|date:"SHORT_DATETIME_FORMAT" }} - {% else %} + {% if e.settings.show_date_to and e.date_to %} + –
{{ e.get_short_date_to_display }} {% endif %} {% endif %} {% if e.settings.timezone != request.timezone %} - + {% endif %}
diff --git a/src/pretix/control/views/main.py b/src/pretix/control/views/main.py index 0233e63d1..1f1b24caf 100644 --- a/src/pretix/control/views/main.py +++ b/src/pretix/control/views/main.py @@ -81,9 +81,9 @@ class EventList(PaginationMixin, ListView): max_to=Max('subevents__date_to'), max_fromto=Greatest(Max('subevents__date_to'), Max('subevents__date_from')) ).annotate( - order_from=Coalesce('min_from', 'date_from'), + order_from=Coalesce('max_from', 'date_from'), order_to=Coalesce('max_fromto', 'max_to', 'max_from', 'date_to', 'date_from'), - ) + ).order_by("-order_from") qs = qs.prefetch_related( Prefetch('quotas', diff --git a/src/pretix/control/views/organizer.py b/src/pretix/control/views/organizer.py index f16546e9f..dba56b546 100644 --- a/src/pretix/control/views/organizer.py +++ b/src/pretix/control/views/organizer.py @@ -206,9 +206,9 @@ class OrganizerDetail(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin max_to=Max('subevents__date_to'), max_fromto=Greatest(Max('subevents__date_to'), Max('subevents__date_from')) ).annotate( - order_from=Coalesce('min_from', 'date_from'), + order_from=Coalesce('max_from', 'date_from'), order_to=Coalesce('max_fromto', 'max_to', 'max_from', 'date_to', 'date_from'), - ) + ).order_by("-order_from") if self.filter_form.is_valid(): qs = self.filter_form.filter_qs(qs) return qs -- 2.54.0 From 8c3ac46ddfb3c76b08839f0cd82a3aabf8e95cc7 Mon Sep 17 00:00:00 2001 From: luelista Date: Mon, 7 Apr 2025 15:19:54 +0200 Subject: [PATCH 36/89] Fix bug in Question.clean_answer (#4987) --- src/pretix/base/models/items.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pretix/base/models/items.py b/src/pretix/base/models/items.py index 35deab286..82186e28d 100644 --- a/src/pretix/base/models/items.py +++ b/src/pretix/base/models/items.py @@ -1836,7 +1836,7 @@ class Question(LoggedModel): )) llen = len(answer.split(',')) elif all(isinstance(o, QuestionOption) for o in answer): - return o + return answer else: l_ = list(self.options.filter( Q(pk__in=[a for a in answer if isinstance(a, int) or a.isdigit()]) | -- 2.54.0 From 12f4473fbdc5da745ff644f2e6852dea969db84c Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Mon, 7 Apr 2025 15:31:07 +0200 Subject: [PATCH 37/89] Fix checkin-list-filter test randomly matching secret --- src/tests/control/test_checkins.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tests/control/test_checkins.py b/src/tests/control/test_checkins.py index 15c803eff..45cb19d19 100644 --- a/src/tests/control/test_checkins.py +++ b/src/tests/control/test_checkins.py @@ -221,7 +221,7 @@ def checkin_list_env(): item=item_ticket, variation=None, price=Decimal("23"), - attendee_name_parts={'full_name': "a4"}, # a3 attendee is a4 + attendee_name_parts={'full_name': "a4attendee"}, # a3 attendee is a4attendee attendee_email="a3company@dummy.test" ) @@ -267,7 +267,7 @@ def test_checkins_list_ordering(client, checkin_list_env, order_key, expected): ('status=3&item=&user=', ['A3Ticket']), ('status=&item=&user=a3dummy', ['A3Ticket']), # match order email ('status=&item=&user=a3dummy', ['A3Ticket']), # match order email, - ('status=&item=&user=a4', ['A3Ticket']), # match attendee name + ('status=&item=&user=a4attendee', ['A3Ticket']), # match attendee name ('status=&item=&user=a3company', ['A3Ticket']), # match attendee email ('status=1&item=&user=a3company', ['A3Ticket']), ]) -- 2.54.0 From 9844ffca98dc2dc2a6fc7a2f68c50635c64ec44a Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 7 Apr 2025 17:37:55 +0200 Subject: [PATCH 38/89] Discounts: Fix incorrect test for subevent date limitation (#4991) If two discounts match the same products, the first one wins. Therefore, the one we want to win in the test must always come last, otherwise the test is not actually testing anything. In this case, this is highlighted by the fact that the test does not pass in diffrent orders of discounts unless we subtract a second from the date, because we compare with <=, not <. --- src/tests/base/test_pricing_discount.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/tests/base/test_pricing_discount.py b/src/tests/base/test_pricing_discount.py index fe1327ca2..5b7dc801e 100644 --- a/src/tests/base/test_pricing_discount.py +++ b/src/tests/base/test_pricing_discount.py @@ -1071,11 +1071,11 @@ def test_subevent_date_from(event, item, subevent): @scopes_disabled() def test_subevent_date_until(event, item, subevent): subevent_date = subevent.date_from # prevent test timing errors - d1 = Discount(event=event, condition_min_count=2, benefit_discount_matching_percent=20, - subevent_date_until=subevent_date + timedelta(days=1)) + d1 = Discount(event=event, condition_min_count=2, benefit_discount_matching_percent=50, + subevent_date_until=subevent_date - timedelta(seconds=1)) d1.save() - d2 = Discount(event=event, condition_min_count=2, benefit_discount_matching_percent=50, - subevent_date_until=subevent_date) + d2 = Discount(event=event, condition_min_count=2, benefit_discount_matching_percent=20, + subevent_date_until=subevent_date + timedelta(days=1)) d2.save() # (item_id, subevent_id, subevent_date_from, line_price_gross, is_addon_to, is_bundled, voucher_discount) -- 2.54.0 From ea955c779e5e268e9ed294c38e31a5af416122ba Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Tue, 8 Apr 2025 20:40:18 +0200 Subject: [PATCH 39/89] Fix image size in help-text for logo-images --- src/pretix/base/settings.py | 6 ++++-- src/pretix/control/forms/organizer.py | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/pretix/base/settings.py b/src/pretix/base/settings.py index 722be491e..6d5a24b9f 100644 --- a/src/pretix/base/settings.py +++ b/src/pretix/base/settings.py @@ -2883,7 +2883,8 @@ Your {organizer} team""")) # noqa: W291 ext_whitelist=settings.FILE_UPLOAD_EXTENSIONS_IMAGE, max_size=settings.FILE_UPLOAD_MAX_SIZE_IMAGE, help_text=_('If you provide a logo image, we will by default not show your event name and date ' - 'in the page header. By default, we show your logo with a size of up to 1140x120 pixels. You ' + 'in the page header. If you use a white background, we show your logo with a size of up ' + 'to 1140x120 pixels. Otherwise the maximum size is 1120x120 pixels. You ' 'can increase the size with the setting below. We recommend not using small details on the picture ' 'as it will be resized on smaller screens.') ), @@ -2926,7 +2927,8 @@ Your {organizer} team""")) # noqa: W291 ext_whitelist=settings.FILE_UPLOAD_EXTENSIONS_IMAGE, max_size=settings.FILE_UPLOAD_MAX_SIZE_IMAGE, help_text=_('If you provide a logo image, we will by default not show your organization name ' - 'in the page header. By default, we show your logo with a size of up to 1140x120 pixels. You ' + 'in the page header. If you use a white background, we show your logo with a size of up ' + 'to 1140x120 pixels. Otherwise the maximum size is 1120x120 pixels. You ' 'can increase the size with the setting below. We recommend not using small details on the picture ' 'as it will be resized on smaller screens.') ), diff --git a/src/pretix/control/forms/organizer.py b/src/pretix/control/forms/organizer.py index 2cef1c657..8978eb20e 100644 --- a/src/pretix/control/forms/organizer.py +++ b/src/pretix/control/forms/organizer.py @@ -522,7 +522,8 @@ class OrganizerSettingsForm(SettingsForm): max_size=settings.FILE_UPLOAD_MAX_SIZE_IMAGE, required=False, help_text=_('If you provide a logo image, we will by default not show your organization name ' - 'in the page header. By default, we show your logo with a size of up to 1140x120 pixels. You ' + 'in the page header. If you use a white background, we show your logo with a size of up ' + 'to 1140x120 pixels. Otherwise the maximum size is 1120x120 pixels. You ' 'can increase the size with the setting below. We recommend not using small details on the picture ' 'as it will be resized on smaller screens.') ) -- 2.54.0 From 2bb324f88578d30cd4b134ef6bb645fbcd2ca8ec Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Wed, 9 Apr 2025 14:38:27 +0200 Subject: [PATCH 40/89] Fix datepicker locale when using min/max --- src/pretix/static/pretixpresale/js/ui/cart.js | 2 -- src/pretix/static/pretixpresale/js/ui/main.js | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pretix/static/pretixpresale/js/ui/cart.js b/src/pretix/static/pretixpresale/js/ui/cart.js index e0c595edc..98a192558 100644 --- a/src/pretix/static/pretixpresale/js/ui/cart.js +++ b/src/pretix/static/pretixpresale/js/ui/cart.js @@ -69,8 +69,6 @@ var cart = { $(function () { "use strict"; - moment.locale($("body").attr("data-locale").substr(0, 2)); - if ($("#cart-deadline").length) { cart.init(); } diff --git a/src/pretix/static/pretixpresale/js/ui/main.js b/src/pretix/static/pretixpresale/js/ui/main.js index 869dd946d..fe94fc876 100644 --- a/src/pretix/static/pretixpresale/js/ui/main.js +++ b/src/pretix/static/pretixpresale/js/ui/main.js @@ -328,6 +328,7 @@ $(function () { "use strict"; $("body").removeClass("nojs"); + moment.locale($("body").attr("data-datetimelocale")); var scrollpos = sessionStorage ? sessionStorage.getItem('scrollpos') : 0; if (scrollpos) { -- 2.54.0 From 9608c7aa151a68cf08f81a9950d1c066198389bf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Apr 2025 18:06:13 +0200 Subject: [PATCH 41/89] Bump qrcode from 8.0 to 8.1 (#5003) Bumps [qrcode](https://github.com/lincolnloop/python-qrcode) from 8.0 to 8.1. - [Changelog](https://github.com/lincolnloop/python-qrcode/blob/main/CHANGES.rst) - [Commits](https://github.com/lincolnloop/python-qrcode/commits) --- updated-dependencies: - dependency-name: qrcode dependency-version: '8.1' dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 3ce622298..c6f887823 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -87,7 +87,7 @@ dependencies = [ "pytz", "pytz-deprecation-shim==0.1.*", "pyuca", - "qrcode==8.0", + "qrcode==8.1", "redis==5.2.*", "reportlab==4.3.*", "requests==2.31.*", -- 2.54.0 From ac2b1186d10b5e2cbbe369479359b347c1b13d91 Mon Sep 17 00:00:00 2001 From: Menaouer Chaabi <98581961+DerJimno@users.noreply.github.com> Date: Sun, 6 Apr 2025 16:16:38 +0200 Subject: [PATCH 42/89] Translations: Update Arabic Currently translated at 63.2% (3711 of 5863 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ar/ powered by weblate --- src/pretix/locale/ar/LC_MESSAGES/django.po | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/pretix/locale/ar/LC_MESSAGES/django.po b/src/pretix/locale/ar/LC_MESSAGES/django.po index a9d3f7857..ebc997588 100644 --- a/src/pretix/locale/ar/LC_MESSAGES/django.po +++ b/src/pretix/locale/ar/LC_MESSAGES/django.po @@ -8,8 +8,9 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:44+0000\n" -"PO-Revision-Date: 2025-02-21 19:00+0000\n" -"Last-Translator: anonymous \n" +"PO-Revision-Date: 2025-04-06 23:00+0000\n" +"Last-Translator: Menaouer Chaabi <98581961+DerJimno@users.noreply.github.com>" +"\n" "Language-Team: Arabic \n" "Language: ar\n" @@ -18,7 +19,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 5.10\n" +"X-Generator: Weblate 5.10.4\n" #: pretix/_base_settings.py:87 msgid "English" @@ -452,10 +453,8 @@ msgid "Order expired" msgstr "الطلب منتهي الصلاحية" #: pretix/api/webhooks.py:261 -#, fuzzy -#| msgid "The order's expiry date has been changed." msgid "Order expiry date changed" -msgstr "تم تغيير تاريخ انتهاء النظام و." +msgstr "تم تغيير تاريخ نهاية الطلب" #: pretix/api/webhooks.py:265 pretix/base/notifications.py:269 msgid "Order information changed" -- 2.54.0 From 1e3b924998c24019d60ebc4904aac9947b8c731c Mon Sep 17 00:00:00 2001 From: Menaouer Chaabi <98581961+DerJimno@users.noreply.github.com> Date: Tue, 8 Apr 2025 11:12:38 +0200 Subject: [PATCH 43/89] Translations: Update Arabic Currently translated at 63.3% (3712 of 5863 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ar/ powered by weblate --- src/pretix/locale/ar/LC_MESSAGES/django.po | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/pretix/locale/ar/LC_MESSAGES/django.po b/src/pretix/locale/ar/LC_MESSAGES/django.po index ebc997588..1526a1105 100644 --- a/src/pretix/locale/ar/LC_MESSAGES/django.po +++ b/src/pretix/locale/ar/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:44+0000\n" -"PO-Revision-Date: 2025-04-06 23:00+0000\n" +"PO-Revision-Date: 2025-04-08 18:00+0000\n" "Last-Translator: Menaouer Chaabi <98581961+DerJimno@users.noreply.github.com>" "\n" "Language-Team: Arabic Date: Wed, 9 Apr 2025 07:53:37 +0200 Subject: [PATCH 44/89] Translations: Update Korean Currently translated at 15.0% (883 of 5863 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ko/ powered by weblate --- src/pretix/locale/ko/LC_MESSAGES/django.po | 197 ++++++++++++--------- 1 file changed, 110 insertions(+), 87 deletions(-) diff --git a/src/pretix/locale/ko/LC_MESSAGES/django.po b/src/pretix/locale/ko/LC_MESSAGES/django.po index a30d9d058..94f0fe7f5 100644 --- a/src/pretix/locale/ko/LC_MESSAGES/django.po +++ b/src/pretix/locale/ko/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:44+0000\n" -"PO-Revision-Date: 2025-04-02 10:00+0000\n" +"PO-Revision-Date: 2025-04-09 10:00+0000\n" "Last-Translator: 조정화 \n" "Language-Team: Korean \n" @@ -439,7 +439,7 @@ msgstr "결제된 것으로 표시된 주문" #: pretix/control/templates/pretixcontrol/event/mail.html:114 #: pretix/control/views/orders.py:1570 msgid "Order canceled" -msgstr "주문취소" +msgstr "취소된 주문" #: pretix/api/webhooks.py:253 pretix/base/notifications.py:257 msgid "Order reactivated" @@ -2548,7 +2548,7 @@ msgstr "총 할당량" #: pretix/control/templates/pretixcontrol/event/cancel.html:20 #: pretix/control/views/item.py:958 msgid "Paid orders" -msgstr "유료주문" +msgstr "유료 주문" #: pretix/base/exporters/orderlist.py:1134 pretix/control/views/item.py:963 msgid "Pending orders" @@ -2710,7 +2710,7 @@ msgstr "보고 시점으로 기본 설정되어 있습니다." #: pretix/plugins/reports/accountingreport.py:104 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_list.html:67 msgid "All" -msgstr "전체" +msgstr "전부" #: pretix/base/exporters/orderlist.py:1306 pretix/control/forms/filter.py:1421 msgid "Live" @@ -3510,7 +3510,7 @@ msgstr "여러 개의 일치하는 제품이 발견되었습니다." #: pretix/base/modelimport_vouchers.py:205 pretix/base/models/items.py:1256 #: pretix/base/models/vouchers.py:263 pretix/base/models/waitinglist.py:99 msgid "Product variation" -msgstr "제품 변형" +msgstr "상품 변동" #: pretix/base/modelimport_orders.py:159 #: pretix/base/modelimport_vouchers.py:225 @@ -3892,11 +3892,11 @@ msgstr "항목" #: pretix/base/models/checkin.py:337 msgid "Exit" -msgstr "출입구" +msgstr "출구" #: pretix/base/models/checkin.py:355 msgid "Unknown ticket" -msgstr "무명인 티켓" +msgstr "알 수 없는 티켓입니다" #: pretix/base/models/checkin.py:356 msgid "Ticket not paid" @@ -3908,7 +3908,7 @@ msgstr "관습 규칙에 의해 금지됨" #: pretix/base/models/checkin.py:358 msgid "Ticket code revoked/changed" -msgstr "티켓 코드가 취소/변경되었습니다" +msgstr "티켓코드가 변경/취소되었습니다" #: pretix/base/models/checkin.py:359 msgid "Information required" @@ -3916,15 +3916,15 @@ msgstr "필수 정보" #: pretix/base/models/checkin.py:360 msgid "Ticket already used" -msgstr "이미 사용된 티켓" +msgstr "이미 사용된 티켓입니다" #: pretix/base/models/checkin.py:361 msgid "Ticket type not allowed here" -msgstr "여기서는 티켓 유형이 허용되지 않습니다" +msgstr "여기에서는 티켓 형이 허용되지 않습니다" #: pretix/base/models/checkin.py:362 msgid "Ticket code is ambiguous on list" -msgstr "티켓 코드가 목록에 모호합니다" +msgstr "티켓코드가 명부에서 확인되지 않습니다" #: pretix/base/models/checkin.py:363 msgid "Server error" @@ -3932,11 +3932,11 @@ msgstr "서버 에러" #: pretix/base/models/checkin.py:364 msgid "Ticket blocked" -msgstr "차단된 티켓" +msgstr "차단된 티켓입니다" #: pretix/base/models/checkin.py:365 msgid "Order not approved" -msgstr "주문이 승인되지 않았습니다" +msgstr "승인되지 않은 주문입니다" #: pretix/base/models/checkin.py:366 msgid "Ticket not valid at this time" @@ -4053,7 +4053,7 @@ msgstr "이 식별자는 이미 다른 질문에 사용되고 있습니다." #: pretix/control/templates/pretixcontrol/organizers/gates.html:16 #: pretix/plugins/checkinlists/exporters.py:765 msgid "Gate" -msgstr "개찰구" +msgstr "탑승구" #: pretix/base/models/devices.py:131 #: pretix/control/templates/pretixcontrol/organizers/devices.html:83 @@ -4909,19 +4909,19 @@ msgstr "이 제품은 다음과 같은 유형의 멤버십을 생성합니다" msgid "" "The duration of the membership is the same as the duration of the event or " "event series date" -msgstr "" +msgstr "멤버십 기간은 이벤트 또는 이벤트 시리즈 날짜의 기간과 동일합니다" #: pretix/base/models/items.py:717 msgid "Membership duration in days" -msgstr "" +msgstr "멤버십 기간(일)" #: pretix/base/models/items.py:721 msgid "Membership duration in months" -msgstr "" +msgstr "멤버십 기간(개월)" #: pretix/base/models/items.py:728 msgid "Validity" -msgstr "" +msgstr "유효성" #: pretix/base/models/items.py:730 msgid "" @@ -4934,50 +4934,56 @@ msgid "" "change the settings here later, existing tickets will not be affected by the " "change but keep their current validity." msgstr "" +"정기 이벤트 또는 시간 슬롯이 있는 이벤트 시리즈를 설정할 때 일반적으로 이 " +"값을 변경할 필요가 없습니다. 기본 설정은 티켓의 유효 시간이 제품이 아닌 " +"이벤트 및 체크인 구성에 의해 결정된다는 것을 의미합니다. 다른 옵션은 동적 " +"시작 날짜가 있는 1년짜리 티켓 예약과 같이 실현해야 하는 경우에만 사용하세요. " +"유효 기간은 티켓과 함께 저장되므로 나중에 설정을 변경하면 기존 티켓은 변경의 " +"영향을 받지 않고 현재 유효 기간을 유지합니다." #: pretix/base/models/items.py:738 pretix/control/forms/item.py:729 msgid "Start of validity" -msgstr "" +msgstr "유효성 시작" #: pretix/base/models/items.py:739 msgid "End of validity" -msgstr "" +msgstr "유효 기간 종료" #: pretix/base/models/items.py:742 msgid "Minutes" -msgstr "" +msgstr "분" #: pretix/base/models/items.py:746 msgid "Hours" -msgstr "" +msgstr "시간" #: pretix/base/models/items.py:750 msgid "Days" -msgstr "" +msgstr "날" #: pretix/base/models/items.py:754 msgid "Months" -msgstr "" +msgstr "달" #: pretix/base/models/items.py:757 msgid "Customers can select the validity start date" -msgstr "" +msgstr "고객은 유효한 시작 날짜를 선택할 수 있습니다" #: pretix/base/models/items.py:758 msgid "If not selected, the validity always starts at the time of purchase." -msgstr "" +msgstr "선택하지 않으면 유효성은 항상 구매 시에 시작됩니다." #: pretix/base/models/items.py:763 msgid "Maximum future start" -msgstr "" +msgstr "최대치의 미래 시작" #: pretix/base/models/items.py:764 msgid "The selected start date may only be this many days in the future." -msgstr "" +msgstr "선택한 시작 날짜는 앞으로 이 정도일 수 있습니다." #: pretix/base/models/items.py:770 msgid "Reusable media policy" -msgstr "" +msgstr "재사용 가능한 미디어 정책" #: pretix/base/models/items.py:772 msgid "" @@ -4988,10 +4994,15 @@ msgid "" "feature that also requires specific configuration of ticketing and printing " "settings." msgstr "" +"이 제품을 재사용 가능한 물리적 매체에 보관해야 하는 경우 물리적 미디어 " +"정책을 첨부할 수 있습니다. 일회용 바코드만 사용하는 일반 티켓에는 필요하지 " +"않으며, 재생 시즌 티켓이나 충전식 기프트 카드 손목밴드와 같은 제품에만 " +"필요합니다. 이 기능은 티켓팅 및 인쇄 설정의 특정 구성도 필요로 하는 고급 " +"기능입니다." #: pretix/base/models/items.py:782 msgid "Reusable media type" -msgstr "" +msgstr "재사용 가능한 미디어 유형" #: pretix/base/models/items.py:784 msgid "" @@ -4999,6 +5010,9 @@ msgid "" "Note that not all media types support all types of products, and not all " "media types are supported across all sales channels or check-in processes." msgstr "" +"이 제품에 사용할 물리적 매체 유형을 선택합니다. 모든 미디어 유형이 모든 " +"유형의 제품을 지원하는 것은 아니며, 모든 판매 채널 또는 체크인 프로세스에서 " +"모든 미디어 유형이 지원되는 것도 아닙니다." #: pretix/base/models/items.py:795 pretix/base/models/items.py:1701 #: pretix/control/forms/filter.py:421 pretix/control/forms/filter.py:1895 @@ -5016,26 +5030,27 @@ msgstr "" #: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:31 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_list.html:32 msgid "Products" -msgstr "" +msgstr "상품" #: pretix/base/models/items.py:988 msgid "" "If you select a reusable media policy, you also need to select a reusable " "media type." -msgstr "" +msgstr "사용 가능한 미디어 정책을 선택할 경우, 재사용 가능한 미디어 유형도 선택해야 " +"합니다." #: pretix/base/models/items.py:992 msgid "The selected media type is not enabled in your organizer settings." -msgstr "" +msgstr "선택한 미디어 유형이 정리함 설정에서 활성화되지 않았습니다." #: pretix/base/models/items.py:994 msgid "The selected media type does not support usage for tickets currently." -msgstr "" +msgstr "선택한 미디어 유형이 현재 티켓 사용을 지원하지 않습니다" #: pretix/base/models/items.py:996 msgid "" "The selected media type does not support usage for gift cards currently." -msgstr "" +msgstr "선택한 미디어 유형은 현재 기프트 카드 사용을 지원하지 않습니다." #: pretix/base/models/items.py:998 msgid "" @@ -5043,32 +5058,35 @@ msgid "" "Instead, gift cards for some reusable media types can be created or re-" "charged directly at the POS." msgstr "" +"현재 재사용 가능한 미디어 정책으로 기프트 카드를 만들 수 없습니다. 대신 일부 " +"재사용 가능한 미디어 유형의 기프트 카드는 POS에서 직접 만들거나 충전할 수 " +"있습니다." #: pretix/base/models/items.py:1006 msgid "" "The maximum number per order can not be lower than the minimum number per " "order." -msgstr "" +msgstr "주문당 최대 수는 주문당 최소 수보다 적을 수 없습니다." #: pretix/base/models/items.py:1012 msgid "The item's category must belong to the same event as the item." -msgstr "" +msgstr "항목의 카테고리는 항목과 동일한 이벤트에 속해야 합니다." #: pretix/base/models/items.py:1017 msgid "The item's tax rule must belong to the same event as the item." -msgstr "" +msgstr "항목의 세금 규정은 항목과 동일한 이벤트에 속해야 합니다." #: pretix/base/models/items.py:1023 msgid "The item's availability cannot end before it starts." -msgstr "" +msgstr "항목의 가용성은 시작하기 전에 종료될 수 없습니다." #: pretix/base/models/items.py:1155 msgid "This is shown below the variation name in lists." -msgstr "" +msgstr "이것은 목록의 변형 이름 아래에 나와 있습니다." #: pretix/base/models/items.py:1182 msgid "Require approval" -msgstr "" +msgstr "승인 필요" #: pretix/base/models/items.py:1184 msgid "" @@ -5077,24 +5095,27 @@ msgid "" "paid and completed. You can use this e.g. for discounted tickets that are " "only available to specific groups." msgstr "" +"이 변형이 주문의 일부인 경우, 주문은 \"승인\" 상태가 되며 결제 및 완료되기 " +"전에 사용자의 확인이 필요합니다. 예를 들어 특정 그룹만 이용할 수 있는 할인 " +"티켓의 경우 이를 사용할 수 있습니다." #: pretix/base/models/items.py:1194 pretix/control/navigation.py:579 #: pretix/control/templates/pretixcontrol/organizers/membershiptypes.html:4 #: pretix/control/templates/pretixcontrol/organizers/membershiptypes.html:6 msgid "Membership types" -msgstr "" +msgstr "멥버쉽 유형" #: pretix/base/models/items.py:1206 msgid "This variation will not be sold before the given date." -msgstr "" +msgstr "이 변형 제품은 지정된 날짜 이전에 판매되지 않습니다." #: pretix/base/models/items.py:1216 msgid "This variation will not be sold after the given date." -msgstr "" +msgstr "이 변형 제품은 지정된 날짜 이후에는 판매되지 않습니다." #: pretix/base/models/items.py:1224 msgid "Sell on all sales channels the product is sold on" -msgstr "" +msgstr "제품이 판매되는 모든 판매 채널에서 판매하기" #: pretix/base/models/items.py:1230 msgid "" @@ -5513,7 +5534,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:34 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:45 msgid "Canceled" -msgstr "" +msgstr "취소하다" #: pretix/base/models/memberships.py:134 #: pretix/control/templates/pretixcontrol/organizers/customer.html:116 @@ -6247,7 +6268,7 @@ msgstr "" #: pretix/base/models/vouchers.py:201 pretix/control/views/vouchers.py:120 msgid "Redeemed" -msgstr "" +msgstr "상환하다" #: pretix/base/models/vouchers.py:206 msgid "" @@ -7264,15 +7285,15 @@ msgstr "" #: pretix/base/reldate.py:35 msgid "Event start" -msgstr "" +msgstr "이벤트 시작" #: pretix/base/reldate.py:36 msgid "Event end" -msgstr "" +msgstr "이벤트 종료" #: pretix/base/reldate.py:37 msgid "Event admission" -msgstr "" +msgstr "이벤트 입장" #: pretix/base/reldate.py:38 msgid "Presale start" @@ -12240,7 +12261,7 @@ msgstr "" #: pretix/plugins/reports/exporters.py:380 #: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:7 msgid "Approval pending" -msgstr "" +msgstr "승인 대기중" #: pretix/control/forms/filter.py:241 msgid "Follow-up configured" @@ -12393,7 +12414,7 @@ msgstr "" #: pretix/control/forms/filter.py:2025 pretix/control/forms/filter.py:2027 #: pretix/control/forms/filter.py:2593 pretix/control/forms/filter.py:2595 msgid "Search query" -msgstr "" +msgstr "질문을 검색하다" #: pretix/control/forms/filter.py:1499 pretix/control/forms/filter.py:1571 #: pretix/control/templates/pretixcontrol/organizers/customer.html:46 @@ -12507,7 +12528,7 @@ msgstr "" #: pretix/control/forms/filter.py:2090 msgid "Valid" -msgstr "" +msgstr "유효하다" #: pretix/control/forms/filter.py:2091 msgid "Unredeemed" @@ -15567,7 +15588,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/event/order_pay_change.html:66 #: pretix/presale/templates/pretixpresale/event/position_change.html:29 msgid "Continue" -msgstr "" +msgstr "계속" #: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html:8 msgid "Authorize an application" @@ -16037,7 +16058,7 @@ msgstr[0] "" #: pretix/presale/templates/pretixpresale/event/position_change.html:24 #: pretix/presale/templates/pretixpresale/event/position_modify.html:44 msgid "Cancel" -msgstr "" +msgstr "취소" #: pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html:27 #: pretix/control/templates/pretixcontrol/checkin/list_delete.html:24 @@ -16151,7 +16172,7 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:14 #: pretix/plugins/checkinlists/exporters.py:766 msgid "Result" -msgstr "" +msgstr "결과" #: pretix/control/templates/pretixcontrol/checkin/checkins.html:78 #: pretix/control/templates/pretixcontrol/order/index.html:392 @@ -16447,7 +16468,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/checkin/simulator.html:68 msgid "Additional information required" -msgstr "" +msgstr "추가 정보가 필요합니다" #: pretix/control/templates/pretixcontrol/checkin/simulator.html:70 msgid "" @@ -17177,7 +17198,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/organizers/device_logs.html:50 #: pretix/control/templates/pretixcontrol/organizers/logs.html:80 msgid "No results" -msgstr "" +msgstr "결과 없음" #: pretix/control/templates/pretixcontrol/event/mail.html:7 #: pretix/control/templates/pretixcontrol/organizers/mail.html:11 @@ -17377,7 +17398,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/event/plugins.html:34 msgid "Search results" -msgstr "" +msgstr "검색 결과" #: pretix/control/templates/pretixcontrol/event/plugins.html:56 msgid "Top recommendation" @@ -18156,51 +18177,51 @@ msgstr "" #: pretix/control/templates/pretixcontrol/global_sysreport.html:16 msgid "January" -msgstr "" +msgstr "1월" #: pretix/control/templates/pretixcontrol/global_sysreport.html:17 msgid "February" -msgstr "" +msgstr "2월" #: pretix/control/templates/pretixcontrol/global_sysreport.html:18 msgid "March" -msgstr "" +msgstr "3월" #: pretix/control/templates/pretixcontrol/global_sysreport.html:19 msgid "April" -msgstr "" +msgstr "4월" #: pretix/control/templates/pretixcontrol/global_sysreport.html:20 msgid "May" -msgstr "" +msgstr "5월" #: pretix/control/templates/pretixcontrol/global_sysreport.html:21 msgid "June" -msgstr "" +msgstr "6월" #: pretix/control/templates/pretixcontrol/global_sysreport.html:22 msgid "July" -msgstr "" +msgstr "7월" #: pretix/control/templates/pretixcontrol/global_sysreport.html:23 msgid "August" -msgstr "" +msgstr "8월" #: pretix/control/templates/pretixcontrol/global_sysreport.html:24 msgid "September" -msgstr "" +msgstr "9월" #: pretix/control/templates/pretixcontrol/global_sysreport.html:25 msgid "October" -msgstr "" +msgstr "10월" #: pretix/control/templates/pretixcontrol/global_sysreport.html:26 msgid "November" -msgstr "" +msgstr "11월" #: pretix/control/templates/pretixcontrol/global_sysreport.html:27 msgid "December" -msgstr "" +msgstr "12일" #: pretix/control/templates/pretixcontrol/global_sysreport.html:32 msgid "Generate report" @@ -18558,7 +18579,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk.html:355 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:364 msgid "minutes" -msgstr "" +msgstr "회의록" #: pretix/control/templates/pretixcontrol/item/index.html:217 msgid "hours" @@ -18906,7 +18927,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/items/question.html:91 msgid "Count" -msgstr "" +msgstr "총계" #: pretix/control/templates/pretixcontrol/items/question.html:92 msgid "Percentage" @@ -19795,7 +19816,7 @@ msgstr "" #: pretix/plugins/reports/exporters.py:957 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:456 msgid "Total" -msgstr "" +msgstr "합계" #: pretix/control/templates/pretixcontrol/order/index.html:709 #: pretix/presale/templates/pretixpresale/event/order.html:210 @@ -21977,7 +21998,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/pdf/index.html:485 msgid "Text box" -msgstr "" +msgstr "원문 상자" #: pretix/control/templates/pretixcontrol/pdf/index.html:489 msgid "Text (deprecated)" @@ -25938,7 +25959,7 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:80 msgid "Comment:" -msgstr "" +msgstr "의견" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:98 msgid "No order code detected" @@ -26206,7 +26227,7 @@ msgstr "" #: pretix/plugins/paypal2/payment.py:1082 #: pretix/plugins/paypal2/payment.py:1083 pretix/plugins/stripe/payment.py:1816 msgid "PayPal" -msgstr "" +msgstr "페이팔 (온라인 결제 시스템)" #: pretix/plugins/paypal/apps.py:53 msgid "" @@ -27661,7 +27682,7 @@ msgstr "" #: pretix/plugins/stripe/payment.py:342 pretix/plugins/stripe/payment.py:1527 msgid "iDEAL" -msgstr "" +msgstr "아이디얼 (네덜란드 온라인 뱅킹 결제 시스템)" #: pretix/plugins/stripe/payment.py:344 pretix/plugins/stripe/payment.py:352 #: pretix/plugins/stripe/payment.py:360 pretix/plugins/stripe/payment.py:395 @@ -27681,11 +27702,11 @@ msgstr "" #: pretix/plugins/stripe/payment.py:358 pretix/plugins/stripe/payment.py:1564 msgid "Bancontact" -msgstr "" +msgstr "반콘택트 (벨기에 직불 결제 시스템)" #: pretix/plugins/stripe/payment.py:366 msgid "SEPA Direct Debit" -msgstr "" +msgstr "SEPA 자동이체 (유럽 단일 결제 지역 자동이체 서비스)" #: pretix/plugins/stripe/payment.py:369 msgid "" @@ -27721,11 +27742,12 @@ msgstr "" #: pretix/plugins/stripe/payment.py:409 pretix/plugins/stripe/payment.py:1730 msgid "Przelewy24" -msgstr "" +msgstr "프세레비24 (폴란드 인터넷 뱅킹 기반 결제 서비스)" #: pretix/plugins/stripe/payment.py:417 pretix/plugins/stripe/payment.py:1769 msgid "WeChat Pay" -msgstr "" +msgstr "위챗페이 (중국 모바일 결제 및 디지털 지갑 서비스- OR코드, 인앱, 미니 " +"프로그램 결제 지원)" #: pretix/plugins/stripe/payment.py:433 pretix/plugins/stripe/payment.py:1823 msgid "Swish" @@ -27870,7 +27892,7 @@ msgstr "" #: pretix/plugins/stripe/payment.py:1480 msgid "giropay" -msgstr "" +msgstr "지로페이 (독일 온라인 은행 계좌 이체 서비스)" #: pretix/plugins/stripe/payment.py:1483 msgid "" @@ -28396,7 +28418,7 @@ msgstr "" #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:23 msgid "Ticket design" -msgstr "" +msgstr "티켓 디자인" #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:27 msgid "You can modify the design after you saved this page." @@ -28913,7 +28935,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:31 #: pretix/presale/templates/pretixpresale/event/fragment_cart_box.html:18 msgid "Cart expired" -msgstr "" +msgstr "카트가 만료되었습니다" #: pretix/presale/templates/pretixpresale/event/checkout_base.html:36 msgid "Show full cart" @@ -29547,7 +29569,8 @@ msgstr "" msgid "" "The items in your cart are no longer reserved for you. You can still " "complete your order as long as they’re available." -msgstr "" +msgstr "카트에 있는 상품은 더 이상 예약되지 않습니다. 주문이 가능한 한 주문을 완료할 " +"수 있습니다." #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:497 msgid "Overview of your ordered products." @@ -30970,7 +30993,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/postmessage.html:21 #: pretix/presale/templates/pretixpresale/waiting.html:22 msgid "We are processing your request …" -msgstr "" +msgstr "귀하의 요청을 처리하고 있습니다" #: pretix/presale/utils.py:271 pretix/presale/utils.py:417 #: pretix/presale/utils.py:418 -- 2.54.0 From 54e02da2b3804228a2c1dffd9bb65bb2a716c786 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=EC=A0=95=ED=99=94?= Date: Wed, 9 Apr 2025 04:39:34 +0200 Subject: [PATCH 45/89] Translations: Update Korean Currently translated at 100.0% (236 of 236 strings) Translation: pretix/pretix (JavaScript parts) Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/ko/ powered by weblate --- src/pretix/locale/ko/LC_MESSAGES/djangojs.po | 499 ++++++++++--------- 1 file changed, 263 insertions(+), 236 deletions(-) diff --git a/src/pretix/locale/ko/LC_MESSAGES/djangojs.po b/src/pretix/locale/ko/LC_MESSAGES/djangojs.po index 153fcae9c..87e0f93ce 100644 --- a/src/pretix/locale/ko/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/ko/LC_MESSAGES/djangojs.po @@ -3,136 +3,145 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:46+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"PO-Revision-Date: 2025-04-09 10:00+0000\n" +"Last-Translator: 조정화 \n" +"Language-Team: Korean \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.10.4\n" #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:68 msgid "Marked as paid" -msgstr "" +msgstr "유로로 표시됨" #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:76 msgid "Comment:" -msgstr "" +msgstr "의견" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:34 msgid "PayPal" -msgstr "" +msgstr "페이팔 (온라인 결제 시스템)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35 msgid "Venmo" -msgstr "" +msgstr "벤모 (모바일 간편 송금 서비스-P2P의 개인간 결제 플랫폼)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36 #: pretix/static/pretixpresale/js/walletdetection.js:38 msgid "Apple Pay" -msgstr "" +msgstr "애플 페이 (모바일 간편 결제 시스템 -NFC 기반 전자 지갑 서비스)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37 msgid "Itaú" -msgstr "" +msgstr "이따우 (브라질 대형 민간 은행)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:38 msgid "PayPal Credit" -msgstr "" +msgstr "페이팔 신용 결제 서비스" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39 msgid "Credit Card" -msgstr "" +msgstr "신용카드" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40 msgid "PayPal Pay Later" -msgstr "" +msgstr "페이팔 후불 결제 서비스" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41 msgid "iDEAL" -msgstr "" +msgstr "아이디얼 (네덜란드 온라인 뱅킹 결제 시스템)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42 msgid "SEPA Direct Debit" -msgstr "" +msgstr "SEPA 자동이체 (유럽 단일 결제 지역 자동이체 서비스)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43 msgid "Bancontact" -msgstr "" +msgstr "반콘택트 (벨기에 직불 결제 시스템)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:44 msgid "giropay" -msgstr "" +msgstr "지로페이 (독일 온라인 은행 계좌 이체 서비스)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:45 msgid "SOFORT" -msgstr "" +msgstr "조포르트 (PIN과 TAN 인증을 이용한 유럽 온라인 뱅킹 기반 결제 수단)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46 msgid "eps" -msgstr "" +msgstr "이피에스 (오스트리아 실시간 은행 계좌 이체 결제 서비스)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47 msgid "MyBank" -msgstr "" +msgstr "마이뱅크 (SEPA 기반 온라인 결제 서비스)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48 msgid "Przelewy24" -msgstr "" +msgstr "프세레비24 (폴란드 인터넷 뱅킹 기반 결제 서비스)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49 msgid "Verkkopankki" -msgstr "" +msgstr "핀란드 온라인 뱅킹 결제 시스템" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50 msgid "PayU" -msgstr "" +msgstr "페이유 (인도 및 중남미 글로벌 결제 게이트 웨이, 신용카드,은행 이체, 디지털 " +"지갑의 결제를 지원)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:51 msgid "BLIK" -msgstr "" +msgstr "블릭 (폴란드 모바일 결제 시스템, 앱기반 OR코드/코드 입력 방식 결제 수단)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:52 msgid "Trustly" msgstr "" +"트러스트리 (스웨덴에 본사를 둔 핀테크 기업, 유럽 및 미국의 핀테크 기반으로 " +"무카드 온라인 결제 수단, 실시간 은행 이체 결제 서비스)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:53 msgid "Zimpler" -msgstr "" +msgstr "짐플러 (스웨덴 기반의 온라인 계좌 이체 결제 서비스, 핀테크 기반으로 한 " +"유럽내 디지털 결제 솔루션)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:54 msgid "Maxima" msgstr "" +"막시마 (발트3국-리투아니아, 라트비아, 에스토니아를 중심으로 한 대형 수퍼마켓 " +"체인의 멤버쉽 카드와 앱을 통한 포인트/선불카드 결제 방식)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:55 msgid "OXXO" -msgstr "" +msgstr "멕시코 비은행 고객의 현금 결제를 위한 온라인 현금 결제 수단" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:56 msgid "Boleto" -msgstr "" +msgstr "볼레토 (브라질의 신용카드 없이 온라인 현금 기반 결제 서비스)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:57 msgid "WeChat Pay" -msgstr "" +msgstr "위챗페이 (중국 모바일 결제 및 디지털 지갑 서비스- OR코드, 인앱, 미니 " +"프로그램 결제 지원)" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58 msgid "Mercado Pago" -msgstr "" +msgstr "라틴 아메리카 최대 전자 상거래 플랫폼-온라인, 오프라인 결제, 송금, 투자, " +"신용 다양한 금융 서비스 제공" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50 msgid "Continue" -msgstr "" +msgstr "계속" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244 @@ -141,219 +150,220 @@ msgstr "" #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341 msgid "Confirming your payment …" -msgstr "" +msgstr "결제 확인 중" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:254 msgid "Payment method unavailable" -msgstr "" +msgstr "결제 방법을 사용할 수 없습니다" #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:15 #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39 msgid "Placed orders" -msgstr "" +msgstr "주문 완료" #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:15 #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39 msgid "Paid orders" -msgstr "" +msgstr "유료 주문" #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:27 msgid "Total revenue" -msgstr "" +msgstr "총 수익" #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15 msgid "Contacting Stripe …" -msgstr "" +msgstr "스트라이프(미국의 핀기업 온라인 결제 시스템) 에 문의하기" #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72 msgid "Total" -msgstr "" +msgstr "합계" #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291 msgid "Contacting your bank …" -msgstr "" +msgstr "은행에 문의하기" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30 msgid "Select a check-in list" -msgstr "" +msgstr "확인 목록 선택" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31 msgid "No active check-in lists found." -msgstr "" +msgstr "현재 활성된 확인 목록을 찾을 수 없습니다." #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32 msgid "Switch check-in list" -msgstr "" +msgstr "확인 목록 전환" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33 msgid "Search results" -msgstr "" +msgstr "검색 결과" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34 msgid "No tickets found" -msgstr "" +msgstr "티켓을 찾을 수 없습니다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35 msgid "Result" -msgstr "" +msgstr "결과" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36 msgid "This ticket requires special attention" -msgstr "" +msgstr "이 티켓은 특별한 주의가 필요합니다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37 msgid "Switch direction" -msgstr "" +msgstr "방향 전환" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38 msgid "Entry" -msgstr "" +msgstr "항목" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39 msgid "Exit" -msgstr "" +msgstr "출구" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40 msgid "Scan a ticket or search and press return…" -msgstr "" +msgstr "티켓 스캔 또는 검색 후 반품 버튼을 누릅니다…" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41 msgid "Load more" -msgstr "" +msgstr "더 로드하기" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42 msgid "Valid" -msgstr "" +msgstr "유효하다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43 msgid "Unpaid" -msgstr "" +msgstr "미지급" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45 msgid "Canceled" -msgstr "" +msgstr "취소하다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46 msgid "Confirmed" -msgstr "" +msgstr "확정하다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47 msgid "Approval pending" -msgstr "" +msgstr "승인 대기중" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48 msgid "Redeemed" -msgstr "" +msgstr "상환하다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49 msgid "Cancel" -msgstr "" +msgstr "취소" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60 msgid "Ticket not paid" -msgstr "" +msgstr "미결제 티켓" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52 msgid "This ticket is not yet paid. Do you want to continue anyways?" -msgstr "" +msgstr "이 티켓은 아직 결제되지 않았습니다. 계속하시겠습니까?" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53 msgid "Additional information required" -msgstr "" +msgstr "추가 정보가 필요합니다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54 msgid "Valid ticket" -msgstr "" +msgstr "유효한 티켓" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55 msgid "Exit recorded" -msgstr "" +msgstr "기록이 종료하다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56 msgid "Ticket already used" -msgstr "" +msgstr "이미 사용된 티켓입니다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57 msgid "Information required" -msgstr "" +msgstr "필수 정보" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58 msgid "Unknown ticket" -msgstr "" +msgstr "알 수 없는 티켓입니다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59 msgid "Ticket type not allowed here" -msgstr "" +msgstr "여기에서는 티켓 형이 허용되지 않습니다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61 msgid "Entry not allowed" -msgstr "" +msgstr "항목이 허용되지 않습니다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62 msgid "Ticket code revoked/changed" -msgstr "" +msgstr "티켓코드가 변경/취소되었습니다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63 msgid "Ticket blocked" -msgstr "" +msgstr "차단된 티켓입니다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64 msgid "Ticket not valid at this time" -msgstr "" +msgstr "현재 티켓이 유효하지 않습니다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65 msgid "Order canceled" -msgstr "" +msgstr "취소된 주문" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66 msgid "Ticket code is ambiguous on list" -msgstr "" +msgstr "티켓코드가 명부에서 확인되지 않습니다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67 msgid "Order not approved" -msgstr "" +msgstr "승인되지 않은 주문입니다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68 msgid "Checked-in Tickets" -msgstr "" +msgstr "체크인 티켓입니다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69 msgid "Valid Tickets" -msgstr "" +msgstr "유효한 티켓입니다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70 msgid "Currently inside" -msgstr "" +msgstr "내부적으로 유통되는" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71 #: pretix/static/pretixcontrol/js/ui/question.js:137 #: pretix/static/pretixpresale/js/ui/questions.js:270 msgid "Yes" -msgstr "" +msgstr "예" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72 #: pretix/static/pretixcontrol/js/ui/question.js:138 #: pretix/static/pretixpresale/js/ui/questions.js:270 msgid "No" -msgstr "" +msgstr "아니오" #: pretix/static/lightbox/js/lightbox.js:96 msgid "close" -msgstr "" +msgstr "마감" #: pretix/static/pretixbase/js/asynctask.js:58 #: pretix/static/pretixbase/js/asynctask.js:135 msgid "" "Your request is currently being processed. Depending on the size of your " "event, this might take up to a few minutes." -msgstr "" +msgstr "요청이 현재 처리 중입니다. 이벤트 크기에 따라 최대 몇 분 정도 소요될 수 " +"있습니다." #: pretix/static/pretixbase/js/asynctask.js:63 #: pretix/static/pretixbase/js/asynctask.js:140 msgid "Your request has been queued on the server and will soon be processed." -msgstr "" +msgstr "귀하의 요청이 서버에 대기 중이며 곧 처리될 예정입니다." #: pretix/static/pretixbase/js/asynctask.js:69 #: pretix/static/pretixbase/js/asynctask.js:146 @@ -362,34 +372,37 @@ msgid "" "If this takes longer than two minutes, please contact us or go back in your " "browser and try again." msgstr "" +"귀하의 요청이 서버에 도착했지만 여전히 처리되기를 기다리고 있습니다. 이 " +"작업이 2분 이상 소요되는 경우 저희에게 연락하시거나 브라우저로 돌아가서 다시 " +"시도해 주시기 바랍니다." #: pretix/static/pretixbase/js/asynctask.js:105 #: pretix/static/pretixbase/js/asynctask.js:193 #: pretix/static/pretixbase/js/asynctask.js:198 #: pretix/static/pretixcontrol/js/ui/mail.js:24 msgid "An error of type {code} occurred." -msgstr "" +msgstr "{code} 유형의 오류가 발생했습니다." #: pretix/static/pretixbase/js/asynctask.js:108 msgid "" "We currently cannot reach the server, but we keep trying. Last error code: " "{code}" -msgstr "" +msgstr "현재 서버에 연결할 수 없지만 계속 시도하고 있습니다. 마지막 오류 코드: {code}" #: pretix/static/pretixbase/js/asynctask.js:160 #: pretix/static/pretixcontrol/js/ui/mail.js:21 msgid "The request took too long. Please try again." -msgstr "" +msgstr "요청이 너무 오래 걸렸습니다. 다시 시도해 주세요." #: pretix/static/pretixbase/js/asynctask.js:201 #: pretix/static/pretixcontrol/js/ui/mail.js:26 msgid "" "We currently cannot reach the server. Please try again. Error code: {code}" -msgstr "" +msgstr "현재 서버에 연결할 수 없습니다. 다시 시도해 주세요. 오류 코드: {code}" #: pretix/static/pretixbase/js/asynctask.js:230 msgid "We are processing your request …" -msgstr "" +msgstr "귀하의 요청을 처리하고 있습니다" #: pretix/static/pretixbase/js/asynctask.js:238 msgid "" @@ -397,602 +410,614 @@ msgid "" "than one minute, please check your internet connection and then reload this " "page and try again." msgstr "" +"현재 귀하의 요청을 서버로 전송하고 있습니다. 이 작업이 1분 이상 소요되는 " +"경우 인터넷 연결을 확인한 다음 이 페이지를 다시 로드한 후 다시 시도해 주세요." #: pretix/static/pretixbase/js/asynctask.js:301 #: pretix/static/pretixcontrol/js/ui/main.js:71 msgid "Close message" -msgstr "" +msgstr "마지막 메시지입니다" #: pretix/static/pretixcontrol/js/clipboard.js:23 msgid "Copied!" -msgstr "" +msgstr "복사하였습니다" #: pretix/static/pretixcontrol/js/clipboard.js:29 msgid "Press Ctrl-C to copy!" -msgstr "" +msgstr "복사하기 위해 콘트롤-C를 누르십시오" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:12 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:18 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:24 msgid "is one of" -msgstr "" +msgstr "다음 중 하나입니다" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:30 msgid "is before" -msgstr "" +msgstr "이전의 것입니다" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:34 msgid "is after" -msgstr "" +msgstr "이후의 것입니다" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:40 msgid "=" -msgstr "" +msgstr "=" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:99 msgid "Product" -msgstr "" +msgstr "상품" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:103 msgid "Product variation" -msgstr "" +msgstr "상품 변동" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:107 msgid "Gate" -msgstr "" +msgstr "탑승구" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:111 msgid "Current date and time" -msgstr "" +msgstr "현재 날짜와 시간" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:115 msgid "Current day of the week (1 = Monday, 7 = Sunday)" -msgstr "" +msgstr "현재 요일(1=월요일, 7=일요일)" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:119 msgid "Current entry status" -msgstr "" +msgstr "현재 진입 상태" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:123 msgid "Number of previous entries" -msgstr "" +msgstr "이전 항목 수" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:127 msgid "Number of previous entries since midnight" -msgstr "" +msgstr "자정 이후의 이전 항목 수" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:131 msgid "Number of previous entries since" -msgstr "" +msgstr "이후 이전 항목 수" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:135 msgid "Number of previous entries before" -msgstr "" +msgstr "이전 항목 수" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:139 msgid "Number of days with a previous entry" -msgstr "" +msgstr "이전 항목이 있는 일수" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:143 msgid "Number of days with a previous entry since" -msgstr "" +msgstr "이전 항목이 포함된 일수" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:147 msgid "Number of days with a previous entry before" -msgstr "" +msgstr "이전 항목이 포함된 일수" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:151 msgid "Minutes since last entry (-1 on first entry)" -msgstr "" +msgstr "마지막 항목(-1번째 항목) 이후 몇 분 동안" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:155 msgid "Minutes since first entry (-1 on first entry)" -msgstr "" +msgstr "첫 번째 항목 이후 시간(-1번째 항목)" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:182 msgid "All of the conditions below (AND)" -msgstr "" +msgstr "아래의 모든 조건 (AND)" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:183 msgid "At least one of the conditions below (OR)" -msgstr "" +msgstr "아래 조건 중 하나 이상(OR)" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:184 msgid "Event start" -msgstr "" +msgstr "이벤트 시작" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:185 msgid "Event end" -msgstr "" +msgstr "이벤트 종료" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:186 msgid "Event admission" -msgstr "" +msgstr "이벤트 입장" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:187 msgid "custom date and time" -msgstr "" +msgstr "사용자 지정 날짜 및 시간" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:188 msgid "custom time" -msgstr "" +msgstr "맞춤 시간" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:189 msgid "Tolerance (minutes)" -msgstr "" +msgstr "허용 오차(분)" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:190 msgid "Add condition" -msgstr "" +msgstr "조건 추가" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:191 msgid "minutes" -msgstr "" +msgstr "회의록" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:192 msgid "Duplicate" -msgstr "" +msgstr "중복" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:193 msgctxt "entry_status" msgid "present" -msgstr "" +msgstr "현재" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:194 msgctxt "entry_status" msgid "absent" -msgstr "" +msgstr "부재" #: pretix/static/pretixcontrol/js/ui/editor.js:171 msgid "Check-in QR" -msgstr "" +msgstr "체크인 QR" #: pretix/static/pretixcontrol/js/ui/editor.js:549 msgid "The PDF background file could not be loaded for the following reason:" -msgstr "" +msgstr "다음과 같은 이유로 PDF 배경 파일을 로드할 수 없습니다:" #: pretix/static/pretixcontrol/js/ui/editor.js:903 msgid "Group of objects" -msgstr "" +msgstr "물품 그룹" #: pretix/static/pretixcontrol/js/ui/editor.js:908 msgid "Text object (deprecated)" -msgstr "" +msgstr "물품 원본 (비평가됨)" #: pretix/static/pretixcontrol/js/ui/editor.js:910 msgid "Text box" -msgstr "" +msgstr "원문 상자" #: pretix/static/pretixcontrol/js/ui/editor.js:912 msgid "Barcode area" -msgstr "" +msgstr "바코드 영역" #: pretix/static/pretixcontrol/js/ui/editor.js:914 msgid "Image area" -msgstr "" +msgstr "이미지 영역" #: pretix/static/pretixcontrol/js/ui/editor.js:916 msgid "Powered by pretix" -msgstr "" +msgstr "프리틱스(오픈 소스 이벤트 티켓팅 플랫폼)로 추진된다" #: pretix/static/pretixcontrol/js/ui/editor.js:918 msgid "Object" -msgstr "" +msgstr "물품" #: pretix/static/pretixcontrol/js/ui/editor.js:922 msgid "Ticket design" -msgstr "" +msgstr "티켓 디자인" #: pretix/static/pretixcontrol/js/ui/editor.js:1259 msgid "Saving failed." -msgstr "" +msgstr "저장에 실패했습니다" #: pretix/static/pretixcontrol/js/ui/editor.js:1328 #: pretix/static/pretixcontrol/js/ui/editor.js:1379 msgid "Error while uploading your PDF file, please try again." -msgstr "" +msgstr "PDF 파일을 업로드하는 동안 오류가 발생했습니다. 다시 시도해 주세요." #: pretix/static/pretixcontrol/js/ui/editor.js:1362 msgid "Do you really want to leave the editor without saving your changes?" -msgstr "" +msgstr "변경 사항을 저장하지 않고 편집 기능을 나가고 싶으신가요?" #: pretix/static/pretixcontrol/js/ui/mail.js:19 msgid "An error has occurred." -msgstr "" +msgstr "에러가 발생했습니다" #: pretix/static/pretixcontrol/js/ui/mail.js:52 msgid "Generating messages …" -msgstr "" +msgstr "메시지 생성 중" #: pretix/static/pretixcontrol/js/ui/main.js:109 msgid "Unknown error." -msgstr "" +msgstr "알수 없는 에러입니다" #: pretix/static/pretixcontrol/js/ui/main.js:318 msgid "Your color has great contrast and is very easy to read!" -msgstr "" +msgstr "당신의 색깔은 대비가 뛰어나고 읽기 매우 쉽습니다!" #: pretix/static/pretixcontrol/js/ui/main.js:322 msgid "Your color has decent contrast and is probably good-enough to read!" -msgstr "" +msgstr "당신의 색깔은 대비가 적당하고 읽기에 충분할 것입니다!" #: pretix/static/pretixcontrol/js/ui/main.js:326 msgid "" "Your color has bad contrast for text on white background, please choose a " "darker shade." -msgstr "" +msgstr "흰색 배경의 텍스트 대비 색상이 좋지 않습니다. 더 어두운 색상을 선택해 주세요." #: pretix/static/pretixcontrol/js/ui/main.js:442 #: pretix/static/pretixcontrol/js/ui/main.js:462 msgid "Search query" -msgstr "" +msgstr "질문을 검색하다" #: pretix/static/pretixcontrol/js/ui/main.js:460 msgid "All" -msgstr "" +msgstr "전부" #: pretix/static/pretixcontrol/js/ui/main.js:461 msgid "None" -msgstr "" +msgstr "아무것도 없다" #: pretix/static/pretixcontrol/js/ui/main.js:465 msgid "Selected only" -msgstr "" +msgstr "선택된 경우에만" #: pretix/static/pretixcontrol/js/ui/main.js:808 msgid "Enter page number between 1 and %(max)s." -msgstr "" +msgstr "페이지 번호를 1에서 %(최대)초 사이로 입력합니다." #: pretix/static/pretixcontrol/js/ui/main.js:811 msgid "Invalid page number." -msgstr "" +msgstr "페이지 번호가 잘못되었습니다." #: pretix/static/pretixcontrol/js/ui/main.js:969 msgid "Use a different name internally" -msgstr "" +msgstr "내부적으로 다른 이름을 사용합니다" #: pretix/static/pretixcontrol/js/ui/main.js:1009 msgid "Click to close" -msgstr "" +msgstr "종료를 클릭해 주세요" #: pretix/static/pretixcontrol/js/ui/main.js:1090 msgid "You have unsaved changes!" -msgstr "" +msgstr "귀하는 변경을 저장하지 않았습니다" #: pretix/static/pretixcontrol/js/ui/orderchange.js:25 msgid "Calculating default price…" -msgstr "" +msgstr "기본 값을 계산 하는 중" #: pretix/static/pretixcontrol/js/ui/plugins.js:69 msgid "No results" -msgstr "" +msgstr "결과 없음" #: pretix/static/pretixcontrol/js/ui/question.js:42 msgid "Others" -msgstr "" +msgstr "다른것" #: pretix/static/pretixcontrol/js/ui/question.js:82 msgid "Count" -msgstr "" +msgstr "총계" #: pretix/static/pretixcontrol/js/ui/subevent.js:111 msgid "(one more date)" msgid_plural "({num} more dates)" msgstr[0] "" -msgstr[1] "" +"단수형\n" +"(한 번 더 날짜)\n" +"복수형\n" +"({num}개의 추가 날짜)" #: pretix/static/pretixpresale/js/ui/cart.js:43 msgid "" "The items in your cart are no longer reserved for you. You can still " "complete your order as long as they’re available." -msgstr "" +msgstr "카트에 있는 상품은 더 이상 예약되지 않습니다. 주문이 가능한 한 주문을 완료할 " +"수 있습니다." #: pretix/static/pretixpresale/js/ui/cart.js:45 msgid "Cart expired" -msgstr "" +msgstr "카트가 만료되었습니다" #: pretix/static/pretixpresale/js/ui/cart.js:50 msgid "The items in your cart are reserved for you for one minute." msgid_plural "The items in your cart are reserved for you for {num} minutes." msgstr[0] "" -msgstr[1] "" +"단수형\n" +"카트에 있는 물품들은 1분 동안 예약되어 있습니다.\n" +"복수형\n" +"카트에 있는 물품들은 {num}분 동안 예약되어 있습니다." #: pretix/static/pretixpresale/js/ui/main.js:203 msgid "The organizer keeps %(currency)s %(amount)s" -msgstr "" +msgstr "주최자는 %(통화)의 %(금액)을 보관합니다" #: pretix/static/pretixpresale/js/ui/main.js:211 msgid "You get %(currency)s %(amount)s back" -msgstr "" +msgstr "%(통화)의 %(금액)을 돌려받습니다" #: pretix/static/pretixpresale/js/ui/main.js:227 msgid "Please enter the amount the organizer can keep." -msgstr "" +msgstr "주최자가 보관할 수 있는 금액을 입력해 주세요" #: pretix/static/pretixpresale/js/ui/main.js:445 msgid "Please enter a quantity for one of the ticket types." -msgstr "" +msgstr "티켓 유형 중 하나에 대한 수량을 입력해 주세요." #: pretix/static/pretixpresale/js/ui/main.js:497 msgid "required" -msgstr "" +msgstr "필수사항" #: pretix/static/pretixpresale/js/ui/main.js:541 #: pretix/static/pretixpresale/js/ui/main.js:561 msgid "Time zone:" -msgstr "" +msgstr "시간대" #: pretix/static/pretixpresale/js/ui/main.js:552 msgid "Your local time:" -msgstr "" +msgstr "귀하의 지역시간" #: pretix/static/pretixpresale/js/walletdetection.js:39 msgid "Google Pay" -msgstr "" +msgstr "구글 페이(구글의 간편 결제 서비스)" #: pretix/static/pretixpresale/js/widget/widget.js:16 msgctxt "widget" msgid "Quantity" -msgstr "" +msgstr "총량" #: pretix/static/pretixpresale/js/widget/widget.js:17 msgctxt "widget" msgid "Decrease quantity" -msgstr "" +msgstr "수량 감소" #: pretix/static/pretixpresale/js/widget/widget.js:18 msgctxt "widget" msgid "Increase quantity" -msgstr "" +msgstr "수량 증가" #: pretix/static/pretixpresale/js/widget/widget.js:19 msgctxt "widget" msgid "Price" -msgstr "" +msgstr "가격" #: pretix/static/pretixpresale/js/widget/widget.js:20 #, javascript-format msgctxt "widget" msgid "Original price: %s" -msgstr "" +msgstr "원래 가격: %s" #: pretix/static/pretixpresale/js/widget/widget.js:21 #, javascript-format msgctxt "widget" msgid "New price: %s" -msgstr "" +msgstr "새 가격: %s" #: pretix/static/pretixpresale/js/widget/widget.js:22 msgctxt "widget" msgid "Select" -msgstr "" +msgstr "선택" #: pretix/static/pretixpresale/js/widget/widget.js:23 #, javascript-format msgctxt "widget" msgid "Select %s" -msgstr "" +msgstr "%s 선택" #: pretix/static/pretixpresale/js/widget/widget.js:24 #, javascript-format msgctxt "widget" msgid "Select variant %s" -msgstr "" +msgstr "변형 선택 %s" #: pretix/static/pretixpresale/js/widget/widget.js:25 msgctxt "widget" msgid "Sold out" -msgstr "" +msgstr "품절" #: pretix/static/pretixpresale/js/widget/widget.js:26 msgctxt "widget" msgid "Buy" -msgstr "" +msgstr "구입" #: pretix/static/pretixpresale/js/widget/widget.js:27 msgctxt "widget" msgid "Register" -msgstr "" +msgstr "등록" #: pretix/static/pretixpresale/js/widget/widget.js:28 msgctxt "widget" msgid "Reserved" -msgstr "" +msgstr "예약" #: pretix/static/pretixpresale/js/widget/widget.js:29 msgctxt "widget" msgid "FREE" -msgstr "" +msgstr "무료" #: pretix/static/pretixpresale/js/widget/widget.js:30 msgctxt "widget" msgid "from %(currency)s %(price)s" -msgstr "" +msgstr "%(currency)의 %(가격)에서" #: pretix/static/pretixpresale/js/widget/widget.js:31 #, javascript-format msgctxt "widget" msgid "Image of %s" -msgstr "" +msgstr "%s의 이미지" #: pretix/static/pretixpresale/js/widget/widget.js:32 msgctxt "widget" msgid "incl. %(rate)s% %(taxname)s" -msgstr "" +msgstr "포함: %(세율)% %(세금명)" #: pretix/static/pretixpresale/js/widget/widget.js:33 msgctxt "widget" msgid "plus %(rate)s% %(taxname)s" -msgstr "" +msgstr "잉여 %(세율)% %(세금명)" #: pretix/static/pretixpresale/js/widget/widget.js:34 msgctxt "widget" msgid "incl. taxes" -msgstr "" +msgstr "세금 포함" #: pretix/static/pretixpresale/js/widget/widget.js:35 msgctxt "widget" msgid "plus taxes" -msgstr "" +msgstr "잉여 세금" #: pretix/static/pretixpresale/js/widget/widget.js:36 #, javascript-format msgctxt "widget" msgid "currently available: %s" -msgstr "" +msgstr "현재 사용 가능: %s" #: pretix/static/pretixpresale/js/widget/widget.js:37 msgctxt "widget" msgid "Only available with a voucher" -msgstr "" +msgstr "바우처만 사용 가능" #: pretix/static/pretixpresale/js/widget/widget.js:38 #: pretix/static/pretixpresale/js/widget/widget.js:41 msgctxt "widget" msgid "Not yet available" -msgstr "" +msgstr "아직 사용할 수 없음" #: pretix/static/pretixpresale/js/widget/widget.js:39 msgctxt "widget" msgid "Not available anymore" -msgstr "" +msgstr "더 이상 사용할 수 없음" #: pretix/static/pretixpresale/js/widget/widget.js:40 msgctxt "widget" msgid "Currently not available" -msgstr "" +msgstr "현재 사용할 수 없음" #: pretix/static/pretixpresale/js/widget/widget.js:42 #, javascript-format msgctxt "widget" msgid "minimum amount to order: %s" -msgstr "" +msgstr "주문할 최소 금액: %s" #: pretix/static/pretixpresale/js/widget/widget.js:43 msgctxt "widget" msgid "Close ticket shop" -msgstr "" +msgstr "매표소 닫음" #: pretix/static/pretixpresale/js/widget/widget.js:44 msgctxt "widget" msgid "The ticket shop could not be loaded." -msgstr "" +msgstr "매표소를 로드할 수 없습니다." #: pretix/static/pretixpresale/js/widget/widget.js:45 msgctxt "widget" msgid "" "There are currently a lot of users in this ticket shop. Please open the shop " "in a new tab to continue." -msgstr "" +msgstr "현재 이 매표소에는 많은 사용자가 있습니다. 계속하려면 새 탭에서 상점을 열어 " +"주세요." #: pretix/static/pretixpresale/js/widget/widget.js:47 msgctxt "widget" msgid "Open ticket shop" -msgstr "" +msgstr "매표소 열림" #: pretix/static/pretixpresale/js/widget/widget.js:48 msgctxt "widget" msgid "The cart could not be created. Please try again later" -msgstr "" +msgstr "카트를 만들 수 없습니다. 나중에 다시 시도해 주세요" #: pretix/static/pretixpresale/js/widget/widget.js:49 msgctxt "widget" msgid "" "We could not create your cart, since there are currently too many users in " "this ticket shop. Please click \"Continue\" to retry in a new tab." -msgstr "" +msgstr "현재 이 티켓샵에 사용자가 너무 많아서 장바구니를 만들 수 없습니다. 새 탭에서 " +"다시 시도하려면 \"계속\"을 클릭하세요." #: pretix/static/pretixpresale/js/widget/widget.js:51 msgctxt "widget" msgid "Waiting list" -msgstr "" +msgstr "대기명단" #: pretix/static/pretixpresale/js/widget/widget.js:52 msgctxt "widget" msgid "" "You currently have an active cart for this event. If you select more " "products, they will be added to your existing cart." -msgstr "" +msgstr "현재 이 이벤트에 대한 활성 카트가 있습니다. 더 많은 제품을 선택하면 기존 " +"카트에 추가됩니다." #: pretix/static/pretixpresale/js/widget/widget.js:54 msgctxt "widget" msgid "Resume checkout" -msgstr "" +msgstr "체크아웃 재개" #: pretix/static/pretixpresale/js/widget/widget.js:55 msgctxt "widget" msgid "Redeem a voucher" -msgstr "" +msgstr "바우처를 상환하다" #: pretix/static/pretixpresale/js/widget/widget.js:56 msgctxt "widget" msgid "Redeem" -msgstr "" +msgstr "상환" #: pretix/static/pretixpresale/js/widget/widget.js:57 msgctxt "widget" msgid "Voucher code" -msgstr "" +msgstr "바우처 코드" #: pretix/static/pretixpresale/js/widget/widget.js:58 msgctxt "widget" msgid "Close" -msgstr "" +msgstr "종료" #: pretix/static/pretixpresale/js/widget/widget.js:59 msgctxt "widget" msgid "Continue" -msgstr "" +msgstr "계속" #: pretix/static/pretixpresale/js/widget/widget.js:60 msgctxt "widget" msgid "Show variants" -msgstr "" +msgstr "옵션을 보여주세요" #: pretix/static/pretixpresale/js/widget/widget.js:61 msgctxt "widget" msgid "Hide variants" -msgstr "" +msgstr "옵션을 숨겨주세요" #: pretix/static/pretixpresale/js/widget/widget.js:62 msgctxt "widget" msgid "Choose a different event" -msgstr "" +msgstr "다른 이벤트 선택하십시요" #: pretix/static/pretixpresale/js/widget/widget.js:63 msgctxt "widget" msgid "Choose a different date" -msgstr "" +msgstr "다른 날짜를 선택하십시요" #: pretix/static/pretixpresale/js/widget/widget.js:64 msgctxt "widget" msgid "Back" -msgstr "" +msgstr "이전으로 돌아가기" #: pretix/static/pretixpresale/js/widget/widget.js:65 msgctxt "widget" msgid "Next month" -msgstr "" +msgstr "다음 달" #: pretix/static/pretixpresale/js/widget/widget.js:66 msgctxt "widget" msgid "Previous month" -msgstr "" +msgstr "이전 달" #: pretix/static/pretixpresale/js/widget/widget.js:67 msgctxt "widget" msgid "Next week" -msgstr "" +msgstr "다음 주" #: pretix/static/pretixpresale/js/widget/widget.js:68 msgctxt "widget" msgid "Previous week" -msgstr "" +msgstr "이전 주" #: pretix/static/pretixpresale/js/widget/widget.js:69 msgctxt "widget" msgid "Open seat selection" -msgstr "" +msgstr "개방형 좌석 선택" #: pretix/static/pretixpresale/js/widget/widget.js:70 msgctxt "widget" @@ -1001,84 +1026,86 @@ msgid "" "add yourself to the waiting list. We will then notify if seats are available " "again." msgstr "" +"현재 일부 또는 모든 티켓 카테고리가 매진되었습니다. 원하시면 대기자 명단에 " +"추가하실 수 있습니다. 그런 다음 좌석이 다시 이용 가능한지 알려드리겠습니다." #: pretix/static/pretixpresale/js/widget/widget.js:71 msgctxt "widget" msgid "Load more" -msgstr "" +msgstr "더 로드하기" #: pretix/static/pretixpresale/js/widget/widget.js:73 msgid "Mo" -msgstr "" +msgstr "월요일" #: pretix/static/pretixpresale/js/widget/widget.js:74 msgid "Tu" -msgstr "" +msgstr "화요일" #: pretix/static/pretixpresale/js/widget/widget.js:75 msgid "We" -msgstr "" +msgstr "수요일" #: pretix/static/pretixpresale/js/widget/widget.js:76 msgid "Th" -msgstr "" +msgstr "목요일" #: pretix/static/pretixpresale/js/widget/widget.js:77 msgid "Fr" -msgstr "" +msgstr "금요일" #: pretix/static/pretixpresale/js/widget/widget.js:78 msgid "Sa" -msgstr "" +msgstr "토요일" #: pretix/static/pretixpresale/js/widget/widget.js:79 msgid "Su" -msgstr "" +msgstr "일요일" #: pretix/static/pretixpresale/js/widget/widget.js:82 msgid "January" -msgstr "" +msgstr "1월" #: pretix/static/pretixpresale/js/widget/widget.js:83 msgid "February" -msgstr "" +msgstr "2월" #: pretix/static/pretixpresale/js/widget/widget.js:84 msgid "March" -msgstr "" +msgstr "3월" #: pretix/static/pretixpresale/js/widget/widget.js:85 msgid "April" -msgstr "" +msgstr "4월" #: pretix/static/pretixpresale/js/widget/widget.js:86 msgid "May" -msgstr "" +msgstr "5월" #: pretix/static/pretixpresale/js/widget/widget.js:87 msgid "June" -msgstr "" +msgstr "6월" #: pretix/static/pretixpresale/js/widget/widget.js:88 msgid "July" -msgstr "" +msgstr "7월" #: pretix/static/pretixpresale/js/widget/widget.js:89 msgid "August" -msgstr "" +msgstr "8월" #: pretix/static/pretixpresale/js/widget/widget.js:90 msgid "September" -msgstr "" +msgstr "9월" #: pretix/static/pretixpresale/js/widget/widget.js:91 msgid "October" -msgstr "" +msgstr "10월" #: pretix/static/pretixpresale/js/widget/widget.js:92 msgid "November" -msgstr "" +msgstr "11월" #: pretix/static/pretixpresale/js/widget/widget.js:93 msgid "December" -msgstr "" +msgstr "12일" -- 2.54.0 From 810bdff5d9c8344e87d61dda71dda16fe40567d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Apr 2025 18:09:52 +0200 Subject: [PATCH 46/89] Update django-otp requirement from ==1.5.* to ==1.6.* (#4996) Updates the requirements on [django-otp](https://github.com/django-otp/django-otp) to permit the latest version. - [Changelog](https://github.com/django-otp/django-otp/blob/master/CHANGES.rst) - [Commits](https://github.com/django-otp/django-otp/compare/v1.5.0...v1.6.0) --- updated-dependencies: - dependency-name: django-otp dependency-version: 1.6.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index c6f887823..f47d93014 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -49,7 +49,7 @@ dependencies = [ "django-localflavor==4.0", "django-markup", "django-oauth-toolkit==2.3.*", - "django-otp==1.5.*", + "django-otp==1.6.*", "django-phonenumber-field==7.3.*", "django-redis==5.4.*", "django-scopes==2.0.*", -- 2.54.0 From 3b0cd35c7a5c4fa2e5cd780fc93cedc87322a227 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Apr 2025 18:25:26 +0200 Subject: [PATCH 47/89] Update pillow requirement from ==11.1.* to ==11.2.* (#4976) Updates the requirements on [pillow](https://github.com/python-pillow/Pillow) to permit the latest version. - [Release notes](https://github.com/python-pillow/Pillow/releases) - [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst) - [Commits](https://github.com/python-pillow/Pillow/compare/11.1.0...11.2.0) --- updated-dependencies: - dependency-name: pillow dependency-version: 11.2.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f47d93014..2674f2106 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -74,7 +74,7 @@ dependencies = [ "paypal-checkout-serversdk==1.0.*", "PyJWT==2.10.*", "phonenumberslite==9.0.*", - "Pillow==11.1.*", + "Pillow==11.2.*", "pretix-plugin-build", "protobuf==6.30.*", "psycopg2-binary", -- 2.54.0 From 66dfa99e587c1856edb4466f733616e709e5aa58 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sun, 13 Apr 2025 18:25:40 +0200 Subject: [PATCH 48/89] Questions: validate that min < max (#4992) * Questions: validate that min < max * Update src/pretix/base/models/items.py Co-authored-by: Richard Schreiber --------- Co-authored-by: Richard Schreiber --- src/pretix/base/models/items.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/pretix/base/models/items.py b/src/pretix/base/models/items.py index 82186e28d..90a19935b 100644 --- a/src/pretix/base/models/items.py +++ b/src/pretix/base/models/items.py @@ -1915,6 +1915,15 @@ class Question(LoggedModel): if event != item.event: raise ValidationError(_('One or more items do not belong to this event.')) + def clean(self): + if self.valid_date_max and self.valid_date_min and self.valid_date_min > self.valid_date_max: + raise ValidationError(_("The maximum date must not be before the minimum value.")) + if self.valid_datetime_max and self.valid_datetime_min and self.valid_datetime_min > self.valid_datetime_max: + raise ValidationError(_("The maximum date must not be before the minimum value.")) + if self.valid_number_max and self.valid_number_min and self.valid_number_min > self.valid_number_max: + raise ValidationError(_("The maximum value must not be lower than the minimum value.")) + super().clean() + class QuestionOption(models.Model): question = models.ForeignKey('Question', related_name='options', on_delete=models.CASCADE) -- 2.54.0 From 08eabfa61cc03fcceebf2f2392acecedcf9de89b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Apr 2025 18:25:50 +0200 Subject: [PATCH 49/89] Update sentry-sdk requirement from ==2.24.* to ==2.25.* (#4973) Updates the requirements on [sentry-sdk](https://github.com/getsentry/sentry-python) to permit the latest version. - [Release notes](https://github.com/getsentry/sentry-python/releases) - [Changelog](https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-python/compare/2.24.0...2.25.0) --- updated-dependencies: - dependency-name: sentry-sdk dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 2674f2106..4aff140d1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -91,7 +91,7 @@ dependencies = [ "redis==5.2.*", "reportlab==4.3.*", "requests==2.31.*", - "sentry-sdk==2.24.*", + "sentry-sdk==2.25.*", "sepaxml==2.6.*", "stripe==7.9.*", "text-unidecode==1.*", -- 2.54.0 From 929a2eb6e397f30857641825c393e7d35bfce4eb Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Wed, 16 Apr 2025 18:12:27 +0200 Subject: [PATCH 50/89] Fix datepicker date display when using min/max (Z#23185544) --- src/pretix/static/pretixcontrol/js/ui/main.js | 10 +++++++++- src/pretix/static/pretixpresale/js/ui/main.js | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/pretix/static/pretixcontrol/js/ui/main.js b/src/pretix/static/pretixcontrol/js/ui/main.js index 776751d1b..95b2827a1 100644 --- a/src/pretix/static/pretixcontrol/js/ui/main.js +++ b/src/pretix/static/pretixcontrol/js/ui/main.js @@ -196,7 +196,15 @@ var form_handlers = function (el) { } if ($(this).is('[data-is-payment-date]')) opts["daysOfWeekDisabled"] = JSON.parse($("body").attr("data-payment-weekdays-disabled")); - $(this).datetimepicker(opts); + $(this).datetimepicker(opts).on("dp.hide", function() { + // when min/max is used in datetimepicker, closing and re-opening the picker opens at the wrong date + // therefore keep the current viewDate and re-set it after datetimepicker is done hiding + var $dtp = $(this).data("DateTimePicker"); + var currentViewDate = $dtp.viewDate(); + window.setTimeout(function () { + $dtp.viewDate(currentViewDate); + }, 50); + }); if ($(this).parent().is('.splitdatetimerow')) { $(this).on("dp.change", function (ev) { var $timepicker = $(this).closest(".splitdatetimerow").find(".timepickerfield"); diff --git a/src/pretix/static/pretixpresale/js/ui/main.js b/src/pretix/static/pretixpresale/js/ui/main.js index fe94fc876..9cded15a3 100644 --- a/src/pretix/static/pretixpresale/js/ui/main.js +++ b/src/pretix/static/pretixpresale/js/ui/main.js @@ -82,7 +82,15 @@ var form_handlers = function (el) { Math.abs(+new Date(opts.minDate) - new Date()) < Math.abs(+new Date(opts.maxDate) - new Date()) ) ? opts.minDate : opts.maxDate; } - $(this).datetimepicker(opts); + $(this).datetimepicker(opts).on("dp.hide", function() { + // when min/max is used in datetimepicker, closing and re-opening the picker opens at the wrong date + // therefore keep the current viewDate and re-set it after datetimepicker is done hiding + var $dtp = $(this).data("DateTimePicker"); + var currentViewDate = $dtp.viewDate(); + window.setTimeout(function () { + $dtp.viewDate(currentViewDate); + }, 50); + }); if ($(this).parent().is('.splitdatetimerow')) { $(this).on("dp.change", function (ev) { var $timepicker = $(this).closest(".splitdatetimerow").find(".timepickerfield"); -- 2.54.0 From fea519962c39eb2ddab5ce67f1fe92de9e8dc731 Mon Sep 17 00:00:00 2001 From: Patrick Chilton Date: Mon, 14 Apr 2025 17:08:46 +0200 Subject: [PATCH 51/89] Translations: Update Hungarian Currently translated at 10.9% (641 of 5863 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/hu/ powered by weblate --- src/pretix/locale/hu/LC_MESSAGES/django.po | 93 +++++++++------------- 1 file changed, 37 insertions(+), 56 deletions(-) diff --git a/src/pretix/locale/hu/LC_MESSAGES/django.po b/src/pretix/locale/hu/LC_MESSAGES/django.po index ac80bf44b..180daf0a1 100644 --- a/src/pretix/locale/hu/LC_MESSAGES/django.po +++ b/src/pretix/locale/hu/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:44+0000\n" -"PO-Revision-Date: 2024-12-10 06:00+0000\n" +"PO-Revision-Date: 2025-04-14 23:00+0000\n" "Last-Translator: Patrick Chilton \n" "Language-Team: Hungarian \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.8.4\n" +"X-Generator: Weblate 5.10.4\n" #: pretix/_base_settings.py:87 msgid "English" @@ -560,26 +560,20 @@ msgid "Shop taken offline" msgstr "" #: pretix/api/webhooks.py:362 -#, fuzzy -#| msgid "The selected seat \"{seat}\" is not available." msgid "Test-Mode of shop has been activated" -msgstr "A kiválasztott \"{seat}\" ülés nem elérhető." +msgstr "" #: pretix/api/webhooks.py:366 -#, fuzzy -#| msgid "The selected seat \"{seat}\" is not available." msgid "Test-Mode of shop has been deactivated" -msgstr "A kiválasztott \"{seat}\" ülés nem elérhető." +msgstr "" #: pretix/api/webhooks.py:370 msgid "Waiting list entry added" msgstr "" #: pretix/api/webhooks.py:374 -#, fuzzy -#| msgid "The selected seat \"{seat}\" is not available." msgid "Waiting list entry changed" -msgstr "A kiválasztott \"{seat}\" ülés nem elérhető." +msgstr "" #: pretix/api/webhooks.py:378 #, fuzzy @@ -5308,16 +5302,12 @@ msgid "Invalid number input." msgstr "" #: pretix/base/models/items.py:1869 pretix/base/models/items.py:1893 -#, fuzzy -#| msgid "Event list" msgid "Please choose a later date." -msgstr "Eseménylista" +msgstr "Kérjük válassz egy későbbi időpontot." #: pretix/base/models/items.py:1871 pretix/base/models/items.py:1895 -#, fuzzy -#| msgid "Event list" msgid "Please choose an earlier date." -msgstr "Eseménylista" +msgstr "Kérjük válassz egy korábbi időpontot." #: pretix/base/models/items.py:1874 msgid "Invalid date input." @@ -6309,10 +6299,8 @@ msgid "" msgstr "" #: pretix/base/models/vouchers.py:348 -#, fuzzy -#| msgid "You cannot modify this order" msgid "You cannot select a product that belongs to a different event." -msgstr "Nem módosíthatod ezt a rendelést" +msgstr "Nem választhatsz egy terméket ami egy másik eseményhez tartozik." #: pretix/base/models/vouchers.py:350 pretix/base/models/vouchers.py:360 msgid "" @@ -7032,7 +7020,7 @@ msgstr "" #: pretix/base/pdf.py:294 msgid "Event end weekday" -msgstr "" +msgstr "Esemény végének napja" #: pretix/base/pdf.py:299 msgid "Event admission date and time" @@ -7388,12 +7376,11 @@ msgid "" msgstr "" #: pretix/base/services/cart.py:126 -#, fuzzy, python-format -#| msgid "You cannot modify this order" +#, python-format msgid "You cannot select more than %s item per order." msgid_plural "You cannot select more than %s items per order." -msgstr[0] "Nem módosíthatod ezt a rendelést" -msgstr[1] "Nem módosíthatod ezt a rendelést" +msgstr[0] "Nem válaszhatsz több mint %s tételt ebben a rendelésben." +msgstr[1] "Nem válaszhatsz több mint %s tételt ebben a rendelésben." #: pretix/base/services/cart.py:130 pretix/base/services/orders.py:1541 #, python-format @@ -7404,14 +7391,14 @@ msgstr[0] "" msgstr[1] "" #: pretix/base/services/cart.py:135 pretix/base/services/orders.py:1546 -#, fuzzy, python-format -#| msgctxt "subevent" -#| msgid "You need to select a date." +#, python-format msgid "You need to select at least %(min)s item of the product %(product)s." msgid_plural "" "You need to select at least %(min)s items of the product %(product)s." -msgstr[0] "Válassz egy dátumot." -msgstr[1] "Válassz egy dátumot." +msgstr[0] "" +"Legalább %(min)s darabot kell választanod ebből a termékből: %(product)s" +msgstr[1] "" +"Legalább %(min)s darabot kell választanod ebből a termékből: %(product)s" #: pretix/base/services/cart.py:140 #, python-format @@ -7428,13 +7415,11 @@ msgstr[1] "" #: pretix/presale/templates/pretixpresale/event/index.html:167 #: pretix/presale/views/waiting.py:145 pretix/presale/views/widget.py:763 msgid "The booking period for this event has not yet started." -msgstr "Az elővétel ehhez az eseményhez még nem kezdődött el." +msgstr "Az esemény foglalási időszaka még nem kezdődött el." #: pretix/base/services/cart.py:145 -#, fuzzy -#| msgid "The selected seat \"{seat}\" is not available." msgid "The booking period for this event has ended." -msgstr "A kiválasztott \"{seat}\" ülés nem elérhető." +msgstr "Az esemény foglalási időszaka véget ért." #: pretix/base/services/cart.py:146 msgid "" @@ -7447,6 +7432,8 @@ msgid "" "The booking period for this event has not yet started. The affected " "positions have been removed from your cart." msgstr "" +"Az esemény foglalási időszaka még nem kezdődött el. Az érintett tételek el " +"lettek távolítva a kosárból." #: pretix/base/services/cart.py:151 pretix/base/services/orders.py:182 msgid "" @@ -7578,26 +7565,28 @@ msgstr[0] "" msgstr[1] "" #: pretix/base/services/cart.py:202 pretix/base/services/orders.py:197 -#, fuzzy, python-format -#| msgctxt "subevent" -#| msgid "You need to select a date." +#, python-format msgid "" "You need to select at least %(min)s add-on from the category %(cat)s for the " "product %(base)s." msgid_plural "" "You need to select at least %(min)s add-ons from the category %(cat)s for " "the product %(base)s." -msgstr[0] "Válassz egy dátumot." -msgstr[1] "Válassz egy dátumot." +msgstr[0] "" +"Legalább %(min)s kiegészítőt kell választanod a %(cat)s kategóriából ehhez a " +"termékhez: %(base)s" +msgstr[1] "" +"Legalább %(min)s kiegészítőt kell választanod a %(cat)s kategóriából ehhez a " +"termékhez: %(base)s" #: pretix/base/services/cart.py:206 pretix/base/services/orders.py:201 -#, fuzzy, python-format -#| msgctxt "subevent" -#| msgid "You need to select a date." +#, python-format msgid "" "You can select every add-on from the category %(cat)s for the product " "%(base)s at most once." -msgstr "Válassz egy dátumot." +msgstr "" +"Fejenként legfeljebb egyszer választhatod a %(cat)s kategóriából a " +"kiegészítőket ehhez a termékhez: %(base)s" #: pretix/base/services/cart.py:207 msgid "" @@ -8105,10 +8094,8 @@ msgstr[0] "" msgstr[1] "" #: pretix/base/services/orders.py:155 -#, fuzzy -#| msgid "The selected seat \"{seat}\" is not available." msgid "The booking period has ended." -msgstr "A kiválasztott \"{seat}\" ülés nem elérhető." +msgstr "A foglalási időszak véget ért." #: pretix/base/services/orders.py:161 msgid "" @@ -9167,10 +9154,8 @@ msgid "" msgstr "" #: pretix/base/settings.py:1311 -#, fuzzy -#| msgid "This is not an event series." msgid "This shop represents an event" -msgstr "Ez nem egy eseménysorozat." +msgstr "Ez egy esemény boltja" #: pretix/base/settings.py:1313 msgid "" @@ -30955,16 +30940,14 @@ msgstr "Válassz időpontot a foglaláshoz" #: pretix/presale/templates/pretixpresale/event/index.html:152 #: pretix/presale/views/waiting.py:141 pretix/presale/views/widget.py:756 -#, fuzzy -#| msgid "The presale for this event is over or has not yet started." msgid "The booking period for this event is over." -msgstr "Az elővétel ehhez eseményhez még nem kezdődött el." +msgstr "Az esemény foglalási időszaka véget ért." #: pretix/presale/templates/pretixpresale/event/index.html:160 #: pretix/presale/views/widget.py:758 #, python-format msgid "The booking period for this event will start on %(date)s at %(time)s." -msgstr "A foglalási időszak kezdete erre az eseményre: %(date)s %(time)s." +msgstr "Az esemény foglalási időszakának kezdete: %(date)s %(time)s." #: pretix/presale/templates/pretixpresale/event/index.html:182 #: pretix/presale/templates/pretixpresale/event/seatingplan.html:23 @@ -32124,10 +32107,8 @@ msgid "Your cart is empty" msgstr "A kosarad üres" #: pretix/presale/views/checkout.py:59 -#, fuzzy -#| msgid "The presale for this event is over or has not yet started." msgid "The booking period for this event is over or has not yet started." -msgstr "Az elővétel ehhez eseményhez még nem kezdődött el." +msgstr "Az esemény foglalási időszaka még nem kezdődött el." #: pretix/presale/views/customer.py:247 msgid "" -- 2.54.0 From 15251ff208793237bf8be4c18ba4bc3a5cac44b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=EC=A0=95=ED=99=94?= Date: Wed, 16 Apr 2025 06:23:40 +0200 Subject: [PATCH 52/89] Translations: Update Korean Currently translated at 18.4% (1080 of 5863 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ko/ powered by weblate --- src/pretix/locale/ko/LC_MESSAGES/django.po | 488 +++++++++++---------- 1 file changed, 267 insertions(+), 221 deletions(-) diff --git a/src/pretix/locale/ko/LC_MESSAGES/django.po b/src/pretix/locale/ko/LC_MESSAGES/django.po index 94f0fe7f5..e1a0b8aaf 100644 --- a/src/pretix/locale/ko/LC_MESSAGES/django.po +++ b/src/pretix/locale/ko/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:44+0000\n" -"PO-Revision-Date: 2025-04-09 10:00+0000\n" +"PO-Revision-Date: 2025-04-16 10:00+0000\n" "Last-Translator: 조정화 \n" "Language-Team: Korean \n" @@ -221,7 +221,7 @@ msgstr "이러한 이벤트로 제한하다" #: pretix/plugins/banktransfer/refund_export.py:46 #: pretix/plugins/checkinlists/exporters.py:523 msgid "Comment" -msgstr "코멘트" +msgstr "의견" #: pretix/api/serializers/cart.py:168 pretix/api/serializers/order.py:1413 msgid "The product \"{}\" is not assigned to a quota." @@ -604,7 +604,7 @@ msgstr "고객 계정 익명화되었습니다" #: pretix/plugins/banktransfer/payment.py:679 #: pretix/presale/forms/customer.py:140 msgid "This field is required." -msgstr "이 필드는 필수입니다." +msgstr "이 필드는 필수입니다" #: pretix/base/addressvalidation.py:213 msgid "Enter a postal code in the format XXX." @@ -803,7 +803,7 @@ msgstr "질문과 답변 (Q&A) 파일 업로드" #: pretix/plugins/reports/exporters.py:651 msgctxt "export_category" msgid "Order data" -msgstr "주문 데이터" +msgstr "주문 정보" #: pretix/base/exporters/answers.py:56 msgid "" @@ -929,7 +929,7 @@ msgstr "전화번호" #: pretix/base/settings.py:3601 pretix/base/settings.py:3613 #: pretix/control/templates/pretixcontrol/users/index.html:47 msgid "Full name" -msgstr "성명" +msgstr "전체 이름" #: pretix/base/exporters/customers.py:74 pretix/base/exporters/invoices.py:206 #: pretix/base/exporters/invoices.py:214 pretix/base/exporters/invoices.py:332 @@ -1319,7 +1319,7 @@ msgstr "날짜" #: pretix/plugins/reports/exporters.py:884 #: pretix/plugins/ticketoutputpdf/exporters.py:96 msgid "Order code" -msgstr "주문 번호" +msgstr "주문 코드" #: pretix/base/exporters/invoices.py:202 pretix/base/exporters/invoices.py:329 #: pretix/base/forms/auth.py:160 pretix/base/modelimport_orders.py:59 @@ -1482,7 +1482,7 @@ msgstr "도로명" #: pretix/presale/templates/pretixpresale/event/order.html:323 msgctxt "address" msgid "State" -msgstr "지역" +msgstr "주" #: pretix/base/exporters/invoices.py:221 pretix/base/exporters/invoices.py:347 #: pretix/base/models/orders.py:3285 pretix/base/models/orders.py:3320 @@ -1550,7 +1550,7 @@ msgstr "줄 번호" #: pretix/base/models/items.py:492 pretix/base/models/items.py:1154 #: pretix/control/templates/pretixcontrol/pdf/placeholders.html:32 msgid "Description" -msgstr "상세 설명" +msgstr "설명" #: pretix/base/exporters/invoices.py:321 pretix/control/forms/orders.py:343 msgid "Gross price" @@ -1675,7 +1675,7 @@ msgstr "무료 가격 입력" #: pretix/base/exporters/items.py:75 pretix/base/models/items.py:520 msgid "Sales tax" -msgstr "판매 세금" +msgstr "판매세금" #: pretix/base/exporters/items.py:76 pretix/base/models/items.py:525 msgid "Is an admission ticket" @@ -1771,7 +1771,7 @@ msgstr "주문마다 최대금액" #: pretix/base/models/items.py:1241 pretix/base/models/orders.py:282 #: pretix/plugins/checkinlists/exporters.py:522 msgid "Requires special attention" -msgstr "특별 주의 요망" +msgstr "특별한 주의가 필요합니다" #: pretix/base/exporters/items.py:90 pretix/base/exporters/orderlist.py:283 #: pretix/base/modelimport_orders.py:618 pretix/base/models/items.py:663 @@ -1864,7 +1864,7 @@ msgstr "주문 수수료" #: pretix/base/exporters/orderlist.py:110 msgid "Only paid orders" -msgstr "유료주문만 가능함" +msgstr "결제 완료된 주문" #: pretix/base/exporters/orderlist.py:116 msgid "Include payment amounts" @@ -1953,7 +1953,7 @@ msgstr "주문 합계" #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_inspect.html:34 #: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:79 msgid "Status" -msgstr "상태" +msgstr "진행상태" #: pretix/base/exporters/orderlist.py:262 #: pretix/base/exporters/orderlist.py:446 @@ -1991,7 +1991,7 @@ msgstr "사용자 지정 주소" #: pretix/base/exporters/orderlist.py:270 msgid "Date of last payment" -msgstr "마지막 지불 날짜" +msgstr "마지막 결제일" #: pretix/base/exporters/orderlist.py:270 pretix/base/services/stats.py:237 msgid "Fees" @@ -2002,7 +2002,7 @@ msgstr "수수료" #: pretix/control/templates/pretixcontrol/order/index.html:193 #: pretix/control/templates/pretixcontrol/pdf/index.html:232 msgid "Order locale" -msgstr "주문 장소" +msgstr "주문 지역 설정" #: pretix/base/exporters/orderlist.py:275 #, fuzzy, python-brace-format @@ -2125,7 +2125,7 @@ msgstr "직책 아이디" #: pretix/plugins/checkinlists/exporters.py:512 #: pretix/plugins/checkinlists/exporters.py:701 msgid "Start date" -msgstr "시작일" +msgstr "시작 날짜" #: pretix/base/exporters/orderlist.py:585 #: pretix/base/exporters/orderlist.py:1140 @@ -2138,7 +2138,7 @@ msgstr "시작일" #: pretix/plugins/checkinlists/exporters.py:513 #: pretix/plugins/checkinlists/exporters.py:702 msgid "End date" -msgstr "마감일" +msgstr "끝 날짜" #: pretix/base/exporters/orderlist.py:587 #: pretix/base/exporters/orderlist.py:891 pretix/base/modelimport_orders.py:109 @@ -2166,7 +2166,7 @@ msgstr "마감일" #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:11 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:91 msgid "Product" -msgstr "상품" +msgstr "제품" #: pretix/base/exporters/orderlist.py:595 #: pretix/base/exporters/orderlist.py:600 pretix/base/forms/questions.py:661 @@ -2626,7 +2626,7 @@ msgstr "테스트 모드" #: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:112 #: pretix/control/templates/pretixcontrol/organizers/mail.html:9 msgid "Organizer" -msgstr "주최자" +msgstr "기관" #: pretix/base/exporters/orderlist.py:1225 pretix/base/invoice.py:573 #: pretix/control/templates/pretixcontrol/base.html:280 @@ -3004,7 +3004,7 @@ msgstr "이것을 비워두면 구매 시부터 티켓이 유효합니다." #: pretix/base/forms/questions.py:689 pretix/base/forms/questions.py:1014 msgid "Street and Number" -msgstr "거리와 숫자" +msgstr "거리와 번호" #: pretix/base/forms/questions.py:1068 msgid "" @@ -3982,13 +3982,13 @@ msgstr "비활성화됨" #: pretix/base/models/customers.py:310 pretix/base/models/orders.py:1538 #: pretix/base/models/orders.py:3266 pretix/base/settings.py:1111 msgid "Company name" -msgstr "회사 이름" +msgstr "회사이름" #: pretix/base/models/customers.py:314 pretix/base/models/orders.py:1542 #: pretix/base/models/orders.py:3273 pretix/base/settings.py:82 #: pretix/plugins/stripe/payment.py:272 msgid "Select country" -msgstr "국가를 선택하세요" +msgstr "국가를 선택하십시오" #: pretix/base/models/customers.py:381 msgctxt "openidconnect" @@ -5030,7 +5030,7 @@ msgstr "" #: pretix/plugins/autocheckin/templates/pretixplugins/autocheckin/index.html:31 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_list.html:32 msgid "Products" -msgstr "상품" +msgstr "상품들" #: pretix/base/models/items.py:988 msgid "" @@ -5122,76 +5122,79 @@ msgid "" "The sales channel selection for the product as a whole takes precedence, so " "if a sales channel is selected here but not on product level, the variation " "will not be available." -msgstr "" +msgstr "제품 전체의 판매 채널 선택이 우선하므로, 제품 수준이 아닌 판매 채널을 " +"선택하면 변동 사항을 사용할 수 없습니다." #: pretix/base/models/items.py:1235 msgid "Show only if a matching voucher is redeemed." -msgstr "" +msgstr "일치하는 바우처가 사용된 경우에만 표시합니다." #: pretix/base/models/items.py:1237 msgid "" "This variation will be hidden from the event page until the user enters a " "voucher that unlocks this variation." -msgstr "" +msgstr "이 변형은 사용자가 이 변형을 해제하는 바우처를 입력할 때까지 이벤트 " +"페이지에서 숨겨집니다." #: pretix/base/models/items.py:1257 #: pretix/control/templates/pretixcontrol/item/create.html:111 msgid "Product variations" -msgstr "" +msgstr "제품 변형" #: pretix/base/models/items.py:1462 msgid "Minimum number" -msgstr "" +msgstr "최소 수량" #: pretix/base/models/items.py:1466 msgid "Maximum number" -msgstr "" +msgstr "최대 수량" #: pretix/base/models/items.py:1470 msgid "Add-Ons are included in the price" -msgstr "" +msgstr "추가옵션은 가격에 포함되어 있습니다" #: pretix/base/models/items.py:1471 msgid "" "If selected, adding add-ons to this ticket is free, even if the add-ons " "would normally cost money individually." -msgstr "" +msgstr "이 옵션을 선택하면 추가 기능이 일반적으로 개별적으로 비용이 들더라도 이 " +"티켓에 추가 기능을 추가하는 것은 무료입니다." #: pretix/base/models/items.py:1476 msgid "Allow the same product to be selected multiple times" -msgstr "" +msgstr "동일한 제품을 여러 번 선택할 수 있도록 허용합니다" #: pretix/base/models/items.py:1495 msgid "The add-on's category must belong to the same event as the item." -msgstr "" +msgstr "추가 기능의 카테고리는 항목과 동일한 이벤트에 속해야 합니다." #: pretix/base/models/items.py:1500 msgid "The item already has an add-on of this category." -msgstr "" +msgstr "해당 항목에는 이미 이 카테고리의 추가 기능이 있습니다." #: pretix/base/models/items.py:1505 msgid "The minimum count needs to be equal to or greater than zero." -msgstr "" +msgstr "최소 개수는 0보다 크거나 같아야 합니다." #: pretix/base/models/items.py:1510 msgid "The maximum count needs to be equal to or greater than zero." -msgstr "" +msgstr "최대 개수는 0보다 크거나 같아야 합니다." #: pretix/base/models/items.py:1515 msgid "The maximum count needs to be greater than the minimum count." -msgstr "" +msgstr "최대 카운트는 최소 카운트보다 커야 합니다." #: pretix/base/models/items.py:1542 msgid "Bundled item" -msgstr "" +msgstr "묶음 아이템" #: pretix/base/models/items.py:1548 msgid "Bundled variation" -msgstr "" +msgstr "묶음 변형" #: pretix/base/models/items.py:1559 msgid "Designated price part" -msgstr "" +msgstr "지정 가격 부분" #: pretix/base/models/items.py:1560 msgid "" @@ -5200,229 +5203,233 @@ msgid "" "taxation, but can be kept blank otherwise. This value will NOT be added to " "the base item's price." msgstr "" +"설정되면 이 번들 품목이 총 가격의 주어진 가치에 책임이 있음이 표시됩니다. " +"혼합 과세의 경우 이 값이 중요할 수 있지만, 그렇지 않으면 비워둘 수 있습니다. " +"이 값은 기본 품목의 가격에 추가되지 않습니다." #: pretix/base/models/items.py:1583 msgid "The bundled item must belong to the same event as the item." -msgstr "" +msgstr "묶음 상품은 상품과 동일한 이벤트에 속해야 합니다." #: pretix/base/models/items.py:1585 msgid "A variation needs to be set for this item." -msgstr "" +msgstr "이 항목에 대해 변형을 설정해야 합니다." #: pretix/base/models/items.py:1587 msgid "The chosen variation does not belong to this item." -msgstr "" +msgstr "선택한 변형은 이 항목에 속하지 않습니다." #: pretix/base/models/items.py:1592 msgid "The count needs to be equal to or greater than zero." -msgstr "" +msgstr "카운트는 0보다 크거나 같아야 합니다." #: pretix/base/models/items.py:1647 msgid "Number" -msgstr "" +msgstr "번호" #: pretix/base/models/items.py:1648 msgid "Text (one line)" -msgstr "" +msgstr "텍스트(한 줄)" #: pretix/base/models/items.py:1649 msgid "Multiline text" -msgstr "" +msgstr "다중 줄 텍스트" #: pretix/base/models/items.py:1650 msgid "Yes/No" -msgstr "" +msgstr "예/아니오" #: pretix/base/models/items.py:1651 msgid "Choose one from a list" -msgstr "" +msgstr "목록에서 하나 선택하기" #: pretix/base/models/items.py:1652 msgid "Choose multiple from a list" -msgstr "" +msgstr "목록에서 여러 개 선택하기" #: pretix/base/models/items.py:1653 msgid "File upload" -msgstr "" +msgstr "파일 업로드" #: pretix/base/models/items.py:1656 #: pretix/control/templates/pretixcontrol/event/settings.html:239 msgid "Date and time" -msgstr "" +msgstr "날짜 및 시간" #: pretix/base/models/items.py:1657 msgid "Country code (ISO 3166-1 alpha-2)" -msgstr "" +msgstr "국가 코드 (ISO 3166-1 alpha-2)" #: pretix/base/models/items.py:1680 pretix/base/models/items.py:1928 #: pretix/base/models/organizer.py:543 msgid "" "The identifier may only contain letters, numbers, dots, dashes, and " "underscores." -msgstr "" +msgstr "식별자에는 문자, 숫자, 점, 대시 및 밑줄만 포함될 수 있습니다." #: pretix/base/models/items.py:1685 msgid "Help text" -msgstr "" +msgstr "도움말 텍스트" #: pretix/base/models/items.py:1686 msgid "If the question needs to be explained or clarified, do it here!" -msgstr "" +msgstr "질문을 설명하거나 명확히 해야 한다면, 여기서 하세요!" #: pretix/base/models/items.py:1692 msgid "Question type" -msgstr "" +msgstr "질문 유형" #: pretix/base/models/items.py:1696 #: pretix/control/templates/pretixcontrol/items/questions.html:55 msgid "Required question" -msgstr "" +msgstr "필수 질문" #: pretix/base/models/items.py:1703 msgid "This question will be asked to buyers of the selected products" -msgstr "" +msgstr "이 질문은 선택된 제품 구매자에게 제기될 것입니다" #: pretix/base/models/items.py:1710 msgid "Ask during check-in instead of in the ticket buying process" -msgstr "" +msgstr "티켓 구매 과정 대신 체크인 시 질문하기" #: pretix/base/models/items.py:1711 pretix/base/models/items.py:1716 msgid "Not supported by all check-in apps for all question types." -msgstr "" +msgstr "모든 질문 유형에 대해 모든 체크인 앱에서 지원되지 않습니다." #: pretix/base/models/items.py:1715 msgid "Show answer during check-in" -msgstr "" +msgstr "체크인 중에 답변을 표시합니다" #: pretix/base/models/items.py:1720 #: pretix/control/templates/pretixcontrol/items/questions.html:66 msgid "Hidden question" -msgstr "" +msgstr "숨겨진 질문" #: pretix/base/models/items.py:1721 msgid "This question will only show up in the backend." -msgstr "" +msgstr "이 질문은 백엔드(겉으로 보이지 않은 시스템의 뒷부분)에만 표시됩니다." #: pretix/base/models/items.py:1725 msgid "Print answer on invoices" -msgstr "" +msgstr "송장에 답변을 인쇄합니다" #: pretix/base/models/items.py:1733 pretix/base/models/items.py:1739 #: pretix/base/models/items.py:1745 msgid "Minimum value" -msgstr "" +msgstr "최소값" #: pretix/base/models/items.py:1734 pretix/base/models/items.py:1737 #: pretix/base/models/items.py:1740 pretix/base/models/items.py:1743 #: pretix/base/models/items.py:1746 pretix/base/models/items.py:1749 #: pretix/base/models/items.py:1753 msgid "Currently not supported in our apps and during check-in" -msgstr "" +msgstr "현재 앱과 체크인 중에는 지원되지 않습니다" #: pretix/base/models/items.py:1736 pretix/base/models/items.py:1742 #: pretix/base/models/items.py:1748 msgid "Maximum value" -msgstr "" +msgstr "최대 값" #: pretix/base/models/items.py:1751 msgid "Maximum length" -msgstr "" +msgstr "최대 길이" #: pretix/base/models/items.py:1757 msgid "Validate file to be a portrait" -msgstr "" +msgstr "파일이 세로방향 이미지인지 확인한다" #: pretix/base/models/items.py:1758 msgid "" "If checked, files must be images with an aspect ratio of 3:4. This is " "commonly used for photos printed on badges." -msgstr "" +msgstr "파일을 선택하면 가로 세로 비율이 3:4인 이미지여야 합니다. 배지에 인쇄된 " +"사진에 일반적으로 사용됩니다." #: pretix/base/models/items.py:1813 msgid "An answer to this question is required to proceed." -msgstr "" +msgstr "이 질문에 대한 답변이 필요합니다." #: pretix/base/models/items.py:1823 msgid "Invalid input type." -msgstr "" +msgstr "입력된 유형은 유효하지 않습니다." #: pretix/base/models/items.py:1857 msgid "The number is to low." -msgstr "" +msgstr "숫자가 너무 낮습니다." #: pretix/base/models/items.py:1859 msgid "The number is to high." -msgstr "" +msgstr "숫자가 너무 높습니다." #: pretix/base/models/items.py:1862 msgid "Invalid number input." -msgstr "" +msgstr "입력된 숫자가 유효하지 않습니다" #: pretix/base/models/items.py:1869 pretix/base/models/items.py:1893 msgid "Please choose a later date." -msgstr "" +msgstr "더 늦은 날짜를 선택해 주세요." #: pretix/base/models/items.py:1871 pretix/base/models/items.py:1895 msgid "Please choose an earlier date." -msgstr "" +msgstr "더 이른 날짜를 선택해 주세요." #: pretix/base/models/items.py:1874 msgid "Invalid date input." -msgstr "" +msgstr "입력된 날짜가 유효하지 않습니다" #: pretix/base/models/items.py:1881 msgid "Invalid time input." -msgstr "" +msgstr "입력된 시간이 유효하지 않습니다" #: pretix/base/models/items.py:1890 msgid "Invalid datetime input." -msgstr "" +msgstr "(Python) 모듈 입력이 유효하지 않습니다" #: pretix/base/models/items.py:1902 msgid "Unknown country code." -msgstr "" +msgstr "알수 없는 국가 코드 입니다" #: pretix/base/models/items.py:1932 #: pretix/control/templates/pretixcontrol/items/question.html:90 msgid "Answer" -msgstr "" +msgstr "응답" #: pretix/base/models/items.py:1956 msgid "The identifier \"{}\" is already used for a different option." -msgstr "" +msgstr "식별자 \"{}\"는 이미 다른 옵션에 사용되고 있습니다." #: pretix/base/models/items.py:1959 msgid "Question option" -msgstr "" +msgstr "질문 옵션" #: pretix/base/models/items.py:1960 msgid "Question options" -msgstr "" +msgstr "질문 옵션들" #: pretix/base/models/items.py:2045 pretix/control/forms/event.py:1713 #: pretix/control/templates/pretixcontrol/items/quotas.html:56 msgid "Total capacity" -msgstr "" +msgstr "총 용량" #: pretix/base/models/items.py:2047 pretix/control/forms/item.py:449 msgid "Leave empty for an unlimited number of tickets." -msgstr "" +msgstr "무제한 티켓은 비워두세요." #: pretix/base/models/items.py:2051 pretix/base/models/orders.py:1489 #: pretix/base/models/orders.py:2986 #: pretix/control/templates/pretixcontrol/checkin/index.html:97 msgid "Item" -msgstr "" +msgstr "아이템" #: pretix/base/models/items.py:2059 pretix/control/forms/item.py:908 #: pretix/plugins/autocheckin/models.py:74 msgid "Variations" -msgstr "" +msgstr "변형" #: pretix/base/models/items.py:2063 #: pretix/control/templates/pretixcontrol/items/quotas.html:70 msgid "Ignore this quota when determining event availability" -msgstr "" +msgstr "이벤트 가용성을 결정할 때 이 할당량을 무시하세요" #: pretix/base/models/items.py:2064 msgid "" @@ -5431,10 +5438,13 @@ msgid "" "that is added to each event but should not stop the event from being shown " "as sold out." msgstr "" +"이 기능을 활성화하면 이벤트 캘린더에서 이벤트 가용성을 결정할 때 이 할당량이 " +"무시됩니다. 이는 각 이벤트에 추가되는 상품에 유용하지만 이벤트가 매진된 " +"것으로 표시되는 것을 막지 않아야 합니다." #: pretix/base/models/items.py:2071 msgid "Close this quota permanently once it is sold out" -msgstr "" +msgstr "이 할당량이 매진되면 영구적으로 마감합니다" #: pretix/base/models/items.py:2072 msgid "" @@ -5442,10 +5452,13 @@ msgid "" "sold, even if tickets become available again through cancellations or " "expiring orders. Of course, you can always re-open it manually." msgstr "" +"이 기능을 활성화하면 할당량이 한 번 매진되면 취소 또는 만료 주문을 통해 " +"티켓을 다시 구매할 수 있더라도 더 이상 티켓이 판매되지 않습니다. 물론 " +"언제든지 수동으로 다시 열 수 있습니다." #: pretix/base/models/items.py:2080 msgid "Allow to sell more tickets once people have checked out" -msgstr "" +msgstr "사람들이 체크아웃한 후에 더 많은 티켓을 판매할 수 있도록 허용합니다" #: pretix/base/models/items.py:2081 msgid "" @@ -5456,6 +5469,11 @@ msgid "" "are ignored if they are set to \"Allow re-entering after an exit scan\" to " "prevent accidental overbooking." msgstr "" +"이 옵션을 사용하면 이벤트 출구에서 사람들이 스캔되는 즉시 할당량이 " +"해제됩니다. 이는 입구와 출구 모두에서 스캔된 후 출구가 가장 최근 스캔인 " +"경우에만 발생합니다. 두 스캔 중 어느 체크인 목록에 있었는지는 중요하지 " +"않지만, 실수로 초과 예약을 방지하기 위해 \"출구 스캔 후 재진입 허용\"으로 " +"설정된 체크인 목록은 무시됩니다." #: pretix/base/models/items.py:2093 pretix/control/navigation.py:156 #: pretix/control/templates/pretixcontrol/items/quotas.html:4 @@ -5464,52 +5482,57 @@ msgstr "" #: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:184 #: pretix/control/templates/pretixcontrol/subevents/detail.html:59 msgid "Quotas" -msgstr "" +msgstr "할당량" #: pretix/base/models/items.py:2166 msgid "All variations must belong to an item contained in the items list." -msgstr "" +msgstr "모든 변형은 항목 목록에 포함된 항목에 속해야 합니다." #: pretix/base/models/items.py:2177 msgid "" "One or more items has variations but none of these are in the variations " "list." -msgstr "" +msgstr "하나 이상의 항목에 변형이 있지만 이 중 어느 것도 변형 목록에 없습니다." #: pretix/base/models/items.py:2183 pretix/base/models/waitinglist.py:305 msgid "Subevent cannot be null for event series." -msgstr "" +msgstr "이벤트를 시리즈(반복되는 이벤트)로 등록할 때 하위 이벤트(각 개별 이벤트 항목)" +"가 반드시 필요합니다." #: pretix/base/models/items.py:2219 msgid "Required for products" -msgstr "" +msgstr "제품에 대해 필수로 필요함" #: pretix/base/models/items.py:2220 msgid "" "If checked, this property must be set in each product. Does not apply if a " "default value is set." -msgstr "" +msgstr "이 속성을 선택하면 각 제품에서 이 속성을 설정해야 합니다. 기본값이 설정된 " +"경우에는 적용되지 않습니다." #: pretix/base/models/items.py:2225 msgid "" "If you keep this empty, any value is allowed. Otherwise, enter one possible " "value per line." -msgstr "" +msgstr "이 값을 비워두면 모든 값이 허용됩니다. 그렇지 않으면 한 줄당 하나의 가능한 " +"값을 입력합니다." #: pretix/base/models/memberships.py:44 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:29 msgid "Membership is transferable" -msgstr "" +msgstr "회원 자격은 이전 가능합니다" #: pretix/base/models/memberships.py:45 msgid "" "If this is selected, the membership can be used to purchase tickets for " "multiple persons. If not, the attendee name always needs to stay the same." msgstr "" +"이 옵션을 선택하면 멤버십을 사용하여 여러 사람의 티켓을 구매할 수 있습니다. " +"그렇지 않은 경우 참석자 이름은 항상 동일하게 유지해야 합니다." #: pretix/base/models/memberships.py:50 msgid "Parallel usage is allowed" -msgstr "" +msgstr "두개 이상의 작업을 동시에 사용할수 있습니다" #: pretix/base/models/memberships.py:51 msgid "" @@ -5519,10 +5542,13 @@ msgid "" "overlap check will be performed if there is a product-level validity of the " "ticket." msgstr "" +"이 옵션을 선택하면 멤버십을 사용하여 동시에 진행되는 이벤트 티켓을 구매할 수 " +"있습니다. 이벤트 시작 시간이 동일한지만 확인하며 이벤트 간 중복은 확인하지 " +"않습니다. 티켓의 제품 수준 유효성이 있는 경우 중복 확인이 수행됩니다." #: pretix/base/models/memberships.py:58 msgid "Number of times this membership can be used in a purchase." -msgstr "" +msgstr "이 멤버쉽을 한 번의 구매에서 사용할 수 있는 횟수" #: pretix/base/models/memberships.py:124 #: pretix/control/templates/pretixcontrol/items/question.html:33 @@ -5540,41 +5566,42 @@ msgstr "취소하다" #: pretix/control/templates/pretixcontrol/organizers/customer.html:116 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:28 msgid "Membership type" -msgstr "" +msgstr "멤버쉽 형태" #: pretix/base/models/orders.py:202 msgid "pending" -msgstr "" +msgstr "대기중" #: pretix/base/models/orders.py:203 pretix/base/payment.py:511 #: pretix/base/services/invoices.py:475 msgid "paid" -msgstr "" +msgstr "지불" #: pretix/base/models/orders.py:204 pretix/control/forms/filter.py:1573 #: pretix/control/templates/pretixcontrol/organizers/reusable_medium.html:37 msgid "expired" -msgstr "" +msgstr "만료됨" #: pretix/base/models/orders.py:254 pretix/control/forms/filter.py:561 #: pretix/control/templates/pretixcontrol/organizers/customer.html:64 msgid "Locale" -msgstr "" +msgstr "장소" #: pretix/base/models/orders.py:269 pretix/control/forms/filter.py:572 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:57 msgid "Total amount" -msgstr "" +msgstr "총 금액" #: pretix/base/models/orders.py:273 pretix/base/models/vouchers.py:293 msgid "" "The text entered in this field will not be visible to the user and is " "available for your convenience." -msgstr "" +msgstr "이 필드에 입력된 텍스트는 사용자에게 보이지 않으며, 사용자의 편의를 위해 " +"제공됩니다." #: pretix/base/models/orders.py:278 msgid "We'll show you this order to be due for a follow-up on this day." -msgstr "" +msgstr "이 주문은 당일 후속 조치를 위해 발송될 예정입니다." #: pretix/base/models/orders.py:284 msgid "" @@ -5583,199 +5610,204 @@ msgid "" "custom message, so you need to brief your check-in staff how to handle these " "cases." msgstr "" +"이 설정을 하면 체크인 앱에 이 주문의 티켓에 특별한 주의가 필요하다는 눈에 " +"보이는 경고가 표시됩니다. 자세한 내용이나 사용자 지정 메시지는 표시되지 " +"않으므로 체크인 직원에게 이러한 경우 처리 방법을 설명해야 합니다." #: pretix/base/models/orders.py:291 msgid "" "This text will be shown by the check-in app if a ticket of this order is " "scanned." -msgstr "" +msgstr "이 주문의 티켓이 스캔되면 체크인 앱에 이 텍스트가 표시됩니다." #: pretix/base/models/orders.py:301 pretix/base/models/orders.py:1526 msgid "Meta information" -msgstr "" +msgstr "메타 정보(데이타에 대한 정보)" #: pretix/base/models/orders.py:305 msgid "API meta information" -msgstr "" +msgstr "API에 대한 부가 정보(API 응답 결과나 정보를 설명하는 보조적인 데이터)" #: pretix/base/models/orders.py:414 pretix/plugins/sendmail/forms.py:236 #: pretix/plugins/sendmail/forms.py:391 pretix/plugins/sendmail/views.py:269 msgid "approval pending" -msgstr "" +msgstr "승인 대기중" #: pretix/base/models/orders.py:416 msgctxt "order state" msgid "pending (confirmed)" -msgstr "" +msgstr "대기중(승인됨)" #: pretix/base/models/orders.py:418 msgid "canceled (paid fee)" -msgstr "" +msgstr "취소된 (유료)" #: pretix/base/models/orders.py:1031 msgid "" "The payment can not be accepted as the last date of payments configured in " "the payment settings is over." -msgstr "" +msgstr "결제 설정에 설정된 마지막 결제 날짜가 종료되었으므로 결제를 수락할 수 " +"없습니다." #: pretix/base/models/orders.py:1033 msgid "" "The payment can not be accepted as the order is expired and you configured " "that no late payments should be accepted in the payment settings." -msgstr "" +msgstr "주문이 만료되어 결제 설정에서 연체료를 받지 않도록 설정했기 때문에 결제를 " +"수락할 수 없습니다." #: pretix/base/models/orders.py:1035 msgid "This order is not yet approved by the event organizer." -msgstr "" +msgstr "이 주문은 아직 행사 주최자에 의해 승인되지 않았습니다" #: pretix/base/models/orders.py:1060 -#, python-brace-format +#, fuzzy, python-brace-format msgid "The ordered product \"{item}\" is no longer available." -msgstr "" +msgstr "주문한 제품 \"{아이템}\"은 더 이상 사용할 수 없습니다." #: pretix/base/models/orders.py:1061 -#, python-brace-format +#, fuzzy, python-brace-format msgid "The seat \"{seat}\" is no longer available." -msgstr "" +msgstr "좌석 \"{좌석}\"은 더 이상 사용할 수 없습니다." #: pretix/base/models/orders.py:1062 -#, python-brace-format +#, fuzzy, python-brace-format msgid "The voucher \"{voucher}\" no longer has sufficient budget." -msgstr "" +msgstr "바우처 \"{바우처}\"에는 더 이상 예산이 충분하지 않습니다." #: pretix/base/models/orders.py:1063 -#, python-brace-format +#, fuzzy, python-brace-format msgid "The voucher \"{voucher}\" has been used in the meantime." -msgstr "" +msgstr "그동안 \"{바우처}\" 바우처가 사용되었습니다." #: pretix/base/models/orders.py:1405 msgid "" -msgstr "" +msgstr "<파일>" #: pretix/base/models/orders.py:1506 pretix/base/models/orders.py:1514 msgid "Empty, if this product is not an admission ticket" -msgstr "" +msgstr "이 상품이 입장권이 아니라면 비워둡니다" #: pretix/base/models/orders.py:1723 msgctxt "payment_state" msgid "created" -msgstr "" +msgstr "생성됨" #: pretix/base/models/orders.py:1724 msgctxt "payment_state" msgid "pending" -msgstr "" +msgstr "대기중" #: pretix/base/models/orders.py:1725 msgctxt "payment_state" msgid "confirmed" -msgstr "" +msgstr "승인됨" #: pretix/base/models/orders.py:1726 msgctxt "payment_state" msgid "canceled" -msgstr "" +msgstr "취소됨" #: pretix/base/models/orders.py:1727 msgctxt "payment_state" msgid "failed" -msgstr "" +msgstr "실패함" #: pretix/base/models/orders.py:1728 msgctxt "payment_state" msgid "refunded" -msgstr "" +msgstr "환불됨" #: pretix/base/models/orders.py:1756 pretix/base/models/orders.py:2170 #: pretix/base/shredder.py:629 msgid "Payment information" -msgstr "" +msgstr "결제 정보" #: pretix/base/models/orders.py:2111 msgctxt "refund_state" msgid "started externally" -msgstr "" +msgstr "외부에서 시작됨" #: pretix/base/models/orders.py:2112 msgctxt "refund_state" msgid "created" -msgstr "" +msgstr "생성됨" #: pretix/base/models/orders.py:2113 msgctxt "refund_state" msgid "in transit" -msgstr "" +msgstr "이동중" #: pretix/base/models/orders.py:2114 msgctxt "refund_state" msgid "done" -msgstr "" +msgstr "완료됨" #: pretix/base/models/orders.py:2115 msgctxt "refund_state" msgid "failed" -msgstr "" +msgstr "실패하였습니다" #: pretix/base/models/orders.py:2117 msgctxt "refund_state" msgid "canceled" -msgstr "" +msgstr "취소되었습니다" #: pretix/base/models/orders.py:2125 msgctxt "refund_source" msgid "Organizer" -msgstr "" +msgstr "기관" #: pretix/base/models/orders.py:2126 msgctxt "refund_source" msgid "Customer" -msgstr "" +msgstr "고객" #: pretix/base/models/orders.py:2127 msgctxt "refund_source" msgid "External" -msgstr "" +msgstr "외부" #: pretix/base/models/orders.py:2165 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:198 msgid "Refund reason" -msgstr "" +msgstr "환불 사유" #: pretix/base/models/orders.py:2166 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:199 #: pretix/control/templates/pretixcontrol/order/refund_choose.html:201 msgid "" "May be shown to the end user or used e.g. as part of a payment reference." -msgstr "" +msgstr "최종 사용자에게 보여주거나 결제 참조의 일부로 사용할 수 있습니다." #: pretix/base/models/orders.py:2286 msgid "Service fee" -msgstr "" +msgstr "서비스 요금" #: pretix/base/models/orders.py:2287 msgid "Payment fee" -msgstr "" +msgstr "결제 수수료" #: pretix/base/models/orders.py:2288 msgid "Shipping fee" -msgstr "" +msgstr "배송비" #: pretix/base/models/orders.py:2289 #: pretix/control/templates/pretixcontrol/order/index.html:157 msgid "Cancellation fee" -msgstr "" +msgstr "취소 수수료" #: pretix/base/models/orders.py:2290 msgid "Insurance fee" -msgstr "" +msgstr "보험료" #: pretix/base/models/orders.py:2291 msgid "Late fee" -msgstr "" +msgstr "연체료" #: pretix/base/models/orders.py:2292 msgid "Other fees" -msgstr "" +msgstr "기타 수수료" #: pretix/base/models/orders.py:2293 pretix/base/payment.py:1317 #: pretix/base/payment.py:1321 pretix/base/settings.py:991 @@ -5786,7 +5818,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/event/order_giftcard.html:7 #: pretix/presale/templates/pretixpresale/event/position_giftcard.html:7 msgid "Gift card" -msgstr "" +msgstr "선물 카드" #: pretix/base/models/orders.py:2298 #: pretix/control/templates/pretixcontrol/organizers/giftcard.html:74 @@ -5794,52 +5826,52 @@ msgstr "" #: pretix/control/views/vouchers.py:120 #: pretix/presale/templates/pretixpresale/event/fragment_giftcard_history.html:8 msgid "Value" -msgstr "" +msgstr "가치" #: pretix/base/models/orders.py:2546 msgid "Order position" -msgstr "" +msgstr "주문 위치" #: pretix/base/models/orders.py:3091 msgid "Cart ID (e.g. session key)" -msgstr "" +msgstr "카트 ID(예: 세션 키)" #: pretix/base/models/orders.py:3128 msgid "Cart position" -msgstr "" +msgstr "카트 위치" #: pretix/base/models/orders.py:3129 msgid "Cart positions" -msgstr "" +msgstr "카트 위치들" #: pretix/base/models/orders.py:3265 msgid "Business customer" -msgstr "" +msgstr "비즈니스 고객" #: pretix/base/models/orders.py:3281 msgid "This reference will be printed on your invoice for your convenience." -msgstr "" +msgstr "이 참고 자료는 귀하의 편의를 위해 송장에 인쇄될 것입니다." #: pretix/base/models/orders.py:3465 #: pretix/plugins/badges/templates/pretixplugins/badges/control_order_position_buttons.html:9 msgid "Badge" -msgstr "" +msgstr "배지" #: pretix/base/models/orders.py:3466 pretix/base/pdf.py:1113 #: pretix/control/forms/organizer.py:777 pretix/control/forms/organizer.py:813 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:66 #: pretix/plugins/ticketoutputpdf/ticketoutput.py:113 msgid "Ticket" -msgstr "" +msgstr "티켓" #: pretix/base/models/orders.py:3467 msgid "Certificate" -msgstr "" +msgstr "인증서" #: pretix/base/models/orders.py:3468 pretix/control/views/event.py:390 #: pretix/control/views/event.py:395 msgid "Other" -msgstr "" +msgstr "기타" #: pretix/base/models/organizer.py:79 msgid "" @@ -5847,27 +5879,30 @@ msgid "" "Every slug can only be used once. This is being used in URLs to refer to " "your organizer accounts and your events." msgstr "" +"짧아야 하며 소문자, 숫자, 점, 대시만 포함해야 합니다. 모든 슬러그는 한 번만 " +"사용할 수 있습니다. 이는 URL에서 주최자 계정과 이벤트를 참조하는 데 " +"사용됩니다." #: pretix/base/models/organizer.py:97 pretix/control/navigation.py:350 #: pretix/control/templates/pretixcontrol/oauth/authorized.html:19 #: pretix/control/templates/pretixcontrol/organizers/index.html:6 #: pretix/control/templates/pretixcontrol/organizers/index.html:8 msgid "Organizers" -msgstr "" +msgstr "기관들" #: pretix/base/models/organizer.py:284 #: pretix/control/templates/pretixcontrol/organizers/teams.html:35 msgid "Team name" -msgstr "" +msgstr "팀 이름" #: pretix/base/models/organizer.py:285 #: pretix/control/templates/pretixcontrol/organizers/team_members.html:13 msgid "Team members" -msgstr "" +msgstr "팀 구성원들" #: pretix/base/models/organizer.py:289 msgid "Require all members of this team to use two-factor authentication" -msgstr "" +msgstr "이 팀의 모든 구성원에게 이중 인증을 사용하도록 요구합니다" #: pretix/base/models/organizer.py:290 msgid "" @@ -5875,56 +5910,60 @@ msgid "" "up two-factor authentication or leave the team. The setting may take a few " "minutes to become effective for all users." msgstr "" +"이 기능을 켜면 모든 팀원이 이중 인증을 설정하거나 팀을 떠나야 합니다. 설정이 " +"모든 사용자에게 적용되려면 몇 분 정도 걸릴 수 있습니다." #: pretix/base/models/organizer.py:297 msgid "Can create events" -msgstr "" +msgstr "이벤트 생성 가능합니다" #: pretix/base/models/organizer.py:301 msgid "Can change teams and permissions" -msgstr "" +msgstr "팀과 권한을 변경할 수 있습니다" #: pretix/base/models/organizer.py:305 msgid "Can change organizer settings" -msgstr "" +msgstr "기관 설정을 변경할 수 있습니다" #: pretix/base/models/organizer.py:306 msgid "" "Someone with this setting can get access to most data of all of your events, " "i.e. via privacy reports, so be careful who you add to this team!" msgstr "" +"이 설정을 가진 사람은 개인정보 보호 보고서를 통해 모든 이벤트의 대부분의 " +"데이터에 액세스할 수 있으므로 이 팀에 누구를 추가할지 주의하세요!" #: pretix/base/models/organizer.py:311 msgid "Can manage customer accounts" -msgstr "" +msgstr "고객 계정을 관리할 수 있습니다" #: pretix/base/models/organizer.py:315 msgid "Can manage reusable media" -msgstr "" +msgstr "재사용 미디어를 관리할 수 있습니다" #: pretix/base/models/organizer.py:319 msgid "Can manage gift cards" -msgstr "" +msgstr "선물 카드를 관리할수 있습니다" #: pretix/base/models/organizer.py:323 msgid "Can change event settings" -msgstr "" +msgstr "이벤트 설정을 변경할 수 있습니다" #: pretix/base/models/organizer.py:327 msgid "Can change product settings" -msgstr "" +msgstr "상품 설정을 변경할 수 있습니다" #: pretix/base/models/organizer.py:331 msgid "Can view orders" -msgstr "" +msgstr "주문을 볼 수 있습니다" #: pretix/base/models/organizer.py:335 msgid "Can change orders" -msgstr "" +msgstr "주문을 변경할 수 있습니다" #: pretix/base/models/organizer.py:339 msgid "Can perform check-ins" -msgstr "" +msgstr "체크인을 할수 있습니다" #: pretix/base/models/organizer.py:340 msgid "" @@ -5932,45 +5971,47 @@ msgid "" "information about attendees. Users with \"can change orders\" can also " "perform check-ins." msgstr "" +"여기에는 참석자 검색이 포함되며, 참석자에 대한 개인 정보를 얻는 데 사용할 수 " +"있습니다. \"주문 변경 가능\" 사용자도 체크인을 수행할 수 있습니다." #: pretix/base/models/organizer.py:345 msgid "Can view vouchers" -msgstr "" +msgstr "바우처를 볼 수 있습니다" #: pretix/base/models/organizer.py:349 msgid "Can change vouchers" -msgstr "" +msgstr "바우처를 변경할 수 있습니다" #: pretix/base/models/organizer.py:353 -#, python-format +#, fuzzy, python-format msgid "%(name)s on %(object)s" -msgstr "" +msgstr "%(이름)의 %(객체)" #: pretix/base/models/organizer.py:385 #: pretix/control/templates/pretixcontrol/events/create_basics.html:64 msgid "Team" -msgstr "" +msgstr "팀" #: pretix/base/models/organizer.py:386 pretix/control/navigation.py:527 #: pretix/control/templates/pretixcontrol/organizers/teams.html:6 msgid "Teams" -msgstr "" +msgstr "팀들" #: pretix/base/models/organizer.py:406 -#, python-brace-format +#, fuzzy, python-brace-format msgid "Invite to team '{team}' for '{email}'" -msgstr "" +msgstr "'이메일'을 위해 '팀'에 초대하기" #: pretix/base/models/organizer.py:538 #: pretix/control/templates/pretixcontrol/organizers/channels.html:23 msgid "Identifier" -msgstr "" +msgstr "식별자" #: pretix/base/models/organizer.py:548 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:54 #: pretix/control/templates/pretixcontrol/items/questions.html:22 msgid "Type" -msgstr "" +msgstr "형태" #: pretix/base/models/seating.py:45 pretix/base/models/tax.py:305 #: pretix/base/pdf.py:1269 @@ -6925,11 +6966,11 @@ msgstr "" #: pretix/base/pdf.py:159 pretix/base/pdf.py:164 msgid "123.45 EUR" -msgstr "" +msgstr "123.45유로" #: pretix/base/pdf.py:163 msgid "Price including add-ons" -msgstr "" +msgstr "추가 기능을 포함한 가격" #: pretix/base/pdf.py:173 pretix/base/pdf.py:331 #: pretix/base/services/invoices.py:476 @@ -6938,7 +6979,7 @@ msgstr "" #: pretix/base/services/placeholders.py:669 #: pretix/base/services/placeholders.py:678 pretix/control/views/event.py:843 msgid "John Doe" -msgstr "" +msgstr "도 존" #: pretix/base/pdf.py:177 #: pretix/control/templates/pretixcontrol/order/index.html:546 @@ -6954,7 +6995,7 @@ msgstr "" #: pretix/control/views/pdf.py:116 pretix/control/views/pdf.py:123 #: pretix/control/views/pdf.py:128 msgid "Sample company" -msgstr "" +msgstr "견본 회사" #: pretix/base/pdf.py:182 msgid "Full attendee address" @@ -6968,6 +7009,11 @@ msgid "" "12345 Any City\n" "Atlantis" msgstr "" +"도 존 \n" +"견본 회사\n" +"깨 거리 42\n" +"12345 아무 도시\n" +"아틀란티스" #: pretix/base/pdf.py:187 msgid "Attendee street" @@ -7092,7 +7138,7 @@ msgstr "" #: pretix/base/pdf.py:341 msgid "Sesame Street 42" -msgstr "" +msgstr "깨 거리 42" #: pretix/base/pdf.py:346 msgid "12345" @@ -7268,7 +7314,7 @@ msgstr "" #: pretix/plugins/ticketoutputpdf/exporters.py:99 #, python-brace-format msgid "Attendee name: {part}" -msgstr "" +msgstr "참석자 이름: {파트}" #: pretix/base/pdf.py:671 msgid "Invoice address name for salutation" @@ -12165,7 +12211,7 @@ msgstr "" #: pretix/control/forms/filter.py:213 pretix/control/navigation.py:205 #: pretix/control/templates/pretixcontrol/items/question.html:25 msgid "All orders" -msgstr "" +msgstr "모든 주문" #: pretix/control/forms/filter.py:214 msgid "Valid orders" @@ -12333,7 +12379,7 @@ msgstr "" #: pretix/control/forms/filter.py:1009 pretix/control/forms/filter.py:1014 #: pretix/control/forms/filter.py:1685 pretix/control/forms/filter.py:1690 msgid "All organizers" -msgstr "" +msgstr "모든 기관" #: pretix/control/forms/filter.py:1001 pretix/control/forms/filter.py:1669 msgid "All events" @@ -12958,7 +13004,7 @@ msgstr "" #: pretix/control/forms/item.py:448 msgid "Number of tickets" -msgstr "" +msgstr "티켓 번호" #: pretix/control/forms/item.py:580 msgid "Quota name is required." @@ -12971,7 +13017,7 @@ msgstr "" #: pretix/control/forms/item.py:607 pretix/plugins/badges/forms.py:85 #: pretix/plugins/ticketoutputpdf/forms.py:55 msgid "(Event default)" -msgstr "" +msgstr "(이벤트 기본값)" #: pretix/control/forms/item.py:617 msgid "Choose automatically depending on event settings" @@ -15588,7 +15634,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/event/order_pay_change.html:66 #: pretix/presale/templates/pretixpresale/event/position_change.html:29 msgid "Continue" -msgstr "계속" +msgstr "계속하기" #: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html:8 msgid "Authorize an application" @@ -15699,7 +15745,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/organizers/customer_password.html:20 #: pretix/presale/templates/pretixpresale/organizers/customer_setpassword.html:20 msgid "Save" -msgstr "" +msgstr "저장하기" #: pretix/control/templates/pretixcontrol/auth/register.html:7 msgid "Create a new account" @@ -16058,7 +16104,7 @@ msgstr[0] "" #: pretix/presale/templates/pretixpresale/event/position_change.html:24 #: pretix/presale/templates/pretixpresale/event/position_modify.html:44 msgid "Cancel" -msgstr "취소" +msgstr "취소하기" #: pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html:27 #: pretix/control/templates/pretixcontrol/checkin/list_delete.html:24 @@ -16104,7 +16150,7 @@ msgstr "취소" #: pretix/presale/templates/pretixpresale/organizers/customer_profile_delete.html:34 #: pretix/presale/templates/pretixpresale/organizers/customer_profiles.html:29 msgid "Delete" -msgstr "" +msgstr "삭제하기" #: pretix/control/templates/pretixcontrol/checkin/checkins.html:9 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:41 @@ -16153,7 +16199,7 @@ msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:91 #: pretix/presale/templates/pretixpresale/fragment_event_list_filter.html:21 msgid "Filter" -msgstr "" +msgstr "통과하기" #: pretix/control/templates/pretixcontrol/checkin/checkins.html:50 msgid "Your search did not match any check-ins." @@ -17394,7 +17440,7 @@ msgstr "" #: pretix/plugins/ticketoutputpdf/views.py:172 #: pretix/presale/views/customer.py:527 pretix/presale/views/customer.py:579 msgid "Your changes have been saved." -msgstr "" +msgstr "변경 사항이 저장되었습니다." #: pretix/control/templates/pretixcontrol/event/plugins.html:34 msgid "Search results" @@ -18915,7 +18961,7 @@ msgstr "" #: pretix/plugins/reports/exporters.py:386 #: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:23 msgid "Paid" -msgstr "" +msgstr "지불" #: pretix/control/templates/pretixcontrol/items/question.html:66 msgid "No matching answers found." @@ -19346,7 +19392,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/order/transactions.html:11 #, python-format msgid "Back to order %(order)s" -msgstr "" +msgstr "주문 %(주문)로 돌아가기" #: pretix/control/templates/pretixcontrol/order/change.html:24 msgid "" @@ -19888,13 +19934,13 @@ msgstr "" #: pretix/presale/templates/pretixpresale/event/base.html:140 #: pretix/presale/templates/pretixpresale/event/timemachine.html:30 msgid "Change" -msgstr "" +msgstr "수정하기" #: pretix/control/templates/pretixcontrol/order/index.html:954 #: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:91 #: pretix/presale/templates/pretixpresale/event/order.html:318 msgid "ZIP code and city" -msgstr "" +msgstr "우편번호와 도시" #: pretix/control/templates/pretixcontrol/order/index.html:967 msgid "Valid EU VAT ID" @@ -22781,7 +22827,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:30 msgid "Method" -msgstr "" +msgstr "방법" #: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:31 msgid "URL" @@ -23353,7 +23399,7 @@ msgstr "" #: pretix/plugins/stripe/views.py:682 #: pretix/plugins/ticketoutputpdf/views.py:132 msgid "We could not save your changes. See below for details." -msgstr "" +msgstr "변경 사항을 저장할 수 없습니다. 자세한 내용은 아래를 참조하세요" #: pretix/control/views/checkin.py:419 pretix/control/views/checkin.py:456 msgid "The requested list does not exist." @@ -23977,7 +24023,7 @@ msgstr[1] "" #: pretix/presale/views/order.py:1268 pretix/presale/views/order.py:1660 #: pretix/presale/views/order.py:1691 msgid "Unknown order code or not authorized to access this order." -msgstr "" +msgstr "알 수 없는 주문 코드 또는 이 주문에 접근할 권한이 없습니다." #: pretix/control/views/orders.py:696 pretix/presale/views/order.py:1100 msgid "Ticket download is not enabled for this product." @@ -26104,7 +26150,7 @@ msgstr "" #: pretix/plugins/checkinlists/exporters.py:91 #: pretix/plugins/ticketoutputpdf/exporters.py:88 msgid "Only include tickets for dates within this range." -msgstr "" +msgstr "이 범위 내의 날짜 티켓만 포함하세요." #: pretix/plugins/checkinlists/exporters.py:95 msgid "Include QR-code secret" @@ -26116,7 +26162,7 @@ msgstr "" #: pretix/plugins/checkinlists/exporters.py:133 msgid "Include questions" -msgstr "" +msgstr "질문을 포함합니다" #: pretix/plugins/checkinlists/exporters.py:303 msgid "Check-in list (PDF)" @@ -28357,7 +28403,7 @@ msgstr "" #: pretix/plugins/ticketoutputpdf/migrations/0002_auto_20180605_2022.py:38 #: pretix/plugins/ticketoutputpdf/views.py:227 msgid "Default layout" -msgstr "" +msgstr "기본 구성" #: pretix/plugins/ticketoutputpdf/exporters.py:70 msgid "" @@ -28403,7 +28449,7 @@ msgstr "" #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:8 #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:15 msgid "Ticket layout" -msgstr "" +msgstr "티켓 디자인 구성" #: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/delete.html:9 #, python-format @@ -28910,7 +28956,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/organizers/customer_address_delete.html:28 #: pretix/presale/templates/pretixpresale/organizers/customer_profile_delete.html:28 msgid "Go back" -msgstr "" +msgstr "되돌아가기" #: pretix/presale/templates/pretixpresale/event/checkout_base.html:7 #, python-format @@ -28972,7 +29018,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:77 #: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:126 msgid "Modify" -msgstr "" +msgstr "수정하다" #: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:76 msgid "Modify invoice information" @@ -30153,7 +30199,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/event/order.html:291 #: pretix/presale/templates/pretixpresale/event/position.html:34 msgid "Change details" -msgstr "" +msgstr "변경 세부 사항" #: pretix/presale/templates/pretixpresale/event/order.html:263 msgid "" -- 2.54.0 From 6d28a7f38477942d64af011a357c6d30436aa6a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=EC=A0=95=ED=99=94?= Date: Wed, 16 Apr 2025 03:44:51 +0200 Subject: [PATCH 53/89] Translations: Update Korean Currently translated at 100.0% (236 of 236 strings) Translation: pretix/pretix (JavaScript parts) Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/ko/ powered by weblate --- src/pretix/locale/ko/LC_MESSAGES/djangojs.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pretix/locale/ko/LC_MESSAGES/djangojs.po b/src/pretix/locale/ko/LC_MESSAGES/djangojs.po index 87e0f93ce..f84efdc40 100644 --- a/src/pretix/locale/ko/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/ko/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:46+0000\n" -"PO-Revision-Date: 2025-04-09 10:00+0000\n" +"PO-Revision-Date: 2025-04-16 10:00+0000\n" "Last-Translator: 조정화 \n" "Language-Team: Korean \n" @@ -141,7 +141,7 @@ msgstr "라틴 아메리카 최대 전자 상거래 플랫폼-온라인, 오프 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50 msgid "Continue" -msgstr "계속" +msgstr "계속하기" #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244 @@ -257,7 +257,7 @@ msgstr "상환하다" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49 msgid "Cancel" -msgstr "취소" +msgstr "취소하기" #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60 @@ -446,7 +446,7 @@ msgstr "=" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:99 msgid "Product" -msgstr "상품" +msgstr "제품" #: pretix/static/pretixcontrol/js/ui/checkinrules.js:103 msgid "Product variation" -- 2.54.0 From c6862454f5c1bcf56b94b08ec06c662cdc11334a Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 16 Apr 2025 15:31:22 +0200 Subject: [PATCH 54/89] Translations: Update Korean Currently translated at 18.5% (1087 of 5863 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ko/ powered by weblate --- src/pretix/locale/ko/LC_MESSAGES/django.po | 84 +++++++++++----------- 1 file changed, 40 insertions(+), 44 deletions(-) diff --git a/src/pretix/locale/ko/LC_MESSAGES/django.po b/src/pretix/locale/ko/LC_MESSAGES/django.po index e1a0b8aaf..71c108a0d 100644 --- a/src/pretix/locale/ko/LC_MESSAGES/django.po +++ b/src/pretix/locale/ko/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:44+0000\n" -"PO-Revision-Date: 2025-04-16 10:00+0000\n" -"Last-Translator: 조정화 \n" +"PO-Revision-Date: 2025-04-16 16:12+0000\n" +"Last-Translator: Raphael Michel \n" "Language-Team: Korean \n" "Language: ko\n" @@ -615,9 +615,9 @@ msgid "Enter a postal code in the format XXXX." msgstr "우편번호를 XXXX 형식으로 입력합니다." #: pretix/base/auth.py:146 -#, fuzzy, python-brace-format +#, python-brace-format msgid "{system} User" -msgstr "{시스템} 사용자" +msgstr "" #: pretix/base/auth.py:155 pretix/base/exporters/customers.py:67 #: pretix/base/exporters/orderlist.py:261 @@ -663,8 +663,8 @@ msgid_plural "" "passwords." msgstr[0] "" "비밀번호가 이전 비밀번호와 동일하지 않을 수 있습니다.\n" -"귀하의 비밀번호는 %(history_length) 이전 비밀번호와 동일하지 않을 수 있습니" -"다." +"귀하의 비밀번호는 %(history_length)s 이전 비밀번호와 동일하지 않을 수 " +"있습니다." #: pretix/base/channels.py:168 msgid "Online shop" @@ -2005,19 +2005,19 @@ msgid "Order locale" msgstr "주문 지역 설정" #: pretix/base/exporters/orderlist.py:275 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Gross at {rate} % tax" -msgstr "세율 {%}의 세금으로 총합" +msgstr "" #: pretix/base/exporters/orderlist.py:276 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Net at {rate} % tax" -msgstr "순세율 {세율}% 세금" +msgstr "순세율 %{rate} 세금" #: pretix/base/exporters/orderlist.py:277 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Tax value at {rate} % tax" -msgstr "세율 % 세금에서의 세금 가치" +msgstr "" #: pretix/base/exporters/orderlist.py:280 msgid "Invoice numbers" @@ -2056,9 +2056,9 @@ msgid "External customer ID" msgstr "외부고객 아이디" #: pretix/base/exporters/orderlist.py:293 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Paid by {method}" -msgstr "{방법}으로 결제됨" +msgstr "" #: pretix/base/exporters/orderlist.py:448 #: pretix/base/exporters/orderlist.py:894 @@ -2909,13 +2909,12 @@ msgid "You can use {markup_name} in this field." msgstr "이 필드에서 {markup_name}을(를) 사용할 수 있습니다." #: pretix/base/forms/__init__.py:178 -#, fuzzy, python-format +#, python-format msgid "" "Due to technical reasons you cannot set inputs, that need to be masked (e.g. " "passwords), to %(value)s." -msgstr "" -"기술적인 이유로 인해 마스크해야 하는 입력(예: 비밀번호)을 %(값)s로 설정할 수 " -"없습니다." +msgstr "기술적인 이유로 인해 마스크해야 하는 입력(예: 비밀번호)을 %(value)s로 설정할 " +"수 없습니다." #: pretix/base/forms/auth.py:61 pretix/base/forms/auth.py:179 msgid "Keep me logged in" @@ -3110,9 +3109,9 @@ msgstr "" "\"를 사용하려면 \"{\" 및 \"}\"으로 두 배로 표시해야 합니다." #: pretix/base/forms/validators.py:72 pretix/control/views/event.py:804 -#, fuzzy, python-format +#, python-format msgid "Invalid placeholder: {%(value)s}" -msgstr "잘못된 자리 표시자: {%(값)}" +msgstr "잘못된 자리 표시자: {%(value)s}" #: pretix/base/forms/widgets.py:68 #, python-format @@ -3140,10 +3139,10 @@ msgid "Individual customer" msgstr "개별 고객" #: pretix/base/invoice.py:138 -#, fuzzy, python-format +#, python-format msgctxt "invoice" msgid "Page %d of %d" -msgstr "%d 페이지" +msgstr "" #: pretix/base/invoice.py:375 msgctxt "invoice" @@ -3218,10 +3217,10 @@ msgid "Invoice {num}" msgstr "송장 {num}" #: pretix/base/invoice.py:621 -#, fuzzy, python-brace-format +#, python-brace-format msgctxt "invoice" msgid "Customer reference: {reference}" -msgstr "고객 참조: {참조}" +msgstr "고객 참조: {reference}" #: pretix/base/invoice.py:629 msgctxt "invoice" @@ -3291,7 +3290,7 @@ msgstr "단일 가격: {net_price} 순 / {gross_price} 총합" #, fuzzy, python-brace-format msgctxt "invoice" msgid "Single price: {price}" -msgstr "단일 가격: {가격}" +msgstr "단일 가격: {price}" #: pretix/base/invoice.py:742 pretix/base/invoice.py:748 msgctxt "invoice" @@ -3339,23 +3338,20 @@ msgid "Included taxes" msgstr "세금 포함" #: pretix/base/invoice.py:894 -#, fuzzy, python-brace-format +#, python-brace-format msgctxt "invoice" msgid "" "Using the conversion rate of 1:{rate} as published by the {authority} on " "{date}, this corresponds to:" msgstr "" -"날짜}에 {당국}에서 발표한 1:{rate}의 변환율을 사용하면 다음과 같습니다:" #: pretix/base/invoice.py:909 -#, fuzzy, python-brace-format +#, python-brace-format msgctxt "invoice" msgid "" "Using the conversion rate of 1:{rate} as published by the {authority} on " "{date}, the invoice total corresponds to {total}." msgstr "" -"{날짜}에 {당국}에서 게시한 1:{rate}의 변환율을 사용하면 송장 총액이 {총합}에 " -"해당합니다." #: pretix/base/invoice.py:923 msgid "Default invoice renderer (European-style letter)" @@ -5661,24 +5657,24 @@ msgid "This order is not yet approved by the event organizer." msgstr "이 주문은 아직 행사 주최자에 의해 승인되지 않았습니다" #: pretix/base/models/orders.py:1060 -#, fuzzy, python-brace-format +#, python-brace-format msgid "The ordered product \"{item}\" is no longer available." -msgstr "주문한 제품 \"{아이템}\"은 더 이상 사용할 수 없습니다." +msgstr "주문한 제품 \"{item}\"은 더 이상 사용할 수 없습니다." #: pretix/base/models/orders.py:1061 -#, fuzzy, python-brace-format +#, python-brace-format msgid "The seat \"{seat}\" is no longer available." -msgstr "좌석 \"{좌석}\"은 더 이상 사용할 수 없습니다." +msgstr "좌석 \"{seat}\"은 더 이상 사용할 수 없습니다." #: pretix/base/models/orders.py:1062 -#, fuzzy, python-brace-format +#, python-brace-format msgid "The voucher \"{voucher}\" no longer has sufficient budget." -msgstr "바우처 \"{바우처}\"에는 더 이상 예산이 충분하지 않습니다." +msgstr "바우처 \"{voucher}\"에는 더 이상 예산이 충분하지 않습니다." #: pretix/base/models/orders.py:1063 -#, fuzzy, python-brace-format +#, python-brace-format msgid "The voucher \"{voucher}\" has been used in the meantime." -msgstr "그동안 \"{바우처}\" 바우처가 사용되었습니다." +msgstr "그동안 \"{voucher}\" 바우처가 사용되었습니다." #: pretix/base/models/orders.py:1405 msgid "" @@ -5983,9 +5979,9 @@ msgid "Can change vouchers" msgstr "바우처를 변경할 수 있습니다" #: pretix/base/models/organizer.py:353 -#, fuzzy, python-format +#, python-format msgid "%(name)s on %(object)s" -msgstr "%(이름)의 %(객체)" +msgstr "" #: pretix/base/models/organizer.py:385 #: pretix/control/templates/pretixcontrol/events/create_basics.html:64 @@ -5998,9 +5994,9 @@ msgid "Teams" msgstr "팀들" #: pretix/base/models/organizer.py:406 -#, fuzzy, python-brace-format +#, python-brace-format msgid "Invite to team '{team}' for '{email}'" -msgstr "'이메일'을 위해 '팀'에 초대하기" +msgstr "" #: pretix/base/models/organizer.py:538 #: pretix/control/templates/pretixcontrol/organizers/channels.html:23 @@ -7314,7 +7310,7 @@ msgstr "" #: pretix/plugins/ticketoutputpdf/exporters.py:99 #, python-brace-format msgid "Attendee name: {part}" -msgstr "참석자 이름: {파트}" +msgstr "참석자 이름: {part}" #: pretix/base/pdf.py:671 msgid "Invoice address name for salutation" @@ -19392,7 +19388,7 @@ msgstr "" #: pretix/control/templates/pretixcontrol/order/transactions.html:11 #, python-format msgid "Back to order %(order)s" -msgstr "주문 %(주문)로 돌아가기" +msgstr "" #: pretix/control/templates/pretixcontrol/order/change.html:24 msgid "" -- 2.54.0 From 6cc7a2a0deb817e6b5e4b04327f5f332838522e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Apr 2025 22:26:20 +0200 Subject: [PATCH 55/89] Bump markdown from 3.7 to 3.8 (#5009) Bumps [markdown](https://github.com/Python-Markdown/markdown) from 3.7 to 3.8. - [Release notes](https://github.com/Python-Markdown/markdown/releases) - [Changelog](https://github.com/Python-Markdown/markdown/blob/master/docs/changelog.md) - [Commits](https://github.com/Python-Markdown/markdown/compare/3.7...3.8) --- updated-dependencies: - dependency-name: markdown dependency-version: '3.8' dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 4aff140d1..ef4552918 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,7 +64,7 @@ dependencies = [ "kombu==5.5.*", "libsass==0.23.*", "lxml", - "markdown==3.7", # 3.3.5 requires importlib-metadata>=4.4, but django-bootstrap3 requires importlib-metadata<3. + "markdown==3.8", # 3.3.5 requires importlib-metadata>=4.4, but django-bootstrap3 requires importlib-metadata<3. # We can upgrade markdown again once django-bootstrap3 upgrades or once we drop Python 3.6 and 3.7 "mt-940==4.30.*", "oauthlib==3.2.*", -- 2.54.0 From 6b58c1484ccbb8c5b552d7f6b740a0a1425a88ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Apr 2025 22:30:07 +0200 Subject: [PATCH 56/89] Update celery requirement from ==5.4.* to ==5.5.* (#5010) Updates the requirements on [celery](https://github.com/celery/celery) to permit the latest version. - [Release notes](https://github.com/celery/celery/releases) - [Changelog](https://github.com/celery/celery/blob/main/Changelog.rst) - [Commits](https://github.com/celery/celery/compare/v5.4.0rc1...v5.5.1) --- updated-dependencies: - dependency-name: celery dependency-version: 5.5.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index ef4552918..ff553d1cd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ dependencies = [ "babel", "BeautifulSoup4==4.13.*", "bleach==6.2.*", - "celery==5.4.*", + "celery==5.5.*", "chardet==5.2.*", "cryptography>=44.0.0", "css-inline==0.14.*", -- 2.54.0 From 4bf4cd748cf561dddabb5987207d7e8ccc681393 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 17 Apr 2025 11:34:51 +0200 Subject: [PATCH 57/89] Fix wrong flag for language code ca --- .../static/pretixbase/img/flags/catalonia.png | Bin 0 -> 186 bytes src/pretix/static/pretixcontrol/scss/_flags.scss | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 src/pretix/static/pretixbase/img/flags/catalonia.png diff --git a/src/pretix/static/pretixbase/img/flags/catalonia.png b/src/pretix/static/pretixbase/img/flags/catalonia.png new file mode 100644 index 0000000000000000000000000000000000000000..cff02bf57beffe726d6d3bfad2c93366018807f6 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!3HGD9`RZNDb50q$YLPv1;UJe1~U|a49ODL zh?3y^w370~qEv?R@^Zb*yzJuS#DY}4{G#;P?`))iirhV2978lFCjTj({@I?Hwc+E! zy%Mf$8$Rs#v&_YwnY;UjeHTx{p5=;;krDwi9U{9QJoc$OmGtnuwwl)$;|(=84|`2y c6k%6laPAd9r10U*R-lm#p00i_>zopr0Pr3=hyVZp literal 0 HcmV?d00001 diff --git a/src/pretix/static/pretixcontrol/scss/_flags.scss b/src/pretix/static/pretixcontrol/scss/_flags.scss index 9ab0c3bc9..a357fa3ba 100644 --- a/src/pretix/static/pretixcontrol/scss/_flags.scss +++ b/src/pretix/static/pretixcontrol/scss/_flags.scss @@ -92,7 +92,7 @@ pre[lang=bv], input[lang=bv], textarea[lang=bv], div[lang=bv] { background-image pre[lang=bw], input[lang=bw], textarea[lang=bw], div[lang=bw] { background-image: url(static('pretixbase/img/flags/bw.png')); } pre[lang=by], input[lang=by], textarea[lang=by], div[lang=by] { background-image: url(static('pretixbase/img/flags/by.png')); } pre[lang=bz], input[lang=bz], textarea[lang=bz], div[lang=bz] { background-image: url(static('pretixbase/img/flags/bz.png')); } -pre[lang=ca], input[lang=ca], textarea[lang=ca], div[lang=ca] { background-image: url(static('pretixbase/img/flags/ca.png')); } +pre[lang=ca], input[lang=ca], textarea[lang=ca], div[lang=ca] { background-image: url(static('pretixbase/img/flags/catalonia.png')); } pre[lang=cc], input[lang=cc], textarea[lang=cc], div[lang=cc] { background-image: url(static('pretixbase/img/flags/cc.png')); } pre[lang=cd], input[lang=cd], textarea[lang=cd], div[lang=cd] { background-image: url(static('pretixbase/img/flags/cd.png')); } pre[lang=cf], input[lang=cf], textarea[lang=cf], div[lang=cf] { background-image: url(static('pretixbase/img/flags/cf.png')); } -- 2.54.0 From d61aed105f4b211c96e8b9863b501074cb1e4b2b Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 17 Apr 2025 11:42:06 +0200 Subject: [PATCH 58/89] Add missing flag config for nb-no --- src/pretix/static/pretixcontrol/scss/_flags.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pretix/static/pretixcontrol/scss/_flags.scss b/src/pretix/static/pretixcontrol/scss/_flags.scss index a357fa3ba..17c69349d 100644 --- a/src/pretix/static/pretixcontrol/scss/_flags.scss +++ b/src/pretix/static/pretixcontrol/scss/_flags.scss @@ -222,7 +222,7 @@ pre[lang=ng], input[lang=ng], textarea[lang=ng], div[lang=ng] { background-image pre[lang=ni], input[lang=ni], textarea[lang=ni], div[lang=ni] { background-image: url(static('pretixbase/img/flags/ni.png')); } pre[lang=nl], input[lang=nl], textarea[lang=nl], div[lang=nl] { background-image: url(static('pretixbase/img/flags/nl.png')); } pre[lang=nl-informal], input[lang=nl-informal], textarea[lang=nl-informal], div[lang=nl-informal] { background-image: url(static('pretixbase/img/flags/nl.png')); } -pre[lang=no], input[lang=no], textarea[lang=no], div[lang=no] { background-image: url(static('pretixbase/img/flags/no.png')); } +pre[lang=nb-no], input[lang=nb-no], textarea[lang=nb-no], div[lang=nb-no] { background-image: url(static('pretixbase/img/flags/no.png')); } pre[lang=np], input[lang=np], textarea[lang=np], div[lang=np] { background-image: url(static('pretixbase/img/flags/np.png')); } pre[lang=nr], input[lang=nr], textarea[lang=nr], div[lang=nr] { background-image: url(static('pretixbase/img/flags/nr.png')); } pre[lang=nu], input[lang=nu], textarea[lang=nu], div[lang=nu] { background-image: url(static('pretixbase/img/flags/nu.png')); } -- 2.54.0 From d1bd719f66749e9c4c4c0d40a77e2ac6f53f8170 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 17 Apr 2025 13:33:16 +0200 Subject: [PATCH 59/89] Translations: Fix inconsistent wording --- src/pretix/locale/de/LC_MESSAGES/djangojs.po | 2 +- src/pretix/locale/de_Informal/LC_MESSAGES/djangojs.po | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pretix/locale/de/LC_MESSAGES/djangojs.po b/src/pretix/locale/de/LC_MESSAGES/djangojs.po index 9a53c7ea0..cd53c1622 100644 --- a/src/pretix/locale/de/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/de/LC_MESSAGES/djangojs.po @@ -1026,7 +1026,7 @@ msgstr "Vorherige Woche" #: pretix/static/pretixpresale/js/widget/widget.js:69 msgctxt "widget" msgid "Open seat selection" -msgstr "Saalplan öffnen" +msgstr "Sitzplan öffnen" #: pretix/static/pretixpresale/js/widget/widget.js:70 msgctxt "widget" diff --git a/src/pretix/locale/de_Informal/LC_MESSAGES/djangojs.po b/src/pretix/locale/de_Informal/LC_MESSAGES/djangojs.po index 9c48c8315..992c77424 100644 --- a/src/pretix/locale/de_Informal/LC_MESSAGES/djangojs.po +++ b/src/pretix/locale/de_Informal/LC_MESSAGES/djangojs.po @@ -1025,7 +1025,7 @@ msgstr "Vorherige Woche" #: pretix/static/pretixpresale/js/widget/widget.js:69 msgctxt "widget" msgid "Open seat selection" -msgstr "Saalplan öffnen" +msgstr "Sitzplan öffnen" #: pretix/static/pretixpresale/js/widget/widget.js:70 msgctxt "widget" -- 2.54.0 From c1656158f2948d772ac0b19b2b594031a04138d8 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sat, 19 Apr 2025 20:35:10 +0200 Subject: [PATCH 60/89] Item categories: Show IDs (required for widget usage) --- .../control/templates/pretixcontrol/items/categories.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pretix/control/templates/pretixcontrol/items/categories.html b/src/pretix/control/templates/pretixcontrol/items/categories.html index dc0035d6b..bb0fccd76 100644 --- a/src/pretix/control/templates/pretixcontrol/items/categories.html +++ b/src/pretix/control/templates/pretixcontrol/items/categories.html @@ -40,6 +40,10 @@
{{ c.internal_name|default:c.name }} +
+ + #{{ c.pk }} +
{{ c.get_category_type_display }} -- 2.54.0 From 94671f6f70790ef59f5f5bd714c3ad2a1783e7dc Mon Sep 17 00:00:00 2001 From: Martin Gross Date: Tue, 22 Apr 2025 10:49:45 +0200 Subject: [PATCH 61/89] Docs/Certificates: Fix download-path in API-call sample (Z#23189733) --- doc/api/resources/certificates.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/api/resources/certificates.rst b/doc/api/resources/certificates.rst index 243af4f87..91d1110d9 100644 --- a/doc/api/resources/certificates.rst +++ b/doc/api/resources/certificates.rst @@ -23,7 +23,7 @@ Certificate download .. sourcecode:: http - GET /api/v1/organizers/bigevents/events/sampleconf/orderpositions/23442/download/certificate/ HTTP/1.1 + GET /api/v1/organizers/bigevents/events/sampleconf/orderpositions/23442/certificate/ HTTP/1.1 Host: pretix.eu Accept: application/json, text/javascript @@ -38,7 +38,7 @@ Certificate download .. sourcecode:: http - GET /api/v1/organizers/bigevents/events/sampleconf/orderpositions/23442/download/certificate/?result=1f550651-ae7b-4911-a76c-2be8f348aaa5 HTTP/1.1 + GET /api/v1/organizers/bigevents/events/sampleconf/orderpositions/23442/certificate/?result=1f550651-ae7b-4911-a76c-2be8f348aaa5 HTTP/1.1 Host: pretix.eu Accept: application/json, text/javascript -- 2.54.0 From 025ee6710cc8bb6c55b56d994428768336c22044 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 22 Apr 2025 17:36:04 +0200 Subject: [PATCH 62/89] Fix #4982 -- API: Do not parse decimal input to float (#5012) --- src/pretix/api/views/order.py | 7 +++---- src/tests/api/test_orders.py | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/pretix/api/views/order.py b/src/pretix/api/views/order.py index a13731d5f..2ed339a6e 100644 --- a/src/pretix/api/views/order.py +++ b/src/pretix/api/views/order.py @@ -452,10 +452,9 @@ class EventOrderViewSet(OrderViewSetMixin, viewsets.ModelViewSet): comment = request.data.get('comment', None) cancellation_fee = request.data.get('cancellation_fee', None) if cancellation_fee: - try: - cancellation_fee = float(Decimal(cancellation_fee)) - except: - cancellation_fee = None + cancellation_fee = serializers.DecimalField(max_digits=13, decimal_places=2).to_internal_value( + cancellation_fee, + ) order = self.get_object() if not order.cancel_allowed(): diff --git a/src/tests/api/test_orders.py b/src/tests/api/test_orders.py index 3b59cfd46..adee24bea 100644 --- a/src/tests/api/test_orders.py +++ b/src/tests/api/test_orders.py @@ -1348,6 +1348,26 @@ def test_order_mark_canceled_pending(token_client, organizer, event, order): assert order.transactions.count() == 4 +@pytest.mark.django_db +def test_order_mark_canceled_pending_fee_with_tax(token_client, organizer, event, order, taxrule): + djmail.outbox = [] + event.settings.tax_rate_default = taxrule + resp = token_client.post( + '/api/v1/organizers/{}/events/{}/orders/{}/mark_canceled/'.format( + organizer.slug, event.slug, order.code + ), data={ + 'cancellation_fee': '7.00' + } + ) + assert resp.status_code == 200 + assert resp.data['status'] == Order.STATUS_PENDING + assert len(djmail.outbox) == 1 + with scopes_disabled(): + of = order.fees.get() + assert of.value == Decimal("7.00") + assert of.tax_rate == taxrule.rate + + @pytest.mark.django_db def test_order_mark_canceled_pending_fee_not_allowed(token_client, organizer, event, order): djmail.outbox = [] -- 2.54.0 From 515f79b20670a1f383db629fb38fce69d369953a Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Tue, 22 Apr 2025 19:47:20 +0200 Subject: [PATCH 63/89] A11y: do not use px-based fontsizes --- .../static/pretixpresale/scss/_forms.scss | 26 +++++++++ .../static/pretixpresale/scss/main.scss | 56 +++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/src/pretix/static/pretixpresale/scss/_forms.scss b/src/pretix/static/pretixpresale/scss/_forms.scss index 835cbd609..94f4d3923 100644 --- a/src/pretix/static/pretixpresale/scss/_forms.scss +++ b/src/pretix/static/pretixpresale/scss/_forms.scss @@ -31,6 +31,32 @@ a.btn, button.btn { display: inline; } +.form-horizontal { + /* Fix bootstrap using absolute px for fontsize-derived values based on rem */ + .radio, + .checkbox, + .radio-inline, + .checkbox-inline { + padding-top: calc(#{$padding-base-vertical} + 1px); + } + .radio, + .checkbox { + min-height: calc(#{$line-height-computed} + #{$padding-base-vertical} + 1px); + } + @media (min-width: $screen-sm-min) { + .control-label { + padding-top: calc(#{$padding-base-vertical} + 1px); + } + } +} +output { + padding-top: $padding-base-vertical; +} +.form-control-static { + padding-top: calc(#{$padding-base-vertical} + 1px); + padding-bottom: calc(#{$padding-base-vertical} + 1px); +} + .form-control + .form-control-feedback { /* Fix for https://github.com/FortAwesome/Font-Awesome/issues/4313 */ position: absolute; diff --git a/src/pretix/static/pretixpresale/scss/main.scss b/src/pretix/static/pretixpresale/scss/main.scss index 7d33e96c5..dde87c13c 100644 --- a/src/pretix/static/pretixpresale/scss/main.scss +++ b/src/pretix/static/pretixpresale/scss/main.scss @@ -1,6 +1,40 @@ // before variables.scss because it only affects presale, not control $body-bg: #f5f5f5 !default; +$font-size-base: 0.875rem !default;/* 14px/16px = 0.875rem */ + +$font-size-large: ($font-size-base * 1.25) !default; +$font-size-small: ($font-size-base * .85) !default; + +$font-size-h1: ($font-size-base * 2.6) !default; +$font-size-h2: ($font-size-base * 2.15) !default; +$font-size-h3: ($font-size-base * 1.7) !default; +$font-size-h4: ($font-size-base * 1.25) !default; +$font-size-h5: $font-size-base !default; +$font-size-h6: ($font-size-base * .85) !default; + +$line-height-base: 1.428571429 !default; +$line-height-computed: ($font-size-base * $line-height-base) !default; +$line-height-large: 1.3333333 !default; // extra decimals for Win 8.1 Chrome +$line-height-small: 1.5 !default; + + +$padding-base-vertical: 0.4285714286rem !default;/* 6px / 14px */ +$padding-base-horizontal: 0.8571428571rem !default;/* 12px / 14px */ +$padding-large-vertical: 0.7142857143rem !default;/* 10px / 14px */ +$padding-large-horizontal: 1.1428571429rem !default;/* 16px / 14px */ +$padding-small-vertical: 0.3571428571rem !default;/* 5px / 14px */ +$padding-small-horizontal: 0.7142857143rem !default;/* 10px / 14px */ +$padding-xs-vertical: 0.07142857143rem !default;/* 1px / 14px */ +$padding-xs-horizontal: 0.3571428571rem !default;/* 5px / 14px */ +$navbar-height: 3.5714285714rem !default;/* 50px / 14px */ + + +$input-height-base: ($line-height-computed + ($padding-base-vertical * 2) + 0.1428571429rem) !default; /* 2px@14px = 0.1428571429rem */ +$input-height-large: ($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 0.1428571429rem !default; +$input-height-small: ($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 0.1428571429rem !default; + + /* imports */ @import "../../pretixbase/scss/_theme_variables.scss"; @import "../../pretixbase/scss/bootstrap_vars.scss"; @@ -20,6 +54,28 @@ $body-bg: #f5f5f5 !default; @import "_checkout.scss"; @import "../../pretixbase/scss/webfont.scss"; +html { + font-size: 1em; +} + +/* fixe for bootstrap using px-values for fontsize */ +.panel-title { + font-size: ($font-size-base * 1.125); +} +.lead { + font-size: ($font-size-base * 1.15); +} +small, .small { + font-size: (100% * $font-size-small / $font-size-base); +} +pre { + padding: ($line-height-computed / 2); + font-size: $font-size-base; +} + + + + /* See https://github.com/pretix/pretix/pull/761 */ .bootstrap-datetimepicker-widget table td span { line-height: 1.8em; -- 2.54.0 From e1d2721747e166475159c50b833e82e679d8182f Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 23 Apr 2025 12:39:57 +0200 Subject: [PATCH 64/89] Stripe: Do not allow redirect in iframe for PayPal --- src/pretix/plugins/stripe/payment.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pretix/plugins/stripe/payment.py b/src/pretix/plugins/stripe/payment.py index 7eabc2ed9..2bf8ad4a2 100644 --- a/src/pretix/plugins/stripe/payment.py +++ b/src/pretix/plugins/stripe/payment.py @@ -1815,6 +1815,7 @@ class StripePayPal(StripeRedirectMethod): verbose_name = _('PayPal via Stripe') public_name = _('PayPal') method = 'paypal' + redirect_in_widget_allowed = False class StripeSwish(StripeRedirectMethod): -- 2.54.0 From 4ceb6171045c9056e70dd5b3d551bc4326e101b5 Mon Sep 17 00:00:00 2001 From: Renne Rocha Date: Wed, 16 Apr 2025 21:50:26 +0200 Subject: [PATCH 65/89] Translations: Update Portuguese (Brazil) Currently translated at 92.4% (5421 of 5863 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/pt_BR/ powered by weblate --- src/pretix/locale/pt_BR/LC_MESSAGES/django.po | 89 ++++++++----------- 1 file changed, 37 insertions(+), 52 deletions(-) diff --git a/src/pretix/locale/pt_BR/LC_MESSAGES/django.po b/src/pretix/locale/pt_BR/LC_MESSAGES/django.po index 2f26d5843..96c555a41 100644 --- a/src/pretix/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/pretix/locale/pt_BR/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:44+0000\n" -"PO-Revision-Date: 2025-04-01 05:00+0000\n" -"Last-Translator: Fernando Luiz \n" +"PO-Revision-Date: 2025-04-17 04:00+0000\n" +"Last-Translator: Renne Rocha \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" @@ -12021,11 +12021,9 @@ msgid "Province" msgstr "Província" #: pretix/base/settings.py:3721 -#, fuzzy -#| msgid "Price effect" msgctxt "address" msgid "Prefecture" -msgstr "Efeito no preço" +msgstr "Prefeitura" #: pretix/base/settings.py:3810 pretix/control/forms/event.py:228 msgid "" @@ -12915,8 +12913,8 @@ msgid "" "including the possible add-on products." msgstr "" "Se você permitir o check-in de ingressos complementares digitalizando o " -"tíquete principal, deverá selecionar um conjunto específico de produtos para " -"essa lista de check-in, incluindo apenas os possíveis produtos " +"ingresso principal, deverá selecionar um conjunto específico de produtos " +"para essa lista de check-in, incluindo apenas os possíveis produtos " "complementares." #: pretix/control/forms/checkin.py:176 @@ -14935,9 +14933,9 @@ msgid "" "to the order page to the user and the user will need to download his tickets " "again. The old versions will be invalid." msgstr "" -"Regenera os segredos do pedido e do ingresso. Você precisará reenviar o link " -"para a página do pedido para o usuário e o usuário precisará baixar seus " -"tíquetes novamente. As versões antigas serão inválidas." +"Gera novamente os segredos do pedido e do ingresso. Você precisará reenviar " +"o link para a página do pedido para o usuário e o usuário precisará baixar " +"seus ingressos novamente. As versões antigas se tornarão inválidas." #: pretix/control/forms/orders.py:724 pretix/plugins/sendmail/forms.py:196 msgid "Attach tickets" @@ -17908,7 +17906,7 @@ msgstr "Sua pesquisa não correspondeu a nenhum check-in." #: pretix/control/templates/pretixcontrol/checkin/checkins.html:52 msgid "You haven't scanned any tickets yet." -msgstr "Você ainda não escaneou nenhum tíquete." +msgstr "Você ainda não escaneou nenhum ingresso." #: pretix/control/templates/pretixcontrol/checkin/checkins.html:63 msgid "Time of scan" @@ -18147,7 +18145,7 @@ msgid "" msgstr "" "Sua regra sempre filtra por produto ou variação, mas os seguintes produtos " "ou variações não estão contidos em nenhuma das partes da regra, portanto, as " -"pessoas com esses tíquetes não entrarão:" +"pessoas com esses ingressos não entrarão:" #: pretix/control/templates/pretixcontrol/checkin/list_edit.html:113 msgid "Please double-check if this was intentional." @@ -18233,6 +18231,10 @@ msgid "" "the check-in list. No actual check-in will be performed and no modification " "to the system state is made." msgstr "" +"Esta ferramenta permite que você valide a configuração de check-in. Você " +"pode fornecer um código de barras mais alguns parâmetros opcionais e nós " +"exibiremos a resposta da lista de check-in. Nenhum check-in será realizado e " +"nenhuma modificação no estado do sistema será feita." #: pretix/control/templates/pretixcontrol/checkin/simulator.html:40 msgid "Simulate" @@ -18651,12 +18653,16 @@ msgid "" "If an add-on product is newly added, the system currently does not validate " "if there are required questions or fields that need to be filled out." msgstr "" +"Se um produto complementar é adicionado, o sistema atualmente não valida se " +"existem perguntas obrigatórias ou campos que precisam ser preenchidos." #: pretix/control/templates/pretixcontrol/event/cancel.html:64 msgid "" "Customers currently cannot switch to a product variation or add an add-on " "product that requires them to use a voucher or membership." msgstr "" +"Clientes atualmente não podem alterar para uma cariação de produto ou " +"adicionar um produto complementar que exige o uso de um cupom ou assinatura." #: pretix/control/templates/pretixcontrol/event/cancel.html:65 msgid "" @@ -19221,7 +19227,7 @@ msgstr "Notificação de lista de espera" #: pretix/control/templates/pretixcontrol/event/mail.html:117 msgid "Order custom mail" -msgstr "" +msgstr "E-mail customizado do pedido" #: pretix/control/templates/pretixcontrol/event/mail.html:120 msgid "Reminder to download tickets" @@ -19253,10 +19259,8 @@ msgid "Disabled" msgstr "Desabilitado" #: pretix/control/templates/pretixcontrol/event/payment.html:57 -#, fuzzy -#| msgid "Enable waiting list" msgid "Enable additional payment plugins" -msgstr "Habilitar lista de espera" +msgstr "Habilitar plugins adicionais de pagamento" #: pretix/control/templates/pretixcontrol/event/payment.html:66 msgid "Deadlines" @@ -19356,10 +19360,8 @@ msgid "Your changes have been saved." msgstr "Suas alterações foram salvas." #: pretix/control/templates/pretixcontrol/event/plugins.html:34 -#, fuzzy -#| msgid "Check results" msgid "Search results" -msgstr "Checar resultados" +msgstr "Resultados da busca" #: pretix/control/templates/pretixcontrol/event/plugins.html:56 msgid "Top recommendation" @@ -19379,16 +19381,12 @@ msgstr "Não disponível" #: pretix/control/templates/pretixcontrol/event/plugins.html:93 #: pretix/control/templates/pretixcontrol/event/plugins.html:105 -#, fuzzy -#| msgid "Login settings" msgid "Open plugin settings" -msgstr "Configurações de login" +msgstr "Abrir configurações de plugin" #: pretix/control/templates/pretixcontrol/event/plugins.html:94 -#, fuzzy -#| msgid "Go to shop" msgid "Go to" -msgstr "Ir para a loja" +msgstr "Ir para" #: pretix/control/templates/pretixcontrol/event/plugins.html:116 #: pretix/control/templates/pretixcontrol/oauth/app_delete.html:15 @@ -19717,6 +19715,10 @@ msgid "" "can later set for your items and re-use in places like ticket layouts. This " "is an useful timesaver if you create lots and lots of items." msgstr "" +"Você pode definir um conjunto de propriedades de metadado (i.e. variáveis) " +"que você pode definir posteriormente para seus itens e reutilizá-kas em " +"lugares como o modelo de ingresso. Isto pode economizar muito tempo caso " +"você crie muitos itens." #: pretix/control/templates/pretixcontrol/event/settings.html:418 #: pretix/control/templates/pretixcontrol/event/settings.html:446 @@ -19765,6 +19767,8 @@ msgid "" "You cannot delete a tax rule that is in use for a product or has been in use " "for any existing orders." msgstr "" +"Você não pode excluir uma regra fiscal que esteja em uso por um produto ou " +"que já tenha sido utilizada por algum pedido existente." #: pretix/control/templates/pretixcontrol/event/tax_edit.html:7 #: pretix/control/templates/pretixcontrol/event/tax_edit.html:14 @@ -22115,9 +22119,6 @@ msgid "Subject:" msgstr "Assunto:" #: pretix/control/templates/pretixcontrol/order/mail_history.html:59 -#, fuzzy -#| msgctxt "attachment_filename" -#| msgid "Calendar invite" msgid "Calendar invite" msgstr "Convite de calendário" @@ -25869,10 +25870,8 @@ msgid "The plugin {} is now active, you can configure it here:" msgstr "" #: pretix/control/views/event.py:453 -#, fuzzy -#| msgid "The relevant plugin is currently not active." msgid "The plugin {} is now active." -msgstr "O plugin relevante não está ativo no momento." +msgstr "O plugin {} está ativo." #: pretix/control/views/event.py:516 msgid "" @@ -26293,10 +26292,8 @@ msgid "Access for the selected application has been revoked." msgstr "Acesso à aplicação selecionada foi revogado." #: pretix/control/views/orders.py:192 -#, fuzzy -#| msgid "We could not save your changes. See below for details." msgid "We could not process your input. See below for details." -msgstr "Não conseguimos salvar suas alterações. Veja detalhes abaixo." +msgstr "Não conseguimos processar sua entrada. Veja detalhes abaixo." #: pretix/control/views/orders.py:265 #, python-brace-format @@ -27006,10 +27003,8 @@ msgid "" msgstr "" #: pretix/control/views/organizer.py:3294 -#, fuzzy -#| msgid "Your cart has been updated." msgid "The order of sales channels has been updated." -msgstr "Seu carrinho foi atualizado." +msgstr "O pedido dos canais de vendas foi alterado." #: pretix/control/views/pdf.py:83 msgid "The uploaded PDF file is too large." @@ -27246,10 +27241,8 @@ msgid "{num} vouchers have been created and sent out via email." msgstr "{num} cupons foram criados e enviados por email." #: pretix/control/views/waitinglist.py:172 -#, fuzzy -#| msgid "The selected event was not found." msgid "The selected entries have been deleted." -msgstr "O evento selecionado não foi encontrado." +msgstr "As entradas selecionadas foram excluídas." #: pretix/control/views/waitinglist.py:185 msgid "" @@ -27292,10 +27285,8 @@ msgid "This is not an event series." msgstr "Esta não é uma série de eventos." #: pretix/control/views/waitinglist.py:410 -#, fuzzy -#| msgid "Your cart has been updated." msgid "The waitinglist entry has been transferred." -msgstr "Seu carrinho foi atualizado." +msgstr "A entrada da lista de espera foi transferida." #: pretix/helpers/daterange.py:97 #, python-brace-format @@ -27379,10 +27370,8 @@ msgstr "Check-in automático" #: pretix/plugins/autocheckin/forms.py:60 #: pretix/plugins/autocheckin/models.py:82 -#, fuzzy -#| msgid "All payment providers" msgid "Only including usage of payment providers" -msgstr "Todos os meios de pagamento" +msgstr "Incluindo apenas a utilização de provedores de pagamento" #: pretix/plugins/autocheckin/forms.py:120 msgid "All variations" @@ -28219,10 +28208,8 @@ msgid "Go to organizer-level import" msgstr "" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:78 -#, fuzzy -#| msgid "Amount" msgid "Amount from" -msgstr "Valor" +msgstr "Valor a partir de" #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:80 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_form.html:86 @@ -28518,10 +28505,8 @@ msgid "max" msgstr "máx" #: pretix/plugins/banktransfer/views.py:366 -#, fuzzy -#| msgid "Order is not paid." msgid "Filter form is not valid." -msgstr "O pedido não foi pago." +msgstr "Formulário de filtro não é válido." #: pretix/plugins/banktransfer/views.py:409 msgid "All unresolved transactions have been discarded." -- 2.54.0 From 2ba2f9ff4bfe8183d04402e4e53a047470b59677 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sat, 19 Apr 2025 20:31:16 +0200 Subject: [PATCH 66/89] Translations: Update German Currently translated at 100.0% (5863 of 5863 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de/ powered by weblate --- src/pretix/locale/de/LC_MESSAGES/django.po | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/pretix/locale/de/LC_MESSAGES/django.po b/src/pretix/locale/de/LC_MESSAGES/django.po index a27df52b7..3762c0f08 100644 --- a/src/pretix/locale/de/LC_MESSAGES/django.po +++ b/src/pretix/locale/de/LC_MESSAGES/django.po @@ -5,7 +5,7 @@ msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:44+0000\n" -"PO-Revision-Date: 2025-03-25 16:25+0000\n" +"PO-Revision-Date: 2025-04-19 18:35+0000\n" "Last-Translator: Raphael Michel \n" "Language-Team: German \n" @@ -14,7 +14,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.4\n" +"X-Generator: Weblate 5.11\n" "X-Poedit-Bookmarks: -1,-1,904,-1,-1,-1,-1,-1,-1,-1\n" #: pretix/_base_settings.py:87 @@ -24552,8 +24552,8 @@ msgid "" msgstr "" "Bitte beachten Sie, dass der Editor nur eine grobe Vorschau bieten kann. " "Einige Details, z.B. die Textdarstellung, können auf den finalen Tickets " -"leicht anders aussehen. Sie können den \"Vorschau\"-Knopf rechts benutzen um " -"eine präzisere Vorschau zu erhalten." +"leicht anders aussehen. Sie können den \"Vorschau\"-Button rechts benutzen " +"um eine präzisere Vorschau zu erhalten." #: pretix/control/templates/pretixcontrol/pdf/index.html:123 msgid "" @@ -27832,7 +27832,7 @@ msgid "" "into your account." msgstr "" "Bitte beachten Sie, dass sie die Zwei-Faktor-Authentifizierung noch mit dem " -"unten verfügbaren Knopf für Ihr Konto aktiviert müssen, damit der zweite " +"unten verfügbaren Button für Ihr Konto aktiviert müssen, damit der zweite " "Faktor für den Login erforderlich ist." #: pretix/control/views/user.py:501 pretix/control/views/user.py:561 @@ -30011,7 +30011,7 @@ msgstr "" msgid "" "Please click the \"Pay with PayPal\" button below to start your payment." msgstr "" -"Bitte klicken Sie auf den \"Mit PayPal bezahlen\" Knopf, um mit der Zahlung " +"Bitte klicken Sie auf den Button \"Mit PayPal bezahlen\", um mit der Zahlung " "zu beginnen." #: pretix/plugins/paypal2/templates/pretixplugins/paypal2/checkout_payment_form.html:13 @@ -34060,7 +34060,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/event/order.html:468 msgid "You can cancel this order using the following button." -msgstr "Sie können diese Bestellung mit dem folgenden Knopf stornieren." +msgstr "Sie können diese Bestellung mit dem folgenden Button stornieren." #: pretix/presale/templates/pretixpresale/event/order_cancel.html:11 #, python-format -- 2.54.0 From f051ddca2dc3200d78dfa13dd34af40e47db0b3d Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sat, 19 Apr 2025 20:31:59 +0200 Subject: [PATCH 67/89] Translations: Update German (informal) (de_Informal) Currently translated at 100.0% (5863 of 5863 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/de_Informal/ powered by weblate --- src/pretix/locale/de_Informal/LC_MESSAGES/django.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/pretix/locale/de_Informal/LC_MESSAGES/django.po b/src/pretix/locale/de_Informal/LC_MESSAGES/django.po index df470617a..7983448f3 100644 --- a/src/pretix/locale/de_Informal/LC_MESSAGES/django.po +++ b/src/pretix/locale/de_Informal/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:44+0000\n" -"PO-Revision-Date: 2025-03-25 16:25+0000\n" +"PO-Revision-Date: 2025-04-19 18:35+0000\n" "Last-Translator: Raphael Michel \n" "Language-Team: German (informal) \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.4\n" +"X-Generator: Weblate 5.11\n" #: pretix/_base_settings.py:87 msgid "English" @@ -24514,7 +24514,7 @@ msgid "" msgstr "" "Bitte beachte, dass der Editor nur eine grobe Vorschau bieten kann. Einige " "Details, z.B. die Textdarstellung, können auf den finalen Tickets leicht " -"anders aussehen. Du kannst den \"Vorschau\"-Knopf rechts benutzen um eine " +"anders aussehen. Du kannst den \"Vorschau\"-Button rechts benutzen um eine " "präzisere Vorschau zu erhalten." #: pretix/control/templates/pretixcontrol/pdf/index.html:123 @@ -27785,7 +27785,7 @@ msgid "" "into your account." msgstr "" "Bitte beachte, dass du die Zwei-Faktor-Authentifizierung noch mit dem unten " -"verfügbaren Knopf für dein Konto aktivieren musst, damit der zweite Faktor " +"verfügbaren Button für dein Konto aktivieren musst, damit der zweite Faktor " "für den Login erforderlich ist." #: pretix/control/views/user.py:501 pretix/control/views/user.py:561 @@ -29961,7 +29961,7 @@ msgstr "" msgid "" "Please click the \"Pay with PayPal\" button below to start your payment." msgstr "" -"Bitte klicke auf den \"Mit PayPal bezahlen\" Knopf, um mit der Zahlung zu " +"Bitte klicke auf den Button \"Mit PayPal bezahlen\", um mit der Zahlung zu " "beginnen." #: pretix/plugins/paypal2/templates/pretixplugins/paypal2/checkout_payment_form.html:13 @@ -34001,7 +34001,7 @@ msgstr "" #: pretix/presale/templates/pretixpresale/event/order.html:468 msgid "You can cancel this order using the following button." -msgstr "Du kannst diese Bestellung mit dem folgenden Knopf stornieren." +msgstr "Du kannst diese Bestellung mit dem folgenden Button stornieren." #: pretix/presale/templates/pretixpresale/event/order_cancel.html:11 #, python-format -- 2.54.0 From 2b245f727e412c8ba70f8a272d66683fcbf0ab9e Mon Sep 17 00:00:00 2001 From: Paul Berschick Date: Tue, 22 Apr 2025 14:49:54 +0200 Subject: [PATCH 68/89] Translations: Update Catalan Currently translated at 32.5% (1909 of 5863 strings) Translation: pretix/pretix Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/ca/ powered by weblate --- src/pretix/locale/ca/LC_MESSAGES/django.po | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/pretix/locale/ca/LC_MESSAGES/django.po b/src/pretix/locale/ca/LC_MESSAGES/django.po index 18fc19e00..20bfb870c 100644 --- a/src/pretix/locale/ca/LC_MESSAGES/django.po +++ b/src/pretix/locale/ca/LC_MESSAGES/django.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:44+0000\n" -"PO-Revision-Date: 2023-11-19 06:00+0000\n" -"Last-Translator: Adrià Vilanova Martínez \n" +"PO-Revision-Date: 2025-04-22 15:36+0000\n" +"Last-Translator: Paul Berschick \n" "Language-Team: Catalan \n" "Language: ca\n" @@ -18,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.1.1\n" +"X-Generator: Weblate 5.11\n" #: pretix/_base_settings.py:87 msgid "English" @@ -33010,7 +33009,7 @@ msgstr "quantitat mínima de la comanda: %(num)s" #: pretix/presale/templates/pretixpresale/event/voucher.html:342 msgctxt "price" msgid "free" -msgstr "" +msgstr "gratuït" #: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:78 #: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:65 -- 2.54.0 From 48c2d57cd4ec34e9d689693e64f1e9066c150388 Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Wed, 23 Apr 2025 14:34:50 +0200 Subject: [PATCH 69/89] [A11y] fix border contrast for inputs --- src/pretix/static/pretixbase/scss/_theme.scss | 8 +++++--- src/pretix/static/pretixpresale/scss/main.scss | 17 ++++++++++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/pretix/static/pretixbase/scss/_theme.scss b/src/pretix/static/pretixbase/scss/_theme.scss index 9e7d0eb24..c9feb9e15 100644 --- a/src/pretix/static/pretixbase/scss/_theme.scss +++ b/src/pretix/static/pretixbase/scss/_theme.scss @@ -41,20 +41,22 @@ input[type=number]::-webkit-outer-spin-button { } .btn-default { - box-shadow: 0px 0px 0px 1px #cccccc inset; + box-shadow: 0px 0px 0px 1px $input-border inset; box-sizing: border-box; } .btn-default:hover, .btn-default:focus { - box-shadow: 0px 0px 0px 1px #cccccc inset, inset 0 1px 3px 0 #BFBFBF; + box-shadow: 0px 0px 0px 1px $input-border inset, inset 0 1px 3px 0 #BFBFBF; background: $btn-default-bg; } .btn-default:active, .btn-default:active:hover, .btn-default:active:focus { - box-shadow: 0px 0px 0px 1px #cccccc inset, inset 0 1px 8px 0 #BFBFBF; background: $btn-default-bg; outline: 0; } +.btn-default.active, .btn-default.active:hover, .btn-default.active:focus { + box-shadow: 0px 0px 0px 1px $input-border inset, inset 0 1px 8px 0 #BFBFBF; +} .btn-primary:hover, .btn-primary:focus { box-shadow: inset 0 1px 3px 0 var(--pretix-brand-primary-shade-25); diff --git a/src/pretix/static/pretixpresale/scss/main.scss b/src/pretix/static/pretixpresale/scss/main.scss index dde87c13c..379161fa3 100644 --- a/src/pretix/static/pretixpresale/scss/main.scss +++ b/src/pretix/static/pretixpresale/scss/main.scss @@ -1,5 +1,6 @@ // before variables.scss because it only affects presale, not control $body-bg: #f5f5f5 !default; +$input-border: #949494; $font-size-base: 0.875rem !default;/* 14px/16px = 0.875rem */ @@ -103,10 +104,24 @@ a, .btn-link { /* see line 26, pretix/static/bootstrap/scss/bootstrap/_buttons.scss */ button:focus, a:focus, .btn:focus, summary:focus, /*button:active, a:active, .btn:active, summary:active,*/ -button:active:focus, a:active:focus, .btn:active:focus, summary:active:focus { +button:active:focus, a:active:focus, .btn:active:focus, summary:active:focus, +input:focus, .form-control:focus, .btn-checkbox:has(input:focus), +.input-item-count-group:has(input:focus), .input-group-price:has(input:focus) { outline: 2px solid $link-hover-color; outline-offset: 2px; } +input:focus, .form-control:focus { + border-color: $input-border; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-checkbox input:focus, .input-item-count-group input:focus, .input-group-price input:focus { + outline: none; +} +/* border-radius on these containers is needed for correctly rounded focus-outlines */ +.input-item-count-group, .input-group-price { + border-radius: var(--pretix-border-radius-base); +} footer { clear: both; -- 2.54.0 From 9d01072880f07e1e6531a982c68c7fdb8a381283 Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Wed, 23 Apr 2025 14:36:28 +0200 Subject: [PATCH 70/89] [A11y] allow users to scale website * on smaller screens, make fontsize bigger for inputs to not have iPhones zoom on focus --- src/pretix/base/templates/pretixbase/email/base.html | 2 +- src/pretix/presale/templates/pretixpresale/base.html | 2 +- .../presale/templates/pretixpresale/event/seatingplan.html | 2 +- src/pretix/static/pretixpresale/scss/main.scss | 7 +++++++ 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/pretix/base/templates/pretixbase/email/base.html b/src/pretix/base/templates/pretixbase/email/base.html index ef8809ac1..43a14a5d9 100644 --- a/src/pretix/base/templates/pretixbase/email/base.html +++ b/src/pretix/base/templates/pretixbase/email/base.html @@ -4,7 +4,7 @@ - +