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.
- wagtail/__init__.py +1 -1
- wagtail/actions/copy_for_translation.py +4 -2
- wagtail/admin/action_menu.py +4 -1
- wagtail/admin/api/actions/convert_alias.py +2 -2
- wagtail/admin/api/actions/copy.py +2 -2
- wagtail/admin/api/actions/copy_for_translation.py +2 -2
- wagtail/admin/api/actions/create_alias.py +2 -2
- wagtail/admin/api/actions/delete.py +1 -1
- wagtail/admin/api/actions/move.py +1 -1
- wagtail/admin/api/actions/publish.py +2 -2
- wagtail/admin/api/actions/revert_to_page_revision.py +2 -2
- wagtail/admin/api/actions/unpublish.py +1 -1
- wagtail/admin/api/filters.py +2 -2
- wagtail/admin/compare.py +22 -0
- wagtail/admin/forms/account.py +52 -1
- wagtail/admin/forms/comments.py +53 -0
- wagtail/admin/forms/models.py +36 -0
- wagtail/admin/forms/pages.py +7 -0
- wagtail/admin/forms/workflows.py +5 -2
- wagtail/admin/icons.py +4 -3
- wagtail/admin/locale/ar/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/ar/LC_MESSAGES/django.po +35 -0
- wagtail/admin/locale/en/LC_MESSAGES/django.po +262 -234
- wagtail/admin/locale/en/LC_MESSAGES/djangojs.po +72 -43
- wagtail/admin/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/it/LC_MESSAGES/django.po +566 -6
- wagtail/admin/locale/it/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/it/LC_MESSAGES/djangojs.po +40 -2
- wagtail/admin/locale/nl/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/nl/LC_MESSAGES/django.po +2 -2
- wagtail/admin/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/admin/locale/sv/LC_MESSAGES/django.po +330 -15
- wagtail/admin/locale/sv/LC_MESSAGES/djangojs.mo +0 -0
- wagtail/admin/locale/sv/LC_MESSAGES/djangojs.po +3 -2
- wagtail/admin/panels/comment_panel.py +1 -51
- wagtail/admin/panels/title_field_panel.py +3 -1
- wagtail/admin/static/wagtailadmin/css/core.css +1 -1
- wagtail/admin/static/wagtailadmin/js/bulk-actions.js +1 -1
- wagtail/admin/static/wagtailadmin/js/comments.js +1 -1
- wagtail/admin/static/wagtailadmin/js/core.js +1 -1
- wagtail/admin/static/wagtailadmin/js/core.js.LICENSE.txt +1 -1
- wagtail/admin/static/wagtailadmin/js/draftail.js +1 -1
- wagtail/admin/static/wagtailadmin/js/privacy-switch.js +1 -1
- wagtail/admin/static/wagtailadmin/js/sidebar.js +1 -1
- wagtail/admin/static/wagtailadmin/js/telepath/blocks.js +1 -1
- wagtail/admin/static/wagtailadmin/js/userbar.js +1 -1
- wagtail/admin/static/wagtailadmin/js/userbar.js.LICENSE.txt +1 -1
- wagtail/admin/static/wagtailadmin/js/vendor.js +1 -1
- wagtail/admin/static/wagtailadmin/js/wagtailadmin.js +1 -1
- wagtail/admin/templates/wagtailadmin/base.html +1 -1
- wagtail/admin/templates/wagtailadmin/generic/edit_partials.html +100 -0
- wagtail/admin/templates/wagtailadmin/generic/form.html +26 -5
- wagtail/admin/templates/wagtailadmin/generic/includes/_loaded_revision_inputs.html +3 -0
- wagtail/admin/templates/wagtailadmin/generic/listing_results.html +1 -17
- wagtail/admin/templates/wagtailadmin/pages/create.html +14 -4
- wagtail/admin/templates/wagtailadmin/pages/edit.html +16 -3
- wagtail/admin/templates/wagtailadmin/pages/edit_partials.html +31 -0
- wagtail/admin/templates/wagtailadmin/pages/index_results.html +1 -9
- wagtail/admin/templates/wagtailadmin/shared/autosave/indicator.html +36 -0
- wagtail/admin/templates/wagtailadmin/shared/breadcrumbs.html +1 -1
- wagtail/admin/templates/wagtailadmin/shared/editing_sessions/list.html +2 -2
- wagtail/admin/templates/wagtailadmin/shared/editing_sessions/module.html +19 -3
- wagtail/admin/templates/wagtailadmin/shared/headers/_actions.html +5 -0
- wagtail/admin/templates/wagtailadmin/shared/headers/_history_icon_link.html +2 -2
- wagtail/admin/templates/wagtailadmin/shared/headers/slim_header.html +8 -9
- wagtail/admin/templates/wagtailadmin/shared/listing/filter_partials.html +19 -0
- wagtail/admin/templates/wagtailadmin/shared/side_panel_toggle.html +3 -3
- wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/side_panel.html +3 -0
- wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/privacy.html +18 -6
- wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/usage.html +11 -4
- wagtail/admin/templates/wagtailadmin/shared/side_panels/includes/status/workflow.html +22 -1
- wagtail/admin/templates/wagtailadmin/shared/side_panels/preview.html +1 -0
- wagtail/admin/templates/wagtailadmin/shared/side_panels.html +1 -2
- wagtail/admin/templates/wagtailadmin/shared/unsaved_changes_warning.html +20 -20
- wagtail/admin/templates/wagtailadmin/userbar/base.html +2 -0
- wagtail/admin/templates/wagtailadmin/userbar/item_accessibility.html +1 -1
- wagtail/admin/templatetags/wagtailadmin_tags.py +6 -14
- wagtail/admin/tests/pages/test_create_page.py +298 -1
- wagtail/admin/tests/pages/test_custom_listing.py +48 -2
- wagtail/admin/tests/pages/test_edit_page.py +721 -7
- wagtail/admin/tests/pages/test_explorer_view.py +9 -5
- wagtail/admin/tests/pages/test_page_search.py +15 -0
- wagtail/admin/tests/pages/test_revisions.py +4 -0
- wagtail/admin/tests/test_account_management.py +88 -2
- wagtail/admin/tests/test_collections_views.py +15 -15
- wagtail/admin/tests/test_compare.py +34 -0
- wagtail/admin/tests/test_editing_sessions.py +230 -8
- wagtail/admin/tests/test_forms.py +192 -1
- wagtail/admin/tests/test_icon_sprite.py +22 -2
- wagtail/admin/tests/test_page_chooser.py +13 -13
- wagtail/admin/tests/test_reports_views.py +4 -1
- wagtail/admin/tests/test_userbar.py +69 -5
- wagtail/admin/tests/test_views_generic.py +5 -5
- wagtail/admin/tests/test_workflows.py +14 -12
- wagtail/admin/tests/viewsets/test_model_viewset.py +13 -0
- wagtail/admin/ui/autosave.py +5 -0
- wagtail/admin/ui/editing_sessions.py +3 -0
- wagtail/admin/ui/side_panels.py +19 -20
- wagtail/admin/userbar.py +48 -27
- wagtail/admin/views/bulk_action/dispatcher.py +2 -2
- wagtail/admin/views/chooser.py +6 -6
- wagtail/admin/views/editing_sessions.py +20 -7
- wagtail/admin/views/generic/__init__.py +1 -0
- wagtail/admin/views/generic/chooser.py +5 -5
- wagtail/admin/views/generic/mixins.py +143 -26
- wagtail/admin/views/generic/models.py +157 -27
- wagtail/admin/views/generic/ordering.py +1 -1
- wagtail/admin/views/generic/preview.py +4 -4
- wagtail/admin/views/home.py +3 -1
- wagtail/admin/views/pages/create.py +77 -29
- wagtail/admin/views/pages/edit.py +160 -34
- wagtail/admin/views/pages/preview.py +4 -4
- wagtail/admin/views/pages/revisions.py +3 -0
- wagtail/admin/views/pages/search.py +4 -4
- wagtail/admin/views/pages/usage.py +2 -2
- wagtail/admin/views/tags.py +2 -2
- wagtail/admin/views/workflows.py +73 -54
- wagtail/admin/viewsets/model.py +34 -8
- wagtail/admin/widgets/button.py +11 -4
- wagtail/admin/widgets/chooser.py +6 -4
- wagtail/admin/widgets/slug.py +1 -1
- wagtail/api/v2/filters.py +27 -21
- wagtail/api/v2/pagination.py +4 -4
- wagtail/api/v2/views.py +7 -7
- wagtail/blocks/list_block.py +0 -8
- wagtail/blocks/migrations/migrate_operation.py +8 -1
- wagtail/blocks/stream_block.py +2 -10
- wagtail/blocks/struct_block.py +192 -12
- wagtail/compat.py +2 -2
- wagtail/contrib/forms/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/forms/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/forms/locale/it/LC_MESSAGES/django.po +40 -2
- wagtail/contrib/frontend_cache/backends/azure.py +6 -6
- wagtail/contrib/frontend_cache/backends/cloudfront.py +2 -2
- wagtail/contrib/frontend_cache/utils.py +1 -1
- wagtail/contrib/redirects/forms.py +1 -1
- wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.po +14 -14
- wagtail/contrib/redirects/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/it/LC_MESSAGES/django.po +15 -2
- wagtail/contrib/redirects/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/redirects/locale/sv/LC_MESSAGES/django.po +16 -3
- wagtail/contrib/redirects/middleware.py +11 -7
- wagtail/contrib/redirects/models.py +17 -1
- wagtail/contrib/redirects/tests/test_import_admin_views.py +3 -3
- wagtail/contrib/redirects/tests/test_redirects.py +56 -8
- wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.po +6 -6
- wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/search_promotions/locale/it/LC_MESSAGES/django.po +43 -2
- wagtail/contrib/search_promotions/tests.py +1 -1
- wagtail/contrib/search_promotions/views/settings.py +24 -25
- wagtail/contrib/settings/jinja2tags.py +2 -2
- wagtail/contrib/settings/locale/en/LC_MESSAGES/django.po +2 -2
- wagtail/contrib/settings/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/settings/locale/it/LC_MESSAGES/django.po +6 -2
- wagtail/contrib/settings/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/settings/locale/sv/LC_MESSAGES/django.po +3 -2
- wagtail/contrib/settings/tests/generic/test_admin.py +118 -2
- wagtail/contrib/settings/tests/site_specific/test_admin.py +78 -15
- wagtail/contrib/settings/tests/site_specific/test_model.py +2 -2
- wagtail/contrib/settings/views.py +7 -0
- wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/simple_translation/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/simple_translation/locale/it/LC_MESSAGES/django.po +5 -2
- wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.po +7 -7
- wagtail/contrib/styleguide/tests.py +2 -0
- wagtail/contrib/styleguide/views.py +4 -5
- wagtail/contrib/table_block/locale/ar/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/ar/LC_MESSAGES/django.po +5 -1
- wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/contrib/table_block/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/table_block/locale/it/LC_MESSAGES/django.po +5 -2
- wagtail/contrib/typed_table_block/blocks.py +37 -0
- wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.po +10 -10
- wagtail/contrib/typed_table_block/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/contrib/typed_table_block/locale/sv/LC_MESSAGES/django.po +4 -3
- wagtail/contrib/typed_table_block/tests.py +108 -0
- wagtail/coreutils.py +4 -4
- wagtail/documents/__init__.py +4 -4
- wagtail/documents/locale/en/LC_MESSAGES/django.po +15 -15
- wagtail/documents/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/it/LC_MESSAGES/django.po +32 -2
- wagtail/documents/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/documents/locale/sv/LC_MESSAGES/django.po +32 -4
- wagtail/documents/models.py +1 -1
- wagtail/documents/tests/test_admin_views.py +19 -4
- wagtail/documents/tests/test_search.py +0 -2
- wagtail/documents/tests/test_views.py +6 -4
- wagtail/documents/views/bulk_actions/add_tags.py +1 -1
- wagtail/embeds/finders/facebook.py +3 -3
- wagtail/embeds/finders/instagram.py +3 -3
- wagtail/embeds/finders/oembed.py +7 -2
- wagtail/embeds/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/embeds/oembed_providers.py +8 -0
- wagtail/embeds/tests/test_embeds.py +35 -0
- wagtail/images/__init__.py +4 -4
- wagtail/images/admin_urls.py +3 -3
- wagtail/images/blocks.py +1 -1
- wagtail/images/formats.py +2 -2
- wagtail/images/image_operations.py +2 -2
- wagtail/images/locale/en/LC_MESSAGES/django.po +44 -40
- wagtail/images/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/it/LC_MESSAGES/django.po +50 -4
- wagtail/images/locale/nl/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/nl/LC_MESSAGES/django.po +3 -3
- wagtail/images/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/images/locale/sv/LC_MESSAGES/django.po +49 -6
- wagtail/images/models.py +11 -10
- wagtail/images/templates/wagtailimages/images/index_results.html +1 -1
- wagtail/images/templates/wagtailimages/images/url_generator.html +17 -38
- wagtail/images/templates/wagtailimages/images/url_generator_output.html +28 -0
- wagtail/images/templatetags/wagtailimages_tags.py +4 -4
- wagtail/images/tests/test_admin_views.py +432 -59
- wagtail/images/tests/test_image_operations.py +2 -2
- wagtail/images/tests/test_models.py +0 -2
- wagtail/images/views/bulk_actions/add_tags.py +1 -1
- wagtail/images/views/images.py +72 -39
- wagtail/locale/en/LC_MESSAGES/django.po +103 -105
- wagtail/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/it/LC_MESSAGES/django.po +105 -2
- wagtail/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/locale/sv/LC_MESSAGES/django.po +95 -12
- wagtail/locales/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/locales/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/it/LC_MESSAGES/django.po +13 -2
- wagtail/locales/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/locales/locale/sv/LC_MESSAGES/django.po +4 -3
- wagtail/locales/tests.py +5 -5
- wagtail/models/i18n.py +4 -6
- wagtail/models/media.py +18 -0
- wagtail/models/pages.py +65 -11
- wagtail/models/reference_index.py +15 -0
- wagtail/models/revisions.py +40 -12
- wagtail/models/workflows.py +0 -3
- wagtail/permission_policies/base.py +2 -2
- wagtail/permission_policies/collections.py +2 -2
- wagtail/project_template/requirements.txt +2 -2
- wagtail/search/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/signal_handlers.py +1 -0
- wagtail/sites/locale/en/LC_MESSAGES/django.po +1 -1
- wagtail/sites/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/sites/locale/sv/LC_MESSAGES/django.po +3 -2
- wagtail/sites/tests.py +7 -7
- wagtail/snippets/action_menu.py +2 -1
- wagtail/snippets/locale/en/LC_MESSAGES/django.po +23 -13
- wagtail/snippets/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/snippets/locale/sv/LC_MESSAGES/django.po +12 -1
- wagtail/snippets/tests/test_chooser_block.py +197 -0
- wagtail/snippets/tests/test_chooser_panel.py +149 -0
- wagtail/snippets/tests/test_chooser_views.py +375 -0
- wagtail/snippets/tests/test_chooser_widget.py +22 -0
- wagtail/snippets/tests/test_compare_revisions_view.py +167 -0
- wagtail/snippets/tests/test_copy_view.py +38 -0
- wagtail/snippets/tests/test_create_view.py +1159 -0
- wagtail/snippets/tests/test_delete_view.py +225 -0
- wagtail/snippets/tests/test_edit_view.py +2882 -0
- wagtail/snippets/tests/test_history_view.py +182 -0
- wagtail/snippets/tests/test_index_view.py +105 -0
- wagtail/snippets/tests/test_list_view.py +786 -0
- wagtail/snippets/tests/test_locking.py +28 -0
- wagtail/snippets/tests/test_permissions.py +167 -0
- wagtail/snippets/tests/test_preview.py +3 -3
- wagtail/snippets/tests/test_revert_view.py +343 -0
- wagtail/snippets/tests/test_snippet_models.py +112 -0
- wagtail/snippets/tests/test_unpublish_view.py +228 -0
- wagtail/snippets/tests/test_unschedule_view.py +151 -0
- wagtail/snippets/tests/test_viewset.py +38 -5
- wagtail/snippets/views/snippets.py +78 -30
- wagtail/snippets/widgets.py +2 -2
- wagtail/templatetags/wagtailcore_tags.py +2 -2
- wagtail/test/dummy_external_storage.py +1 -1
- wagtail/test/testapp/fixtures/test.json +22 -0
- wagtail/test/testapp/fixtures/test_empty.json +2 -0
- wagtail/test/testapp/fixtures/test_explorable_pages.json +10 -0
- wagtail/test/testapp/fixtures/test_specific.json +9 -0
- wagtail/test/testapp/migrations/0059_nopromotepage.py +25 -0
- wagtail/test/testapp/models.py +7 -0
- wagtail/test/testapp/views.py +5 -0
- wagtail/test/utils/page_tests.py +7 -7
- wagtail/test/utils/wagtail_factories/builder.py +2 -2
- wagtail/tests/streamfield_migrations/test_migrations.py +35 -0
- wagtail/tests/test_blocks.py +321 -61
- wagtail/tests/test_collection_model.py +12 -0
- wagtail/tests/test_page_model.py +190 -1
- wagtail/tests/test_page_privacy.py +5 -0
- wagtail/tests/test_reference_index.py +42 -0
- wagtail/tests/test_revision_model.py +118 -1
- wagtail/tests/test_utils.py +2 -2
- wagtail/users/locale/en/LC_MESSAGES/django.po +14 -14
- wagtail/users/locale/id_ID/LC_MESSAGES/django.mo +0 -0
- wagtail/users/locale/id_ID/LC_MESSAGES/django.po +6 -2
- wagtail/users/locale/it/LC_MESSAGES/django.mo +0 -0
- wagtail/users/locale/it/LC_MESSAGES/django.po +14 -2
- wagtail/users/locale/sv/LC_MESSAGES/django.mo +0 -0
- wagtail/users/locale/sv/LC_MESSAGES/django.po +48 -17
- wagtail/users/tests/test_admin_views.py +39 -25
- wagtail/users/utils.py +4 -1
- wagtail/users/views/groups.py +19 -5
- wagtail/users/wagtail_hooks.py +1 -1
- wagtail/utils/loading.py +2 -2
- wagtail-7.3rc1.data/data/AGENTS.md +21 -0
- wagtail-7.3rc1.data/data/CHANGELOG.txt +4941 -0
- wagtail-7.3rc1.data/data/CODE_OF_CONDUCT.md +71 -0
- wagtail-7.3rc1.data/data/CONTRIBUTORS.md +999 -0
- wagtail-7.3rc1.data/data/SPONSORS.md +55 -0
- {wagtail-7.2.1.dist-info → wagtail-7.3rc1.dist-info}/METADATA +6 -6
- {wagtail-7.2.1.dist-info → wagtail-7.3rc1.dist-info}/RECORD +310 -280
- {wagtail-7.2.1.dist-info → wagtail-7.3rc1.dist-info}/WHEEL +1 -1
- wagtail/images/static/wagtailimages/js/image-url-generator.js +0 -1
- wagtail/snippets/tests/test_snippets.py +0 -6377
- {wagtail-7.2.1.dist-info → wagtail-7.3rc1.dist-info}/entry_points.txt +0 -0
- {wagtail-7.2.1.dist-info → wagtail-7.3rc1.dist-info}/licenses/LICENSE +0 -0
- {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)
|
|
@@ -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:
|
|
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:
|
|
70
|
+
#: models.py:14
|
|
71
71
|
msgid "redirect from"
|
|
72
72
|
msgstr ""
|
|
73
73
|
|
|
74
|
-
#: models.py:
|
|
74
|
+
#: models.py:18
|
|
75
75
|
msgid "site"
|
|
76
76
|
msgstr ""
|
|
77
77
|
|
|
78
|
-
#: models.py:
|
|
78
|
+
#: models.py:26 models.py:101
|
|
79
79
|
msgid "permanent"
|
|
80
80
|
msgstr ""
|
|
81
81
|
|
|
82
|
-
#: models.py:
|
|
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:
|
|
88
|
+
#: models.py:35
|
|
89
89
|
msgid "redirect to a page"
|
|
90
90
|
msgstr ""
|
|
91
91
|
|
|
92
|
-
#: models.py:
|
|
92
|
+
#: models.py:41
|
|
93
93
|
msgid "target page route"
|
|
94
94
|
msgstr ""
|
|
95
95
|
|
|
96
|
-
#: models.py:
|
|
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:
|
|
102
|
+
#: models.py:50
|
|
103
103
|
msgid "redirect to any URL"
|
|
104
104
|
msgstr ""
|
|
105
105
|
|
|
106
|
-
#: models.py:
|
|
106
|
+
#: models.py:53
|
|
107
107
|
msgid "automatically created"
|
|
108
108
|
msgstr ""
|
|
109
109
|
|
|
110
|
-
#: models.py:
|
|
110
|
+
#: models.py:58
|
|
111
111
|
msgid "created at"
|
|
112
112
|
msgstr ""
|
|
113
113
|
|
|
114
|
-
#: models.py:
|
|
114
|
+
#: models.py:103
|
|
115
115
|
msgid "temporary"
|
|
116
116
|
msgstr ""
|
|
117
117
|
|
|
118
|
-
#: models.py:
|
|
118
|
+
#: models.py:235
|
|
119
119
|
msgid "redirect"
|
|
120
120
|
msgstr ""
|
|
121
121
|
|
|
122
|
-
#: models.py:
|
|
122
|
+
#: models.py:236
|
|
123
123
|
msgid "redirects"
|
|
124
124
|
msgstr ""
|
|
125
125
|
|
|
Binary file
|
|
@@ -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:
|
|
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"
|
|
Binary file
|
|
@@ -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:
|
|
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
|
|
191
|
+
msgstr "Omdirigeringen kunde inte sparas på 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
|
|
202
|
+
msgstr "Omdirigeringen kunde inte skapas på 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,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
#
|
|
43
|
-
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=
|
|
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=
|
|
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
|
-
|
|
161
|
-
|
|
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=
|
|
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=
|
|
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=
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
231
|
+
#: views/settings.py:202
|
|
232
232
|
msgid "Editor's picks deleted."
|
|
233
233
|
msgstr ""
|
|
Binary file
|