Procházet zdrojové kódy

Use explicit label for defaulting to server language in account settings

Sage Abdullah před 2 měsíci
rodič
revize
da12f4a284

+ 8 - 3
wagtail/admin/forms/account.py

@@ -3,7 +3,6 @@ import warnings
 from django import forms
 from django.conf import settings
 from django.contrib.auth import get_user_model
-from django.db.models.fields import BLANK_CHOICE_DASH
 from django.utils.translation import get_language_info
 from django.utils.translation import gettext_lazy as _
 
@@ -51,8 +50,14 @@ def _get_language_choices():
         (lang_code, get_language_info(lang_code)["name_local"])
         for lang_code, lang_name in get_available_admin_languages()
     ]
-    return sorted(
-        BLANK_CHOICE_DASH + language_choices,
+    server_language = get_language_info(settings.LANGUAGE_CODE)["name_local"]
+    default = (
+        "",
+        _("Use server language: %(language_name)s")
+        % {"language_name": server_language},
+    )
+    return [default] + sorted(
+        language_choices,
         key=lambda language_choice: language_choice[1].lower(),
     )
 

+ 11 - 0
wagtail/admin/tests/test_account_management.py

@@ -532,6 +532,17 @@ class TestAccountSection(
             get_available_admin_languages(), WAGTAILADMIN_PROVIDED_LANGUAGES
         )
 
+    @override_settings(LANGUAGE_CODE="id")
+    def test_default_language_follows_server_setting(self):
+        response = self.client.get(reverse("wagtailadmin_account"))
+        self.assertEqual(response.status_code, 200)
+        soup = self.get_soup(response.content)
+        option = soup.select_one(
+            'select[name="locale-preferred_language"] option[value=""]'
+        )
+        self.assertIsNotNone(option)
+        self.assertEqual(option.text.strip(), "Use server language: Bahasa Indonesia")
+
     @override_settings(WAGTAILADMIN_PERMITTED_LANGUAGES=[("en", "English")])
     def test_not_show_options_if_only_one_language_is_permitted(self):
         response = self.client.get(reverse("wagtailadmin_account"))