diff --git a/wagtail/admin/tests/pages/test_explorer_view.py b/wagtail/admin/tests/pages/test_explorer_view.py
index c4dbab852bc..a13cb9dc909 100644
--- a/wagtail/admin/tests/pages/test_explorer_view.py
+++ b/wagtail/admin/tests/pages/test_explorer_view.py
@@ -735,14 +735,35 @@ def test_locale_selector(self):
response = self.client.get(
reverse("wagtailadmin_explore", args=[self.events_page.id])
)
+ html = response.content.decode()
self.assertContains(response, 'id="status-sidebar-english"')
self.assertContains(response, "Switch locales")
+ add_translation_url = reverse(
+ "wagtailadmin_explore", args=[self.translated_events_page.id]
+ )
+ self.assertTagInHTML(
+ f'French',
+ html,
+ allow_extra_attrs=True,
+ )
+
@override_settings(WAGTAIL_I18N_ENABLED=False)
def test_locale_selector_not_present_when_i18n_disabled(self):
response = self.client.get(
reverse("wagtailadmin_explore", args=[self.events_page.id])
)
+ html = response.content.decode()
self.assertNotContains(response, "Switch locales")
+
+ add_translation_url = reverse(
+ "wagtailadmin_explore", args=[self.translated_events_page.id]
+ )
+ self.assertTagInHTML(
+ f'French',
+ html,
+ allow_extra_attrs=True,
+ count=0,
+ )
diff --git a/wagtail/admin/ui/side_panels.py b/wagtail/admin/ui/side_panels.py
index 6ceffdf2c7e..d0a7d819852 100644
--- a/wagtail/admin/ui/side_panels.py
+++ b/wagtail/admin/ui/side_panels.py
@@ -30,6 +30,10 @@ class BaseStatusSidePanel(BaseSidePanel):
toggle_aria_label = gettext_lazy("Toggle status")
toggle_icon_name = "info-circle"
+ def __init__(self, *args, in_explorer=False, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.in_explorer = in_explorer
+
def get_status_templates(self, context):
templates = []
@@ -86,15 +90,17 @@ def get_context_data(self, parent_context):
)
if getattr(settings, "WAGTAIL_I18N_ENABLED", False):
+ url_name = "wagtailadmin_pages:edit"
+ if self.in_explorer:
+ url_name = "wagtailadmin_explore"
+
context.update(
{
"locale": page.locale,
"translations": [
{
"locale": translation.locale,
- "url": reverse(
- "wagtailadmin_pages:edit", args=[translation.id]
- ),
+ "url": reverse(url_name, args=[translation.id]),
}
for translation in page.get_translations()
.only("id", "locale", "depth")
@@ -178,11 +184,13 @@ def media(self):
class PageSidePanels(BaseSidePanels):
- def __init__(self, request, page, *, preview_enabled, comments_enabled):
+ def __init__(
+ self, request, page, *, preview_enabled, comments_enabled, in_explorer=False
+ ):
super().__init__(request, page)
self.side_panels = [
- PageStatusSidePanel(page, self.request),
+ PageStatusSidePanel(page, self.request, in_explorer=in_explorer),
]
if preview_enabled and page.preview_modes:
diff --git a/wagtail/admin/views/pages/listing.py b/wagtail/admin/views/pages/listing.py
index 9f9eb2de85c..154c6aa1ae7 100644
--- a/wagtail/admin/views/pages/listing.py
+++ b/wagtail/admin/views/pages/listing.py
@@ -97,6 +97,7 @@ def index(request, parent_page_id=None):
side_panels = PageSidePanels(
request,
parent_page.specific,
+ in_explorer=True,
preview_enabled=False,
comments_enabled=False,
)