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
@@ -8,7 +8,7 @@
8
8
  # Giacomo Ghizzani <giacomo.ghz@gmail.com>, 2015-2018
9
9
  # giammi <gian-maria.daffre@giammi.org>, 2018
10
10
  # giammi <gian-maria.daffre@giammi.org>, 2018
11
- # Marco Badan <marco.badan@gmail.com>, 2021-2022,2024
11
+ # Marco Badan <marco.badan@gmail.com>, 2021-2022,2024,2026
12
12
  # Sandro Badalamenti <sandro@mailinator.com>, 2019
13
13
  # Stefano Marchetto <airbatum@gmail.com>, 2020
14
14
  msgid ""
@@ -17,7 +17,7 @@ msgstr ""
17
17
  "Report-Msgid-Bugs-To: \n"
18
18
  "POT-Creation-Date: 2025-10-23 16:45+0100\n"
19
19
  "PO-Revision-Date: 2014-02-21 15:51+0000\n"
20
- "Last-Translator: Stefano Marchetto <airbatum@gmail.com>, 2020\n"
20
+ "Last-Translator: Marco Badan <marco.badan@gmail.com>, 2021-2022,2024,2026\n"
21
21
  "Language-Team: Italian (http://app.transifex.com/torchbox/wagtail/language/"
22
22
  "it/)\n"
23
23
  "MIME-Version: 1.0\n"
@@ -75,12 +75,18 @@ msgstr "Questo campo è obbligatorio."
75
75
  msgid "Wagtail frontend cache"
76
76
  msgstr "Wagtail cache frontend"
77
77
 
78
+ msgid "Wagtail routablepage"
79
+ msgstr "Routablepage Wagtail"
80
+
78
81
  msgid "Wagtail sitemaps"
79
82
  msgstr "Sitemap Wagtail"
80
83
 
81
84
  msgid "Unknown content type"
82
85
  msgstr "Tipo contenuto sconosciuto"
83
86
 
87
+ msgid "Date cannot be in the future."
88
+ msgstr "La data non può essere nel futuro."
89
+
84
90
  msgid "Password"
85
91
  msgstr "Password"
86
92
 
@@ -105,6 +111,11 @@ msgstr "<b>'{title}' è stata bloccata</b> da <b>te</b> il <b>{datetime}</b>."
105
111
  msgid "<b>'{title}' is locked</b> by <b>you</b>."
106
112
  msgstr "<b>'{title}' è bloccata</b> da <b>te</b>."
107
113
 
114
+ #, python-brace-format
115
+ msgid "<b>'{title}' was locked</b> by <b>{user}</b> on <b>{datetime}</b>."
116
+ msgstr ""
117
+ "<b>'{title}' è stata bloccata</b> da <b>{user}</b> il <b>{datetime}</b>."
118
+
108
119
  #, python-brace-format
109
120
  msgid "<b>'{title}' is locked</b>."
110
121
  msgstr "<b>'{title}' è bloccata</b>."
@@ -119,17 +130,58 @@ msgstr "Bloccata da un altro utente"
119
130
  msgid "Only you can make changes while the %(model_name)s is locked"
120
131
  msgstr "Solo tu puoi fare modifiche finché %(model_name)s è bloccato"
121
132
 
133
+ #, python-format
134
+ msgid "Only %(user)s can make changes while the %(model_name)s is locked"
135
+ msgstr "Solo %(user)s può fare modifiche mentre %(model_name)s è bloccato"
136
+
122
137
  #, python-format
123
138
  msgid "This %(model_name)s is currently awaiting moderation."
124
139
  msgstr "Questo %(model_name)s è attualmente in attesa di moderazione."
125
140
 
141
+ #, python-brace-format
142
+ msgid ""
143
+ "This {model_name} is awaiting <b>'{task_name}'</b> in the "
144
+ "<b>'{workflow_name}'</b> workflow."
145
+ msgstr ""
146
+ "{model_name} è in attesa di <b>'{task_name}'</b> nel flusso di lavoro "
147
+ "<b>'{workflow_name}'</b>."
148
+
149
+ #, python-format
150
+ msgid "Only reviewers for this task can edit the %(model_name)s."
151
+ msgstr "Solo i revisori di questa attività possono modificare %(model_name)s."
152
+
126
153
  msgid "Unlocked"
127
154
  msgstr "Sbloccata"
128
155
 
156
+ msgid "Locked by workflow"
157
+ msgstr "Bloccato dal flusso di lavoro"
158
+
159
+ #, python-format
160
+ msgid ""
161
+ "Reviewers can edit this %(model_name)s – lock it to prevent other reviewers "
162
+ "from editing"
163
+ msgstr ""
164
+ "I revisori possono modificare %(model_name)s – bloccalo per impedire ad "
165
+ "altri revisori di apportare modifiche"
166
+
129
167
  #, python-format
130
168
  msgid "Only reviewers can edit and approve the %(model_name)s"
131
169
  msgstr "Solo i revisori possono modificare e approvare %(model_name)s"
132
170
 
171
+ #, python-brace-format
172
+ msgid ""
173
+ "{model_name} '{title}' is locked and has been scheduled to go live at "
174
+ "{datetime}"
175
+ msgstr ""
176
+ "{model_name} '{title}' è bloccato; la pubblicazione è programmata per il "
177
+ "{datetime}"
178
+
179
+ msgid "Locked by schedule"
180
+ msgstr "Bloccato dalla pianificazione"
181
+
182
+ msgid "Currently locked and will go live on the scheduled date"
183
+ msgstr "Attualmente bloccato; sarà pubblicato alla data programmata"
184
+
133
185
  msgid "content type"
134
186
  msgstr "tipo contenuto"
135
187
 
@@ -195,6 +247,9 @@ msgstr "live + programmate"
195
247
  msgid "live + draft"
196
248
  msgstr "live + bozza"
197
249
 
250
+ msgid "locale"
251
+ msgstr "lingua"
252
+
198
253
  msgid "locked"
199
254
  msgstr "bloccata"
200
255
 
@@ -231,6 +286,9 @@ msgstr "permesso di gruppo nella raccolta"
231
286
  msgid "group collection permissions"
232
287
  msgstr "Permessi di gruppo nella raccolta"
233
288
 
289
+ msgid "for content type"
290
+ msgstr "per il tipo di contenuto"
291
+
234
292
  msgid "uploaded by user"
235
293
  msgstr "caricato dall'utente"
236
294
 
@@ -325,6 +383,14 @@ msgstr "Per i motori di ricerca"
325
383
  msgid "For site menus"
326
384
  msgstr "Per i menu del sito"
327
385
 
386
+ #, python-format
387
+ msgid ""
388
+ "The slug '%(page_slug)s' is already in use within the parent page at "
389
+ "'%(parent_url_path)s'."
390
+ msgstr ""
391
+ "Lo slug '%(page_slug)s' è già in uso nella pagina genitore in "
392
+ "'%(parent_url_path)s'."
393
+
328
394
  msgid "page"
329
395
  msgstr "pagina"
330
396
 
@@ -388,6 +454,30 @@ msgstr "Anteprima in formato desktop"
388
454
  msgid "object id"
389
455
  msgstr "id elemento"
390
456
 
457
+ #, python-format
458
+ msgid "the %(model_name)s will also be deleted"
459
+ msgstr "anche %(model_name)s verrà eliminato"
460
+
461
+ msgid "prevents deletion"
462
+ msgstr "impedisce l'eliminazione"
463
+
464
+ #, python-format
465
+ msgid "will be set to the default %(model_name)s"
466
+ msgstr "verrà impostato sul %(model_name)s predefinito"
467
+
468
+ msgid "will do nothing"
469
+ msgstr "non farà nulla"
470
+
471
+ msgid "may prevent deletion"
472
+ msgstr "potrebbe impedire l'eliminazione"
473
+
474
+ #, python-format
475
+ msgid "will be set to a %(model_name)s specified by the system"
476
+ msgstr "verrà impostato su un %(model_name)s specificato dal sistema"
477
+
478
+ msgid "will unset the reference"
479
+ msgstr "rimuoverà il riferimento"
480
+
391
481
  msgid "created at"
392
482
  msgstr "creato alle"
393
483
 
@@ -459,9 +549,18 @@ msgstr ""
459
549
  "%(hostname)s è già configurato come sito di default. Devi togliere questa "
460
550
  "impostazione prima di poterlo salvare come sito di default."
461
551
 
552
+ msgid "group site permission"
553
+ msgstr "permesso del sito per il gruppo"
554
+
555
+ msgid "group site permissions"
556
+ msgstr "permessi del sito per il gruppo"
557
+
462
558
  msgid "Public"
463
559
  msgstr "Pubblico"
464
560
 
561
+ msgid "Private, accessible with a shared password"
562
+ msgstr "Privata, accessibile con una password condivisa"
563
+
465
564
  msgid "Private, accessible to any logged-in users"
466
565
  msgstr "Privata, accessibile a qualsiasi utente loggato"
467
566
 
@@ -949,6 +1048,10 @@ msgstr "Attività rifiutata nel flusso di lavoro. Flusso di lavoro completato"
949
1048
  msgid "Workflow: resume task"
950
1049
  msgstr "Flusso di lavoro: riprendi attività"
951
1050
 
1051
+ #, python-format
1052
+ msgid "Resubmitted '%(task)s'. Workflow resumed"
1053
+ msgstr "Inviato nuovamente '%(task)s'. Flusso di lavoro ripreso"
1054
+
952
1055
  msgid "Workflow task resubmitted. Workflow resumed"
953
1056
  msgstr "Attività reinviata nel flusso di lavoro. Flusso di lavoro ripreso"
954
1057
 
Binary file
@@ -4,6 +4,7 @@
4
4
  #
5
5
  # Translators:
6
6
  # Jim Brouzoulis <jim.brouzoulis@chalmers.se>, 2017
7
+ # Jonathan Lindén, 2025
7
8
  # Martin Sandström <martin@marteinn.se>, 2020-2021,2023-2024
8
9
  # Philip Andersen <renegadevi@codeofmagi.net>, 2018-2019
9
10
  # Thomas Kunambi <kunambi@gmail.com>, 2016-2017,2021-2022
@@ -13,7 +14,7 @@ msgstr ""
13
14
  "Report-Msgid-Bugs-To: \n"
14
15
  "POT-Creation-Date: 2025-10-23 16:45+0100\n"
15
16
  "PO-Revision-Date: 2014-02-21 15:51+0000\n"
16
- "Last-Translator: Jim Brouzoulis <jim.brouzoulis@chalmers.se>, 2017\n"
17
+ "Last-Translator: Jonathan Lindén, 2025\n"
17
18
  "Language-Team: Swedish (http://app.transifex.com/torchbox/wagtail/language/"
18
19
  "sv/)\n"
19
20
  "MIME-Version: 1.0\n"
@@ -76,6 +77,12 @@ msgstr "Wagtail routablepage"
76
77
  msgid "Wagtail sitemaps"
77
78
  msgstr "Wagtail sajtkarta"
78
79
 
80
+ msgid "Unknown content type"
81
+ msgstr "Okänd innehållstyp"
82
+
83
+ msgid "Date cannot be in the future."
84
+ msgstr "Datumet kan inte vara i framtiden."
85
+
79
86
  msgid "Password"
80
87
  msgstr "Lösenord"
81
88
 
@@ -88,6 +95,10 @@ msgstr "Kommentar"
88
95
  msgid "Locked"
89
96
  msgstr "Låst"
90
97
 
98
+ #, python-format
99
+ msgid "No one can make changes while the %(model_name)s is locked"
100
+ msgstr "Ingen kan göra några ändringar så länge %(model_name)s är låst"
101
+
91
102
  #, python-brace-format
92
103
  msgid "<b>'{title}' was locked</b> by <b>you</b> on <b>{datetime}</b>."
93
104
  msgstr "<b>'{title}' låstes</b> av <b>dig</b> vid <b>{datetime}</b>."
@@ -110,6 +121,15 @@ msgstr "Låst av dig"
110
121
  msgid "Locked by another user"
111
122
  msgstr "Låst av en annan användare"
112
123
 
124
+ #, python-format
125
+ msgid "Only you can make changes while the %(model_name)s is locked"
126
+ msgstr "Endast du kan göra några ändringar så länge %(model_name)s är låst"
127
+
128
+ #, python-format
129
+ msgid "Only %(user)s can make changes while the %(model_name)s is locked"
130
+ msgstr ""
131
+ "Endast %(user)s kan göra några ändringar så länge %(model_name)s är låst"
132
+
113
133
  #, python-format
114
134
  msgid "This %(model_name)s is currently awaiting moderation."
115
135
  msgstr "Denna %(model_name)s väntar på moderering."
@@ -129,6 +149,21 @@ msgstr "Endast granskare för denna uppgift kan redigera %(model_name)s."
129
149
  msgid "Unlocked"
130
150
  msgstr "Olåst"
131
151
 
152
+ msgid "Locked by workflow"
153
+ msgstr "Låst av arbetsflöde"
154
+
155
+ #, python-format
156
+ msgid ""
157
+ "Reviewers can edit this %(model_name)s – lock it to prevent other reviewers "
158
+ "from editing"
159
+ msgstr ""
160
+ "Granskare kan redigera denna %(model_name)s. Lås den för att förhindra andra "
161
+ "granskare från att redigera"
162
+
163
+ #, python-format
164
+ msgid "Only reviewers can edit and approve the %(model_name)s"
165
+ msgstr "Endast granskare för kan redigera och godkänna %(model_name)s"
166
+
132
167
  #, python-brace-format
133
168
  msgid ""
134
169
  "{model_name} '{title}' is locked and has been scheduled to go live at "
@@ -137,6 +172,12 @@ msgstr ""
137
172
  "{model_name} '{title}' är låst och har schemalagts att publiceras vid "
138
173
  "{datetime}"
139
174
 
175
+ msgid "Locked by schedule"
176
+ msgstr "Låst av schema"
177
+
178
+ msgid "Currently locked and will go live on the scheduled date"
179
+ msgstr "För närvarande låst, kommer publiceras på det schemalagda datumet"
180
+
140
181
  msgid "content type"
141
182
  msgstr "innehållstyp"
142
183
 
@@ -161,10 +202,10 @@ msgid "Unknown %(action)s"
161
202
  msgstr "Okänt %(action)s"
162
203
 
163
204
  msgid "model log entry"
164
- msgstr "modelllogpost"
205
+ msgstr "loggpost för modell"
165
206
 
166
207
  msgid "model log entries"
167
- msgstr "modellloggposter"
208
+ msgstr "loggposter för modell"
168
209
 
169
210
  msgid "live"
170
211
  msgstr "publicerad"
@@ -202,6 +243,9 @@ msgstr "live + schemalagd"
202
243
  msgid "live + draft"
203
244
  msgstr "publicerad + utkast"
204
245
 
246
+ msgid "locale"
247
+ msgstr "översättning"
248
+
205
249
  msgid "locked"
206
250
  msgstr "låst"
207
251
 
@@ -238,6 +282,9 @@ msgstr "gruppsamlingsrättighet"
238
282
  msgid "group collection permissions"
239
283
  msgstr "gruppsamlingsbehörigheter"
240
284
 
285
+ msgid "for content type"
286
+ msgstr "för innehållstyp"
287
+
241
288
  msgid "uploaded by user"
242
289
  msgstr "uppladdad av användare"
243
290
 
@@ -332,6 +379,14 @@ msgstr "För sökmotorer"
332
379
  msgid "For site menus"
333
380
  msgstr "För sajtmenyer"
334
381
 
382
+ #, python-format
383
+ msgid ""
384
+ "The slug '%(page_slug)s' is already in use within the parent page at "
385
+ "'%(parent_url_path)s'."
386
+ msgstr ""
387
+ "Sluggen '%(page_slug)s' används redan inom föräldersidan vid "
388
+ "'%(parent_url_path)s'."
389
+
335
390
  msgid "page"
336
391
  msgstr "sida"
337
392
 
@@ -395,6 +450,13 @@ msgstr "Förhandsgranska i desktopstorlek"
395
450
  msgid "object id"
396
451
  msgstr "objektid"
397
452
 
453
+ #, python-format
454
+ msgid "the %(model_name)s will also be deleted"
455
+ msgstr "%(model_name)s kommer också raderas"
456
+
457
+ msgid "prevents deletion"
458
+ msgstr "förhindrar radering"
459
+
398
460
  msgid "created at"
399
461
  msgstr "skapad vid"
400
462
 
@@ -471,12 +533,25 @@ msgstr ""
471
533
  msgid "Public"
472
534
  msgstr "Publik"
473
535
 
536
+ msgid "Private, accessible with a shared password"
537
+ msgstr "Privat, åtkomlig med ett delat lösenord"
538
+
539
+ msgid "Private, accessible to any logged-in users"
540
+ msgstr "Privat, åtkomlig för alla inloggade användare"
541
+
474
542
  msgid "Private, accessible to users in specific groups"
475
- msgstr "Privat, åtkomligen för användare i specifika grupper"
543
+ msgstr "Privat, åtkomlig för användare i specifika grupper"
476
544
 
477
545
  msgid "shared password"
478
546
  msgstr "delat lösenord"
479
547
 
548
+ msgid ""
549
+ "Shared passwords should not be used to protect sensitive content. Anyone who "
550
+ "has this password will be able to view the content."
551
+ msgstr ""
552
+ "Delade lösenord ska inte användas för att skydda känsligt innehåll. Vem som "
553
+ "helst som har lösenordet kan se innehållet."
554
+
480
555
  msgid "groups"
481
556
  msgstr "grupper"
482
557
 
@@ -556,6 +631,13 @@ msgstr ""
556
631
  msgid "tasks"
557
632
  msgstr "uppgifter"
558
633
 
634
+ msgid ""
635
+ "Pages/snippets at this step in a workflow will be moderated or approved by "
636
+ "these groups of users"
637
+ msgstr ""
638
+ "Sidor/snuttar i detta steg i ett arbetsflöde kommer modereras eller "
639
+ "godkännas av dessa användargrupper"
640
+
559
641
  msgid "Request changes"
560
642
  msgstr "Begär ändringar"
561
643
 
@@ -569,10 +651,10 @@ msgid "Members of the chosen Wagtail Groups can approve this task"
569
651
  msgstr "Medlemmar i de valda Wagtail Grupperna kan godkänna denna uppgift"
570
652
 
571
653
  msgid "Group approval task"
572
- msgstr "Grupp godkännande uppgift"
654
+ msgstr "Uppgift för godkännande av grupp"
573
655
 
574
656
  msgid "Group approval tasks"
575
- msgstr "Grupp godkännande uppgifter"
657
+ msgstr "Uppgifter för godkännande av grupp"
576
658
 
577
659
  msgid "Rejected"
578
660
  msgstr "Avvisad"
@@ -827,14 +909,14 @@ msgid "Added a comment"
827
909
  msgstr "Lade till en kommentar"
828
910
 
829
911
  msgid "Edit comment"
830
- msgstr "Editera kommentar"
912
+ msgstr "Redigera kommentar"
831
913
 
832
914
  #, python-format
833
915
  msgid "Edited a comment on field %(field)s: \"%(text)s\""
834
- msgstr "Editerade en kommentar på fältet %(field)s: \"%(text)s\""
916
+ msgstr "Redigerade en kommentar på fältet %(field)s: \"%(text)s\""
835
917
 
836
918
  msgid "Edited a comment"
837
- msgstr "Editerade en kommentar"
919
+ msgstr "Redigerade en kommentar"
838
920
 
839
921
  msgid "Delete comment"
840
922
  msgstr "Radera kommentar"
@@ -867,14 +949,15 @@ msgid "Replied to a comment"
867
949
  msgstr "Svarade på en kommentar"
868
950
 
869
951
  msgid "Edit reply to comment"
870
- msgstr "Editera svar till kommentar"
952
+ msgstr "Redigera svar till kommentar"
871
953
 
872
954
  #, python-format
873
955
  msgid "Edited a reply to a comment on field %(field)s: \"%(text)s\""
874
- msgstr "Editerade ett svar till en kommentar på fältet %(field)s: \"%(text)s\""
956
+ msgstr ""
957
+ "Redigerade ett svar till en kommentar på fältet %(field)s: \"%(text)s\""
875
958
 
876
959
  msgid "Edited a reply"
877
- msgstr "Editerade ett svar"
960
+ msgstr "Redigerade ett svar"
878
961
 
879
962
  msgid "Delete reply to comment"
880
963
  msgstr "Radera svar på kommentar"
@@ -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"
@@ -5,8 +5,8 @@
5
5
  #
6
6
  # Translators:
7
7
  # Giacomo Ghizzani <giacomo.ghz@gmail.com>, 2021
8
- # Marco Badan <marco.badan@gmail.com>, 2021
9
8
  # tognee, 2024
9
+ # Marco Badan <marco.badan@gmail.com>, 2026
10
10
  #
11
11
  #, fuzzy
12
12
  msgid ""
@@ -15,7 +15,7 @@ msgstr ""
15
15
  "Report-Msgid-Bugs-To: \n"
16
16
  "POT-Creation-Date: 2025-10-23 16:45+0100\n"
17
17
  "PO-Revision-Date: 2020-10-23 10:41+0000\n"
18
- "Last-Translator: tognee, 2024\n"
18
+ "Last-Translator: Marco Badan <marco.badan@gmail.com>, 2026\n"
19
19
  "Language-Team: Italian (https://app.transifex.com/torchbox/teams/8009/it/)\n"
20
20
  "MIME-Version: 1.0\n"
21
21
  "Content-Type: text/plain; charset=UTF-8\n"
@@ -49,6 +49,17 @@ msgstr ""
49
49
  "Il codice della lingua corrente non è supportato. Scegli un'altra lingua o "
50
50
  "elimina questa lingua."
51
51
 
52
+ #, python-format
53
+ msgid "%(num_pages)d pages and %(num_others)d others"
54
+ msgstr "%(num_pages)d pagine e %(num_others)d altri"
55
+
56
+ #, python-format
57
+ msgid "%(num_pages)d page"
58
+ msgid_plural "%(num_pages)d pages"
59
+ msgstr[0] "%(num_pages)d pagina"
60
+ msgstr[1] "%(num_pages)d pagine"
61
+ msgstr[2] "%(num_pages)d pagine"
62
+
52
63
  msgid "Locales"
53
64
  msgstr "Lingue"
54
65
 
@@ -6,6 +6,7 @@
6
6
  # Translators:
7
7
  # Martin Sandström <martin@marteinn.se>, 2020
8
8
  # Loic Teixeira, 2022
9
+ # Jonathan Lindén, 2025
9
10
  #
10
11
  #, fuzzy
11
12
  msgid ""
@@ -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: 2020-10-23 10:41+0000\n"
17
- "Last-Translator: Loic Teixeira, 2022\n"
18
+ "Last-Translator: Jonathan Lindén, 2025\n"
18
19
  "Language-Team: Swedish (https://app.transifex.com/torchbox/teams/8009/sv/)\n"
19
20
  "MIME-Version: 1.0\n"
20
21
  "Content-Type: text/plain; charset=UTF-8\n"
@@ -45,7 +46,7 @@ msgid ""
45
46
  "language or delete this locale."
46
47
  msgstr ""
47
48
  "Denna översättning har en språkkod som inte stöds. Vänligen välj ett nytt "
48
- "språk eller ta bort denna översättning."
49
+ "språk eller radera denna översättning."
49
50
 
50
51
  msgid "Locales"
51
52
  msgstr "Översättningar"
@@ -68,7 +69,7 @@ msgid "Locale '%(object)s' updated."
68
69
  msgstr "Översättning '%(object)s' uppdaterad."
69
70
 
70
71
  msgid "The locale could not be saved due to errors."
71
- msgstr "Översättning kunde inte raderas p.g.a fel."
72
+ msgstr "Översättning kunde inte raderas grund av fel."
72
73
 
73
74
  #, python-format
74
75
  msgid "Locale '%(object)s' deleted."
wagtail/locales/tests.py CHANGED
@@ -21,7 +21,7 @@ class TestLocaleIndexView(AdminTemplateTestUtils, WagtailTestUtils, TestCase):
21
21
  def setUp(self):
22
22
  self.login(user=self.user)
23
23
 
24
- def get(self, params={}):
24
+ def get(self, params=None):
25
25
  return self.client.get(reverse("wagtaillocales:index"), params)
26
26
 
27
27
  def test_simple(self):
@@ -49,10 +49,10 @@ class TestLocaleCreateView(AdminTemplateTestUtils, WagtailTestUtils, TestCase):
49
49
  self.login()
50
50
  self.english = Locale.objects.get()
51
51
 
52
- def get(self, params={}):
52
+ def get(self, params=None):
53
53
  return self.client.get(reverse("wagtaillocales:add"), params)
54
54
 
55
- def post(self, post_data={}):
55
+ def post(self, post_data=None):
56
56
  return self.client.post(reverse("wagtaillocales:add"), post_data)
57
57
 
58
58
  def test_default_language(self):
@@ -254,13 +254,13 @@ class TestLocaleDeleteView(AdminTemplateTestUtils, WagtailTestUtils, TestCase):
254
254
  self.login()
255
255
  self.english = Locale.objects.get()
256
256
 
257
- def get(self, params={}, locale=None):
257
+ def get(self, params=None, locale=None):
258
258
  locale = locale or self.english
259
259
  return self.client.get(
260
260
  reverse("wagtaillocales:delete", args=[locale.id]), params
261
261
  )
262
262
 
263
- def post(self, post_data={}, locale=None):
263
+ def post(self, post_data=None, locale=None):
264
264
  locale = locale or self.english
265
265
  return self.client.post(
266
266
  reverse("wagtaillocales:delete", args=[locale.id]), post_data
wagtail/models/i18n.py CHANGED
@@ -471,16 +471,14 @@ def get_translatable_models(include_subclasses=False):
471
471
 
472
472
  @receiver(pre_save)
473
473
  def set_locale_on_new_instance(sender, instance, **kwargs):
474
- if not isinstance(instance, TranslatableMixin):
474
+ if kwargs["raw"]:
475
+ # When loading fixtures, don't add a locale since it may not exist
475
476
  return
476
477
 
477
- if instance.locale_id is not None:
478
+ if not isinstance(instance, TranslatableMixin):
478
479
  return
479
480
 
480
- # If this is a fixture load, use the global default Locale
481
- # as the page tree is probably in flux
482
- if kwargs["raw"]:
483
- instance.locale = Locale.get_default()
481
+ if instance.locale_id is not None:
484
482
  return
485
483
 
486
484
  instance.locale = instance.get_default_locale()
wagtail/models/media.py CHANGED
@@ -34,6 +34,18 @@ class BaseCollectionManager(models.Manager):
34
34
  def get_queryset(self):
35
35
  return CollectionQuerySet(self.model).order_by("path")
36
36
 
37
+ def get_by_natural_key(self, *path_names):
38
+ """Get collection by hierarchical path"""
39
+ if not path_names:
40
+ raise ValueError("At least one path name must be provided")
41
+
42
+ current = self.get_queryset().get(depth=1, name=path_names[0])
43
+
44
+ for name in path_names[1:]:
45
+ current = current.get_children().get(name=name)
46
+
47
+ return current
48
+
37
49
 
38
50
  CollectionManager = BaseCollectionManager.from_queryset(CollectionQuerySet)
39
51
 
@@ -118,6 +130,12 @@ class Collection(MP_Node):
118
130
  # Output unicode plain-text version
119
131
  return "{}↳ {}".format(" " * 4 * display_depth, self.name)
120
132
 
133
+ def natural_key(self):
134
+ """Return the hierarchical path as the natural key"""
135
+ return tuple(
136
+ collection.name for collection in self.get_ancestors(inclusive=True)
137
+ )
138
+
121
139
  class Meta:
122
140
  verbose_name = _("collection")
123
141
  verbose_name_plural = _("collections")