Compare commits

..
22 changed files with 2551 additions and 2371 deletions
+1 -1
View File
@@ -173,7 +173,7 @@ Datetime String in ISO 8601 format ``"2017-12-27T10:00:00Z"``
with timezone (normally UTC) ``"2017-12-27T10:00:00.596934Z"``,
``"2017-12-27T10:00:00+02:00"``
Date String in ISO 8601 format ``2017-12-27``
Multi-lingual string Object of strings ``{"en": "red", "de": "rot", "de-informal": "rot"}``
Multi-lingual string Object of strings ``{"en": "red", "de": "rot", "de_Informal": "rot"}``
Money String with decimal number ``"23.42"``
Currency String with ISO 4217 code ``"EUR"``, ``"USD"``
Relative datetime *either* String in ISO 8601 ``"2017-12-27T10:00:00.596934Z"``,
+93 -91
View File
@@ -40,30 +40,30 @@
"license": "MIT"
},
"node_modules/@babel/helper-string-parser": {
"version": "7.29.7",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
"integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.29.7",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
"integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
"version": "7.28.5",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
"integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
"version": "7.29.9",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz",
"integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==",
"version": "7.29.0",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
"integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
"license": "MIT",
"dependencies": {
"@babel/types": "^7.29.8"
"@babel/types": "^7.29.0"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -73,13 +73,13 @@
}
},
"node_modules/@babel/types": {
"version": "7.29.8",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
"integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
"version": "7.29.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
"integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.29.7",
"@babel/helper-validator-identifier": "^7.29.7"
"@babel/helper-string-parser": "^7.27.1",
"@babel/helper-validator-identifier": "^7.28.5"
},
"engines": {
"node": ">=6.9.0"
@@ -378,9 +378,9 @@
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz",
"integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==",
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"license": "MIT"
},
"node_modules/@napi-rs/wasm-runtime": {
@@ -1447,53 +1447,53 @@
"license": "MIT"
},
"node_modules/@vue/compiler-core": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.43.tgz",
"integrity": "sha512-zdiLhnbe1QQqgDT8xZMpNmyqZ3qlI+/Q/FHQco57Kwl/b05HhCzN6eVGN9QU9rbga4CrS0H5SYY8VGHZCt/1Hg==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.30.tgz",
"integrity": "sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.29.8",
"@vue/shared": "3.5.43",
"@babel/parser": "^7.29.0",
"@vue/shared": "3.5.30",
"entities": "^7.0.1",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-dom": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.43.tgz",
"integrity": "sha512-PEZoAk3NQmsn/ejMzSOCyTYqwGqczrWm70PuhBKjjv1+TCoQAaO/zOqNwjV+honlNstT5ILxtc+8r8UUfj+iEQ==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.30.tgz",
"integrity": "sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==",
"license": "MIT",
"dependencies": {
"@vue/compiler-core": "3.5.43",
"@vue/shared": "3.5.43"
"@vue/compiler-core": "3.5.30",
"@vue/shared": "3.5.30"
}
},
"node_modules/@vue/compiler-sfc": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.43.tgz",
"integrity": "sha512-FCbrG3XNCRl+js3huuKx4IVHBLTvMkJhVepjbxSPu1gn4yWLaYtGNQdjJGZaMytXB6qb76qQDDmDSLy/vkmleQ==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.30.tgz",
"integrity": "sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.29.8",
"@vue/compiler-core": "3.5.43",
"@vue/compiler-dom": "3.5.43",
"@vue/compiler-ssr": "3.5.43",
"@vue/shared": "3.5.43",
"@babel/parser": "^7.29.0",
"@vue/compiler-core": "3.5.30",
"@vue/compiler-dom": "3.5.30",
"@vue/compiler-ssr": "3.5.30",
"@vue/shared": "3.5.30",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.21",
"postcss": "^8.5.28",
"postcss": "^8.5.8",
"source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-ssr": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.43.tgz",
"integrity": "sha512-GF62orf7KiJX9RqrHNGrYBudsQGD0OhJ5nDs90O8UiDuS40+YMYomiXu6w6EuvtXuRDc3MSNis3EaaSKAVSWpg==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.30.tgz",
"integrity": "sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==",
"license": "MIT",
"dependencies": {
"@vue/compiler-dom": "3.5.43",
"@vue/shared": "3.5.43"
"@vue/compiler-dom": "3.5.30",
"@vue/shared": "3.5.30"
}
},
"node_modules/@vue/eslint-config-typescript": {
@@ -1537,51 +1537,53 @@
}
},
"node_modules/@vue/reactivity": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.43.tgz",
"integrity": "sha512-G/c9GyOZNI2jVaaS6OX1EF1SSFSv7H0ERqNTl4+DTFMlZmB5eVAB53aLQNam/7NL2NPtaDD7RdVrzf8uJzMuOA==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.30.tgz",
"integrity": "sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q==",
"license": "MIT",
"dependencies": {
"@vue/shared": "3.5.43"
"@vue/shared": "3.5.30"
}
},
"node_modules/@vue/runtime-core": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.43.tgz",
"integrity": "sha512-hU6U6VnVhBGQDpvlnnDlIB8ZGJBiOcgk2lh/0InltHiz3D8oSkluvuvY+do1G2H3+udeKFsmaBlgVYP7gXQzEw==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.30.tgz",
"integrity": "sha512-e0Z+8PQsUTdwV8TtEsLzUM7SzC7lQwYKePydb7K2ZnmS6jjND+WJXkmmfh/swYzRyfP1EY3fpdesyYoymCzYfg==",
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.5.43",
"@vue/shared": "3.5.43"
"@vue/reactivity": "3.5.30",
"@vue/shared": "3.5.30"
}
},
"node_modules/@vue/runtime-dom": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.43.tgz",
"integrity": "sha512-Bb2Jc0YjjJdMt1SJmb9b2L/IWd3I8lIT9x9eS/xvvP9CiVgna0ffua74xKRmt4/uSJ+0r4iN8ex1jrqkhQGWQw==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.30.tgz",
"integrity": "sha512-2UIGakjU4WSQ0T4iwDEW0W7vQj6n7AFn7taqZ9Cvm0Q/RA2FFOziLESrDL4GmtI1wV3jXg5nMoJSYO66egDUBw==",
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.5.43",
"@vue/runtime-core": "3.5.43",
"@vue/shared": "3.5.43",
"@vue/reactivity": "3.5.30",
"@vue/runtime-core": "3.5.30",
"@vue/shared": "3.5.30",
"csstype": "^3.2.3"
}
},
"node_modules/@vue/server-renderer": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.43.tgz",
"integrity": "sha512-l2Ygjv9NehV94PSBxNWsAHC0j/eIIKbn92mBuWXAPGLnn6HfJ6MH5ubsd+Nk0YoZ5FRuxWI1P2VSoh+dbPQhCQ==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.30.tgz",
"integrity": "sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ==",
"license": "MIT",
"dependencies": {
"@vue/compiler-ssr": "3.5.43",
"@vue/runtime-dom": "3.5.43",
"@vue/shared": "3.5.43"
"@vue/compiler-ssr": "3.5.30",
"@vue/shared": "3.5.30"
},
"peerDependencies": {
"vue": "3.5.30"
}
},
"node_modules/@vue/shared": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.43.tgz",
"integrity": "sha512-uksS7YGMR5NZyr4JNq0Rp+QyLns0ueaz20KwzIPW9R0LH1Vnt4E+XUM29PNseEbf1www2gOuhuDi5AKOIXag9Q==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.30.tgz",
"integrity": "sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==",
"license": "MIT"
},
"node_modules/acorn": {
@@ -3188,9 +3190,9 @@
"license": "MIT"
},
"node_modules/nanoid": {
"version": "3.3.20",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz",
"integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==",
"version": "3.3.16",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz",
"integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==",
"funding": [
{
"type": "github",
@@ -3364,9 +3366,9 @@
}
},
"node_modules/postcss": {
"version": "8.5.29",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.29.tgz",
"integrity": "sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==",
"version": "8.5.23",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.23.tgz",
"integrity": "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==",
"funding": [
{
"type": "opencollective",
@@ -3383,18 +3385,18 @@
],
"license": "MIT",
"dependencies": {
"nanoid": "^3.3.19",
"nanoid": "^3.3.16",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.2"
"source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/postcss-selector-parser": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.6.tgz",
"integrity": "sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw==",
"version": "7.1.5",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.5.tgz",
"integrity": "sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4160,9 +4162,9 @@
}
},
"node_modules/smol-toml": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.9.0.tgz",
"integrity": "sha512-hpd+HLON7HdZXqYchMM/+LaTTbdK0AU3NngIJ4KVyWbY9bfQqdL9cD+4yf6dUoU2Ap4VsU0JkQi6FxAI1B2mXQ==",
"version": "1.7.1",
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.1.tgz",
"integrity": "sha512-PPlsspAZ4jbMBu5DMFhfUGDQLu/vrL4SyBROVS37x8ynnVmFIs1VPBz1Co8Xks3TvpIaZXmU85y4DrQ+UyVFoQ==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
@@ -4183,9 +4185,9 @@
}
},
"node_modules/source-map-js": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz",
"integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==",
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
@@ -4590,16 +4592,16 @@
"license": "MIT"
},
"node_modules/vue": {
"version": "3.5.43",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.43.tgz",
"integrity": "sha512-o5qZoksdnjIKvW1srZ3ab7pcDNYAerBjRe54D0LBLfRdCYFrSgBHVXokMas35czQc0//lmx4/tuY4ZNQ+Rf2Ng==",
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.30.tgz",
"integrity": "sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg==",
"license": "MIT",
"dependencies": {
"@vue/compiler-dom": "3.5.43",
"@vue/compiler-sfc": "3.5.43",
"@vue/runtime-dom": "3.5.43",
"@vue/server-renderer": "3.5.43",
"@vue/shared": "3.5.43"
"@vue/compiler-dom": "3.5.30",
"@vue/compiler-sfc": "3.5.30",
"@vue/runtime-dom": "3.5.30",
"@vue/server-renderer": "3.5.30",
"@vue/shared": "3.5.30"
},
"peerDependencies": {
"typescript": "*"
+4 -4
View File
@@ -33,7 +33,7 @@ dependencies = [
"bleach==6.4.*",
"celery==5.6.*",
"chardet==5.2.*",
"cryptography>=50.0.2",
"cryptography>=50.0.1",
"css-inline==0.21.*",
"defusedcsv>=3.0.0",
"dnspython==2.*",
@@ -41,7 +41,7 @@ dependencies = [
"django-bootstrap3==26.2",
"django-compressor==4.6.0",
"django-countries==9.1.*",
"django-filter==26.2",
"django-filter==26.1",
"django-formset-js-improved==0.5.0.5",
"django-formtools==2.7",
"django-hierarkey==2.0.*,>=2.0.2",
@@ -94,11 +94,11 @@ dependencies = [
"redis==7.4.*",
"reportlab==5.0.*",
"requests==2.34.*",
"sentry-sdk==2.71.*",
"sentry-sdk==2.70.*",
"sepaxml==2.7.*",
"stripe==7.9.*",
"text-unidecode==1.*",
"tlds>=2026093003",
"tlds>=2026072401",
"tqdm==4.*",
"ua-parser==1.0.*",
"vobject==0.9.*",
+1 -3
View File
@@ -261,9 +261,7 @@ class ItemAddOnSerializer(serializers.ModelSerializer):
def validate(self, data):
data = super().validate(data)
full_data = self.to_internal_value(self.to_representation(self.instance)) if self.instance else {}
full_data.update(data)
ItemAddOn.clean_max_min_count(full_data.get('max_count'), full_data.get('min_count'))
ItemAddOn.clean_max_min_count(data.get('max_count'), data.get('min_count'))
return data
+35 -10
View File
@@ -92,9 +92,9 @@ from pretix.base.services.invoices import (
regenerate_invoice, transmit_invoice,
)
from pretix.base.services.orders import (
OrderChangeManager, OrderError, _order_placed_email,
_order_placed_email_attendee, approve_order, cancel_order, deny_order,
extend_order, mark_order_expired, mark_order_refunded, reactivate_order,
OrderChangeManager, OrderError, _attendee_mail_send_helper,
_order_placed_email, approve_order, cancel_order, deny_order, extend_order,
mark_order_expired, mark_order_refunded, reactivate_order,
)
from pretix.base.services.pricing import get_price
from pretix.base.services.tickets import generate
@@ -805,17 +805,42 @@ class EventOrderViewSet(OrderViewSetMixin, viewsets.ModelViewSet):
log_entry, invoice, [payment] if payment else [], is_free=free_flow
)
if email_attendees:
for p in order.positions.all():
if p.addon_to_id is None and p.attendee_email and p.attendee_email != order.email:
_order_placed_email_attendee(request.event, order, p, email_attendees_template, subject_attendees_template,
log_entry, is_free=free_flow)
ev = request.event
# todo re note: order_placed_email for attendees (formerly services/orders _order_placed_email_attendee)
_attendee_mail_send_helper(
event=ev,
order=order,
positions=order.positions.all(),
template=email_attendees_template,
subject=subject_attendees_template,
log_entry_type=log_entry,
attach_tickets=True,
attach_ical=ev.settings.mail_attach_ical and (
not ev.settings.mail_attach_ical_paid_only or
free_flow or
order.valid_if_pending
),
attach_other_files=[a for a in [
ev.settings.get('mail_attachment_new_order', as_type=str, default='')[len('file://'):]
] if a],
)
if not free_flow and order.status == Order.STATUS_PAID and payment:
payment._send_paid_mail(invoice, None, '')
if self.request.event.settings.mail_send_order_paid_attendee:
for p in order.positions.all():
if p.addon_to_id is None and p.attendee_email and p.attendee_email != order.email:
payment._send_paid_mail_attendee(p, None)
ev = request.event
# todo re note: paid_mail for attendees (formerly models/orders _send_paid_mail_attendee)
_attendee_mail_send_helper(
event=ev,
order=order,
positions=order.positions.all(),
template=ev.settings.mail_text_order_paid_attendee,
subject=ev.settings.mail_subject_order_paid_attendee,
log_entry_type='pretix.event.order.email.order_paid',
invoices=[],
attach_tickets=True,
attach_ical=ev.settings.mail_attach_ical
)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
+17 -3
View File
@@ -2021,9 +2021,23 @@ class OrderPayment(models.Model):
if send_mail and self.order.sales_channel.identifier in self.order.event.settings.mail_sales_channel_placed_paid:
self._send_paid_mail(invoice if transmit_invoice_mail else None, user, mail_text)
if self.order.event.settings.mail_send_order_paid_attendee:
for p in self.order.positions.all():
if p.addon_to_id is None and p.attendee_email and p.attendee_email != self.order.email:
self._send_paid_mail_attendee(p, user)
# todo re note: paid_mail for attendees (formerly models/orders _send_paid_mail_attendee)
from pretix.base.services.orders import (
_attendee_mail_send_helper,
)
_attendee_mail_send_helper(
event=self.order.event,
order=self.order,
positions=self.order.positions.all(),
template=self.order.event.settings.mail_text_order_paid_attendee,
subject=self.order.event.settings.mail_subject_order_paid_attendee,
log_entry_type='pretix.event.order.email.order_paid',
user=user,
invoices=[],
attach_tickets=True,
attach_ical=self.order.event.settings.mail_attach_ical,
)
if invoice and not transmit_invoice_mail:
transmit_invoice.apply_async(args=(self.order.event_id, invoice.pk, False))
+33 -16
View File
@@ -39,7 +39,8 @@ from pretix.base.models import (
from pretix.base.services.locking import LockTimeoutException
from pretix.base.services.mail import mail
from pretix.base.services.orders import (
OrderChangeManager, OrderError, _cancel_order, _try_auto_refund,
OrderChangeManager, OrderError, _attendee_mail_send_helper, _cancel_order,
_try_auto_refund,
)
from pretix.base.services.tasks import ProfiledEventTask
from pretix.base.services.tax import split_fee_for_taxes
@@ -79,22 +80,38 @@ def _send_mail(order: Order, subject: LazyI18nString, message: LazyI18nString, s
user,
)
for p in positions:
if subevent and p.subevent_id != subevent.id:
continue
# todo before pr ready: (aka note to myself)
# check if we use a checkbox in the form here
# (because before, we didn't check for it and maybe we don't want to here)
# also: do we really want to inform attendees about the refund_amount
# or do we need to because else the template does not work?
_attendee_mail_send_helper(
event=order.event,
order=order,
positions=positions,
template=message,
subject=subject,
log_entry_type='pretix.event.order.email.event_canceled',
user=user,
subevent=subevent,
)
if p.addon_to_id is None and p.attendee_email and p.attendee_email != order.email:
email_context = get_email_context(event_or_subevent=p.subevent or order.event,
event=order.event,
refund_amount=refund_amount,
position_or_address=p,
order=order, position=p)
order.send_mail(
subject, message, email_context,
'pretix.event.order.email.event_canceled',
position=p,
user=user
)
# for p in positions:
# if subevent and p.subevent_id != subevent.id:
# continue
#
# if p.addon_to_id is None and p.attendee_email and p.attendee_email != order.email:
# email_context = get_email_context(event_or_subevent=p.subevent or order.event,
# event=order.event,
# refund_amount=refund_amount,
# position_or_address=p,
# order=order, position=p)
# order.send_mail(
# subject, message, email_context,
# 'pretix.event.order.email.event_canceled',
# position=p,
# user=user
# )
@app.task(base=ProfiledEventTask, bind=True, max_retries=5, default_retry_delay=1, throws=(OrderError,))
+116 -21
View File
@@ -114,6 +114,76 @@ from pretix.presale.productlist import prepare_item_list_for_shop
from pretix.testutils.middleware import debugflags_var
# todo before pr ready: (aka note to myself)
# think about placing this helper function somewhere better
# also: check those mail send functions, instead of replacing
# maybe we still want to use them here instead of generic send_mail
# and/or maybe we want to generalize this thing to also include order mails
# (let's maybe not rewrite the whole mail logic?!)
# but also, remember to write tests - a whole bunch of tests
def _attendee_mail_send_helper(
event: Event,
order: Order,
positions: list,
template,
subject,
user,
invoices: list = None,
log_entry_type: str = 'pretix.event.order.email.sent',
attach_tickets: bool = False,
attach_ical: bool = False,
attach_other_files: list = None,
subevent: SubEvent = None,
):
parent_op = None
sent_to_positions = set()
for p in positions:
if subevent and p.subevent_id != subevent.id:
continue
if p.addon_to_id is None:
# this op might have matching add-ons, so save for later
parent_op = p
elif not parent_op or p.addon_to_id != parent_op.id:
# this op is an add-on, but not to the current parent_op
# something got mixed up as add-ons should always come directly after their parent
logger.warning(f"Add-ons are mixed up for position #{p.positionid} in order {order.full_code}")
continue
if p.addon_to_id and (
not p.attendee_email or p.attendee_email == parent_op.attendee_email
):
# if op is addon and either has no mail or the same as parent => send to parent
p = parent_op
if p.pk in sent_to_positions:
# this position already got an email
continue
if not p.attendee_email or p.attendee_email == order.email:
# no email or same as order
continue
email_ctx = get_email_context(event=order.event, order=order, position=p)
p.send_mail(
subject=subject,
template=template,
context=email_ctx,
log_entry_type=log_entry_type,
user=user if user else None,
invoices=invoices,
attach_tickets=attach_tickets,
attach_ical=attach_ical,
attach_other_files=attach_other_files,
# possible, as of yet unused here, parameters:
# headers: dict=None,
# sender: str=None,
# auth=None,
)
sent_to_positions.add(p.pk)
class OrderError(Exception):
def __init__(self, *args):
msg = args[0]
@@ -461,14 +531,21 @@ def approve_order(order, user=None, send_mail: bool=True, auth=None, force=False
)
if email_attendees:
for p in order.positions.all():
if p.addon_to_id is None and p.attendee_email and p.attendee_email != order.email:
email_attendee_context = get_email_context(event=order.event, order=order, position=p)
p.send_mail(
email_attendee_subject, email_attendee_template, email_attendee_context,
'pretix.event.order.email.order_approved', user,
attach_tickets=True,
)
_attendee_mail_send_helper(
event=order.event,
order=order,
positions=order.positions.all(),
template=email_attendee_template,
subject=email_attendee_subject,
log_entry_type='pretix.event.order.email.order_approved',
user=user,
attach_tickets=True,
attach_ical=order.event.settings.mail_attach_ical and (
not order.event.settings.mail_attach_ical_paid_only or
order.total == Decimal('0.00') or
order.valid_if_pending
),
)
return order.pk
@@ -1399,10 +1476,20 @@ def _perform_order(event: Event, payment_requests: List[dict], position_ids: Lis
is_free=free_order_flow
)
if email_attendees:
for p in order.positions.all():
if p.addon_to_id is None and p.attendee_email and p.attendee_email != order.email:
_order_placed_email_attendee(event, order, p, email_attendees_template, subject_attendees_template, log_entry,
is_free=free_order_flow)
# todo re note: order_placed_email for attendees (formerly services/orders _order_placed_email_attendee)
_attendee_mail_send_helper(
event=event,
order=order,
positions=order.positions.all(),
template=email_attendees_template,
subject=subject_attendees_template,
log_entry_type=log_entry,
attach_ical=event.settings.mail_attach_ical and (
not event.settings.mail_attach_ical_paid_only or
free_order_flow or
order.valid_if_pending
),
)
if not any_payment_failed:
for p in payment_objs:
@@ -1601,6 +1688,7 @@ def send_download_reminders(sender, **kwargs):
)
if event.settings.mail_send_download_reminder_attendee:
send_to_positions = []
for p in positions:
if p.subevent_id:
reminder_date = (p.subevent.date_from - timedelta(days=event.reminder_days)).replace(
@@ -1608,15 +1696,22 @@ def send_download_reminders(sender, **kwargs):
)
if now() < reminder_date:
continue
if p.addon_to_id is None and p.attendee_email and p.attendee_email != o.email:
email_template = event.settings.mail_text_download_reminder_attendee
email_subject = event.settings.mail_subject_download_reminder_attendee
email_context = get_email_context(event=event, order=o, position=p)
o.send_mail(
email_subject, email_template, email_context,
'pretix.event.order.email.download_reminder_sent',
attach_tickets=True, position=p
)
else:
send_to_positions.append(p)
# todo before pr ready (aka note to myself):
# order's send_mail used before, check if there was a good reason to not
# use postion's send_mail
# if not, look for a way to not use double iteration over positions (see above)
# otherwise: rewrite this without this helper function anyway
_attendee_mail_send_helper(
event=event,
order=o,
positions=send_to_positions,
email_template=event.settings.mail_text_download_reminder_attendee,
email_subject=event.settings.mail_subject_download_reminder_attendee,
log_entry_type='pretix.event.order.email.download_reminder_sent',
attach_tickets=True,
)
def notify_user_changed_order(order, user=None, auth=None, invoices=[]):
+1 -1
View File
@@ -66,7 +66,7 @@ class ProcessForm(forms.Form):
widget=forms.Select(
attrs={'data-static': 'true'}
),
help_text=conditional_escape(c.help_text or ""),
help_text=conditional_escape(c.help_text),
)
def get_columns(self):
+2 -2
View File
@@ -364,7 +364,7 @@ class TeamForm(forms.ModelForm):
for opt in pg.options
],
label=pg.label,
help_text=conditional_escape(pg.help_text or ""),
help_text=conditional_escape(pg.help_text),
initial=initial,
widget=forms.RadioSelect,
)
@@ -389,7 +389,7 @@ class TeamForm(forms.ModelForm):
for opt in pg.options
],
label=pg.label,
help_text=conditional_escape(pg.help_text or ""),
help_text=conditional_escape(pg.help_text),
initial=initial,
widget=forms.RadioSelect,
)
+81 -49
View File
@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-10-03 23:00+0000\n"
"Last-Translator: Oksigenia <github@oksigenia.cc>\n"
"PO-Revision-Date: 2026-09-28 11:01+0000\n"
"Last-Translator: Tim <plicnetwork@gmail.com>\n"
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix/"
"es/>\n"
"Language: es\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2026.10\n"
"X-Generator: Weblate 2026.9.1\n"
#: pretix/_base_settings.py
msgid "English"
@@ -1793,12 +1793,16 @@ msgid "Transmission type"
msgstr "Tipo de transmisión"
#: pretix/base/exporters/invoices.py
#, fuzzy
#| msgid "Transmission type"
msgid "Transmission status"
msgstr "Estado de la transmisión"
msgstr "Tipo de transmisión"
#: pretix/base/exporters/invoices.py
#, fuzzy
#| msgid "Transmission type"
msgid "Transmission date"
msgstr "Fecha de emisión"
msgstr "Tipo de transmisión"
#: pretix/base/exporters/invoices.py
msgid "Cancellation"
@@ -3285,7 +3289,7 @@ msgstr ""
#: pretix/base/forms/validators.py pretix/control/views/event.py
#, python-format
msgid "Invalid placeholder: {%(value)s}"
msgstr "Marcador de posición no válido: {%(value)s}"
msgstr "Marcador de posición no válido: {%(value)ss}"
#: pretix/base/forms/widgets.py
#, python-format
@@ -4454,8 +4458,10 @@ msgid "Initialization date"
msgstr "Fecha de inicialización"
#: pretix/base/models/devices.py
#, fuzzy
#| msgid "Save to profile"
msgid "Security profile"
msgstr "Perfil de seguridad"
msgstr "Guardar en perfil"
#: pretix/base/models/discount.py
msgctxt "subevent"
@@ -5898,8 +5904,10 @@ msgid "Maximum value"
msgstr "Valor máximo"
#: pretix/base/models/items.py
#, fuzzy
#| msgid "Maximum length"
msgid "Minimum length"
msgstr "Longitud mínima"
msgstr "Longitud máxima"
#: pretix/base/models/items.py
msgid "Maximum length"
@@ -5970,8 +5978,10 @@ msgid "The maximum value must not be lower than the minimum value."
msgstr "El valor máximo no debe ser inferior al mínimo."
#: pretix/base/models/items.py
#, fuzzy
#| msgid "The maximum value must not be lower than the minimum value."
msgid "The maximum length must not be shorter than the minimum length."
msgstr "La longitud máxima no debe ser inferior a la longitud mínima."
msgstr "El valor máximo no debe ser inferior al mínimo."
#: pretix/base/models/items.py
msgid ""
@@ -10571,8 +10581,10 @@ msgstr ""
"después de la `Última fecha de pagos' configurada anteriormente."
#: pretix/base/settings.py
#, fuzzy
#| msgid "Generate invoices for Sales channels"
msgid "Allow postponed payment choice for sales channels"
msgstr "Permitir la opción de pago aplazado en los canales de venta"
msgstr "Generar facturas para canales de ventas"
#: pretix/base/settings.py
msgid ""
@@ -10580,9 +10592,6 @@ msgid ""
"their order without selecting a payment method. This is useful whenever "
"orders are not created by the same person who is making the payment."
msgstr ""
"Si en un canal de venta se permite el pago aplazado, los clientes pueden "
"completar su pedido sin seleccionar una forma de pago. Esto resulta útil "
"cuando los pedidos no los realiza la misma persona que efectúa el pago."
#: pretix/base/settings.py
msgid "Show start date"
@@ -16851,7 +16860,7 @@ msgstr "tercero"
#: pretix/control/forms/rrule.py
msgctxt "rrule"
msgid "fourth"
msgstr "cuarto"
msgstr ""
#: pretix/control/forms/rrule.py
msgctxt "rrule"
@@ -17984,20 +17993,28 @@ msgid "Queued emails have been aborted."
msgstr "Los correos electrónicos en cola se han cancelado."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The property has been created."
msgid "An organizer meta property has been created."
msgstr "Se ha creado una metapropiedad de organizador."
msgstr "La propiedad ha sido creada."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The selected property has been deleted."
msgid "An organizer meta property has been deleted."
msgstr "Se ha eliminado una metapropiedad del organizador."
msgstr "La propiedad seleccionada ha sido eliminada."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The organizer has been changed."
msgid "An organizer meta property has been changed."
msgstr "Se ha modificado una metapropiedad del organizador."
msgstr "El pedido se ha cambiado."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The product has been reordered."
msgid "An organizer meta property has been reordered."
msgstr "Se ha cambiado el orden de una metapropiedad del organizador."
msgstr "El producto se ha pedido de nuevo."
#: pretix/control/logdisplay.py
msgid "Gift card acceptance for another organizer has been added."
@@ -18211,8 +18228,6 @@ msgstr "Se ha generado un código de emergencia de doble factor."
#: pretix/control/logdisplay.py
msgid "Drift and throttle values for two-factor devices have been reset."
msgstr ""
"Se han restablecido los valores de deriva y aceleración para los "
"dispositivos de dos factores."
#: pretix/control/logdisplay.py
#, python-brace-format
@@ -19165,8 +19180,10 @@ msgid "Cancel"
msgstr "Cancelar"
#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html
#, fuzzy
#| msgid "Authorized apps"
msgid "Authorize"
msgstr "Autorizar"
msgstr "Aplicaciones autorizadas"
#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html
msgid "Error:"
@@ -22054,10 +22071,14 @@ msgstr ""
"hacer referencia a este evento."
#: pretix/control/templates/pretixcontrol/events/create_basics.html
#, fuzzy
#| msgid ""
#| "We strongly recommend against using short forms of more then 16 "
#| "characters."
msgid ""
"We strongly recommend against using short forms of more than 16 characters."
msgstr ""
"Recomendamos encarecidamente no utilizar abreviaturas de más de 16 "
"Recomendamos encarecidamente no utilizar formularios cortos de más de 16 "
"caracteres."
#: pretix/control/templates/pretixcontrol/events/create_basics.html
@@ -27936,23 +27957,27 @@ msgstr "Autenticación backend"
#: pretix/control/templates/pretixcontrol/users/form.html
msgid "Reset drift and throttle"
msgstr "Restablecer la desviación y el control"
msgstr ""
#: pretix/control/templates/pretixcontrol/users/form.html
#, fuzzy
#| msgid "Disable two-factor authentication"
msgid "Available two-factor authentication methods"
msgstr "Métodos de autenticación de dos factores disponibles"
msgstr "Desactivar la autenticación de dos factores"
#: pretix/control/templates/pretixcontrol/users/form.html
#, python-format
#, fuzzy, python-format
#| msgid "Expired since %(date)s"
msgid "1 failed attempt since %(date)s"
msgid_plural "%(cnt)s failed attempts since %(date)s"
msgstr[0] "1 intento fallido desde %(date)s"
msgstr[1] "%(cnt)s intentos fallidos desde el %(date)s"
msgstr[0] "Vencido desde el %(date)s"
msgstr[1] "Vencido desde el %(date)s"
#: pretix/control/templates/pretixcontrol/users/form.html
#, python-format
#, fuzzy, python-format
#| msgid "Valid until %(date)s"
msgid "Currently locked until %(date)s"
msgstr "Actualmente bloqueado hasta el %(date)s"
msgstr "Válido hasta el %(date)s"
#: pretix/control/templates/pretixcontrol/users/form.html
msgid "Team memberships"
@@ -28494,18 +28519,20 @@ msgid "Invalid code, please try again."
msgstr "Código inválido, por favor inténtelo de nuevo."
#: pretix/control/views/auth.py
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid "Invalid code, please try again."
msgid "Invalid code. Please try again after waiting {value} minute."
msgid_plural "Invalid code. Please try again after waiting {value} minutes."
msgstr[0] "Código no válido. Inténtalo de nuevo tras esperar {value} minutos."
msgstr[1] "ódigo no válido. Inténtalo de nuevo tras esperar {value} minutos."
msgstr[0] "Código inválido, por favor inténtelo de nuevo."
msgstr[1] "Código inválido, por favor inténtelo de nuevo."
#: pretix/control/views/auth.py
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid "Invalid code, please try again."
msgid "Invalid code. Please try again after waiting {value} second."
msgid_plural "Invalid code. Please try again after waiting {value} seconds."
msgstr[0] "Código no válido. Inténtalo de nuevo tras esperar {value} segundo."
msgstr[1] "Código no válido. Inténtalo de nuevo tras esperar {value} segundos."
msgstr[0] "Código inválido, por favor inténtelo de nuevo."
msgstr[1] "Código inválido, por favor inténtelo de nuevo."
#: pretix/control/views/checkin.py
msgid "The selected check-ins have been reverted."
@@ -29378,8 +29405,10 @@ msgid "You entered an order in an event with a different currency."
msgstr "Ha introducido un pedido en un evento con una moneda diferente."
#: pretix/control/views/orders.py
#, fuzzy
#| msgid "You entered an order in an event with a different currency."
msgid "You entered an order in an event that you do not have access to."
msgstr "Ha introducido un pedido en un evento al que no tienes acceso."
msgstr "Ha introducido un pedido en un evento con una moneda diferente."
#: pretix/control/views/orders.py
msgid ""
@@ -30267,9 +30296,10 @@ msgstr ""
"código de emergencia anterior para este usuario permanecerá activo."
#: pretix/control/views/users.py
#, fuzzy
#| msgid "The password has been reset."
msgid "The drift values for TOTP devices have been reset."
msgstr ""
"Se han restablecido los valores de desviación para los dispositivos TOTP."
msgstr "La contraseña ha sido reiniciada."
#: pretix/control/views/users.py
msgid "The new user has been created."
@@ -30284,12 +30314,14 @@ msgid "Bypass quota"
msgstr "Cuota de bypass"
#: pretix/control/views/vouchers.py
#, fuzzy
#| msgid "Widget"
msgid "Budget"
msgstr "Presupuesto"
msgstr "Widget"
#: pretix/control/views/vouchers.py
msgid "Budget used"
msgstr "Presupuesto utilizado"
msgstr ""
#: pretix/control/views/vouchers.py
msgid "The requested voucher does not exist."
@@ -34990,29 +35022,29 @@ msgid ""
"Not sure yet? You can complete your order first and then select a payment "
"method later."
msgstr ""
"¿Aún no estás seguro? Puedes completar primero tu pedido y seleccionar la "
"forma de pago más tarde."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
msgid ""
"To do so, please first remove the payment methods you already selected above."
msgstr ""
"Para ello, elimina primero los métodos de pago que ya hayas seleccionado "
"anteriormente."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, python-format
#, fuzzy, python-format
#| msgid "Your event needs to be over to use this feature."
msgid "Your payment needs to be completed within %(minutes)s minutes."
msgstr "Su pago debe completarse en un plazo de %(minutes)s minutos."
msgstr "Su evento debe haber terminado para utilizar esta función."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, python-format
#, fuzzy, python-format
#| msgid "Your event needs to be over to use this feature."
msgid "Your payment needs to be completed by %(deadline)s."
msgstr "Su pago debe completarse antes de %(deadline)s."
msgstr "Su evento debe haber terminado para utilizar esta función."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, fuzzy
#| msgid "Proceed with reset"
msgid "Proceed without selection"
msgstr "Continuar sin seleccionar nada"
msgstr "Continuar con el restablecimiento"
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html
msgid "Before we continue, we need you to answer some questions."
+4 -4
View File
@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-10-03 23:00+0000\n"
"Last-Translator: Oksigenia <github@oksigenia.cc>\n"
"PO-Revision-Date: 2026-06-29 17:00+0000\n"
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
"Language-Team: Spanish <https://translate.pretix.eu/projects/pretix/pretix-"
"js/es/>\n"
"Language: es\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2026.10\n"
"X-Generator: Weblate 2026.6.1\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js
msgid "Marked as paid"
@@ -780,7 +780,7 @@ msgstr "El organizador retiene %(currency)s %(amount)s"
#: pretix/static/pretixpresale/js/ui/main.js
msgid "You get %(currency)s %(amount)s back"
msgstr "Se le devolverá %(currency)s %(amount)s"
msgstr "Se le devolverá %(moneda)s %(cantidad)s"
#: pretix/static/pretixpresale/js/ui/main.js
msgid "Please enter the amount the organizer can keep."
+81 -51
View File
@@ -4,10 +4,10 @@ msgstr ""
"Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-10-01 09:28+0000\n"
"PO-Revision-Date: 2026-09-30 07:25+0000\n"
"Last-Translator: CVZ-es <damien.bremont@casadevelazquez.org>\n"
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix/"
"fr/>\n"
"Language-Team: French <https://translate.pretix.eu/projects/pretix/pretix/fr/"
">\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1793,12 +1793,16 @@ msgid "Transmission type"
msgstr "Type de transmission"
#: pretix/base/exporters/invoices.py
#, fuzzy
#| msgid "Transmission type"
msgid "Transmission status"
msgstr "État de la transmission"
msgstr "Type de transmission"
#: pretix/base/exporters/invoices.py
#, fuzzy
#| msgid "Transmission type"
msgid "Transmission date"
msgstr "Date de transmission"
msgstr "Type de transmission"
#: pretix/base/exporters/invoices.py
msgid "Cancellation"
@@ -4464,8 +4468,10 @@ msgid "Initialization date"
msgstr "Date d'initialisation"
#: pretix/base/models/devices.py
#, fuzzy
#| msgid "Save to profile"
msgid "Security profile"
msgstr "Profil de sécurité"
msgstr "Enregistrer dans le profil"
#: pretix/base/models/discount.py
msgctxt "subevent"
@@ -5919,8 +5925,10 @@ msgid "Maximum value"
msgstr "Valeur maximale"
#: pretix/base/models/items.py
#, fuzzy
#| msgid "Maximum length"
msgid "Minimum length"
msgstr "Longueur minimale"
msgstr "Longueur maximale"
#: pretix/base/models/items.py
msgid "Maximum length"
@@ -5992,9 +6000,10 @@ msgid "The maximum value must not be lower than the minimum value."
msgstr "La valeur maximale ne doit pas être inférieure à la valeur minimale."
#: pretix/base/models/items.py
#, fuzzy
#| msgid "The maximum value must not be lower than the minimum value."
msgid "The maximum length must not be shorter than the minimum length."
msgstr ""
"La longueur maximale ne doit pas être inférieure à la longueur minimale."
msgstr "La valeur maximale ne doit pas être inférieure à la valeur minimale."
#: pretix/base/models/items.py
msgid ""
@@ -10638,8 +10647,10 @@ msgstr ""
"accepté après la 'dernière date de paiement' configurée ci-dessus."
#: pretix/base/settings.py
#, fuzzy
#| msgid "Generate invoices for Sales channels"
msgid "Allow postponed payment choice for sales channels"
msgstr "Autoriser l'option de paiement différé pour les canaux de vente"
msgstr "Générer des factures pour les canaux de vente"
#: pretix/base/settings.py
msgid ""
@@ -10647,10 +10658,6 @@ msgid ""
"their order without selecting a payment method. This is useful whenever "
"orders are not created by the same person who is making the payment."
msgstr ""
"Si le paiement différé est autorisé sur un canal de vente, les clients "
"peuvent finaliser leur commande sans sélectionner de mode de paiement. Cette "
"fonctionnalité est utile lorsque la commande n'est pas passée par la même "
"personne que celle qui effectue le paiement."
#: pretix/base/settings.py
msgid "Show start date"
@@ -17010,7 +17017,7 @@ msgstr "troisième"
#: pretix/control/forms/rrule.py
msgctxt "rrule"
msgid "fourth"
msgstr "quatrième"
msgstr ""
#: pretix/control/forms/rrule.py
msgctxt "rrule"
@@ -18130,20 +18137,28 @@ msgid "Queued emails have been aborted."
msgstr "Les e-mails en attente ont été annulés."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The property has been created."
msgid "An organizer meta property has been created."
msgstr "Une méta-propriété d'organisateur a été créée."
msgstr "La propriété a été créée."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The selected property has been deleted."
msgid "An organizer meta property has been deleted."
msgstr "Une méta-propriété d'organisateur a été supprimée."
msgstr "La propriété sélectionnée a été supprimée."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The organizer has been changed."
msgid "An organizer meta property has been changed."
msgstr "Une méta-propriété d'organisateur a été modifiée."
msgstr "L’organisateur a été modifié."
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The product has been reordered."
msgid "An organizer meta property has been reordered."
msgstr "Une méta-propriété d'organisateur a été réorganisée."
msgstr "Le produit a été commandé à nouveau."
#: pretix/control/logdisplay.py
msgid "Gift card acceptance for another organizer has been added."
@@ -18359,8 +18374,6 @@ msgstr "Un code d'urgence à deux facteurs a été généré."
#: pretix/control/logdisplay.py
msgid "Drift and throttle values for two-factor devices have been reset."
msgstr ""
"Les valeurs de déviation et de puissance pour les appareils à deux facteurs "
"ont été réinitialisées."
#: pretix/control/logdisplay.py
#, python-brace-format
@@ -19309,8 +19322,10 @@ msgid "Cancel"
msgstr "Annuler"
#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html
#, fuzzy
#| msgid "Authorized apps"
msgid "Authorize"
msgstr "Autoriser"
msgstr "App. autorisées"
#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html
msgid "Error:"
@@ -22216,11 +22231,15 @@ msgstr ""
"comme abréviations pour faire référence à cet événement."
#: pretix/control/templates/pretixcontrol/events/create_basics.html
#, fuzzy
#| msgid ""
#| "We strongly recommend against using short forms of more then 16 "
#| "characters."
msgid ""
"We strongly recommend against using short forms of more than 16 characters."
msgstr ""
"Nous déconseillons vivement d'utiliser des abréviations de plus de 16 "
"caractères."
"Nous vous déconseillons fortement d'utiliser des formulaires courts de plus "
"de 16 caractères."
#: pretix/control/templates/pretixcontrol/events/create_basics.html
msgid "Display settings"
@@ -28152,23 +28171,27 @@ msgstr "Backend d’authentification"
#: pretix/control/templates/pretixcontrol/users/form.html
msgid "Reset drift and throttle"
msgstr "Réinitialisation de la déviation et de la puissance"
msgstr ""
#: pretix/control/templates/pretixcontrol/users/form.html
#, fuzzy
#| msgid "Disable two-factor authentication"
msgid "Available two-factor authentication methods"
msgstr "Méthodes d'authentification à deux facteurs disponibles"
msgstr "Désactiver l'authentification à deux facteurs"
#: pretix/control/templates/pretixcontrol/users/form.html
#, python-format
#, fuzzy, python-format
#| msgid "Expired since %(date)s"
msgid "1 failed attempt since %(date)s"
msgid_plural "%(cnt)s failed attempts since %(date)s"
msgstr[0] "1 tentative infructueuse depuis %(date)s"
msgstr[1] "%(cnt)s tentatives infructueuses depuis le %(date)s"
msgstr[0] "Expiré depuis le %(date)s"
msgstr[1] "Expiré depuis le %(date)s"
#: pretix/control/templates/pretixcontrol/users/form.html
#, python-format
#, fuzzy, python-format
#| msgid "Valid until %(date)s"
msgid "Currently locked until %(date)s"
msgstr "Actuellement verrouillé jusqu'au %(date)s"
msgstr "Valable jusqu'au %(date)s"
#: pretix/control/templates/pretixcontrol/users/form.html
msgid "Team memberships"
@@ -28714,19 +28737,20 @@ msgid "Invalid code, please try again."
msgstr "Code invalide, veuillez réessayer."
#: pretix/control/views/auth.py
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid "Invalid code, please try again."
msgid "Invalid code. Please try again after waiting {value} minute."
msgid_plural "Invalid code. Please try again after waiting {value} minutes."
msgstr[0] "Code invalide. Veuillez réessayer après avoir patienté {value} minute."
msgstr[1] "Code invalide. Veuillez réessayer après avoir patienté {value} minutes."
msgstr[0] "Code invalide, veuillez réessayer."
msgstr[1] "Code invalide, veuillez réessayer."
#: pretix/control/views/auth.py
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid "Invalid code, please try again."
msgid "Invalid code. Please try again after waiting {value} second."
msgid_plural "Invalid code. Please try again after waiting {value} seconds."
msgstr[0] "Code invalide. Veuillez réessayer après avoir patienté {value} seconde."
msgstr[1] ""
"Code invalide. Veuillez réessayer après avoir patienté {value} secondes."
msgstr[0] "Code invalide, veuillez réessayer."
msgstr[1] "Code invalide, veuillez réessayer."
#: pretix/control/views/checkin.py
msgid "The selected check-ins have been reverted."
@@ -29608,9 +29632,11 @@ msgstr ""
"Vous avez passé une commande dans un événement dont la devise est différente."
#: pretix/control/views/orders.py
#, fuzzy
#| msgid "You entered an order in an event with a different currency."
msgid "You entered an order in an event that you do not have access to."
msgstr ""
"Vous avez saisi une commande dans un événement auquel vous n'avez pas accès."
"Vous avez passé une commande dans un événement dont la devise est différente."
#: pretix/control/views/orders.py
msgid ""
@@ -30509,8 +30535,10 @@ msgstr ""
"d'urgence précédents de cet utilisateur sont toujours actifs."
#: pretix/control/views/users.py
#, fuzzy
#| msgid "The password has been reset."
msgid "The drift values for TOTP devices have been reset."
msgstr "Les valeurs de dérive des appareils TOTP ont été réinitialisées."
msgstr "Le mot de passe a été réinitialisé."
#: pretix/control/views/users.py
msgid "The new user has been created."
@@ -30525,12 +30553,14 @@ msgid "Bypass quota"
msgstr "Outrepasser le quota"
#: pretix/control/views/vouchers.py
#, fuzzy
#| msgid "Widget"
msgid "Budget"
msgstr "Budget"
msgstr "Widget"
#: pretix/control/views/vouchers.py
msgid "Budget used"
msgstr "Budget utilisé"
msgstr ""
#: pretix/control/views/vouchers.py
msgid "The requested voucher does not exist."
@@ -35279,29 +35309,29 @@ msgid ""
"Not sure yet? You can complete your order first and then select a payment "
"method later."
msgstr ""
"Vous hésitez encore ? Vous pouvez d'abord finaliser votre commande, puis "
"choisir un mode de paiement ultérieurement."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
msgid ""
"To do so, please first remove the payment methods you already selected above."
msgstr ""
"Pour ce faire, veuillez d'abord supprimer les moyens de paiement que vous "
"avez déjà sélectionnés ci-dessus."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, python-format
#, fuzzy, python-format
#| msgid "The payment has to be completed before %(date)s."
msgid "Your payment needs to be completed within %(minutes)s minutes."
msgstr "otre paiement doit être effectué dans les %(minutes)s minutes."
msgstr "Le paiement doit être effectué avant le %(date)s."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, python-format
#, fuzzy, python-format
#| msgid "The payment has to be completed before %(date)s."
msgid "Your payment needs to be completed by %(deadline)s."
msgstr "Votre paiement doit être effectué avant le %(deadline)s."
msgstr "Le paiement doit être effectué avant le %(date)s."
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, fuzzy
#| msgid "Proceed with reset"
msgid "Proceed without selection"
msgstr "Continuer sans sélectionner"
msgstr "Procéder à la réinitialisation"
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html
msgid "Before we continue, we need you to answer some questions."
+33 -11
View File
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-09-30 17:00+0000\n"
"PO-Revision-Date: 2026-08-01 21:00+0000\n"
"Last-Translator: szurofkamarciidfbe08444ef04788 <szurofkamarcii@gmail.com>\n"
"Language-Team: Hungarian <https://translate.pretix.eu/projects/pretix/pretix/"
"hu/>\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 2026.9.1\n"
"X-Generator: Weblate 2026.7.1\n"
#: pretix/_base_settings.py
msgid "English"
@@ -93,7 +93,7 @@ msgstr "Héber"
#: pretix/_base_settings.py
msgid "Hungarian"
msgstr "Magyar"
msgstr ""
#: pretix/_base_settings.py
msgid "Indonesian"
@@ -426,8 +426,10 @@ msgid "You cannot exchange a medium for a medium."
msgstr "Nem cserélhet adathordozót adathordozóra."
#: pretix/api/views/checkin.py
#, fuzzy
#| msgid "Product does not support medium exchange."
msgid "You cannot simulate a medium exchange."
msgstr "Az adathordozó szimuláció nem engedélyezett."
msgstr "A termék nem támogatja az adathordozó-cserét."
#: pretix/api/views/oauth.py pretix/control/logdisplay.py
#, python-brace-format
@@ -1777,12 +1779,16 @@ msgid "Transmission type"
msgstr "Továbbítás típusa"
#: pretix/base/exporters/invoices.py
#, fuzzy
#| msgid "Transmission type"
msgid "Transmission status"
msgstr "Továbbítás állapot"
msgstr "Továbbítás típusa"
#: pretix/base/exporters/invoices.py
#, fuzzy
#| msgid "Transmission type"
msgid "Transmission date"
msgstr "Továbbítás dátum"
msgstr "Továbbítás típusa"
#: pretix/base/exporters/invoices.py
msgid "Cancellation"
@@ -3072,6 +3078,9 @@ msgid "Street"
msgstr "Utca"
#: pretix/base/forms/questions.py
#, fuzzy
#| msgctxt "address"
#| msgid "State"
msgid "State"
msgstr "Állam/tartomány"
@@ -4420,8 +4429,10 @@ msgid "Initialization date"
msgstr "Inicializálás dátuma"
#: pretix/base/models/devices.py
#, fuzzy
#| msgid "Save to profile"
msgid "Security profile"
msgstr "Biztonsági profil"
msgstr "Mentés a profilhoz"
#: pretix/base/models/discount.py
msgctxt "subevent"
@@ -5853,8 +5864,10 @@ msgid "Maximum value"
msgstr "Maximális érték"
#: pretix/base/models/items.py
#, fuzzy
#| msgid "Maximum length"
msgid "Minimum length"
msgstr "Minimum hossz"
msgstr "Maximális hossz"
#: pretix/base/models/items.py
msgid "Maximum length"
@@ -5925,8 +5938,10 @@ msgid "The maximum value must not be lower than the minimum value."
msgstr "A maximális érték nem lehet kisebb a minimális értéknél."
#: pretix/base/models/items.py
#, fuzzy
#| msgid "The maximum value must not be lower than the minimum value."
msgid "The maximum length must not be shorter than the minimum length."
msgstr "A maximális hossz nem lehet rövidebb a minimális hossznál."
msgstr "A maximális érték nem lehet kisebb a minimális értéknél."
#: pretix/base/models/items.py
msgid ""
@@ -7474,6 +7489,9 @@ msgid "The payment for this invoice has already been received."
msgstr "A számla már ki lett fizetve."
#: pretix/base/payment.py
#, fuzzy
#| msgid ""
#| "This payment is already being processed and can not be canceled any more."
msgid ""
"This payment is already being processed and cannot be canceled any more."
msgstr "Ez a fizetés már feldolgozás alatt áll, és többé nem törölhető."
@@ -8249,12 +8267,16 @@ msgid "Presale end"
msgstr "Elővétel vége"
#: pretix/base/reldate.py
#, fuzzy
#| msgid "Order email"
msgid "Order creation"
msgstr "Rendelés létrehozás"
msgstr "Rendelés e-mail címe"
#: pretix/base/reldate.py
#, fuzzy
#| msgid "Order expired"
msgid "Order expiry"
msgstr "Rendelés lejárat"
msgstr "Rendelés lejárt"
#: pretix/base/reldate.py
msgid "before"
+78 -41
View File
@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-10-05 14:00+0000\n"
"Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n"
"PO-Revision-Date: 2026-09-07 18:00+0000\n"
"Last-Translator: Yasunobu YesNo Kawaguchi <kawaguti@gmail.com>\n"
"Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/pretix/"
"ja/>\n"
"Language: ja\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 2026.10\n"
"X-Generator: Weblate 2026.9\n"
#: pretix/_base_settings.py
msgid "English"
@@ -1776,12 +1776,16 @@ msgid "Transmission type"
msgstr "送信タイプ"
#: pretix/base/exporters/invoices.py
#, fuzzy
#| msgid "Transmission type"
msgid "Transmission status"
msgstr "送信ステータス"
msgstr "送信タイプ"
#: pretix/base/exporters/invoices.py
#, fuzzy
#| msgid "Transmission type"
msgid "Transmission date"
msgstr "送信日"
msgstr "送信タイプ"
#: pretix/base/exporters/invoices.py
msgid "Cancellation"
@@ -4396,8 +4400,10 @@ msgid "Initialization date"
msgstr "初期化日"
#: pretix/base/models/devices.py
#, fuzzy
#| msgid "Save to profile"
msgid "Security profile"
msgstr "セキュリティ・プロフィール"
msgstr "プロフィールに保存します"
#: pretix/base/models/discount.py
msgctxt "subevent"
@@ -5773,8 +5779,10 @@ msgid "Maximum value"
msgstr "最大値"
#: pretix/base/models/items.py
#, fuzzy
#| msgid "Maximum length"
msgid "Minimum length"
msgstr "最小長"
msgstr "最大長"
#: pretix/base/models/items.py
msgid "Maximum length"
@@ -5845,8 +5853,10 @@ msgid "The maximum value must not be lower than the minimum value."
msgstr "最大値は最小値より低くできません。"
#: pretix/base/models/items.py
#, fuzzy
#| msgid "The maximum value must not be lower than the minimum value."
msgid "The maximum length must not be shorter than the minimum length."
msgstr "最大長は最小長より短くできません。"
msgstr "最大値は最小値より低くできません。"
#: pretix/base/models/items.py
msgid ""
@@ -10259,8 +10269,10 @@ msgstr ""
"す。上記で設定された\"支払いの最終日\"を過ぎてからは支払いを受け付けません。"
#: pretix/base/settings.py
#, fuzzy
#| msgid "Generate invoices for Sales channels"
msgid "Allow postponed payment choice for sales channels"
msgstr "販売チャネルの支払延期選択を許可する"
msgstr "請求書を生成する販売チャネル"
#: pretix/base/settings.py
msgid ""
@@ -10268,9 +10280,6 @@ msgid ""
"their order without selecting a payment method. This is useful whenever "
"orders are not created by the same person who is making the payment."
msgstr ""
"販売チャネルで支払いの延期が許可されている場合、顧客は支払い方法を選択せずに"
"注文を完了できます。これは、支払いを行う同じ人物によって注文が作成されていな"
"い場合に便利です。"
#: pretix/base/settings.py
msgid "Show start date"
@@ -16353,7 +16362,7 @@ msgstr "第三"
#: pretix/control/forms/rrule.py
msgctxt "rrule"
msgid "fourth"
msgstr "4番目"
msgstr ""
#: pretix/control/forms/rrule.py
msgctxt "rrule"
@@ -17433,20 +17442,28 @@ msgid "Queued emails have been aborted."
msgstr "キューに入っていた電子メールが、破棄されました。"
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The property has been created."
msgid "An organizer meta property has been created."
msgstr "主催者メタプロパティが作成されました。"
msgstr "プロパティが作成されました。"
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The selected property has been deleted."
msgid "An organizer meta property has been deleted."
msgstr "オーガナイザーのメタプロパティが削除されました。"
msgstr "選択されたプロパティは削除されました。"
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The organizer has been changed."
msgid "An organizer meta property has been changed."
msgstr "主催者のメタプロパティが変更されました。"
msgstr "主催者が変更されました。"
#: pretix/control/logdisplay.py
#, fuzzy
#| msgid "The product has been reordered."
msgid "An organizer meta property has been reordered."
msgstr "オーガナイザーのメタプロパティが再配置されました。"
msgstr "製品の並び順が変更されました。"
#: pretix/control/logdisplay.py
msgid "Gift card acceptance for another organizer has been added."
@@ -17656,7 +17673,7 @@ msgstr "二要素の緊急コードが生成されました。"
#: pretix/control/logdisplay.py
msgid "Drift and throttle values for two-factor devices have been reset."
msgstr "二要素装置のドリフト値とスロットル値がリセットされました。"
msgstr ""
#: pretix/control/logdisplay.py
#, python-brace-format
@@ -18594,8 +18611,10 @@ msgid "Cancel"
msgstr "キャンセル"
#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html
#, fuzzy
#| msgid "Authorized apps"
msgid "Authorize"
msgstr "承認する"
msgstr "承認されたアプリ"
#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html
msgid "Error:"
@@ -21399,6 +21418,10 @@ msgstr ""
"銀行振込の参照としていくつかの場所で使用します。"
#: pretix/control/templates/pretixcontrol/events/create_basics.html
#, fuzzy
#| msgid ""
#| "We strongly recommend against using short forms of more then 16 "
#| "characters."
msgid ""
"We strongly recommend against using short forms of more than 16 characters."
msgstr "16文字を超える短縮形の使用は強くお勧めしません。"
@@ -27113,22 +27136,26 @@ msgstr "認証バックエンド"
#: pretix/control/templates/pretixcontrol/users/form.html
msgid "Reset drift and throttle"
msgstr "ドリフトとスロットルをリセットする"
msgstr ""
#: pretix/control/templates/pretixcontrol/users/form.html
#, fuzzy
#| msgid "Disable two-factor authentication"
msgid "Available two-factor authentication methods"
msgstr "選択可能な二要素認証"
msgstr "二要素認証を無効にする"
#: pretix/control/templates/pretixcontrol/users/form.html
#, python-format
#, fuzzy, python-format
#| msgid "Expired since %(date)s"
msgid "1 failed attempt since %(date)s"
msgid_plural "%(cnt)s failed attempts since %(date)s"
msgstr[0] "%(date)s以降%(cnt)s回失敗"
msgstr[0] "%(date)s以降失効"
#: pretix/control/templates/pretixcontrol/users/form.html
#, python-format
#, fuzzy, python-format
#| msgid "Valid until %(date)s"
msgid "Currently locked until %(date)s"
msgstr "現時点で%(date)sまでロックされています"
msgstr "%(date)sまで有効"
#: pretix/control/templates/pretixcontrol/users/form.html
msgid "Team memberships"
@@ -27649,16 +27676,18 @@ msgid "Invalid code, please try again."
msgstr "無効なコードです。もう一度お試しください。"
#: pretix/control/views/auth.py
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid "Invalid code, please try again."
msgid "Invalid code. Please try again after waiting {value} minute."
msgid_plural "Invalid code. Please try again after waiting {value} minutes."
msgstr[0] "無効なコードです。{value}分後再度お試しください。"
msgstr[0] "無効なコードです。もう一度お試しください。"
#: pretix/control/views/auth.py
#, python-brace-format
#, fuzzy, python-brace-format
#| msgid "Invalid code, please try again."
msgid "Invalid code. Please try again after waiting {value} second."
msgid_plural "Invalid code. Please try again after waiting {value} seconds."
msgstr[0] "無効なコードです。{value}秒後再度お試しください。"
msgstr[0] "無効なコードです。もう一度お試しください。"
#: pretix/control/views/checkin.py
msgid "The selected check-ins have been reverted."
@@ -28504,8 +28533,10 @@ msgid "You entered an order in an event with a different currency."
msgstr "イベントで異なる通貨で注文を入力しました。"
#: pretix/control/views/orders.py
#, fuzzy
#| msgid "You entered an order in an event with a different currency."
msgid "You entered an order in an event that you do not have access to."
msgstr "アクセスできないイベントに注文が入力されました。"
msgstr "イベントで異なる通貨で注文を入力しました。"
#: pretix/control/views/orders.py
msgid ""
@@ -29363,8 +29394,10 @@ msgstr ""
"ください。このユーザーの過去の緊急トークンは引き続き有効です。"
#: pretix/control/views/users.py
#, fuzzy
#| msgid "The password has been reset."
msgid "The drift values for TOTP devices have been reset."
msgstr "TOTP デバイスのドリフト値がリセットされました。"
msgstr "パスワードがリセットされました。"
#: pretix/control/views/users.py
msgid "The new user has been created."
@@ -29379,12 +29412,14 @@ msgid "Bypass quota"
msgstr "クォータをバイパスする"
#: pretix/control/views/vouchers.py
#, fuzzy
#| msgid "Widget"
msgid "Budget"
msgstr "予算"
msgstr "ウィジェット"
#: pretix/control/views/vouchers.py
msgid "Budget used"
msgstr "消化済み予算"
msgstr ""
#: pretix/control/views/vouchers.py
msgid "The requested voucher does not exist."
@@ -33944,27 +33979,29 @@ msgid ""
"Not sure yet? You can complete your order first and then select a payment "
"method later."
msgstr ""
"まだ確かではありませんか?ご注文を先に完了し、その後でお支払い方法を選択でき"
"ます。"
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
msgid ""
"To do so, please first remove the payment methods you already selected above."
msgstr "そのためには、まず上記で既に選択された支払い方法を削除してください。"
msgstr ""
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, python-format
#, fuzzy, python-format
#| msgid "Your event needs to be over to use this feature."
msgid "Your payment needs to be completed within %(minutes)s minutes."
msgstr "支払いは、%(minutes)s分以内に完了する必要があります。"
msgstr "この機能を使用するには、イベントが終了している必要があります。"
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, python-format
#, fuzzy, python-format
#| msgid "Your event needs to be over to use this feature."
msgid "Your payment needs to be completed by %(deadline)s."
msgstr "支払いは、%(deadline)sまでに完了させる必要があります。"
msgstr "この機能を使用するには、イベントが終了している必要があります。"
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html
#, fuzzy
#| msgid "Proceed with reset"
msgid "Proceed without selection"
msgstr "選択なしで進む"
msgstr "リセットを実行"
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html
msgid "Before we continue, we need you to answer some questions."
File diff suppressed because it is too large Load Diff
+55 -35
View File
@@ -8,9 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-10-02 05:00+0000\n"
"Last-Translator: Translate pretix user 594 "
"<ivagvr@users.noreply.translate.pretix.eu>\n"
"PO-Revision-Date: 2025-10-17 16:55+0000\n"
"Last-Translator: fd <fd@denkena-consulting.com>\n"
"Language-Team: Russian <https://translate.pretix.eu/projects/pretix/pretix-"
"js/ru/>\n"
"Language: ru\n"
@@ -19,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 2026.10\n"
"X-Generator: Weblate 5.13.3\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js
msgid "Marked as paid"
@@ -79,8 +78,10 @@ msgid "SOFORT"
msgstr ""
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js
#, fuzzy
#| msgid "Yes"
msgid "eps"
msgstr ""
msgstr "Да"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js
msgid "MyBank"
@@ -146,7 +147,7 @@ msgstr "Подтверждается ваш платёж…"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js
msgid "Payment method unavailable"
msgstr "Способ оплаты недоступен"
msgstr ""
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js
msgid "Placed orders"
@@ -199,16 +200,21 @@ msgid "Switch check-in list"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
#, fuzzy
#| msgid "Check-in QR"
msgid "Search results"
msgstr "Результаты поиска"
msgstr "QR-код для регистрации"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
#, fuzzy
#| msgctxt "widget"
#| msgid "Close ticket shop"
msgid "No tickets found"
msgstr "Нет доступных билетов"
msgstr "Закрыть билетную кассу"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Result"
msgstr "Результат"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "This ticket requires special attention"
@@ -220,7 +226,7 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Entry"
msgstr "Вход"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Exit"
@@ -269,7 +275,7 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Ticket not paid"
msgstr "Билет не оплачен"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "This ticket is not yet paid. Do you want to continue anyways?"
@@ -289,19 +295,21 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Ticket already used"
msgstr "Повторный проход по билету"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Information required"
msgstr "Необходима информация"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
#, fuzzy
#| msgid "Unknown error."
msgid "Unknown ticket"
msgstr "Неизвестный билет"
msgstr "Неизвестная ошибка."
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Ticket type not allowed here"
msgstr "Здесь нельзя пройти по этому билету"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Entry not allowed"
@@ -309,11 +317,11 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Ticket code revoked/changed"
msgstr "Код билета аннулирован и/или изменен"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Ticket blocked"
msgstr "Билет заблокирован"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Ticket not valid at this time"
@@ -329,7 +337,7 @@ msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
msgid "Order not approved"
msgstr "Заказ не подтвержден"
msgstr ""
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
#, fuzzy
@@ -369,20 +377,32 @@ msgstr "Закрыть"
#: pretix/static/pretixbase/js/addressform.js
#: pretix/static/pretixpresale/js/ui/main.js
#, fuzzy
#| msgid "Cart expired"
msgid "required"
msgstr "обязательно"
msgstr "Срок действия корзины истёк"
#: pretix/static/pretixbase/js/asynctask.js
#, fuzzy
#| msgid ""
#| "Your request has been queued on the server and will now be processed. "
#| "Depending on the size of your event, this might take up to a few minutes."
msgid ""
"Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes."
msgstr ""
"Ваш запрос принят в обработку. В зависимости от масштаба вашего мероприятия "
"это может занять до нескольких минут."
"Ваш запрос поставлен в очередь на сервере и будет обработан. В зависимости "
"от масштаба вашего мероприятия это может занять до нескольких минут."
#: pretix/static/pretixbase/js/asynctask.js
#, fuzzy
#| msgid ""
#| "Your request has been queued on the server and will now be processed. "
#| "Depending on the size of your event, this might take up to a few minutes."
msgid "Your request has been queued on the server and will soon be processed."
msgstr "Ваш запрос поставлен в очередь на сервере и будет обработан."
msgstr ""
"Ваш запрос поставлен в очередь на сервере и будет обработан. В зависимости "
"от масштаба вашего мероприятия это может занять до нескольких минут."
#: pretix/static/pretixbase/js/asynctask.js
msgid ""
@@ -453,7 +473,7 @@ msgstr "Чтобы скопировать, нажмите Ctrl-C."
#: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue
msgid "Edit"
msgstr "Редактировать"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue
msgid "Visualize"
@@ -512,7 +532,7 @@ msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules/constants.ts
msgid "Duplicate"
msgstr "Дубликат"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules/constants.ts
msgctxt "entry_status"
@@ -1195,15 +1215,15 @@ msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "Tuesday"
msgstr "Вторник"
msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "Wednesday"
msgstr "Среда"
msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "Thursday"
msgstr "Четверг"
msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "Friday"
@@ -1211,11 +1231,11 @@ msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "Saturday"
msgstr "Суббота"
msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "Sunday"
msgstr "Воскресенье"
msgstr ""
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "January"
@@ -1231,23 +1251,23 @@ msgstr "март"
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "April"
msgstr "Апрель"
msgstr "апрель"
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "May"
msgstr "Май"
msgstr "май"
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "June"
msgstr "Июнь"
msgstr "июнь"
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "July"
msgstr "Июль"
msgstr "июль"
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "August"
msgstr "Август"
msgstr "август"
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "September"
@@ -1255,7 +1275,7 @@ msgstr "сентябрь"
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "October"
msgstr "Октябрь"
msgstr "октябрь"
#: pretix/static/pretixpresale/widget/src/i18n.ts
msgid "November"
+4 -3
View File
@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-09-30 17:00+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"PO-Revision-Date: 2026-09-04 14:29+0000\n"
"Last-Translator: Linnea Thelander <linnea@coeo.events>\n"
"Language-Team: Swedish <https://translate.pretix.eu/projects/pretix/pretix/"
"sv/>\n"
"Language: sv\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 2026.9.1\n"
"X-Generator: Weblate 2026.9\n"
#: pretix/_base_settings.py
msgid "English"
@@ -19239,6 +19239,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/order_pay.html
#: pretix/presale/templates/pretixpresale/event/order_pay_change.html
#: pretix/presale/templates/pretixpresale/event/position_change.html
#, fuzzy
msgid "Continue"
msgstr "Fortsätt"
+4 -3
View File
@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-09-30 17:00+0000\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"PO-Revision-Date: 2026-09-04 14:29+0000\n"
"Last-Translator: Linnea Thelander <linnea@coeo.events>\n"
"Language-Team: Swedish <https://translate.pretix.eu/projects/pretix/pretix-"
"js/sv/>\n"
"Language: sv\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 2026.9.1\n"
"X-Generator: Weblate 2026.9\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js
msgid "Marked as paid"
@@ -133,6 +133,7 @@ msgstr "Mercado Pago"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/i18n.ts
#: pretix/static/pretixpresale/js/ui/cart.js
#, fuzzy
msgid "Continue"
msgstr "Fortsätt"
File diff suppressed because it is too large Load Diff
+4 -6
View File
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-30 07:26+0000\n"
"PO-Revision-Date: 2026-10-02 05:00+0000\n"
"PO-Revision-Date: 2026-09-29 09:51+0000\n"
"Last-Translator: Nate Horst <nate@agcthailand.org>\n"
"Language-Team: Thai <https://translate.pretix.eu/projects/pretix/pretix-js/"
"th/>\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 2026.10\n"
"X-Generator: Weblate 2026.9.1\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js
msgid "Marked as paid"
@@ -426,7 +426,7 @@ msgstr "แก้ไข"
#: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue
msgid "Visualize"
msgstr "แสดงภาพผัง"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue
msgid ""
@@ -434,12 +434,10 @@ msgid ""
"or variations are not contained in any of your rule parts so people with "
"these tickets will not get in:"
msgstr ""
"กฎของคุณมีการกรองตามสินค้าหรือรูปแบบย่อยเสมอ แต่สินค้าหรือรูปแบบย่อยต่อไปนี้ไม่ได้ถูกรวมอยู่ในส่วนใ"
"ดของกฎ คุณจึงส่งผลให้ผู้ที่ถือตั๋วเหล่านี้จะไม่สามารถผ่านเข้างานได้:"
#: pretix/static/pretixcontrol/js/ui/checkinrules/App.vue
msgid "Please double-check if this was intentional."
msgstr "โปรดตรวจสอบอีกครั้งว่าเป็นการดำเนินการโดยตั้งใจหรือไม่"
msgstr ""
#: pretix/static/pretixcontrol/js/ui/checkinrules/constants.ts
msgid "All of the conditions below (AND)"
-8
View File
@@ -1925,14 +1925,6 @@ def test_addons_create(token_client, organizer, event, item, category, category2
@pytest.mark.django_db
def test_addons_update(token_client, organizer, event, item, addon):
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/items/{}/addons/{}/'.format(organizer.slug, event.slug, item.pk, addon.pk),
{
},
format='json'
)
assert resp.status_code == 200
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/items/{}/addons/{}/'.format(organizer.slug, event.slug, item.pk, addon.pk),
{