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
@@ -5,7 +5,7 @@
5
5
  #
6
6
  # Translators:
7
7
  # Loic Teixeira, 2022
8
- # Marco Badan <marco.badan@gmail.com>, 2022
8
+ # Marco Badan <marco.badan@gmail.com>, 2026
9
9
  #
10
10
  #, fuzzy
11
11
  msgid ""
@@ -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: 2021-04-21 08:38+0000\n"
17
- "Last-Translator: Marco Badan <marco.badan@gmail.com>, 2022\n"
17
+ "Last-Translator: Marco Badan <marco.badan@gmail.com>, 2026\n"
18
18
  "Language-Team: Italian (https://app.transifex.com/torchbox/teams/8009/it/)\n"
19
19
  "MIME-Version: 1.0\n"
20
20
  "Content-Type: text/plain; charset=UTF-8\n"
@@ -60,6 +60,9 @@ msgstr[0] "Traduci la pagina genitore."
60
60
  msgstr[1] "Traduci le pagine genitori."
61
61
  msgstr[2] "Traduci le pagine genitori."
62
62
 
63
+ msgid "Can submit translations"
64
+ msgstr "Può inviare traduzioni"
65
+
63
66
  msgid "Submit"
64
67
  msgstr "Invia"
65
68
 
@@ -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"
@@ -34,26 +34,26 @@ msgstr ""
34
34
  msgid "Delete image"
35
35
  msgstr ""
36
36
 
37
- #: views.py:114 wagtail_hooks.py:20
37
+ #: views.py:113 wagtail_hooks.py:20
38
38
  msgid "Styleguide"
39
39
  msgstr ""
40
40
 
41
- #: views.py:122
41
+ #: views.py:121
42
42
  msgid "Success message"
43
43
  msgstr ""
44
44
 
45
- #: views.py:124 views.py:132 views.py:140
45
+ #: views.py:123 views.py:131 views.py:139
46
46
  msgid "View live"
47
47
  msgstr ""
48
48
 
49
- #: views.py:125 views.py:133 views.py:141
49
+ #: views.py:124 views.py:132 views.py:140
50
50
  msgid "Edit"
51
51
  msgstr ""
52
52
 
53
- #: views.py:130
53
+ #: views.py:129
54
54
  msgid "Warning message"
55
55
  msgstr ""
56
56
 
57
- #: views.py:138
57
+ #: views.py:137
58
58
  msgid "Error message"
59
59
  msgstr ""
@@ -24,6 +24,8 @@ class TestStyleGuide(WagtailTestUtils, TestCase):
24
24
 
25
25
  def test_icons(self):
26
26
  def register_icons(icons):
27
+ # The hook should receive the existing icons as an argument
28
+ self.assertIn("wagtailadmin/icons/wagtail.svg", icons)
27
29
  return icons + [
28
30
  "tests/icons/single-quotes.svg", # id='icon-single-quotes'
29
31
  ]
@@ -1,4 +1,3 @@
1
- import itertools
2
1
  import os
3
2
  import re
4
3
  from collections import defaultdict
@@ -150,10 +149,10 @@ class IndexView(WagtailAdminTemplateMixin, TemplateView):
150
149
  return context
151
150
 
152
151
  def get_icons(self):
153
- icon_hooks = hooks.get_hooks("register_icons")
154
- registered_icons = itertools.chain.from_iterable(
155
- hook([]) for hook in icon_hooks
156
- )
152
+ registered_icons = []
153
+ for fn in hooks.get_hooks("register_icons"):
154
+ registered_icons = fn(registered_icons)
155
+ registered_icons = sorted(registered_icons)
157
156
  all_icons = defaultdict(list)
158
157
  for icon_path in registered_icons:
159
158
  folder, filename = os.path.split(icon_path)
@@ -3,6 +3,7 @@
3
3
  # This file is distributed under the same license as the PACKAGE package.
4
4
  #
5
5
  # Translators:
6
+ # Abdullah Bamuhrez <bamuhrez@gmail.com>, 2025
6
7
  # Ahmed Miske Sidi Med <boutien321@gmail.com>, 2020
7
8
  # ultraify media <ultraify@gmail.com>, 2018
8
9
  msgid ""
@@ -11,7 +12,7 @@ msgstr ""
11
12
  "Report-Msgid-Bugs-To: \n"
12
13
  "POT-Creation-Date: 2025-10-23 16:45+0100\n"
13
14
  "PO-Revision-Date: 2016-05-11 20:23+0000\n"
14
- "Last-Translator: ultraify media <ultraify@gmail.com>, 2018\n"
15
+ "Last-Translator: Abdullah Bamuhrez <bamuhrez@gmail.com>, 2025\n"
15
16
  "Language-Team: Arabic (http://app.transifex.com/torchbox/wagtail/language/"
16
17
  "ar/)\n"
17
18
  "MIME-Version: 1.0\n"
@@ -58,3 +59,6 @@ msgstr "عنوان يحدد الموضوع العام للجدول، ومفيد
58
59
 
59
60
  msgid "Table"
60
61
  msgstr "جدول"
62
+
63
+ msgid "Select a header option"
64
+ msgstr "حدد خيار عنوان"
@@ -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"
@@ -6,7 +6,7 @@
6
6
  # Giacomo Ghizzani <giacomo.ghz@gmail.com>, 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,2024
9
+ # Marco Badan <marco.badan@gmail.com>, 2021,2024,2026
10
10
  # Stefano Marchetto <airbatum@gmail.com>, 2020
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: 2016-05-11 20:23+0000\n"
17
- "Last-Translator: Stefano Marchetto <airbatum@gmail.com>, 2020\n"
17
+ "Last-Translator: Marco Badan <marco.badan@gmail.com>, 2021,2024,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"
@@ -63,3 +63,6 @@ msgstr ""
63
63
 
64
64
  msgid "Table"
65
65
  msgstr "Tabella"
66
+
67
+ msgid "Select a header option"
68
+ msgstr "Seleziona un'opzione per l'header"
@@ -324,6 +324,43 @@ class BaseTypedTableBlock(Block):
324
324
 
325
325
  return content
326
326
 
327
+ def extract_references(self, value):
328
+ """
329
+ Extract references from all cells in the typed table block.
330
+
331
+ This method scans all table cells and yields any references found in blocks
332
+ that support reference extraction (e.g., RichTextBlock with embedded images,
333
+ PageChooserBlock, etc.).
334
+ """
335
+ if not value:
336
+ return
337
+
338
+ for row_index, row in enumerate(value.row_data):
339
+ for col_index, (column, cell_value) in enumerate(
340
+ zip(value.columns, row["values"])
341
+ ):
342
+ block = column["block"]
343
+ for (
344
+ model,
345
+ object_id,
346
+ model_path,
347
+ content_path,
348
+ ) in block.extract_references(cell_value):
349
+ # Format paths to include table structure information
350
+ # model_path describes the field structure (for migrations/schema)
351
+ # content_path describes the specific instance location
352
+ model_path = (
353
+ f"rows.item.values.{col_index}.{model_path}"
354
+ if model_path
355
+ else f"rows.item.values.{col_index}"
356
+ )
357
+ content_path = (
358
+ f"rows.{row_index}.values.{col_index}.{content_path}"
359
+ if content_path
360
+ else f"rows.{row_index}.values.{col_index}"
361
+ )
362
+ yield model, object_id, model_path, content_path
363
+
327
364
  class Meta:
328
365
  default = None
329
366
  icon = "table"
@@ -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"
@@ -18,40 +18,40 @@ msgstr ""
18
18
  "Content-Transfer-Encoding: 8bit\n"
19
19
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
20
20
 
21
- #: blocks.py:349
21
+ #: blocks.py:386
22
22
  msgid "Caption"
23
23
  msgstr ""
24
24
 
25
- #: blocks.py:351
25
+ #: blocks.py:388
26
26
  msgid ""
27
27
  "A heading that identifies the overall topic of the table, and is useful for "
28
28
  "screen reader users."
29
29
  msgstr ""
30
30
 
31
- #: blocks.py:353
31
+ #: blocks.py:390
32
32
  msgid "Add column"
33
33
  msgstr ""
34
34
 
35
- #: blocks.py:354
35
+ #: blocks.py:391
36
36
  msgid "Add row"
37
37
  msgstr ""
38
38
 
39
- #: blocks.py:355
39
+ #: blocks.py:392
40
40
  msgid "Column heading"
41
41
  msgstr ""
42
42
 
43
- #: blocks.py:356
43
+ #: blocks.py:393
44
44
  msgid "Insert column"
45
45
  msgstr ""
46
46
 
47
- #: blocks.py:357
47
+ #: blocks.py:394
48
48
  msgid "Delete column"
49
49
  msgstr ""
50
50
 
51
- #: blocks.py:358
51
+ #: blocks.py:395
52
52
  msgid "Insert row"
53
53
  msgstr ""
54
54
 
55
- #: blocks.py:359
55
+ #: blocks.py:396
56
56
  msgid "Delete row"
57
57
  msgstr ""
@@ -5,6 +5,7 @@
5
5
  #
6
6
  # Translators:
7
7
  # Tomas Walch <tomas@alternaliv.se>, 2021
8
+ # Jonathan Lindén, 2025
8
9
  #
9
10
  #, fuzzy
10
11
  msgid ""
@@ -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: 2021-10-15 16:05+0000\n"
16
- "Last-Translator: Tomas Walch <tomas@alternaliv.se>, 2021\n"
17
+ "Last-Translator: Jonathan Lindén, 2025\n"
17
18
  "Language-Team: Swedish (https://app.transifex.com/torchbox/teams/8009/sv/)\n"
18
19
  "MIME-Version: 1.0\n"
19
20
  "Content-Type: text/plain; charset=UTF-8\n"
@@ -34,10 +35,10 @@ msgid "Insert column"
34
35
  msgstr "Infoga kolumn"
35
36
 
36
37
  msgid "Delete column"
37
- msgstr "Ta bort kolumn"
38
+ msgstr "Radera kolumn"
38
39
 
39
40
  msgid "Insert row"
40
41
  msgstr "Infoga rad"
41
42
 
42
43
  msgid "Delete row"
43
- msgstr "Ta bort rad"
44
+ msgstr "Radera rad"
@@ -372,6 +372,114 @@ class TestTableBlock(TestCase):
372
372
 
373
373
  self.assertEqual(content, expected_content)
374
374
 
375
+ def test_extract_references(self):
376
+ """Test that extract_references extracts references from RichTextBlock and PageChooserBlock cells"""
377
+ from wagtail.models import Page
378
+ from wagtail.test.testapp.models import SimplePage
379
+
380
+ # Create actual test pages for the PageChooserBlock
381
+ root_page = Page.objects.get(depth=1)
382
+ test_page_1 = SimplePage(
383
+ title="Test Page 1", slug="test-page-1", content="test"
384
+ )
385
+ root_page.add_child(instance=test_page_1)
386
+ test_page_2 = SimplePage(
387
+ title="Test Page 2", slug="test-page-2", content="test"
388
+ )
389
+ root_page.add_child(instance=test_page_2)
390
+
391
+ # Create a block with RichTextBlock and PageChooserBlock columns
392
+ block = TypedTableBlock(
393
+ [
394
+ ("rich_text", blocks.RichTextBlock()),
395
+ ("page", blocks.PageChooserBlock()),
396
+ ]
397
+ )
398
+
399
+ # Create test data with embedded image in rich text and page reference
400
+ # Rich text with embedded image (id=123)
401
+ rich_text_html = '<p>Some text <embed embedtype="image" id="123" format="left" alt="Test image" /> more text</p>'
402
+
403
+ table_data = {
404
+ "columns": [
405
+ {"type": "rich_text", "heading": "Description"},
406
+ {"type": "page", "heading": "Link"},
407
+ ],
408
+ "rows": [
409
+ {"values": [rich_text_html, test_page_1.pk]}, # Row 0
410
+ {"values": ["<p>Plain text</p>", test_page_2.pk]}, # Row 1
411
+ ],
412
+ "caption": "Test table",
413
+ }
414
+
415
+ value = block.to_python(table_data)
416
+ references = list(block.extract_references(value))
417
+
418
+ # We should get references for:
419
+ # 1. Image from RichTextBlock in row 0, column 0 (if RichText processing works)
420
+ # 2. Page from PageChooserBlock in row 0, column 1
421
+ # 3. Page from PageChooserBlock in row 1, column 1
422
+
423
+ # Check that we got at least some references
424
+ self.assertGreater(
425
+ len(references), 0, "Expected at least some references to be extracted"
426
+ )
427
+
428
+ # Extract and verify page references (these should definitely work)
429
+ page_refs = [
430
+ ref
431
+ for ref in references
432
+ if ref[0] == Page and ref[2].startswith("rows.item.values.1")
433
+ ]
434
+ self.assertEqual(len(page_refs), 2, "Expected 2 page references")
435
+
436
+ # Check first page reference (row 0, column 1)
437
+ page_ref_0 = [ref for ref in page_refs if ref[3].startswith("rows.0.")][0]
438
+ model, object_id, model_path, content_path = page_ref_0
439
+ self.assertEqual(model, Page)
440
+ self.assertEqual(object_id, str(test_page_1.pk))
441
+ self.assertEqual(model_path, "rows.item.values.1")
442
+ self.assertEqual(content_path, "rows.0.values.1")
443
+
444
+ # Check second page reference(row 1, column 1)
445
+ page_ref_1 = [ref for ref in page_refs if ref[3].startswith("rows.1.")][0]
446
+ model, object_id, model_path, content_path = page_ref_1
447
+ self.assertEqual(model, Page)
448
+ self.assertEqual(object_id, str(test_page_2.pk))
449
+ self.assertEqual(model_path, "rows.item.values.1")
450
+ self.assertEqual(content_path, "rows.1.values.1")
451
+
452
+ # Extract and verify the image reference from rich text (if it exists)
453
+ # The image reference model will be from wagtail.images.models.AbstractImage
454
+ image_refs = [
455
+ ref for ref in references if ref[2].startswith("rows.item.values.0.")
456
+ ]
457
+ # If RichText processing is working correctly, we should get 1 image reference
458
+ # However, this depends on RichText conversion during to_python
459
+ if len(image_refs) > 0:
460
+ model, object_id, model_path, content_path = image_refs[0]
461
+ # The image reference comes from the RichTextBlock in column 0
462
+ self.assertTrue(model_path.startswith("rows.item.values.0."))
463
+ self.assertTrue(content_path.startswith("rows.0.values.0."))
464
+ self.assertEqual(object_id, "123")
465
+
466
+ def test_extract_references_empty_table(self):
467
+ """Test that extract_references handles empty tables gracefully"""
468
+ block = TypedTableBlock(
469
+ [
470
+ ("rich_text", blocks.RichTextBlock()),
471
+ ]
472
+ )
473
+
474
+ # Test with None value
475
+ references = list(block.extract_references(None))
476
+ self.assertEqual(references, [])
477
+
478
+ # Test with empty table
479
+ empty_table = block.to_python({"columns": [], "rows": [], "caption": ""})
480
+ references = list(block.extract_references(empty_table))
481
+ self.assertEqual(references, [])
482
+
375
483
 
376
484
  class TestBlockDefinitionLookup(TestCase):
377
485
  def test_block_lookup(self):
wagtail/coreutils.py CHANGED
@@ -70,7 +70,7 @@ def resolve_model_string(model_string, default_app=None):
70
70
  if isinstance(model_string, str):
71
71
  try:
72
72
  app_label, model_name = model_string.split(".")
73
- except ValueError:
73
+ except ValueError as e:
74
74
  if default_app is not None:
75
75
  # If we can't split, assume a model in current app
76
76
  app_label = default_app
@@ -80,7 +80,7 @@ def resolve_model_string(model_string, default_app=None):
80
80
  "Can not resolve {!r} into a model. Model names "
81
81
  "should be in the form app_label.model_name".format(model_string),
82
82
  model_string,
83
- )
83
+ ) from e
84
84
 
85
85
  return apps.get_model(app_label, model_name)
86
86
 
@@ -376,10 +376,10 @@ def multigetattr(item, accessor):
376
376
  ValueError, # invalid literal for int()
377
377
  KeyError, # current is a dict without `int(bit)` key
378
378
  TypeError, # unsubscriptable object
379
- ):
379
+ ) as e:
380
380
  raise AttributeError(
381
381
  f"Failed lookup for key [{bit}] in {current!r}"
382
- )
382
+ ) from e
383
383
 
384
384
  if callable(current):
385
385
  if getattr(current, "alters_data", False):
@@ -22,12 +22,12 @@ def get_document_model():
22
22
  model_string = get_document_model_string()
23
23
  try:
24
24
  return apps.get_model(model_string, require_ready=False)
25
- except ValueError:
25
+ except ValueError as e:
26
26
  raise ImproperlyConfigured(
27
27
  "WAGTAILDOCS_DOCUMENT_MODEL must be of the form 'app_label.model_name'"
28
- )
29
- except LookupError:
28
+ ) from e
29
+ except LookupError as e:
30
30
  raise ImproperlyConfigured(
31
31
  "WAGTAILDOCS_DOCUMENT_MODEL refers to model '%s' that has not been installed"
32
32
  % model_string
33
- )
33
+ ) from e
@@ -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"
@@ -23,7 +23,7 @@ msgid "Wagtail documents"
23
23
  msgstr ""
24
24
 
25
25
  #: forms.py:25 views/bulk_actions/add_to_collection.py:13 views/chooser.py:92
26
- #: views/documents.py:127
26
+ #: views/documents.py:137
27
27
  msgid "Collection"
28
28
  msgstr ""
29
29
 
@@ -151,7 +151,7 @@ msgid "Delete documents"
151
151
  msgstr ""
152
152
 
153
153
  #: templates/wagtaildocs/bulk_actions/confirm_bulk_delete.html:18
154
- #: views/documents.py:295
154
+ #: views/documents.py:321
155
155
  msgid "Are you sure you want to delete this document?"
156
156
  msgid_plural "Are you sure you want to delete these documents?"
157
157
  msgstr[0] ""
@@ -219,7 +219,7 @@ msgstr ""
219
219
  msgid "File not found"
220
220
  msgstr ""
221
221
 
222
- #: templates/wagtaildocs/documents/edit.html:25 views/documents.py:119
222
+ #: templates/wagtaildocs/documents/edit.html:25 views/documents.py:127
223
223
  msgid "Usage"
224
224
  msgstr ""
225
225
 
@@ -340,7 +340,7 @@ msgid_plural ""
340
340
  msgstr[0] ""
341
341
  msgstr[1] ""
342
342
 
343
- #: views/bulk_actions/delete.py:9 views/documents.py:261
343
+ #: views/bulk_actions/delete.py:9 views/documents.py:287
344
344
  msgid "Delete"
345
345
  msgstr ""
346
346
 
@@ -355,11 +355,11 @@ msgid_plural "%(num_parent_objects)d documents have been deleted"
355
355
  msgstr[0] ""
356
356
  msgstr[1] ""
357
357
 
358
- #: views/chooser.py:87 views/documents.py:111
358
+ #: views/chooser.py:87 views/documents.py:119
359
359
  msgid "File"
360
360
  msgstr ""
361
361
 
362
- #: views/chooser.py:88 views/documents.py:114
362
+ #: views/chooser.py:88 views/documents.py:122
363
363
  msgid "Created"
364
364
  msgstr ""
365
365
 
@@ -379,38 +379,38 @@ msgstr ""
379
379
  msgid "Documents"
380
380
  msgstr ""
381
381
 
382
- #: views/documents.py:106
382
+ #: views/documents.py:114
383
383
  msgid "Title"
384
384
  msgstr ""
385
385
 
386
- #: views/documents.py:176
386
+ #: views/documents.py:202
387
387
  msgid "The document could not be created due to errors."
388
388
  msgstr ""
389
389
 
390
- #: views/documents.py:198
390
+ #: views/documents.py:224
391
391
  #, python-format
392
392
  msgid "Document '%(document_title)s' added."
393
393
  msgstr ""
394
394
 
395
- #: views/documents.py:206
395
+ #: views/documents.py:232
396
396
  msgid "The document could not be saved due to errors."
397
397
  msgstr ""
398
398
 
399
- #: views/documents.py:235
399
+ #: views/documents.py:261
400
400
  #, python-format
401
401
  msgid "Document '%(document_title)s' updated"
402
402
  msgstr ""
403
403
 
404
- #: views/documents.py:259
404
+ #: views/documents.py:285
405
405
  msgid ""
406
406
  "The file could not be found. Please change the source or delete the document."
407
407
  msgstr ""
408
408
 
409
- #: views/documents.py:283
409
+ #: views/documents.py:309
410
410
  msgid "Delete document"
411
411
  msgstr ""
412
412
 
413
- #: views/documents.py:301
413
+ #: views/documents.py:327
414
414
  #, python-format
415
415
  msgid "Document '%(document_title)s' deleted."
416
416
  msgstr ""
@@ -7,7 +7,7 @@
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-2024
10
+ # Marco Badan <marco.badan@gmail.com>, 2021-2024,2026
11
11
  # Sandro Badalamenti <sandro@mailinator.com>, 2019
12
12
  msgid ""
13
13
  msgstr ""
@@ -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: 2014-02-20 21:06+0000\n"
18
- "Last-Translator: Sandro Badalamenti <sandro@mailinator.com>, 2019\n"
18
+ "Last-Translator: Marco Badan <marco.badan@gmail.com>, 2021-2024,2026\n"
19
19
  "Language-Team: Italian (http://app.transifex.com/torchbox/wagtail/language/"
20
20
  "it/)\n"
21
21
  "MIME-Version: 1.0\n"
@@ -172,6 +172,15 @@ msgstr "Non hai ancora caricato alcun documento in questa raccolta."
172
172
  msgid "You haven't uploaded any documents."
173
173
  msgstr "Non hai ancora caricato alcun documento."
174
174
 
175
+ msgid ""
176
+ "Why not <a class=\"upload-one-now\" href=\"#tab-upload\" data-action=\"w-"
177
+ "tabs#select:prevent\" data-w-tabs-target=\"trigger\" data-w-tabs-focus-"
178
+ "param=\"true\">upload one now</a>?"
179
+ msgstr ""
180
+ "Perché non<a class=\"upload-one-now\" href=\"#tab-upload\" data-action=\"w-"
181
+ "tabs#select:prevent\" data-w-tabs-target=\"trigger\" data-w-tabs-focus-"
182
+ "param=\"true\">caricarne uno adesso</a>?"
183
+
175
184
  msgid "Change document:"
176
185
  msgstr "Cambia documento"
177
186
 
@@ -224,6 +233,18 @@ msgstr ""
224
233
  "Non hai caricato alcun documento. Perché non <a "
225
234
  "href=\"%(wagtaildocs_add_document_url)s\">ne carichi uno adesso</a>?"
226
235
 
236
+ #, python-format
237
+ msgid ""
238
+ "%(total)s Document <span class=\"w-sr-only\">created in %(site_name)s</span>"
239
+ msgid_plural ""
240
+ "%(total)s Documents <span class=\"w-sr-only\">created in %(site_name)s</span>"
241
+ msgstr[0] ""
242
+ "%(total)s Documento <span class=\"w-sr-only\">creato in %(site_name)s</span>"
243
+ msgstr[1] ""
244
+ "%(total)s Documenti <span class=\"w-sr-only\">creati in %(site_name)s</span>"
245
+ msgstr[2] ""
246
+ "%(total)s Documenti <span class=\"w-sr-only\">creati in %(site_name)s</span>"
247
+
227
248
  msgid "Add multiple documents"
228
249
  msgstr "Aggiungi documenti multipli"
229
250
 
@@ -326,6 +347,9 @@ msgstr "Documenti"
326
347
  msgid "Title"
327
348
  msgstr "Titolo"
328
349
 
350
+ msgid "The document could not be created due to errors."
351
+ msgstr "Non è stato possibile creare il documento a causa errori."
352
+
329
353
  #, python-format
330
354
  msgid "Document '%(document_title)s' added."
331
355
  msgstr "Documento '%(document_title)s' aggiunto."
@@ -337,6 +361,12 @@ msgstr "Il documento non può essere salvato a causa di errori."
337
361
  msgid "Document '%(document_title)s' updated"
338
362
  msgstr "Documento '%(document_title)s' aggiornato"
339
363
 
364
+ msgid ""
365
+ "The file could not be found. Please change the source or delete the document."
366
+ msgstr ""
367
+ "Il file non è stato trovato. Modifica la sorgente oppure elimina il "
368
+ "documento."
369
+
340
370
  msgid "Delete document"
341
371
  msgstr "Elimina documento"
342
372