47 lines
2.0 KiB
Python
47 lines
2.0 KiB
Python
"""
|
|
Middleware for Language Preferences
|
|
"""
|
|
|
|
from openedx.core.djangoapps.user_api.preferences.api import get_user_preference, delete_user_preference
|
|
from lang_pref import LANGUAGE_KEY
|
|
from django.utils.translation import LANGUAGE_SESSION_KEY
|
|
from django.utils.translation.trans_real import parse_accept_lang_header
|
|
from lang_pref.api import released_languages
|
|
|
|
|
|
class LanguagePreferenceMiddleware(object):
|
|
"""
|
|
Middleware for user preferences.
|
|
|
|
Ensures that, once set, a user's preferences are reflected in the page
|
|
whenever they are logged in.
|
|
"""
|
|
|
|
def process_request(self, request):
|
|
"""
|
|
If a user's UserPreference contains a language preference, use the user's preference.
|
|
"""
|
|
languages = released_languages()
|
|
system_released_languages = [seq[0] for seq in languages]
|
|
|
|
# If the user is logged in, check for their language preference
|
|
if request.user.is_authenticated():
|
|
# Get the user's language preference
|
|
user_pref = get_user_preference(request.user, LANGUAGE_KEY)
|
|
# Set it to the LANGUAGE_SESSION_KEY (Django-specific session setting governing language pref)
|
|
if user_pref:
|
|
if user_pref in system_released_languages:
|
|
request.session[LANGUAGE_SESSION_KEY] = user_pref
|
|
else:
|
|
delete_user_preference(request.user, LANGUAGE_KEY)
|
|
else:
|
|
preferred_language = request.META.get('HTTP_ACCEPT_LANGUAGE', '')
|
|
lang_headers = [seq[0] for seq in parse_accept_lang_header(preferred_language)]
|
|
|
|
# Setting the session language to the browser language, if it is supported.
|
|
for browser_lang in lang_headers:
|
|
if browser_lang in system_released_languages:
|
|
if request.session.get(LANGUAGE_SESSION_KEY, None) is None:
|
|
request.session[LANGUAGE_SESSION_KEY] = unicode(browser_lang)
|
|
break
|