Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
790a642a
Commit
790a642a
authored
Dec 14, 2016
by
Gregory Martin
Committed by
GitHub
Dec 14, 2016
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #13441 from juananpe/honorbrowserdefinedlangs
Honor browser defined language preferences when possible
parents
a42ebd9b
67d0245e
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
36 additions
and
3 deletions
+36
-3
openedx/core/djangoapps/lang_pref/middleware.py
+9
-3
openedx/core/djangoapps/lang_pref/tests/test_middleware.py
+27
-0
No files found.
openedx/core/djangoapps/lang_pref/middleware.py
View file @
790a642a
...
...
@@ -39,9 +39,15 @@ class LanguagePreferenceMiddleware(object):
preferred_language
=
request
.
META
.
get
(
'HTTP_ACCEPT_LANGUAGE'
,
''
)
lang_headers
=
[
seq
[
0
]
for
seq
in
parse_accept_lang_header
(
preferred_language
)]
prefixes
=
[
prefix
.
split
(
"-"
)[
0
]
for
prefix
in
system_released_languages
]
# 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
pass
elif
browser_lang
in
prefixes
:
browser_lang
=
system_released_languages
[
prefixes
.
index
(
browser_lang
)]
else
:
continue
if
request
.
session
.
get
(
LANGUAGE_SESSION_KEY
,
None
)
is
None
:
request
.
session
[
LANGUAGE_SESSION_KEY
]
=
unicode
(
browser_lang
)
break
openedx/core/djangoapps/lang_pref/tests/test_middleware.py
View file @
790a642a
...
...
@@ -100,3 +100,30 @@ class TestUserPreferenceMiddleware(TestCase):
set_user_preference
(
self
.
user
,
LANGUAGE_KEY
,
'eo'
)
self
.
middleware
.
process_request
(
self
.
request
)
self
.
assertEqual
(
get_user_preference
(
self
.
request
.
user
,
LANGUAGE_KEY
),
None
)
@mock.patch
(
'openedx.core.djangoapps.lang_pref.middleware.released_languages'
,
mock
.
Mock
(
return_value
=
[(
'eu-es'
,
'euskara (Espainia)'
),
(
'en'
,
'english'
)])
)
def
test_supported_browser_language_prefix_in_session
(
self
):
"""
test: browser language should be set in user session if it's prefix is supported by system for
unathenticated users
"""
self
.
request
.
META
[
'HTTP_ACCEPT_LANGUAGE'
]
=
'eu;q=1.0'
self
.
request
.
user
=
self
.
anonymous_user
self
.
middleware
.
process_request
(
self
.
request
)
self
.
assertEqual
(
self
.
request
.
session
.
get
(
LANGUAGE_SESSION_KEY
),
'eu-es'
)
#pylint: disable=no-member
@mock.patch
(
'openedx.core.djangoapps.lang_pref.middleware.released_languages'
,
mock
.
Mock
(
return_value
=
[(
'en'
,
'english'
)])
)
def
test_unsupported_browser_language_prefix
(
self
):
"""
test: browser language should not be set in user session if it's prefix is not supported by system.
"""
self
.
request
.
META
[
'HTTP_ACCEPT_LANGUAGE'
]
=
'eu;q=1.0'
self
.
request
.
user
=
self
.
anonymous_user
self
.
middleware
.
process_request
(
self
.
request
)
self
.
assertNotEqual
(
self
.
request
.
session
.
get
(
LANGUAGE_SESSION_KEY
),
'eu-es'
)
# pylint: disable=no-member
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment