wagtail 7.2.1__py3-none-any.whl → 7.3rc1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. wagtail/__init__.py +1 -1
  2. wagtail/actions/copy_for_translation.py +4 -2
  3. wagtail/admin/action_menu.py +4 -1
  4. wagtail/admin/api/actions/convert_alias.py +2 -2
  5. wagtail/admin/api/actions/copy.py +2 -2
  6. wagtail/admin/api/actions/copy_for_translation.py +2 -2
  7. wagtail/admin/api/actions/create_alias.py +2 -2
  8. wagtail/admin/api/actions/delete.py +1 -1
  9. wagtail/admin/api/actions/move.py +1 -1
  10. wagtail/admin/api/actions/publish.py +2 -2
  11. wagtail/admin/api/actions/revert_to_page_revision.py +2 -2
  12. wagtail/admin/api/actions/unpublish.py +1 -1
  13. wagtail/admin/api/filters.py +2 -2
  14. wagtail/admin/compare.py +22 -0
  15. wagtail/admin/forms/account.py +52 -1
  16. wagtail/admin/forms/comments.py +53 -0
  17. wagtail/admin/forms/models.py +36 -0
  18. wagtail/admin/forms/pages.py +7 -0
  19. wagtail/admin/forms/workflows.py +5 -2
  20. wagtail/admin/icons.py +4 -3
  21. wagtail/admin/locale/ar/LC_MESSAGES/django.mo +0 -0
  22. wagtail/admin/locale/ar/LC_MESSAGES/django.po +35 -0
  23. wagtail/admin/locale/en/LC_MESSAGES/django.po +262 -234
  24. wagtail/admin/locale/en/LC_MESSAGES/djangojs.po +72 -43
  25. wagtail/admin/locale/it/LC_MESSAGES/django.mo +0 -0
  26. wagtail/admin/locale/it/LC_MESSAGES/django.po +566 -6
  27. wagtail/admin/locale/it/LC_MESSAGES/djangojs.mo +0 -0
  28. wagtail/admin/locale/it/LC_MESSAGES/djangojs.po +40 -2
  29. wagtail/admin/locale/nl/LC_MESSAGES/django.mo +0 -0
  30. wagtail/admin/locale/nl/LC_MESSAGES/django.po +2 -2
  31. wagtail/admin/locale/sv/LC_MESSAGES/django.mo +0 -0
  32. wagtail/admin/locale/sv/LC_MESSAGES/django.po +330 -15
  33. wagtail/admin/locale/sv/LC_MESSAGES/djangojs.mo +0 -0
  34. wagtail/admin/locale/sv/LC_MESSAGES/djangojs.po +3 -2
  35. wagtail/admin/panels/comment_panel.py +1 -51
  36. wagtail/admin/panels/title_field_panel.py +3 -1
  37. wagtail/admin/static/wagtailadmin/css/core.css +1 -1
  38. wagtail/admin/static/wagtailadmin/js/bulk-actions.js +1 -1
  39. wagtail/admin/static/wagtailadmin/js/comments.js +1 -1
  40. wagtail/admin/static/wagtailadmin/js/core.js +1 -1
  41. wagtail/admin/static/wagtailadmin/js/core.js.LICENSE.txt +1 -1
  42. wagtail/admin/static/wagtailadmin/js/draftail.js +1 -1
  43. wagtail/admin/static/wagtailadmin/js/privacy-switch.js +1 -1
  44. wagtail/admin/static/wagtailadmin/js/sidebar.js +1 -1
  45. wagtail/admin/static/wagtailadmin/js/telepath/blocks.js +1 -1
  46. wagtail/admin/static/wagtailadmin/js/userbar.js +1 -1
  47. wagtail/admin/static/wagtailadmin/js/userbar.js.LICENSE.txt +1 -1
  48. wagtail/admin/static/wagtailadmin/js/vendor.js +1 -1
  49. wagtail/admin/static/wagtailadmin/js/wagtailadmin.js +1 -1
  50. wagtail/admin/templates/wagtailadmin/base.html +1 -1
  51. wagtail/admin/templates/wagtailadmin/generic/edit_partials.html +100 -0
  52. wagtail/admin/templates/wagtailadmin/generic/form.html +26 -5
  53. wagtail/admin/templates/wagtailadmin/generic/includes/_loaded_revision_inputs.html +3 -0
  54. wagtail/admin/templates/wagtailadmin/generic/listing_results.html +1 -17
  55. wagtail/admin/templates/wagtailadmin/pages/create.html +14 -4
  56. wagtail/admin/templates/wagtailadmin/pages/edit.html +16 -3
  57. wagtail/admin/templates/wagtailadmin/pages/edit_partials.html +31 -0
  58. wagtail/admin/templates/wagtailadmin/pages/index_results.html +1 -9
  59. wagtail/admin/templates/wagtailadmin/shared/autosave/indicator.html +36 -0
  60. wagtail/admin/templates/wagtailadmin/shared/breadcrumbs.html +1 -1
  61. wagtail/admin/templates/wagtailadmin/shared/editing_sessions/list.html +2 -2
  62. wagtail/admin/templates/wagtailadmin/shared/editing_sessions/module.html +19 -3
  63. wagtail/admin/templates/wagtailadmin/shared/headers/_actions.html +5 -0
  64. wagtail/admin/templates/wagtailadmin/shared/headers/_history_icon_link.html +2 -2
  65. wagtail/admin/templates/wagtailadmin/shared/headers/slim_header.html +8 -9
  66. wagtail/admin/templates/wagtailadmin/shared/listing/filter_partials.html +19 -0
  67. wagtail/admin/templates/wagtailadmin/shared/side_panel_toggle.html +3 -3
  68. wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/side_panel.html +3 -0
  69. wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/privacy.html +18 -6
  70. wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/usage.html +11 -4
  71. wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/workflow.html +22 -1
  72. wagtail/admin/templates/wagtailadmin/shared/side_panels/preview.html +1 -0
  73. wagtail/admin/templates/wagtailadmin/shared/side_panels.html +1 -2
  74. wagtail/admin/templates/wagtailadmin/shared/unsaved_changes_warning.html +20 -20
  75. wagtail/admin/templates/wagtailadmin/userbar/base.html +2 -0
  76. wagtail/admin/templates/wagtailadmin/userbar/item_accessibility.html +1 -1
  77. wagtail/admin/templatetags/wagtailadmin_tags.py +6 -14
  78. wagtail/admin/tests/pages/test_create_page.py +298 -1
  79. wagtail/admin/tests/pages/test_custom_listing.py +48 -2
  80. wagtail/admin/tests/pages/test_edit_page.py +721 -7
  81. wagtail/admin/tests/pages/test_explorer_view.py +9 -5
  82. wagtail/admin/tests/pages/test_page_search.py +15 -0
  83. wagtail/admin/tests/pages/test_revisions.py +4 -0
  84. wagtail/admin/tests/test_account_management.py +88 -2
  85. wagtail/admin/tests/test_collections_views.py +15 -15
  86. wagtail/admin/tests/test_compare.py +34 -0
  87. wagtail/admin/tests/test_editing_sessions.py +230 -8
  88. wagtail/admin/tests/test_forms.py +192 -1
  89. wagtail/admin/tests/test_icon_sprite.py +22 -2
  90. wagtail/admin/tests/test_page_chooser.py +13 -13
  91. wagtail/admin/tests/test_reports_views.py +4 -1
  92. wagtail/admin/tests/test_userbar.py +69 -5
  93. wagtail/admin/tests/test_views_generic.py +5 -5
  94. wagtail/admin/tests/test_workflows.py +14 -12
  95. wagtail/admin/tests/viewsets/test_model_viewset.py +13 -0
  96. wagtail/admin/ui/autosave.py +5 -0
  97. wagtail/admin/ui/editing_sessions.py +3 -0
  98. wagtail/admin/ui/side_panels.py +19 -20
  99. wagtail/admin/userbar.py +48 -27
  100. wagtail/admin/views/bulk_action/dispatcher.py +2 -2
  101. wagtail/admin/views/chooser.py +6 -6
  102. wagtail/admin/views/editing_sessions.py +20 -7
  103. wagtail/admin/views/generic/__init__.py +1 -0
  104. wagtail/admin/views/generic/chooser.py +5 -5
  105. wagtail/admin/views/generic/mixins.py +143 -26
  106. wagtail/admin/views/generic/models.py +157 -27
  107. wagtail/admin/views/generic/ordering.py +1 -1
  108. wagtail/admin/views/generic/preview.py +4 -4
  109. wagtail/admin/views/home.py +3 -1
  110. wagtail/admin/views/pages/create.py +77 -29
  111. wagtail/admin/views/pages/edit.py +160 -34
  112. wagtail/admin/views/pages/preview.py +4 -4
  113. wagtail/admin/views/pages/revisions.py +3 -0
  114. wagtail/admin/views/pages/search.py +4 -4
  115. wagtail/admin/views/pages/usage.py +2 -2
  116. wagtail/admin/views/tags.py +2 -2
  117. wagtail/admin/views/workflows.py +73 -54
  118. wagtail/admin/viewsets/model.py +34 -8
  119. wagtail/admin/widgets/button.py +11 -4
  120. wagtail/admin/widgets/chooser.py +6 -4
  121. wagtail/admin/widgets/slug.py +1 -1
  122. wagtail/api/v2/filters.py +27 -21
  123. wagtail/api/v2/pagination.py +4 -4
  124. wagtail/api/v2/views.py +7 -7
  125. wagtail/blocks/list_block.py +0 -8
  126. wagtail/blocks/migrations/migrate_operation.py +8 -1
  127. wagtail/blocks/stream_block.py +2 -10
  128. wagtail/blocks/struct_block.py +192 -12
  129. wagtail/compat.py +2 -2
  130. wagtail/contrib/forms/locale/en/LC_MESSAGES/django.po +1 -1
  131. wagtail/contrib/forms/locale/it/LC_MESSAGES/django.mo +0 -0
  132. wagtail/contrib/forms/locale/it/LC_MESSAGES/django.po +40 -2
  133. wagtail/contrib/frontend_cache/backends/azure.py +6 -6
  134. wagtail/contrib/frontend_cache/backends/cloudfront.py +2 -2
  135. wagtail/contrib/frontend_cache/utils.py +1 -1
  136. wagtail/contrib/redirects/forms.py +1 -1
  137. wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.po +14 -14
  138. wagtail/contrib/redirects/locale/it/LC_MESSAGES/django.mo +0 -0
  139. wagtail/contrib/redirects/locale/it/LC_MESSAGES/django.po +15 -2
  140. wagtail/contrib/redirects/locale/sv/LC_MESSAGES/django.mo +0 -0
  141. wagtail/contrib/redirects/locale/sv/LC_MESSAGES/django.po +16 -3
  142. wagtail/contrib/redirects/middleware.py +11 -7
  143. wagtail/contrib/redirects/models.py +17 -1
  144. wagtail/contrib/redirects/tests/test_import_admin_views.py +3 -3
  145. wagtail/contrib/redirects/tests/test_redirects.py +56 -8
  146. wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.po +6 -6
  147. wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.mo +0 -0
  148. wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.po +43 -2
  149. wagtail/contrib/search_promotions/tests.py +1 -1
  150. wagtail/contrib/search_promotions/views/settings.py +24 -25
  151. wagtail/contrib/settings/jinja2tags.py +2 -2
  152. wagtail/contrib/settings/locale/en/LC_MESSAGES/django.po +2 -2
  153. wagtail/contrib/settings/locale/it/LC_MESSAGES/django.mo +0 -0
  154. wagtail/contrib/settings/locale/it/LC_MESSAGES/django.po +6 -2
  155. wagtail/contrib/settings/locale/sv/LC_MESSAGES/django.mo +0 -0
  156. wagtail/contrib/settings/locale/sv/LC_MESSAGES/django.po +3 -2
  157. wagtail/contrib/settings/tests/generic/test_admin.py +118 -2
  158. wagtail/contrib/settings/tests/site_specific/test_admin.py +78 -15
  159. wagtail/contrib/settings/tests/site_specific/test_model.py +2 -2
  160. wagtail/contrib/settings/views.py +7 -0
  161. wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.po +1 -1
  162. wagtail/contrib/simple_translation/locale/it/LC_MESSAGES/django.mo +0 -0
  163. wagtail/contrib/simple_translation/locale/it/LC_MESSAGES/django.po +5 -2
  164. wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.po +7 -7
  165. wagtail/contrib/styleguide/tests.py +2 -0
  166. wagtail/contrib/styleguide/views.py +4 -5
  167. wagtail/contrib/table_block/locale/ar/LC_MESSAGES/django.mo +0 -0
  168. wagtail/contrib/table_block/locale/ar/LC_MESSAGES/django.po +5 -1
  169. wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po +1 -1
  170. wagtail/contrib/table_block/locale/it/LC_MESSAGES/django.mo +0 -0
  171. wagtail/contrib/table_block/locale/it/LC_MESSAGES/django.po +5 -2
  172. wagtail/contrib/typed_table_block/blocks.py +37 -0
  173. wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.po +10 -10
  174. wagtail/contrib/typed_table_block/locale/sv/LC_MESSAGES/django.mo +0 -0
  175. wagtail/contrib/typed_table_block/locale/sv/LC_MESSAGES/django.po +4 -3
  176. wagtail/contrib/typed_table_block/tests.py +108 -0
  177. wagtail/coreutils.py +4 -4
  178. wagtail/documents/__init__.py +4 -4
  179. wagtail/documents/locale/en/LC_MESSAGES/django.po +15 -15
  180. wagtail/documents/locale/it/LC_MESSAGES/django.mo +0 -0
  181. wagtail/documents/locale/it/LC_MESSAGES/django.po +32 -2
  182. wagtail/documents/locale/sv/LC_MESSAGES/django.mo +0 -0
  183. wagtail/documents/locale/sv/LC_MESSAGES/django.po +32 -4
  184. wagtail/documents/models.py +1 -1
  185. wagtail/documents/tests/test_admin_views.py +19 -4
  186. wagtail/documents/tests/test_search.py +0 -2
  187. wagtail/documents/tests/test_views.py +6 -4
  188. wagtail/documents/views/bulk_actions/add_tags.py +1 -1
  189. wagtail/embeds/finders/facebook.py +3 -3
  190. wagtail/embeds/finders/instagram.py +3 -3
  191. wagtail/embeds/finders/oembed.py +7 -2
  192. wagtail/embeds/locale/en/LC_MESSAGES/django.po +1 -1
  193. wagtail/embeds/oembed_providers.py +8 -0
  194. wagtail/embeds/tests/test_embeds.py +35 -0
  195. wagtail/images/__init__.py +4 -4
  196. wagtail/images/admin_urls.py +3 -3
  197. wagtail/images/blocks.py +1 -1
  198. wagtail/images/formats.py +2 -2
  199. wagtail/images/image_operations.py +2 -2
  200. wagtail/images/locale/en/LC_MESSAGES/django.po +44 -40
  201. wagtail/images/locale/it/LC_MESSAGES/django.mo +0 -0
  202. wagtail/images/locale/it/LC_MESSAGES/django.po +50 -4
  203. wagtail/images/locale/nl/LC_MESSAGES/django.mo +0 -0
  204. wagtail/images/locale/nl/LC_MESSAGES/django.po +3 -3
  205. wagtail/images/locale/sv/LC_MESSAGES/django.mo +0 -0
  206. wagtail/images/locale/sv/LC_MESSAGES/django.po +49 -6
  207. wagtail/images/models.py +11 -10
  208. wagtail/images/templates/wagtailimages/images/index_results.html +1 -1
  209. wagtail/images/templates/wagtailimages/images/url_generator.html +17 -38
  210. wagtail/images/templates/wagtailimages/images/url_generator_output.html +28 -0
  211. wagtail/images/templatetags/wagtailimages_tags.py +4 -4
  212. wagtail/images/tests/test_admin_views.py +432 -59
  213. wagtail/images/tests/test_image_operations.py +2 -2
  214. wagtail/images/tests/test_models.py +0 -2
  215. wagtail/images/views/bulk_actions/add_tags.py +1 -1
  216. wagtail/images/views/images.py +72 -39
  217. wagtail/locale/en/LC_MESSAGES/django.po +103 -105
  218. wagtail/locale/it/LC_MESSAGES/django.mo +0 -0
  219. wagtail/locale/it/LC_MESSAGES/django.po +105 -2
  220. wagtail/locale/sv/LC_MESSAGES/django.mo +0 -0
  221. wagtail/locale/sv/LC_MESSAGES/django.po +95 -12
  222. wagtail/locales/locale/en/LC_MESSAGES/django.po +1 -1
  223. wagtail/locales/locale/it/LC_MESSAGES/django.mo +0 -0
  224. wagtail/locales/locale/it/LC_MESSAGES/django.po +13 -2
  225. wagtail/locales/locale/sv/LC_MESSAGES/django.mo +0 -0
  226. wagtail/locales/locale/sv/LC_MESSAGES/django.po +4 -3
  227. wagtail/locales/tests.py +5 -5
  228. wagtail/models/i18n.py +4 -6
  229. wagtail/models/media.py +18 -0
  230. wagtail/models/pages.py +65 -11
  231. wagtail/models/reference_index.py +15 -0
  232. wagtail/models/revisions.py +40 -12
  233. wagtail/models/workflows.py +0 -3
  234. wagtail/permission_policies/base.py +2 -2
  235. wagtail/permission_policies/collections.py +2 -2
  236. wagtail/project_template/requirements.txt +2 -2
  237. wagtail/search/locale/en/LC_MESSAGES/django.po +1 -1
  238. wagtail/signal_handlers.py +1 -0
  239. wagtail/sites/locale/en/LC_MESSAGES/django.po +1 -1
  240. wagtail/sites/locale/sv/LC_MESSAGES/django.mo +0 -0
  241. wagtail/sites/locale/sv/LC_MESSAGES/django.po +3 -2
  242. wagtail/sites/tests.py +7 -7
  243. wagtail/snippets/action_menu.py +2 -1
  244. wagtail/snippets/locale/en/LC_MESSAGES/django.po +23 -13
  245. wagtail/snippets/locale/sv/LC_MESSAGES/django.mo +0 -0
  246. wagtail/snippets/locale/sv/LC_MESSAGES/django.po +12 -1
  247. wagtail/snippets/tests/test_chooser_block.py +197 -0
  248. wagtail/snippets/tests/test_chooser_panel.py +149 -0
  249. wagtail/snippets/tests/test_chooser_views.py +375 -0
  250. wagtail/snippets/tests/test_chooser_widget.py +22 -0
  251. wagtail/snippets/tests/test_compare_revisions_view.py +167 -0
  252. wagtail/snippets/tests/test_copy_view.py +38 -0
  253. wagtail/snippets/tests/test_create_view.py +1159 -0
  254. wagtail/snippets/tests/test_delete_view.py +225 -0
  255. wagtail/snippets/tests/test_edit_view.py +2882 -0
  256. wagtail/snippets/tests/test_history_view.py +182 -0
  257. wagtail/snippets/tests/test_index_view.py +105 -0
  258. wagtail/snippets/tests/test_list_view.py +786 -0
  259. wagtail/snippets/tests/test_locking.py +28 -0
  260. wagtail/snippets/tests/test_permissions.py +167 -0
  261. wagtail/snippets/tests/test_preview.py +3 -3
  262. wagtail/snippets/tests/test_revert_view.py +343 -0
  263. wagtail/snippets/tests/test_snippet_models.py +112 -0
  264. wagtail/snippets/tests/test_unpublish_view.py +228 -0
  265. wagtail/snippets/tests/test_unschedule_view.py +151 -0
  266. wagtail/snippets/tests/test_viewset.py +38 -5
  267. wagtail/snippets/views/snippets.py +78 -30
  268. wagtail/snippets/widgets.py +2 -2
  269. wagtail/templatetags/wagtailcore_tags.py +2 -2
  270. wagtail/test/dummy_external_storage.py +1 -1
  271. wagtail/test/testapp/fixtures/test.json +22 -0
  272. wagtail/test/testapp/fixtures/test_empty.json +2 -0
  273. wagtail/test/testapp/fixtures/test_explorable_pages.json +10 -0
  274. wagtail/test/testapp/fixtures/test_specific.json +9 -0
  275. wagtail/test/testapp/migrations/0059_nopromotepage.py +25 -0
  276. wagtail/test/testapp/models.py +7 -0
  277. wagtail/test/testapp/views.py +5 -0
  278. wagtail/test/utils/page_tests.py +7 -7
  279. wagtail/test/utils/wagtail_factories/builder.py +2 -2
  280. wagtail/tests/streamfield_migrations/test_migrations.py +35 -0
  281. wagtail/tests/test_blocks.py +321 -61
  282. wagtail/tests/test_collection_model.py +12 -0
  283. wagtail/tests/test_page_model.py +190 -1
  284. wagtail/tests/test_page_privacy.py +5 -0
  285. wagtail/tests/test_reference_index.py +42 -0
  286. wagtail/tests/test_revision_model.py +118 -1
  287. wagtail/tests/test_utils.py +2 -2
  288. wagtail/users/locale/en/LC_MESSAGES/django.po +14 -14
  289. wagtail/users/locale/id_ID/LC_MESSAGES/django.mo +0 -0
  290. wagtail/users/locale/id_ID/LC_MESSAGES/django.po +6 -2
  291. wagtail/users/locale/it/LC_MESSAGES/django.mo +0 -0
  292. wagtail/users/locale/it/LC_MESSAGES/django.po +14 -2
  293. wagtail/users/locale/sv/LC_MESSAGES/django.mo +0 -0
  294. wagtail/users/locale/sv/LC_MESSAGES/django.po +48 -17
  295. wagtail/users/tests/test_admin_views.py +39 -25
  296. wagtail/users/utils.py +4 -1
  297. wagtail/users/views/groups.py +19 -5
  298. wagtail/users/wagtail_hooks.py +1 -1
  299. wagtail/utils/loading.py +2 -2
  300. wagtail-7.3rc1.data/data/AGENTS.md +21 -0
  301. wagtail-7.3rc1.data/data/CHANGELOG.txt +4941 -0
  302. wagtail-7.3rc1.data/data/CODE_OF_CONDUCT.md +71 -0
  303. wagtail-7.3rc1.data/data/CONTRIBUTORS.md +999 -0
  304. wagtail-7.3rc1.data/data/SPONSORS.md +55 -0
  305. {wagtail-7.2.1.dist-info → wagtail-7.3rc1.dist-info}/METADATA +6 -6
  306. {wagtail-7.2.1.dist-info → wagtail-7.3rc1.dist-info}/RECORD +310 -280
  307. {wagtail-7.2.1.dist-info → wagtail-7.3rc1.dist-info}/WHEEL +1 -1
  308. wagtail/images/static/wagtailimages/js/image-url-generator.js +0 -1
  309. wagtail/snippets/tests/test_snippets.py +0 -6377
  310. {wagtail-7.2.1.dist-info → wagtail-7.3rc1.dist-info}/entry_points.txt +0 -0
  311. {wagtail-7.2.1.dist-info → wagtail-7.3rc1.dist-info}/licenses/LICENSE +0 -0
  312. {wagtail-7.2.1.dist-info → wagtail-7.3rc1.dist-info}/top_level.txt +0 -0
@@ -7,14 +7,14 @@
7
7
  # giammi <gian-maria.daffre@giammi.org>, 2018
8
8
  # giammi <gian-maria.daffre@giammi.org>, 2018
9
9
  # LB (Ben Johnston) <mail@lb.ee>, 2019
10
- # Marco Badan <marco.badan@gmail.com>, 2021
10
+ # Marco Badan <marco.badan@gmail.com>, 2021,2026
11
11
  msgid ""
12
12
  msgstr ""
13
13
  "Project-Id-Version: Wagtail\n"
14
14
  "Report-Msgid-Bugs-To: \n"
15
15
  "POT-Creation-Date: 2025-10-23 16:45+0100\n"
16
16
  "PO-Revision-Date: 2014-09-11 15:42+0000\n"
17
- "Last-Translator: Marco Badan <marco.badan@gmail.com>, 2021\n"
17
+ "Last-Translator: Marco Badan <marco.badan@gmail.com>, 2021,2026\n"
18
18
  "Language-Team: Italian (http://app.transifex.com/torchbox/wagtail/language/"
19
19
  "it/)\n"
20
20
  "MIME-Version: 1.0\n"
@@ -33,6 +33,22 @@ msgstr "Data dal"
33
33
  msgid "Date to"
34
34
  msgstr "Data al"
35
35
 
36
+ #, python-format
37
+ msgid ""
38
+ "The name '%(duplicate_clean_name)s' is already assigned to this field and "
39
+ "cannot be changed. Please enter a different label for the conflicting field."
40
+ msgstr ""
41
+ "Il nome '%(duplicate_clean_name)s' è già assegnato a questo campo e non può "
42
+ "essere modificato. Inserisci un'etichetta diversa per il campo in conflitto."
43
+
44
+ #, python-format
45
+ msgid ""
46
+ "Field name '%(duplicate_clean_name)s' conflicts with another field. Please "
47
+ "change the label."
48
+ msgstr ""
49
+ "Il nome del campo '%(duplicate_clean_name)s' è in conflitto con un altro "
50
+ "campo. Modifica l'etichetta."
51
+
36
52
  msgid "Single line text"
37
53
  msgstr "Testo linea singola"
38
54
 
@@ -102,9 +118,22 @@ msgstr "richiesto"
102
118
  msgid "choices"
103
119
  msgstr "voci"
104
120
 
121
+ msgid ""
122
+ "Comma or new line separated list of choices. Only applicable in checkboxes, "
123
+ "radio and dropdown."
124
+ msgstr ""
125
+ "Elenco di scelte separate da virgola o a capo. Applicabile solo a checkbox, "
126
+ "radio e menu a discesa."
127
+
105
128
  msgid "default value"
106
129
  msgstr "valore di default"
107
130
 
131
+ msgid ""
132
+ "Default value. Comma or new line separated values supported for checkboxes."
133
+ msgstr ""
134
+ "Valore predefinito. Valori separati da virgola o a capo supportati per le "
135
+ "caselle di controllo."
136
+
108
137
  msgid "help text"
109
138
  msgstr "testo di aiuto"
110
139
 
@@ -144,6 +173,12 @@ msgstr "Elimina dati form %(title)s"
144
173
  msgid "Delete form data"
145
174
  msgstr "Elimina dati form"
146
175
 
176
+ msgid "Are you sure you want to delete this form submission?"
177
+ msgid_plural "Are you sure you want to delete these form submissions?"
178
+ msgstr[0] "Sei sicuro di voler eliminare questo invio del modulo?"
179
+ msgstr[1] "Sei sicuro di voler eliminare questi invii del modulo?"
180
+ msgstr[2] "Sei sicuro di voler eliminare questi invii del modulo?"
181
+
147
182
  msgid "Delete"
148
183
  msgstr "Elimina"
149
184
 
@@ -185,3 +220,6 @@ msgid_plural "%(count)d submissions have been deleted."
185
220
  msgstr[0] "Un invio è stato eliminato."
186
221
  msgstr[1] "%(count)d invii sono stati eliminati."
187
222
  msgstr[2] "%(count)d invii sono stati eliminati."
223
+
224
+ msgid "Form data"
225
+ msgstr "Dati del modulo"
@@ -18,10 +18,10 @@ class AzureBaseBackend(BaseBackend):
18
18
  self._subscription_id = params.pop("SUBSCRIPTION_ID", None)
19
19
  try:
20
20
  self._resource_group_name = params.pop("RESOURCE_GROUP_NAME")
21
- except KeyError:
21
+ except KeyError as e:
22
22
  raise ImproperlyConfigured(
23
23
  "The setting 'WAGTAILFRONTENDCACHE' requires 'RESOURCE_GROUP_NAME' to be specified."
24
- )
24
+ ) from e
25
25
  self._custom_headers = params.pop("CUSTOM_HEADERS", None)
26
26
 
27
27
  def purge_batch(self, urls):
@@ -124,10 +124,10 @@ class AzureFrontDoorBackend(AzureBaseBackend):
124
124
  super().__init__(params)
125
125
  try:
126
126
  self._front_door_name = params.pop("FRONT_DOOR_NAME")
127
- except KeyError:
127
+ except KeyError as e:
128
128
  raise ImproperlyConfigured(
129
129
  "The setting 'WAGTAILFRONTENDCACHE' requires 'FRONT_DOOR_NAME' to be specified."
130
- )
130
+ ) from e
131
131
  self._front_door_service_url = params.pop("FRONT_DOOR_SERVICE_URL", None)
132
132
 
133
133
  def _get_client_class(self):
@@ -154,10 +154,10 @@ class AzureCdnBackend(AzureBaseBackend):
154
154
  try:
155
155
  self._cdn_profile_name = params.pop("CDN_PROFILE_NAME")
156
156
  self._cdn_endpoint_name = params.pop("CDN_ENDPOINT_NAME")
157
- except KeyError:
157
+ except KeyError as e:
158
158
  raise ImproperlyConfigured(
159
159
  "The setting 'WAGTAILFRONTENDCACHE' requires 'CDN_PROFILE_NAME' and 'CDN_ENDPOINT_NAME' to be specified."
160
- )
160
+ ) from e
161
161
  self._cdn_service_url = params.pop("CDN_SERVICE_URL", None)
162
162
 
163
163
  def _get_client_class(self):
@@ -28,10 +28,10 @@ class CloudfrontBackend(BaseBackend):
28
28
 
29
29
  try:
30
30
  self.cloudfront_distribution_id = params.pop("DISTRIBUTION_ID")
31
- except KeyError:
31
+ except KeyError as e:
32
32
  raise ImproperlyConfigured(
33
33
  "The setting 'WAGTAILFRONTENDCACHE' requires the object 'DISTRIBUTION_ID'."
34
- )
34
+ ) from e
35
35
 
36
36
  def purge_batch(self, urls):
37
37
  paths_by_distribution_id = defaultdict(set)
@@ -47,7 +47,7 @@ def get_backends(backend_settings=None, backends=None):
47
47
  except ImportError as e:
48
48
  raise InvalidFrontendCacheBackendError(
49
49
  f"Could not find backend '{backend}': {e}"
50
- )
50
+ ) from e
51
51
 
52
52
  backend_objects[backend_name] = backend_cls(backend_config)
53
53
 
@@ -95,7 +95,7 @@ class ConfirmImportManagementForm(forms.Form):
95
95
  try:
96
96
  cleaned_data[key] = self.signer.unsign(cleaned_data[key])
97
97
  except BadSignature as e:
98
- raise forms.ValidationError(e.message)
98
+ raise forms.ValidationError(e.message) from e
99
99
  return cleaned_data
100
100
 
101
101
 
@@ -8,7 +8,7 @@ msgid ""
8
8
  msgstr ""
9
9
  "Project-Id-Version: PACKAGE VERSION\n"
10
10
  "Report-Msgid-Bugs-To: \n"
11
- "POT-Creation-Date: 2025-10-23 16:45+0100\n"
11
+ "POT-Creation-Date: 2026-01-21 18:00+0000\n"
12
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -67,59 +67,59 @@ msgstr ""
67
67
  msgid "To field"
68
68
  msgstr ""
69
69
 
70
- #: models.py:13
70
+ #: models.py:14
71
71
  msgid "redirect from"
72
72
  msgstr ""
73
73
 
74
- #: models.py:17
74
+ #: models.py:18
75
75
  msgid "site"
76
76
  msgstr ""
77
77
 
78
- #: models.py:25 models.py:100
78
+ #: models.py:26 models.py:101
79
79
  msgid "permanent"
80
80
  msgstr ""
81
81
 
82
- #: models.py:28
82
+ #: models.py:29
83
83
  msgid ""
84
84
  "Recommended. Permanent redirects ensure search engines forget the old page "
85
85
  "(the 'Redirect from') and index the new page instead."
86
86
  msgstr ""
87
87
 
88
- #: models.py:34
88
+ #: models.py:35
89
89
  msgid "redirect to a page"
90
90
  msgstr ""
91
91
 
92
- #: models.py:40
92
+ #: models.py:41
93
93
  msgid "target page route"
94
94
  msgstr ""
95
95
 
96
- #: models.py:42
96
+ #: models.py:43
97
97
  msgid ""
98
98
  "Optionally specify a route on the target page to redirect to. Leave blank to "
99
99
  "redirect to the default page route."
100
100
  msgstr ""
101
101
 
102
- #: models.py:49
102
+ #: models.py:50
103
103
  msgid "redirect to any URL"
104
104
  msgstr ""
105
105
 
106
- #: models.py:52
106
+ #: models.py:53
107
107
  msgid "automatically created"
108
108
  msgstr ""
109
109
 
110
- #: models.py:57
110
+ #: models.py:58
111
111
  msgid "created at"
112
112
  msgstr ""
113
113
 
114
- #: models.py:102
114
+ #: models.py:103
115
115
  msgid "temporary"
116
116
  msgstr ""
117
117
 
118
- #: models.py:219
118
+ #: models.py:235
119
119
  msgid "redirect"
120
120
  msgstr ""
121
121
 
122
- #: models.py:220
122
+ #: models.py:236
123
123
  msgid "redirects"
124
124
  msgstr ""
125
125
 
@@ -6,7 +6,7 @@
6
6
  # Giacomo Ghizzani <giacomo.ghz@gmail.com>, 2015-2016
7
7
  # giammi <gian-maria.daffre@giammi.org>, 2018
8
8
  # giammi <gian-maria.daffre@giammi.org>, 2018
9
- # Marco Badan <marco.badan@gmail.com>, 2021-2022
9
+ # Marco Badan <marco.badan@gmail.com>, 2021-2022,2026
10
10
  # Sandro Badalamenti <sandro@mailinator.com>, 2019
11
11
  msgid ""
12
12
  msgstr ""
@@ -14,7 +14,7 @@ msgstr ""
14
14
  "Report-Msgid-Bugs-To: \n"
15
15
  "POT-Creation-Date: 2025-10-23 16:45+0100\n"
16
16
  "PO-Revision-Date: 2014-02-20 21:04+0000\n"
17
- "Last-Translator: Sandro Badalamenti <sandro@mailinator.com>, 2019\n"
17
+ "Last-Translator: Marco Badan <marco.badan@gmail.com>, 2021-2022,2026\n"
18
18
  "Language-Team: Italian (http://app.transifex.com/torchbox/wagtail/language/"
19
19
  "it/)\n"
20
20
  "MIME-Version: 1.0\n"
@@ -213,6 +213,19 @@ msgstr "Reindirizzamento '%(redirect_title)s' aggiunto."
213
213
  msgid "Search redirects"
214
214
  msgstr "Cerca reindirizzamenti"
215
215
 
216
+ #, python-format
217
+ msgid "File format of type \"%(extension)s\" is not supported."
218
+ msgstr "Il formato file di tipo \"%(extension)s\" non è supportato."
219
+
220
+ #, python-format
221
+ msgid "Imported file has a wrong encoding: %(error_message)s."
222
+ msgstr "Il file importato ha una codifica errata: %(error_message)s."
223
+
224
+ #, python-format
225
+ msgid "%(error)s encountered while trying to read file: %(filename)s."
226
+ msgstr ""
227
+ "%(error)s riscontrato durante il tentativo di leggere il file: %(filename)s."
228
+
216
229
  #, python-format
217
230
  msgid "Imported %(total)d redirect"
218
231
  msgid_plural "Imported %(total)d redirects"
@@ -3,6 +3,7 @@
3
3
  # This file is distributed under the same license as the PACKAGE package.
4
4
  #
5
5
  # Translators:
6
+ # Jonathan Lindén, 2025
6
7
  # Martin Sandström <martin@marteinn.se>, 2020,2022-2023
7
8
  # Philip Andersen <renegadevi@codeofmagi.net>, 2018
8
9
  # Thomas Kunambi <kunambi@gmail.com>, 2015,2017,2021-2022
@@ -14,7 +15,7 @@ msgstr ""
14
15
  "Report-Msgid-Bugs-To: \n"
15
16
  "POT-Creation-Date: 2025-10-23 16:45+0100\n"
16
17
  "PO-Revision-Date: 2014-02-20 21:04+0000\n"
17
- "Last-Translator: Tomas Walch <tomas@alternaliv.se>, 2022\n"
18
+ "Last-Translator: Jonathan Lindén, 2025\n"
18
19
  "Language-Team: Swedish (http://app.transifex.com/torchbox/wagtail/language/"
19
20
  "sv/)\n"
20
21
  "MIME-Version: 1.0\n"
@@ -187,7 +188,7 @@ msgid "Site"
187
188
  msgstr "Sajt"
188
189
 
189
190
  msgid "The redirect could not be saved due to errors."
190
- msgstr "Omdirigeringen kunde inte sparas p.g.a. fel."
191
+ msgstr "Omdirigeringen kunde inte sparas grund av fel."
191
192
 
192
193
  #, python-format
193
194
  msgid "Redirect '%(redirect_title)s' updated."
@@ -198,7 +199,7 @@ msgid "Redirect '%(redirect_title)s' deleted."
198
199
  msgstr "Omdirigering '%(redirect_title)s' raderad."
199
200
 
200
201
  msgid "The redirect could not be created due to errors."
201
- msgstr "Omdirigeringen kunde inte sparas p.g.a. fel."
202
+ msgstr "Omdirigeringen kunde inte skapas grund av fel."
202
203
 
203
204
  #, python-format
204
205
  msgid "Redirect '%(redirect_title)s' added."
@@ -207,6 +208,18 @@ msgstr "Omdirigering '%(redirect_title)s' skapad."
207
208
  msgid "Search redirects"
208
209
  msgstr "Sökomdirigeringar"
209
210
 
211
+ #, python-format
212
+ msgid "File format of type \"%(extension)s\" is not supported."
213
+ msgstr "Filformatet \"%(extension)s\" stöds inte"
214
+
215
+ #, python-format
216
+ msgid "Imported file has a wrong encoding: %(error_message)s."
217
+ msgstr "Importerad fil har fel teckenkodning: %(error_message)s."
218
+
219
+ #, python-format
220
+ msgid "%(error)s encountered while trying to read file: %(filename)s."
221
+ msgstr "%(error)s uppstod vid försök att läsa fil : %(filename)s."
222
+
210
223
  #, python-format
211
224
  msgid "Imported %(total)d redirect"
212
225
  msgid_plural "Imported %(total)d redirects"
@@ -24,11 +24,12 @@ def _get_redirect(request, path):
24
24
  return None
25
25
 
26
26
 
27
- def get_redirect(request, path):
28
- redirect = _get_redirect(request, path)
29
- if not redirect:
30
- # try unencoding the path
31
- redirect = _get_redirect(request, uri_to_iri(path))
27
+ def get_redirect(request, encoded_path):
28
+ # Receives the ASCII percent-encoded path as obtained from request.get_full_path()
29
+ decoded_path = uri_to_iri(encoded_path)
30
+ redirect = _get_redirect(request, decoded_path)
31
+ if not redirect and decoded_path != encoded_path:
32
+ redirect = _get_redirect(request, encoded_path)
32
33
  return redirect
33
34
 
34
35
 
@@ -39,8 +40,11 @@ class RedirectMiddleware(MiddlewareMixin):
39
40
  if response.status_code != 404:
40
41
  return response
41
42
 
42
- # Get the path
43
- path = models.Redirect.normalise_path(request.get_full_path())
43
+ # Normalise the path, but without decoding unicode characters. get_redirect() will take care of that
44
+ # if it cannot find a match for the path that was actually requested.
45
+ path = models.Redirect.normalise_path(
46
+ request.get_full_path(), decode_unicode=False
47
+ )
44
48
 
45
49
  # Find redirect
46
50
  redirect = get_redirect(request, path)
@@ -2,6 +2,7 @@ from urllib.parse import urlparse
2
2
 
3
3
  from django.db import models
4
4
  from django.urls import Resolver404
5
+ from django.utils.encoding import uri_to_iri
5
6
  from django.utils.functional import cached_property
6
7
  from django.utils.translation import gettext_lazy as _
7
8
 
@@ -153,7 +154,17 @@ class Redirect(models.Model):
153
154
  return redirect
154
155
 
155
156
  @staticmethod
156
- def normalise_path(url):
157
+ def normalise_path(url, decode_unicode=True):
158
+ """
159
+ Normalize a URL path for storage or lookup on the Redirect model. All paths that normalize to the
160
+ same value are considered equivalent when looking up redirects.
161
+
162
+ :param url: The URL to normalize
163
+ :param decode_unicode: Whether to decode percent-encoded characters to unicode. This is a necessary step
164
+ for true normalization, but we allow it to be skipped to allow our lookup code to try both encoded and
165
+ decoded forms without a redundant round-trip to re-encode the path.
166
+ :return: The normalized path
167
+ """
157
168
  # Strip whitespace
158
169
  url = url.strip()
159
170
 
@@ -185,6 +196,11 @@ class Redirect(models.Model):
185
196
  if query_string:
186
197
  path = path + "?" + query_string
187
198
 
199
+ # Reverse url-encoding so that unicode characters are written
200
+ # to the database as such
201
+ if decode_unicode:
202
+ path = uri_to_iri(path)
203
+
188
204
  return path
189
205
 
190
206
  @staticmethod
@@ -18,15 +18,15 @@ class TestImportAdminViews(WagtailTestUtils, TestCase):
18
18
  def setUp(self):
19
19
  self.login()
20
20
 
21
- def get(self, params={}):
21
+ def get(self, params=None):
22
22
  return self.client.get(reverse("wagtailredirects:start_import"), params)
23
23
 
24
- def post(self, post_data={}, follow=False):
24
+ def post(self, post_data=None, follow=False):
25
25
  return self.client.post(
26
26
  reverse("wagtailredirects:start_import"), post_data, follow=follow
27
27
  )
28
28
 
29
- def post_import(self, post_data={}, follow=False):
29
+ def post_import(self, post_data=None, follow=False):
30
30
  return self.client.post(
31
31
  reverse("wagtailredirects:process_import"), post_data, follow=follow
32
32
  )
@@ -157,8 +157,14 @@ class TestRedirects(TestCase):
157
157
  normalise_path("/here/tésting-ünicode"),
158
158
  )
159
159
 
160
- self.assertNotEqual( # Doesn't remove unicode characters
161
- "/here/testing-unicode", normalise_path("/here/tésting-ünicode")
160
+ # percent-encoded sequences (in upper or lower case) are converted to Unicode characters
161
+ self.assertEqual(
162
+ "/here/tésting-ünicode",
163
+ normalise_path("/here/t%C3%A9sting-%C3%BCnicode"),
164
+ )
165
+ self.assertEqual(
166
+ "/here/tésting-ünicode",
167
+ normalise_path("/here/t%c3%a9sting-%c3%bcnicode"),
162
168
  )
163
169
 
164
170
  def test_route_path_normalisation(self):
@@ -520,6 +526,11 @@ class TestRedirects(TestCase):
520
526
  )
521
527
 
522
528
  def test_redirect_with_unicode_in_url(self):
529
+ # This test and test_redirect_with_encoded_url confirm that redirect paths containing Unicode characters
530
+ # are handled correctly, whether the stored redirect is using the decoded Unicode characters, or the
531
+ # percent-encoded equivalent. Redirect.normalise_path() will always return the decoded version, but these
532
+ # tests create redirects directly (bypassing normalise_path) so that we are correctly handling redirects
533
+ # that were created in older versions of Wagtail, or bypassed this normalization step for some other reason.
523
534
  redirect = models.Redirect(
524
535
  old_path="/tésting-ünicode", redirect_link="/redirectto"
525
536
  )
@@ -532,6 +543,13 @@ class TestRedirects(TestCase):
532
543
  response, "/redirectto", status_code=301, fetch_redirect_response=False
533
544
  )
534
545
 
546
+ # Same, but using the underlying percent-encoded URL that would actually be seen at the HTTP level
547
+ response = self.client.get("/t%C3%A9sting-%C3%BCnicode/")
548
+
549
+ self.assertRedirects(
550
+ response, "/redirectto", status_code=301, fetch_redirect_response=False
551
+ )
552
+
535
553
  def test_redirect_with_encoded_url(self):
536
554
  redirect = models.Redirect(
537
555
  old_path="/t%C3%A9sting-%C3%BCnicode", redirect_link="/redirectto"
@@ -539,12 +557,42 @@ class TestRedirects(TestCase):
539
557
  redirect.save()
540
558
 
541
559
  # Navigate to it
560
+ response = self.client.get("/tésting-ünicode/")
561
+
562
+ self.assertRedirects(
563
+ response, "/redirectto", status_code=301, fetch_redirect_response=False
564
+ )
565
+
566
+ # Same, but using the underlying percent-encoded URL that would actually be seen at the HTTP level
542
567
  response = self.client.get("/t%C3%A9sting-%C3%BCnicode/")
543
568
 
544
569
  self.assertRedirects(
545
570
  response, "/redirectto", status_code=301, fetch_redirect_response=False
546
571
  )
547
572
 
573
+ def test_encoded_url_case_insensitive(self):
574
+ # Redirects created with percent-encoded paths should be matched case-insensitively.
575
+ # In this case, we are going through Redirect.add_redirect as we are reliant on the normalization step.
576
+ models.Redirect.add_redirect(
577
+ old_path="/games/%eb%a1%9c%ec%8a%a4%ed%8a%b8%ec%95%84%ed%81%ac",
578
+ redirect_to="/lost-ark",
579
+ )
580
+
581
+ # Navigate using the decoded unicode URL
582
+ response = self.client.get("/games/로스트아크/")
583
+
584
+ self.assertRedirects(
585
+ response, "/lost-ark", status_code=301, fetch_redirect_response=False
586
+ )
587
+
588
+ # Same, but using UPPERCASE percent-encoded URL
589
+ response = self.client.get(
590
+ "/games/%EB%A1%9C%EC%8A%A4%ED%8A%B8%EC%95%84%ED%81%AC/"
591
+ )
592
+ self.assertRedirects(
593
+ response, "/lost-ark", status_code=301, fetch_redirect_response=False
594
+ )
595
+
548
596
  def test_reject_null_characters(self):
549
597
  response = self.client.get("/test%00test/")
550
598
  self.assertEqual(response.status_code, 404)
@@ -608,7 +656,7 @@ class TestRedirectsIndexView(AdminTemplateTestUtils, WagtailTestUtils, TestCase)
608
656
  def setUp(self):
609
657
  self.login()
610
658
 
611
- def get(self, params={}):
659
+ def get(self, params=None):
612
660
  return self.client.get(reverse("wagtailredirects:index"), params)
613
661
 
614
662
  def test_simple(self):
@@ -789,10 +837,10 @@ class TestRedirectsAddView(WagtailTestUtils, TestCase):
789
837
  self.login()
790
838
  PURGED_URLS.clear()
791
839
 
792
- def get(self, params={}):
840
+ def get(self, params=None):
793
841
  return self.client.get(reverse("wagtailredirects:add"), params)
794
842
 
795
- def post(self, post_data={}):
843
+ def post(self, post_data=None):
796
844
  return self.client.post(reverse("wagtailredirects:add"), post_data)
797
845
 
798
846
  def test_simple(self):
@@ -977,13 +1025,13 @@ class TestRedirectsEditView(AdminTemplateTestUtils, WagtailTestUtils, TestCase):
977
1025
 
978
1026
  PURGED_URLS.clear()
979
1027
 
980
- def get(self, params={}, redirect_id=None):
1028
+ def get(self, params=None, redirect_id=None):
981
1029
  return self.client.get(
982
1030
  reverse("wagtailredirects:edit", args=(redirect_id or self.redirect.id,)),
983
1031
  params,
984
1032
  )
985
1033
 
986
- def post(self, post_data={}, redirect_id=None):
1034
+ def post(self, post_data=None, redirect_id=None):
987
1035
  return self.client.post(
988
1036
  reverse("wagtailredirects:edit", args=(redirect_id or self.redirect.id,)),
989
1037
  post_data,
@@ -1144,7 +1192,7 @@ class TestRedirectsDeleteView(WagtailTestUtils, TestCase):
1144
1192
 
1145
1193
  PURGED_URLS.clear()
1146
1194
 
1147
- def get(self, params={}, redirect_id=None):
1195
+ def get(self, params=None, redirect_id=None):
1148
1196
  return self.client.get(
1149
1197
  reverse("wagtailredirects:delete", args=(redirect_id or self.redirect.id,)),
1150
1198
  params,
@@ -8,7 +8,7 @@ msgid ""
8
8
  msgstr ""
9
9
  "Project-Id-Version: PACKAGE VERSION\n"
10
10
  "Report-Msgid-Bugs-To: \n"
11
- "POT-Creation-Date: 2025-10-23 16:45+0100\n"
11
+ "POT-Creation-Date: 2026-01-21 18:00+0000\n"
12
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -210,24 +210,24 @@ msgstr ""
210
210
  msgid "Promoted search result"
211
211
  msgstr ""
212
212
 
213
- #: views/settings.py:183
213
+ #: views/settings.py:182
214
214
  #, python-format
215
215
  msgid "Editor's picks for '%(query)s' created."
216
216
  msgstr ""
217
217
 
218
- #: views/settings.py:184
218
+ #: views/settings.py:183
219
219
  msgid "Recommendations have not been created due to errors."
220
220
  msgstr ""
221
221
 
222
- #: views/settings.py:193
222
+ #: views/settings.py:192
223
223
  #, python-format
224
224
  msgid "Editor's picks for '%(query)s' updated."
225
225
  msgstr ""
226
226
 
227
- #: views/settings.py:194
227
+ #: views/settings.py:193
228
228
  msgid "Recommendations have not been saved due to errors."
229
229
  msgstr ""
230
230
 
231
- #: views/settings.py:203
231
+ #: views/settings.py:202
232
232
  msgid "Editor's picks deleted."
233
233
  msgstr ""