Commit cb6b52f8 by Julia Hansbrough Committed by thedeadparrot

wiring for language selector

parent 895bb5e0
...@@ -19,6 +19,8 @@ class DarkLangConfig(ConfigurationModel): ...@@ -19,6 +19,8 @@ class DarkLangConfig(ConfigurationModel):
def released_languages_list(self): def released_languages_list(self):
""" """
``released_languages`` as a list of language codes. ``released_languages`` as a list of language codes.
Example: ['it', 'de-at', 'es', 'pt-br']
""" """
if not self.released_languages.strip(): # pylint: disable=no-member if not self.released_languages.strip(): # pylint: disable=no-member
return [] return []
......
# -*- coding: utf-8 -*-
"""
This test file will verify functionality relating to changing language settings for a user
"""
from django.test import TestCase
from django.core.urlresolvers import reverse
from student.tests.factories import UserFactory
class TestLanguageSettings(TestCase):
"""
Language settings tests
"""
def setUp(self):
self.user = UserFactory.create(username="rusty", password="test")
self.client.login(username="rusty", password="test")
def test_successful_language_change(self):
# Esperanto is our dummy language
post_data = dict(language='eo',)
response = self.client.post('/i18n/setlang/', data=post_data)
self.assertEqual(response.status_code, 302)
session = self.client.session
self.assertEqual(session['django_language'], 'eo')
...@@ -27,6 +27,7 @@ from django.http import (HttpResponse, HttpResponseBadRequest, HttpResponseForbi ...@@ -27,6 +27,7 @@ from django.http import (HttpResponse, HttpResponseBadRequest, HttpResponseForbi
from django.shortcuts import redirect from django.shortcuts import redirect
from django_future.csrf import ensure_csrf_cookie from django_future.csrf import ensure_csrf_cookie
from django.utils.http import cookie_date, base36_to_int from django.utils.http import cookie_date, base36_to_int
from django.utils import translation
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.views.decorators.http import require_POST, require_GET from django.views.decorators.http import require_POST, require_GET
...@@ -45,6 +46,7 @@ from student.firebase_token_generator import create_token ...@@ -45,6 +46,7 @@ from student.firebase_token_generator import create_token
from verify_student.models import SoftwareSecurePhotoVerification, MidcourseReverificationWindow from verify_student.models import SoftwareSecurePhotoVerification, MidcourseReverificationWindow
from certificates.models import CertificateStatuses, certificate_status_for_student from certificates.models import CertificateStatuses, certificate_status_for_student
from dark_lang.models import DarkLangConfig
from xmodule.course_module import CourseDescriptor from xmodule.course_module import CourseDescriptor
from xmodule.modulestore.exceptions import ItemNotFoundError from xmodule.modulestore.exceptions import ItemNotFoundError
...@@ -468,6 +470,9 @@ def dashboard(request): ...@@ -468,6 +470,9 @@ def dashboard(request):
# we'll display the banner # we'll display the banner
denied_banner = any(item.display for item in reverifications["denied"]) denied_banner = any(item.display for item in reverifications["denied"])
language_options = DarkLangConfig.current().released_languages_list
current_language = translation.get_language_info(translation.get_language())
context = {'course_enrollment_pairs': course_enrollment_pairs, context = {'course_enrollment_pairs': course_enrollment_pairs,
'course_optouts': course_optouts, 'course_optouts': course_optouts,
'message': message, 'message': message,
...@@ -484,6 +489,8 @@ def dashboard(request): ...@@ -484,6 +489,8 @@ def dashboard(request):
'show_refund_option_for': show_refund_option_for, 'show_refund_option_for': show_refund_option_for,
'denied_banner': denied_banner, 'denied_banner': denied_banner,
'billing_email': settings.PAYMENT_SUPPORT_EMAIL, 'billing_email': settings.PAYMENT_SUPPORT_EMAIL,
'language_options': language_options,
'current_language': current_language,
} }
return render_to_response('dashboard.html', context) return render_to_response('dashboard.html', context)
......
# -*- coding: utf-8 -*-
""" """
Student dashboard page. Student dashboard page.
""" """
...@@ -59,3 +60,8 @@ class DashboardPage(PageObject): ...@@ -59,3 +60,8 @@ class DashboardPage(PageObject):
return "a.enter-course:nth-of-type({0})".format(link_index + 1) return "a.enter-course:nth-of-type({0})".format(link_index + 1)
else: else:
return None return None
def change_language(self):
self.css_click(".edit-language")
self.select_option("language", "eo")
self.css_click("#submit-lang")
# -*- coding: utf-8 -*-
""" """
E2E tests for the LMS. E2E tests for the LMS.
""" """
...@@ -17,6 +18,7 @@ from ..pages.lms.course_info import CourseInfoPage ...@@ -17,6 +18,7 @@ from ..pages.lms.course_info import CourseInfoPage
from ..pages.lms.tab_nav import TabNavPage from ..pages.lms.tab_nav import TabNavPage
from ..pages.lms.course_nav import CourseNavPage from ..pages.lms.course_nav import CourseNavPage
from ..pages.lms.progress import ProgressPage from ..pages.lms.progress import ProgressPage
from ..pages.lms.dashboard import DashboardPage
from ..pages.lms.video import VideoPage from ..pages.lms.video import VideoPage
from ..pages.xblock.acid import AcidView from ..pages.xblock.acid import AcidView
from ..fixtures.course import CourseFixture, XBlockFixtureDesc, CourseUpdateDesc from ..fixtures.course import CourseFixture, XBlockFixtureDesc, CourseUpdateDesc
...@@ -68,6 +70,30 @@ class RegistrationTest(UniqueCourseTest): ...@@ -68,6 +70,30 @@ class RegistrationTest(UniqueCourseTest):
self.assertIn(self.course_info['display_name'], course_names) self.assertIn(self.course_info['display_name'], course_names)
class LanguageTest(UniqueCourseTest):
"""
Tests that the change language functionality on the dashboard works
"""
def setUp(self):
"""
Initiailize dashboard page
"""
super(LanguageTest, self).setUp()
self.dashboard_page = DashboardPage(self.browser)
def test_change_lang(self):
AutoAuthPage(self.browser, course_id=self.course_id).visit()
self.dashboard_page.visit()
# Change language to Esperanto
self.dashboard_page.change_language()
self.fail()
self.dashboard_page.visit()
body = self.browser.body
matches = re.match(u'^FÏND ÇØÜRSÉS.+$', body)
self.assertTrue(matches is not None)
class HighLevelTabTest(UniqueCourseTest): class HighLevelTabTest(UniqueCourseTest):
""" """
Tests that verify each of the high-level tabs available within a course. Tests that verify each of the high-level tabs available within a course.
......
...@@ -501,8 +501,8 @@ LANGUAGE_CODE = 'en' # http://www.i18nguy.com/unicode/language-identifiers.html ...@@ -501,8 +501,8 @@ LANGUAGE_CODE = 'en' # http://www.i18nguy.com/unicode/language-identifiers.html
# Sourced from http://www.localeplanet.com/icu/ and wikipedia # Sourced from http://www.localeplanet.com/icu/ and wikipedia
LANGUAGES = ( LANGUAGES = (
('eo', u'Dummy Language (Esperanto)'), # Dummy language used for testing ('en', u'English'),
('fake2', u'Fake translations'), # Another dummy language for testing (not pushed to prod) ('eo', u'Dummy Language (Esperanto)'), # Dummy languaged used for testing
('ach', u'Acholi'), # Acoli ('ach', u'Acholi'), # Acoli
('ar', u'العربية'), # Arabic ('ar', u'العربية'), # Arabic
......
<%! from django.utils.translation import ugettext as _ %> <%! from django.utils.translation import ugettext as _ %>
<%! from django.template import RequestContext %>
<%! <%!
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
...@@ -82,6 +83,16 @@ ...@@ -82,6 +83,16 @@
}); });
}); });
$("#change_language_form").submit(function(event, xhr) {
$.post('/i18n/setlang/',
{"language": language,},
function(data) {
if (data.success){
location.reload();
}
})
});
$("#change_email_form").submit(function(){ $("#change_email_form").submit(function(){
var new_email = $('#new_email_field').val(); var new_email = $('#new_email_field').val();
var new_password = $('#new_email_password').val(); var new_password = $('#new_email_password').val();
......
...@@ -8,9 +8,9 @@ ...@@ -8,9 +8,9 @@
<li class="status status-verification is-accepted"> <li class="status status-verification is-accepted">
<span class="title status-title"> <span class="title status-title">
${_("Preferred Language")} ${_("Preferred Language")}
(<a href="#change_language" rel="leanModal" class="edit-email">${_("edit")}</a>) (<a href="#change_language" rel="leanModal" class="edit-language">${_("edit")}</a>)
</span> </span>
<span class="data">English (US)</span> <span class="data">${current_language['name_local']}</span>
</li> </li>
......
...@@ -14,98 +14,30 @@ ...@@ -14,98 +14,30 @@
<hr/> <hr/>
</header> </header>
<div id="change_language_body"> <div id="change_language_body">
<form action="" method="post" class="settings-language-form" id="settings-form"> <form action="/i18n/setlang/" method="post" class="settings-language-form" id="settings-form">
<input type="hidden" name="csrfmiddlewaretoken" value="${csrf_token}">
<ol class="list-input"> <ol class="list-input">
<li class="field text settings-language-select" id="settings-language-select"> <li class="field text settings-language-select" id="settings-language-select">
<label class="label sr" for="settings-language-value">${_("Please choose your preferred language")}</label> <label class="label sr" for="settings-language-value">${_("Please choose your preferred language")}</label>
<select class="input select" id="settings-language-value"> <select class="input select" id="settings-language-value" name="language">
<option value="af_ZA">Afrikaans</option> % for abbrv in language_options:
<option value="az_AZ">Azərbaycan dili</option> % for language in settings.LANGUAGES:
<option value="id_ID">Bahasa Indonesia</option> % if abbrv == language[0]:
<option value="ms_MY">Bahasa Melayu</option> % if abbrv == current_language['code']:
<option value="cx_PH">Bisaya</option> <option value="${language[0]}" selected="selected">${language[1]}</option>
<option value="bs_BA">Bosanski</option> % else:
<option value="ca_ES">Català</option> <option value="${language[0]}">${language[1]}</option>
<option value="cs_CZ">Čeština</option> % endif
<option value="cy_GB">Cymraeg</option> % endif
<option value="da_DK">Dansk</option> % endfor
<option value="de_DE">Deutsch</option> % endfor
<option value="et_EE">Eesti</option>
<option value="en_PI">English (Pirate)</option>
<option value="en_GB">English (UK)</option>
<option value="en_UD">English (Upside Down)</option>
<option value="en_US" selected="1">English (US)</option> <!-- Currently selected needs attr selected="1" -->
<option value="es_LA">Español</option>
<option value="es_ES">Español (España)</option>
<option value="eo_EO">Esperanto</option>
<option value="eu_ES">Euskara</option>
<option value="tl_PH">Filipino</option>
<option value="fo_FO">Føroyskt</option>
<option value="fr_CA">Français (Canada)</option>
<option value="fr_FR">Français (France)</option>
<option value="fy_NL">Frysk</option>
<option value="ga_IE">Gaeilge</option>
<option value="gl_ES">Galego</option>
<option value="gn_PY">Guarani</option>
<option value="hr_HR">Hrvatski</option>
<option value="is_IS">Íslenska</option>
<option value="it_IT">Italiano</option>
<option value="sw_KE">Kiswahili</option>
<option value="ku_TR">Kurdî</option>
<option value="lv_LV">Latviešu</option>
<option value="fb_LT">Leet Speak</option>
<option value="lt_LT">Lietuvių</option>
<option value="la_VA">lingua latina</option>
<option value="hu_HU">Magyar</option>
<option value="nl_NL">Nederlands</option>
<option value="nb_NO">Norsk (bokmål)</option>
<option value="nn_NO">Norsk (nynorsk)</option>
<option value="pl_PL">Polski</option>
<option value="pt_BR">Português (Brasil)</option>
<option value="pt_PT">Português (Portugal)</option>
<option value="ro_RO">Română</option>
<option value="sq_AL">Shqip</option>
<option value="sk_SK">Slovenčina</option>
<option value="sl_SI">Slovenščina</option>
<option value="fi_FI">Suomi</option>
<option value="sv_SE">Svenska</option>
<option value="vi_VN">Tiếng Việt</option>
<option value="tr_TR">Türkçe</option>
<option value="el_GR">Ελληνικά</option>
<option value="be_BY">Беларуская</option>
<option value="bg_BG">Български</option>
<option value="mk_MK">Македонски</option>
<option value="ru_RU">Русский</option>
<option value="sr_RS">Српски</option>
<option value="uk_UA">Українська</option>
<option value="ka_GE">ქართული</option>
<option value="hy_AM">Հայերեն</option>
<option value="he_IL">עברית</option>
<option value="ur_PK">اردو</option>
<option value="ar_AR">العربية</option>
<option value="ps_AF">پښتو</option>
<option value="fa_IR">فارسی</option>
<option value="ne_NP">नेपाली</option>
<option value="hi_IN">हिन्दी</option>
<option value="bn_IN">বাংলা</option>
<option value="pa_IN">ਪੰਜਾਬੀ</option>
<option value="ta_IN">தமிழ்</option>
<option value="te_IN">తెలుగు</option>
<option value="ml_IN">മലയാളം</option>
<option value="th_TH">ภาษาไทย</option>
<option value="km_KH">ភាសាខ្មែរ</option>
<option value="ko_KR">한국어</option>
<option value="zh_TW">中文(台灣)</option>
<option value="zh_CN">中文(简体)</option>
<option value="zh_HK">中文(香港)</option>
<option value="ja_JP">日本語</option>
</select> </select>
</li> </li>
</ol> </ol>
<ul class="list-actions"> <ul class="list-actions">
<li class="action-item"> <li class="action-item">
<button type="submit" class="action action-submit">Save Language</button> <button type="submit" class="action action-submit" id="#submit-lang">Save Language</button>
</li> </li>
<li class="action-item"> <li class="action-item">
<button type="reset" class="action action-cancel">Cancel</button> <button type="reset" class="action action-cancel">Cancel</button>
......
...@@ -62,6 +62,8 @@ urlpatterns = ('', # nopep8 ...@@ -62,6 +62,8 @@ urlpatterns = ('', # nopep8
url(r'^user_api/', include('user_api.urls')), url(r'^user_api/', include('user_api.urls')),
url(r'^', include('waffle.urls')), url(r'^', include('waffle.urls')),
url(r'^i18n/', include('django.conf.urls.i18n')),
) )
# if settings.FEATURES.get("MULTIPLE_ENROLLMENT_ROLES"): # if settings.FEATURES.get("MULTIPLE_ENROLLMENT_ROLES"):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment