diff --git a/lms/djangoapps/courseware/context_processor.py b/lms/djangoapps/courseware/context_processor.py index c6afdad46bee..bc40b166a50f 100644 --- a/lms/djangoapps/courseware/context_processor.py +++ b/lms/djangoapps/courseware/context_processor.py @@ -10,6 +10,7 @@ from edx_django_utils.cache import TieredCache from lms.djangoapps.courseware.models import LastSeenCoursewareTimezone +from openedx.core.djangoapps.site_configuration.helpers import get_value from openedx.core.djangoapps.user_api.errors import UserAPIInternalError, UserNotFound from openedx.core.djangoapps.user_api.preferences.api import get_user_preference, get_user_preferences from openedx.core.lib.cache_utils import get_cache @@ -26,6 +27,8 @@ def user_timezone_locale_prefs(request): """ Checks if request has an authenticated user. If so, sends set (or none if unset) time_zone and language prefs. + If site-wide language is set, that language is used over the language set + in user preferences. This interacts with the DateUtils to either display preferred or attempt to determine system/browser set time_zones and languages @@ -47,6 +50,9 @@ def user_timezone_locale_prefs(request): key: user_preferences.get(pref_name, None) for key, pref_name in RETRIEVABLE_PREFERENCES.items() } + site_wide_language = get_value('LANGUAGE_CODE', None) + if site_wide_language: + user_prefs['user_language'] = site_wide_language cached_value.update(user_prefs) return cached_value diff --git a/lms/djangoapps/courseware/tests/test_context_processor.py b/lms/djangoapps/courseware/tests/test_context_processor.py index 3eb873765bc1..df4c6543db33 100644 --- a/lms/djangoapps/courseware/tests/test_context_processor.py +++ b/lms/djangoapps/courseware/tests/test_context_processor.py @@ -3,7 +3,7 @@ """ from pytz import timezone -from unittest.mock import Mock +from unittest.mock import Mock, patch from django.contrib.auth.models import AnonymousUser from lms.djangoapps.courseware.context_processor import ( @@ -48,6 +48,13 @@ def test_no_language_preference(self): assert context['user_timezone'] is not None assert context['user_timezone'] == 'Asia/Tokyo' + @patch("lms.djangoapps.courseware.context_processor.get_value") + def test_site_wide_language_set(self, mock_get_value): + mock_get_value.return_value = 'ar' + set_user_preference(self.user, 'pref-lang', 'en') + context = user_timezone_locale_prefs(self.request) + assert context['user_language'] == 'ar' + def test_get_user_timezone_or_last_seen_timezone_or_utc(self): # We default to UTC course = CourseFactory()