kopia lustrzana https://github.com/wagtail/wagtail
Fix default preferred language should be an admin permitted language
rodzic
47c20b2490
commit
c91bff5d21
|
@ -40,6 +40,7 @@ Changelog
|
||||||
* Fix: Show the correct privacy status for child collections of private collections (Shlomo Markowitz)
|
* Fix: Show the correct privacy status for child collections of private collections (Shlomo Markowitz)
|
||||||
* Fix: Ensure reference index correctly handles models with primary keys not named `id` (Sage Abdullah)
|
* Fix: Ensure reference index correctly handles models with primary keys not named `id` (Sage Abdullah)
|
||||||
* Fix: On "move page" bulk action, do not prefill the destination with the root page (Stefan Hammer)
|
* Fix: On "move page" bulk action, do not prefill the destination with the root page (Stefan Hammer)
|
||||||
|
* Fix: Ensure the default preferred language respects the `WAGTAILADMIN_PERMITTED_LANGUAGES` setting (Sébastien Corbin)
|
||||||
* Docs: Add missing `django.contrib.admin` to list of apps in "add to Django project" guide (Mohamed Rabiaa)
|
* Docs: Add missing `django.contrib.admin` to list of apps in "add to Django project" guide (Mohamed Rabiaa)
|
||||||
* Docs: Add tutorial on deploying on Ubuntu to third-party tutorials (Mohammad Fathi Rahman)
|
* Docs: Add tutorial on deploying on Ubuntu to third-party tutorials (Mohammad Fathi Rahman)
|
||||||
* Docs: Document that request_or_site is optional on BaseGenericSetting.load (Matt Westcott)
|
* Docs: Document that request_or_site is optional on BaseGenericSetting.load (Matt Westcott)
|
||||||
|
|
|
@ -64,6 +64,7 @@ We have a new pagination interface for all listing views and most choosers, incl
|
||||||
* Show the correct privacy status for child collections of private collections (Shlomo Markowitz)
|
* Show the correct privacy status for child collections of private collections (Shlomo Markowitz)
|
||||||
* Ensure reference index correctly handles models with primary keys not named `id` (Sage Abdullah)
|
* Ensure reference index correctly handles models with primary keys not named `id` (Sage Abdullah)
|
||||||
* On "move page" bulk action, do not prefill the destination with the root page (Stefan Hammer)
|
* On "move page" bulk action, do not prefill the destination with the root page (Stefan Hammer)
|
||||||
|
* Ensure the default preferred language respects the `WAGTAILADMIN_PERMITTED_LANGUAGES` setting (Sébastien Corbin)
|
||||||
|
|
||||||
### Documentation
|
### Documentation
|
||||||
|
|
||||||
|
|
|
@ -2,15 +2,18 @@ import json
|
||||||
|
|
||||||
from django.contrib.auth.models import AnonymousUser, Permission
|
from django.contrib.auth.models import AnonymousUser, Permission
|
||||||
from django.template import Context, Template
|
from django.template import Context, Template
|
||||||
from django.test import TestCase
|
from django.test import TestCase, override_settings
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
from django.utils import translation
|
||||||
|
from django.utils.translation import gettext
|
||||||
|
|
||||||
from wagtail import hooks
|
from wagtail import hooks
|
||||||
from wagtail.admin.userbar import AccessibilityItem
|
from wagtail.admin.userbar import AccessibilityItem
|
||||||
from wagtail.coreutils import get_dummy_request
|
from wagtail.coreutils import get_dummy_request
|
||||||
from wagtail.models import PAGE_TEMPLATE_VAR, Page, Site
|
from wagtail.models import PAGE_TEMPLATE_VAR, Locale, Page, Site
|
||||||
from wagtail.test.testapp.models import BusinessChild, BusinessIndex, SimplePage
|
from wagtail.test.testapp.models import BusinessChild, BusinessIndex, SimplePage
|
||||||
from wagtail.test.utils import WagtailTestUtils
|
from wagtail.test.utils import WagtailTestUtils
|
||||||
|
from wagtail.users.models import UserProfile
|
||||||
from wagtail.utils.deprecation import RemovedInWagtail80Warning
|
from wagtail.utils.deprecation import RemovedInWagtail80Warning
|
||||||
|
|
||||||
|
|
||||||
|
@ -495,6 +498,56 @@ class TestUserbarInPageServe(WagtailTestUtils, TestCase):
|
||||||
|
|
||||||
self.assertTrue(kwargs.get("called"))
|
self.assertTrue(kwargs.get("called"))
|
||||||
|
|
||||||
|
@override_settings(
|
||||||
|
WAGTAIL_I18N_ENABLED=True,
|
||||||
|
WAGTAIL_CONTENT_LANGUAGES=[("en", "English"), ("fr", "French")],
|
||||||
|
WAGTAILADMIN_PERMITTED_LANGUAGES=[("en", "English")],
|
||||||
|
LANGUAGE_CODE="en",
|
||||||
|
)
|
||||||
|
def test_userbar_rendered_in_admin_permitted_language_if_user_has_no_language(self):
|
||||||
|
french = Locale.objects.create(language_code="fr")
|
||||||
|
self.homepage.copy_for_translation(french)
|
||||||
|
french_page = self.page.copy_for_translation(french)
|
||||||
|
|
||||||
|
with translation.override("fr"):
|
||||||
|
response = french_page.serve(self.request)
|
||||||
|
response.render()
|
||||||
|
|
||||||
|
self.assertContains(response, "Go to Wagtail admin")
|
||||||
|
|
||||||
|
@override_settings(
|
||||||
|
WAGTAIL_I18N_ENABLED=True,
|
||||||
|
WAGTAIL_CONTENT_LANGUAGES=[("en", "English"), ("fr", "French")],
|
||||||
|
LANGUAGE_CODE="en",
|
||||||
|
)
|
||||||
|
def test_userbar_rendered_in_active_language_if_admin_permitted(self):
|
||||||
|
french = Locale.objects.create(language_code="fr")
|
||||||
|
self.homepage.copy_for_translation(french)
|
||||||
|
french_page = self.page.copy_for_translation(french)
|
||||||
|
|
||||||
|
with translation.override("fr"):
|
||||||
|
response = french_page.serve(self.request)
|
||||||
|
response.render()
|
||||||
|
|
||||||
|
with translation.override("fr"):
|
||||||
|
expected_text = gettext("Go to Wagtail admin")
|
||||||
|
self.assertContains(response, expected_text)
|
||||||
|
|
||||||
|
@override_settings(LANGUAGE_CODE="en")
|
||||||
|
def test_userbar_rendered_in_user_preferred_language(self):
|
||||||
|
profile = UserProfile.get_for_user(self.user)
|
||||||
|
profile.preferred_language = "fr"
|
||||||
|
profile.save()
|
||||||
|
|
||||||
|
response = self.page.serve(self.request)
|
||||||
|
response.render()
|
||||||
|
|
||||||
|
# Ensure we have a French string without tests failing if translation changes
|
||||||
|
with translation.override("fr"):
|
||||||
|
expected_text = gettext("Go to Wagtail admin")
|
||||||
|
self.assertNotEqual(expected_text, "Go to Wagtail admin")
|
||||||
|
self.assertContains(response, expected_text)
|
||||||
|
|
||||||
|
|
||||||
class TestUserbarHooksForChecksPanel(WagtailTestUtils, TestCase):
|
class TestUserbarHooksForChecksPanel(WagtailTestUtils, TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|
|
@ -6,6 +6,8 @@ from django.db import models
|
||||||
from django.utils.translation import get_language
|
from django.utils.translation import get_language
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
from wagtail.admin.localization import get_available_admin_languages
|
||||||
|
|
||||||
|
|
||||||
def upload_avatar_to(instance, filename):
|
def upload_avatar_to(instance, filename):
|
||||||
filename, ext = os.path.splitext(filename)
|
filename, ext = os.path.splitext(filename)
|
||||||
|
@ -112,7 +114,11 @@ class UserProfile(models.Model):
|
||||||
return cls.objects.get_or_create(user=user)[0]
|
return cls.objects.get_or_create(user=user)[0]
|
||||||
|
|
||||||
def get_preferred_language(self):
|
def get_preferred_language(self):
|
||||||
return self.preferred_language or get_language()
|
if self.preferred_language:
|
||||||
|
return self.preferred_language
|
||||||
|
if (language := get_language()) in dict(get_available_admin_languages()):
|
||||||
|
return language
|
||||||
|
return settings.LANGUAGE_CODE
|
||||||
|
|
||||||
def get_current_time_zone(self):
|
def get_current_time_zone(self):
|
||||||
return self.current_time_zone or settings.TIME_ZONE
|
return self.current_time_zone or settings.TIME_ZONE
|
||||||
|
|
Ładowanie…
Reference in New Issue