Commit cb6b52f8 by Julia Hansbrough Committed by thedeadparrot

wiring for language selector

parent 895bb5e0
......@@ -19,6 +19,8 @@ class DarkLangConfig(ConfigurationModel):
def released_languages_list(self):
"""
``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
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
from django.shortcuts import redirect
from django_future.csrf import ensure_csrf_cookie
from django.utils.http import cookie_date, base36_to_int
from django.utils import translation
from django.utils.translation import ugettext as _
from django.views.decorators.http import require_POST, require_GET
......@@ -45,6 +46,7 @@ from student.firebase_token_generator import create_token
from verify_student.models import SoftwareSecurePhotoVerification, MidcourseReverificationWindow
from certificates.models import CertificateStatuses, certificate_status_for_student
from dark_lang.models import DarkLangConfig
from xmodule.course_module import CourseDescriptor
from xmodule.modulestore.exceptions import ItemNotFoundError
......@@ -468,6 +470,9 @@ def dashboard(request):
# we'll display the banner
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,
'course_optouts': course_optouts,
'message': message,
......@@ -484,6 +489,8 @@ def dashboard(request):
'show_refund_option_for': show_refund_option_for,
'denied_banner': denied_banner,
'billing_email': settings.PAYMENT_SUPPORT_EMAIL,
'language_options': language_options,
'current_language': current_language,
}
return render_to_response('dashboard.html', context)
......
# -*- coding: utf-8 -*-
"""
Student dashboard page.
"""
......@@ -59,3 +60,8 @@ class DashboardPage(PageObject):
return "a.enter-course:nth-of-type({0})".format(link_index + 1)
else:
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.
"""
......@@ -17,6 +18,7 @@ from ..pages.lms.course_info import CourseInfoPage
from ..pages.lms.tab_nav import TabNavPage
from ..pages.lms.course_nav import CourseNavPage
from ..pages.lms.progress import ProgressPage
from ..pages.lms.dashboard import DashboardPage
from ..pages.lms.video import VideoPage
from ..pages.xblock.acid import AcidView
from ..fixtures.course import CourseFixture, XBlockFixtureDesc, CourseUpdateDesc
......@@ -68,6 +70,30 @@ class RegistrationTest(UniqueCourseTest):
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):
"""
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
# Sourced from http://www.localeplanet.com/icu/ and wikipedia
LANGUAGES = (
('eo', u'Dummy Language (Esperanto)'), # Dummy language used for testing
('fake2', u'Fake translations'), # Another dummy language for testing (not pushed to prod)
('en', u'English'),
('eo', u'Dummy Language (Esperanto)'), # Dummy languaged used for testing
('ach', u'Acholi'), # Acoli
('ar', u'العربية'), # Arabic
......
<%! from django.utils.translation import ugettext as _ %>
<%! from django.template import RequestContext %>
<%!
from django.core.urlresolvers import reverse
......@@ -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(){
var new_email = $('#new_email_field').val();
var new_password = $('#new_email_password').val();
......
......@@ -8,9 +8,9 @@
<li class="status status-verification is-accepted">
<span class="title status-title">
${_("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 class="data">English (US)</span>
<span class="data">${current_language['name_local']}</span>
</li>
......
......@@ -14,98 +14,30 @@
<hr/>
</header>
<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">
<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>
<select class="input select" id="settings-language-value">
<option value="af_ZA">Afrikaans</option>
<option value="az_AZ">Azərbaycan dili</option>
<option value="id_ID">Bahasa Indonesia</option>
<option value="ms_MY">Bahasa Melayu</option>
<option value="cx_PH">Bisaya</option>
<option value="bs_BA">Bosanski</option>
<option value="ca_ES">Català</option>
<option value="cs_CZ">Čeština</option>
<option value="cy_GB">Cymraeg</option>
<option value="da_DK">Dansk</option>
<option value="de_DE">Deutsch</option>
<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 class="input select" id="settings-language-value" name="language">
% for abbrv in language_options:
% for language in settings.LANGUAGES:
% if abbrv == language[0]:
% if abbrv == current_language['code']:
<option value="${language[0]}" selected="selected">${language[1]}</option>
% else:
<option value="${language[0]}">${language[1]}</option>
% endif
% endif
% endfor
% endfor
</select>
</li>
</ol>
<ul class="list-actions">
<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 class="action-item">
<button type="reset" class="action action-cancel">Cancel</button>
......
......@@ -62,6 +62,8 @@ urlpatterns = ('', # nopep8
url(r'^user_api/', include('user_api.urls')),
url(r'^', include('waffle.urls')),
url(r'^i18n/', include('django.conf.urls.i18n')),
)
# 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