diff --git a/conf/locale/babel.cfg b/conf/locale/babel.cfg index 5b8333cf1e33b9fdd6300a3949cc08ecb23f432a..6631586ad40e3cbc6ba8cb4b7beaea7b37d64bce 100644 --- a/conf/locale/babel.cfg +++ b/conf/locale/babel.cfg @@ -17,3 +17,5 @@ input_encoding = utf-8 input_encoding = utf-8 [mako: common/templates/**.html] input_encoding = utf-8 +[mako: cms/templates/emails/**.txt] +input_encoding = utf-8 diff --git a/conf/locale/config b/conf/locale/config index 58f8da0513aa14fe7c033c306b6bff83e4218876..3a0b04adbbd053e5816854db2ddc0132e092d6d2 100644 --- a/conf/locale/config +++ b/conf/locale/config @@ -1,4 +1,4 @@ { - "locales" : ["en", "es"], + "locales" : ["en", "zh_CN"], "dummy-locale" : "fr" } diff --git a/lms/djangoapps/course_wiki/tests/tests.py b/lms/djangoapps/course_wiki/tests/tests.py index 663d6b53b2ac684e849fa084c2b3ead4069436d4..6bbd8011d6991d4bf83a738f97e441d1b5c22336 100644 --- a/lms/djangoapps/course_wiki/tests/tests.py +++ b/lms/djangoapps/course_wiki/tests/tests.py @@ -90,8 +90,8 @@ class WikiRedirectTestCase(LoginEnrollmentTestCase): """ Ensure that the response has the course navigator. """ - self.assertTrue("course info" in resp.content.lower()) - self.assertTrue("courseware" in resp.content.lower()) + self.assertContains(resp, "Course Info") + self.assertContains(resp, "courseware") def test_course_navigator(self): """" diff --git a/lms/djangoapps/courseware/tests/tests.py b/lms/djangoapps/courseware/tests/tests.py index fbe2c05adaa1bee2e896aa899ad180bba330db50..cd245d2610b5b4ce36368edf8b0f730e1007052a 100644 --- a/lms/djangoapps/courseware/tests/tests.py +++ b/lms/djangoapps/courseware/tests/tests.py @@ -120,9 +120,8 @@ class PageLoaderTestCase(LoginEnrollmentTestCase): self.assertEqual(response.redirect_chain[0][1], 302) if check_content: - unavailable_msg = "this module is temporarily unavailable" - self.assertEqual(response.content.find(unavailable_msg), -1) - self.assertFalse(isinstance(descriptor, ErrorDescriptor)) + self.assertNotContains(response, "this module is temporarily unavailable") + self.assertNotIsInstance(descriptor, ErrorDescriptor) @override_settings(MODULESTORE=TEST_DATA_XML_MODULESTORE) diff --git a/lms/envs/common.py b/lms/envs/common.py index 95b2af422e375654b5525c01473dc08bd2dfdb19..29e0de7d91de3e98582ad2cd39a314afebfa43ca 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -166,7 +166,7 @@ XQUEUE_WAITTIME_BETWEEN_REQUESTS = 5 # seconds ############################# SET PATH INFORMATION ############################# -PROJECT_ROOT = path(__file__).abspath().dirname().dirname() # /mitx/lms +PROJECT_ROOT = path(__file__).abspath().dirname().dirname() # /edx-platform/lms REPO_ROOT = PROJECT_ROOT.dirname() COMMON_ROOT = REPO_ROOT / "common" ENV_ROOT = REPO_ROOT.dirname() # virtualenv dir /mitx is in @@ -381,6 +381,8 @@ LANGUAGE_CODE = 'en' # http://www.i18nguy.com/unicode/language-identifiers.html USE_I18N = True USE_L10N = True +# Localization strings (e.g. django.po) are under this directory +LOCALE_PATHS = (REPO_ROOT + '/conf/locale',) # edx-platform/conf/locale/ # Messages MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage' @@ -486,6 +488,9 @@ MIDDLEWARE_CLASSES = ( 'course_wiki.course_nav.Middleware', + # Detects user-requested locale from 'accept-language' header in http request + 'django.middleware.locale.LocaleMiddleware', + 'django.middleware.transaction.TransactionMiddleware', # 'debug_toolbar.middleware.DebugToolbarMiddleware', diff --git a/lms/templates/admin_dashboard.html b/lms/templates/admin_dashboard.html index 6a903a3f94bffe8cd9baf4176dc00ec3f1623186..b9676faa16448258415d39d9fb85d24b2d2329b1 100644 --- a/lms/templates/admin_dashboard.html +++ b/lms/templates/admin_dashboard.html @@ -1,4 +1,5 @@ <%namespace name='static' file='static_content.html'/> +<%! from django.utils.translation import ugettext as _ %> <%inherit file="main.html" /> @@ -7,7 +8,7 @@ <section class="basic_stats"> <div class="edx_summary"> - <h2>edX-wide Summary</h2> + <h2>${_("edX-wide Summary")}</h2> <table style="margin-left:auto;margin-right:auto;width:50%"> % for key in results["scalars"]: <tr> diff --git a/lms/templates/annotatable.html b/lms/templates/annotatable.html index f01030574442769c1d45a8eb1dcf441728586bb6..20a85d0ca248c9caa6199bb6358bf10f9810ef25 100644 --- a/lms/templates/annotatable.html +++ b/lms/templates/annotatable.html @@ -1,3 +1,5 @@ +<%! from django.utils.translation import ugettext as _ %> + <div class="annotatable-wrapper"> <div class="annotatable-header"> % if display_name is not UNDEFINED and display_name is not None: @@ -8,8 +10,8 @@ % if instructions_html is not UNDEFINED and instructions_html is not None: <div class="annotatable-section shaded"> <div class="annotatable-section-title"> - Instructions - <a class="annotatable-toggle annotatable-toggle-instructions expanded" href="javascript:void(0)">Collapse Instructions</a> + ${_("Instructions")} + <a class="annotatable-toggle annotatable-toggle-instructions expanded" href="javascript:void(0)">${_("Collapse Instructions")}</a> </div> <div class="annotatable-section-body annotatable-instructions"> ${instructions_html} @@ -19,8 +21,8 @@ <div class="annotatable-section"> <div class="annotatable-section-title"> - Guided Discussion - <a class="annotatable-toggle annotatable-toggle-annotations" href="javascript:void(0)">Hide Annotations</a> + ${_("Guided Discussion")} + <a class="annotatable-toggle annotatable-toggle-annotations" href="javascript:void(0)">${_("Hide Annotations")}</a> </div> <div class="annotatable-section-body annotatable-content"> ${content_html} diff --git a/lms/templates/combinedopenended/combined_open_ended.html b/lms/templates/combinedopenended/combined_open_ended.html index 5d8ef859aa82ee8a1d5a605e67fb5b79f5520ca0..50f962d6914a74279d17d2f84f34a84bae413944 100644 --- a/lms/templates/combinedopenended/combined_open_ended.html +++ b/lms/templates/combinedopenended/combined_open_ended.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <section id="combined-open-ended" class="combined-open-ended" data-location="${location}" data-ajax-url="${ajax_url}" data-allow_reset="${allow_reset}" data-state="${state}" data-task-count="${task_count}" data-task-number="${task_number}" data-accept-file-upload = "${accept_file_upload}"> <div class="status-container"> ${status|n} @@ -12,8 +13,8 @@ % endfor </div> - <input type="button" value="Reset" class="reset-button" name="reset"/> - <input type="button" value="Next Step" class="next-step-button" name="reset"/> + <input type="button" value="${_("Reset")}" class="reset-button" name="reset"/> + <input type="button" value="${_("Next Step")}" class="next-step-button" name="reset"/> </div> <section class="legend-container"> diff --git a/lms/templates/combinedopenended/combined_open_ended_legend.html b/lms/templates/combinedopenended/combined_open_ended_legend.html index e3e249467004456e22fab41d4bece1760c8e6701..d5d482e1906fbda685195c2464a181d26a48615b 100644 --- a/lms/templates/combinedopenended/combined_open_ended_legend.html +++ b/lms/templates/combinedopenended/combined_open_ended_legend.html @@ -1,6 +1,7 @@ +<%! from django.utils.translation import ugettext as _ %> <section class="legend-container"> <div class="legenditem"> - Legend + ${_("Legend")} </div> % for i in xrange(0,len(legend_list)): <%legend_title=legend_list[i]['name'] %> diff --git a/lms/templates/combinedopenended/combined_open_ended_status.html b/lms/templates/combinedopenended/combined_open_ended_status.html index d13077737faac8845da8ec87e460136352be04ec..0369d6d9ff0c2a31f9997e4338249389534bc2ce 100644 --- a/lms/templates/combinedopenended/combined_open_ended_status.html +++ b/lms/templates/combinedopenended/combined_open_ended_status.html @@ -1,7 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> <div class="status-elements"> <section id="combined-open-ended-status" class="combined-open-ended-status"> <div class="statusitem"> - Status + ${_("Status")} </div> %for i in xrange(0,len(status_list)): <%status=status_list[i]%> diff --git a/lms/templates/combinedopenended/open_ended_result_table.html b/lms/templates/combinedopenended/open_ended_result_table.html index 24bf7a76fe30ace7b0c086748cfb2074b3944df9..bac684b91ccf301981d1658bb6bdb06a43818dc8 100644 --- a/lms/templates/combinedopenended/open_ended_result_table.html +++ b/lms/templates/combinedopenended/open_ended_result_table.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> % for co in context_list: % if co['grader_type'] in grader_type_image_dict: <%grader_type=co['grader_type']%> @@ -18,7 +19,7 @@ %if len(co['feedback'])>2: <div class="collapsible evaluation-response"> <header> - <a href="#">See full feedback</a> + <a href="#">${_("See full feedback")}</a> </header> <section class="feedback-full"> ${co['feedback']} @@ -32,22 +33,22 @@ <input type="hidden" value="${co['submission_id']}" class="submission_id" /> <div class="collapsible evaluation-response"> <header> - <a href="#">Respond to Feedback</a> + <a href="#">${_("Respond to Feedback")}</a> </header> <section id="evaluation" class="evaluation"> - <p>How accurate do you find this feedback?</p> + <p>${_("How accurate do you find this feedback?")}</p> <div class="evaluation-scoring"> <ul class="scoring-list"> - <li><input type="radio" name="evaluation-score" id="evaluation-score-5" value="5" /> <label for="evaluation-score-5"> Correct</label></li> - <li><input type="radio" name="evaluation-score" id="evaluation-score-4" value="4" /> <label for="evaluation-score-4"> Partially Correct</label></li> - <li><input type="radio" name="evaluation-score" id="evaluation-score-3" value="3" /> <label for="evaluation-score-3"> No Opinion</label></li> - <li><input type="radio" name="evaluation-score" id="evaluation-score-2" value="2" /> <label for="evaluation-score-2"> Partially Incorrect</label></li> - <li><input type="radio" name="evaluation-score" id="evaluation-score-1" value="1" /> <label for="evaluation-score-1"> Incorrect</label></li> + <li><input type="radio" name="evaluation-score" id="evaluation-score-5" value="5" /> <label for="evaluation-score-5"> ${_("Correct")}</label></li> + <li><input type="radio" name="evaluation-score" id="evaluation-score-4" value="4" /> <label for="evaluation-score-4"> ${_("Partially Correct")}</label></li> + <li><input type="radio" name="evaluation-score" id="evaluation-score-3" value="3" /> <label for="evaluation-score-3"> ${_("No Opinion")}</label></li> + <li><input type="radio" name="evaluation-score" id="evaluation-score-2" value="2" /> <label for="evaluation-score-2"> ${_("Partially Incorrect")}</label></li> + <li><input type="radio" name="evaluation-score" id="evaluation-score-1" value="1" /> <label for="evaluation-score-1"> ${_("Incorrect")}</label></li> </ul> </div> - <p>Additional comments:</p> + <p>${_("Additional comments:")}</p> <textarea rows="${rows}" cols="${cols}" name="feedback" class="feedback-on-feedback" id="feedback"></textarea> - <input type="button" value="Submit Feedback" class="submit-evaluation-button" name="reset"/> + <input type="button" value="${_("Submit Feedback")}" class="submit-evaluation-button" name="reset"/> </section> </div> </div> @@ -55,4 +56,4 @@ </section> <br/> %endif -%endfor \ No newline at end of file +%endfor diff --git a/lms/templates/combinedopenended/openended/open_ended.html b/lms/templates/combinedopenended/openended/open_ended.html index 909ef1583803da62bc4300f9eb1a6b0d923788e7..d4e622d4bdf11753c7857ab02f9591aae0e328e1 100644 --- a/lms/templates/combinedopenended/openended/open_ended.html +++ b/lms/templates/combinedopenended/openended/open_ended.html @@ -1,17 +1,18 @@ +<%! from django.utils.translation import ugettext as _ %> <section id="openended_${id}" class="open-ended-child" data-state="${state}" data-child-type="${child_type}"> <div class="error"></div> <div class="prompt"> ${prompt|n} </div> - <h4>Response</h4> + <h4>${_("Response")}</h4> <textarea rows="${rows}" cols="${cols}" name="answer" class="answer short-form-response" id="input_${id}">${previous_answer|h}</textarea> <div class="message-wrapper"></div> <div class="grader-status"> % if state == 'initial': - <span class="unanswered" style="display:inline-block;" id="status_${id}">Unanswered</span> + <span class="unanswered" style="display:inline-block;" id="status_${id}">${_(Unanswered)}</span> % elif state == 'assessing': - <span class="grading" id="status_${id}">Submitted for grading. + <span class="grading" id="status_${id}">${_("Submitted for grading.")} % if eta_message is not None: ${eta_message} % endif @@ -26,8 +27,8 @@ <div class="file-upload"></div> - <input type="button" value="Submit" class="submit-button" name="show"/> - <input name="skip" class="skip-button" type="button" value="Skip Post-Assessment"/> + <input type="button" value="${_("Submit")}" class="submit-button" name="show"/> + <input name="skip" class="skip-button" type="button" value="${_("Skip Post-Assessment")}"/> <div class="open-ended-action"></div> diff --git a/lms/templates/combinedopenended/openended/open_ended_error.html b/lms/templates/combinedopenended/openended/open_ended_error.html index 58a90f86ef6b29bb35c27ea87556669ae473597b..65b7381d60c9b902b53b316fd5abddb50985e876 100644 --- a/lms/templates/combinedopenended/openended/open_ended_error.html +++ b/lms/templates/combinedopenended/openended/open_ended_error.html @@ -1,7 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> <section> <div class="shortform"> <div class="result-errors"> - There was an error with your submission. Please contact course staff. + ${_("There was an error with your submission. Please contact course staff.")} </div> </div> <div class="longform"> @@ -9,4 +10,4 @@ ${errors} </div> </div> -</section> \ No newline at end of file +</section> diff --git a/lms/templates/combinedopenended/openended/open_ended_evaluation.html b/lms/templates/combinedopenended/openended/open_ended_evaluation.html index da3f38b6a96c310924c6022ab4cbfc03e624057d..ee55120d51b34deddbf9083fd5d6f35b487b2c8a 100644 --- a/lms/templates/combinedopenended/openended/open_ended_evaluation.html +++ b/lms/templates/combinedopenended/openended/open_ended_evaluation.html @@ -1,23 +1,24 @@ +<%! from django.utils.translation import ugettext as _ %> <div class="external-grader-message"> ${msg|n} <div class="collapsible evaluation-response"> <header> - <a href="#">Respond to Feedback</a> + <a href="#">${_("Respond to Feedback")}</a> </header> <section id="evaluation_${id}" class="evaluation"> - <p>How accurate do you find this feedback?</p> + <p>${_("How accurate do you find this feedback?")}</p> <div class="evaluation-scoring"> <ul class="scoring-list"> - <li><input type="radio" name="evaluation-score" id="evaluation-score-5" value="5" /> <label for="evaluation-score-5"> Correct</label></li> - <li><input type="radio" name="evaluation-score" id="evaluation-score-4" value="4" /> <label for="evaluation-score-4"> Partially Correct</label></li> - <li><input type="radio" name="evaluation-score" id="evaluation-score-3" value="3" /> <label for="evaluation-score-3"> No Opinion</label></li> - <li><input type="radio" name="evaluation-score" id="evaluation-score-2" value="2" /> <label for="evaluation-score-2"> Partially Incorrect</label></li> - <li><input type="radio" name="evaluation-score" id="evaluation-score-1" value="1" /> <label for="evaluation-score-1"> Incorrect</label></li> + <li><input type="radio" name="evaluation-score" id="evaluation-score-5" value="5" /> <label for="evaluation-score-5"> ${_("Correct")}</label></li> + <li><input type="radio" name="evaluation-score" id="evaluation-score-4" value="4" /> <label for="evaluation-score-4"> ${_("Partially Correct")}</label></li> + <li><input type="radio" name="evaluation-score" id="evaluation-score-3" value="3" /> <label for="evaluation-score-3"> ${_("No Opinion")}</label></li> + <li><input type="radio" name="evaluation-score" id="evaluation-score-2" value="2" /> <label for="evaluation-score-2"> ${_("Partially Incorrect")}</label></li> + <li><input type="radio" name="evaluation-score" id="evaluation-score-1" value="1" /> <label for="evaluation-score-1"> ${_("Incorrect")}</label></li> </ul> </div> - <p>Additional comments:</p> + <p>${_("Additional comments:")}</p> <textarea rows="${rows}" cols="${cols}" name="feedback_${id}" class="feedback-on-feedback" id="feedback_${id}"></textarea> - <input type="button" value="Submit Feedback" class="submit-evaluation-button" name="reset"/> + <input type="button" value="${_("Submit Feedback")}" class="submit-evaluation-button" name="reset"/> </section> </div> -</div> \ No newline at end of file +</div> diff --git a/lms/templates/combinedopenended/openended/open_ended_rubric.html b/lms/templates/combinedopenended/openended/open_ended_rubric.html index 144cd829d91a3238585d1a045aa845240205b983..f1d6abb8fa45cc8c14766f7684ac6d9bc0f08198 100644 --- a/lms/templates/combinedopenended/openended/open_ended_rubric.html +++ b/lms/templates/combinedopenended/openended/open_ended_rubric.html @@ -1,6 +1,7 @@ +<%! from django.utils.translation import ugettext as _ %> <form class="rubric-template" id="inputtype_${id}" xmlns="http://www.w3.org/1999/html"> - <h3>Rubric</h3> - <p>Select the criteria you feel best represents this submission in each category.</p> + <h3>${_("Rubric")}</h3> + <p>${_("Select the criteria you feel best represents this submission in each category.")}</p> <div class="rubric"> % for i in range(len(categories)): <% category = categories[i] %> diff --git a/lms/templates/combinedopenended/selfassessment/self_assessment_hint.html b/lms/templates/combinedopenended/selfassessment/self_assessment_hint.html index 8c6eacba1122f96c9819866288a1fb3300244a39..abdc25b77b124c3a70c1bb972e2ead0f79414099 100644 --- a/lms/templates/combinedopenended/selfassessment/self_assessment_hint.html +++ b/lms/templates/combinedopenended/selfassessment/self_assessment_hint.html @@ -1,6 +1,7 @@ +<%! from django.utils.translation import ugettext as _ %> <div class="hint"> <div class="hint-prompt"> - Please enter a hint below: + ${_("Please enter a hint below:")} </div> <textarea name="post_assessment" class="post_assessment" cols="70" rows="5" ${'readonly="true"' if read_only else ''}>${hint}</textarea> diff --git a/lms/templates/combinedopenended/selfassessment/self_assessment_prompt.html b/lms/templates/combinedopenended/selfassessment/self_assessment_prompt.html index 5347e2384422ee4084a91ed8acae2e6072ac59d9..3cc73fc65715a2e3e4f76ce50a57ba4b7fe9b898 100644 --- a/lms/templates/combinedopenended/selfassessment/self_assessment_prompt.html +++ b/lms/templates/combinedopenended/selfassessment/self_assessment_prompt.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <section id="self_assessment_${id}" class="open-ended-child" data-ajax-url="${ajax_url}" data-id="${id}" data-state="${state}" data-allow_reset="${allow_reset}" data-child-type="${child_type}"> <div class="error"></div> @@ -5,7 +6,7 @@ ${prompt} </div> - <h4>Response</h4> + <h4>${_("Response")}</h4> <div> <textarea name="answer" class="answer short-form-response" cols="70" rows="20">${previous_answer|n}</textarea> </div> @@ -19,5 +20,5 @@ <div class="message-wrapper"></div> <div class="file-upload"></div> - <input type="button" value="Submit" class="submit-button" name="show"/> + <input type="button" value="${_("Submit")}" class="submit-button" name="show"/> </section> diff --git a/lms/templates/contact.html b/lms/templates/contact.html index a8f5e6b732edf662bcd8bdbc09a1e70760eac54c..ba6f8cc720db2d3e22321f7a95bc9aea24ba15ca 100644 --- a/lms/templates/contact.html +++ b/lms/templates/contact.html @@ -1,13 +1,15 @@ +<%! from django.utils.translation import ugettext as _ %> + <%namespace name='static' file='static_content.html'/> <%inherit file="main.html" /> <section class="container about"> <nav> - <a href="/t/about.html">Vision</a> - <a href="/t/faq.html">Faq</a> - <a href="/t/press.html">Press</a> - <a href="/t/contact.html" class="active">Contact</a> + <a href="/t/about.html">${_("Vision")}</a> + <a href="/t/faq.html">${_("Faq")}</a> + <a href="/t/press.html">${_("Press")}</a> + <a href="/t/contact.html" class="active">${_("Contact")}</a> </nav> <section class="contact"> @@ -15,21 +17,33 @@ <img src="${static.url('images/contact-page.jpg')}"> </div> <div class="contacts"> - <h2>Class Feedback</h2> - <p>We are always seeking feedback to improve our courses. If you are an enrolled student and have any questions, feedback, suggestions, or any other issues specific to a particular class, please post on the discussion forums of that class.</p> - - <h2>General Inquiries and Feedback</h2> - <p>"If you have a general question about edX please email <a href="mailto:info@edx.org">info@edx.org</a>. To see if your question has already been answered, visit our <a href="${reverse('faq_edx')}">FAQ page</a>. You can also join the discussion on our <a href="http://www.facebook.com/EdxOnline">facebook page</a>. Though we may not have a chance to respond to every email, we take all feedback into consideration.</p> - - <h2>Technical Inquiries and Feedback</h2> - <p>If you have suggestions/feedback about the overall edX platform, or are facing general technical issues with the platform (e.g., issues with email addresses and passwords), you can reach us at <a href="mailto:technical@edx.org">technical@edx.org</a>. For technical questions, please make sure you are using a current version of Firefox or Chrome, and include browser and version in your e-mail, as well as screenshots or other pertinent details. If you find a bug or other issues, you can reach us at the following: <a href="mailto:bugs@edx.org">bugs@edx.org</a>.</p> - - <h2>Media</h2> - <p>Please visit our <a href="${reverse('faq_edx')}">media/press page</a> for more information. 
For any media or press inquiries, please email <a href="mailto:press@edx.org">press@edx.org</a>.</p> - - <h2>Universities</h2> - <p>If you are a university wishing to Collaborate or with questions about edX, please email <a href="mailto:university@edx.org">university@edx.org</a>.</p> - + <h2>${_("Class Feedback")}</h2> + <p>${_("We are always seeking feedback to improve our courses. If you are an enrolled student and have any questions, feedback, suggestions, or any other issues specific to a particular class, please post on the discussion forums of that class.")}</p> + + <h2>${_("General Inquiries and Feedback")}</h2> + <p>${_('If you have a general question about edX please email {email}. To see if your question has already been answered, visit our {faq_link_start}FAQ page{faq_link_end}. You can also join the discussion on our {fb_link_start}facebook page{fb_link_end}. Though we may not have a chance to respond to every email, we take all feedback into consideration.').format( + email='<a href="mailto:info@edx.org">info@edx.org</a>', + faq_link_start='<a href="{url}">'.format(url=reverse('faq_edx')), + faq_link_end='</a>', + fb_link_start='<a href="http://www.facebook.com/EdxOnline">'. + fb_link_end='</a>' + )}</p> + + <h2>${_("Technical Inquiries and Feedback")}</h2> + <p>${_('If you have suggestions/feedback about the overall edX platform, or are facing general technical issues with the platform (e.g., issues with email addresses and passwords), you can reach us at {tech_email}. For technical questions, please make sure you are using a current version of Firefox or Chrome, and include browser and version in your e-mail, as well as screenshots or other pertinent details. If you find a bug or other issues, you can reach us at the following: {bug_email}.').format( + tech_email='<a href="mailto:technical@edx.org">technical@edx.org</a>', + bug_email='<a href="mailto:bugs@edx.org">bugs@edx.org</a>' + )}</p> + + <h2>${_("Media")}</h2> + <p>${_('Please visit our {link_start}media/press page{link_end} for more information. For any media or press inquiries, please email {email}.').format( + link_start='<a href="{url}">'.format(url=reverse('faq_edx')), + link_end='</a>', + email='<a href="mailto:press@edx.org">press@edx.org</a>', + )}</p> + + <h2>${_("Universities")}</h2> + <p>${_('If you are a university wishing to Collaborate or with questions about edX, please email {email}.'.format(email='<a href="mailto:university@edx.org">university@edx.org</a>')}</p> </div> </section> </section> diff --git a/lms/templates/course.html b/lms/templates/course.html index e3dd9baf4383292c291a620545e7fd4eb480ec58..4b2133e1afe6013192a916d3c3b99c6d74ce0db4 100644 --- a/lms/templates/course.html +++ b/lms/templates/course.html @@ -1,13 +1,14 @@ <%namespace name='static' file='static_content.html'/> <%namespace file='main.html' import="stanford_theme_enabled"/> <%! - from django.core.urlresolvers import reverse - from courseware.courses import course_image_url, get_course_about_section +from django.utils.translation import ugettext as _ +from django.core.urlresolvers import reverse +from courseware.courses import course_image_url, get_course_about_section %> <%page args="course" /> <article id="${course.id}" class="course"> %if course.is_newish: - <span class="status">New</span> + <span class="status">${_("New")}</span> %endif <a href="${reverse('about_course', args=[course.id])}"> <div class="inner-wrapper"> diff --git a/lms/templates/course_filter.html b/lms/templates/course_filter.html index 9e7c0a16f430cd98c68932251236f38799f16c50..8e2268cad1e444ec2801fafbb6ae7c9d95693268 100644 --- a/lms/templates/course_filter.html +++ b/lms/templates/course_filter.html @@ -1,8 +1,10 @@ +<%! from django.utils.translation import ugettext as _ %> + <section class="filter"> <nav> <div class="dropdown university"> <div class="filter-heading"> - All Universities + ${_("All Universities")} </div> <ul> <li> @@ -16,34 +18,34 @@ <div class="dropdown subject"> <div class="filter-heading"> - All Subjects + ${_("All Subjects")} </div> <ul> <li> - <a href="#">Computer Science</a> + <a href="#">${_("Computer Science")}</a> </li> <li> - <a href="#">History</a> + <a href="#">${_("History")}</a> </li> </ul> </div> <div class="dropdown featured"> <div class="filter-heading"> - Newest + ${_("Newest")} </div> <ul> <li> - <a href="#">Top Rated</a> + <a href="#">${_("Top Rated")}</a> </li> <li> - <a href="#">Starting soonest</a> + <a href="#">${_("Starting soonest")}</a> </li> </ul> </div> <form class="search"> - <input type="text" placeholder="Search for courses"> + <input type="text" placeholder="${_('Search for courses')}"> <input type="submit"> </form> </nav> diff --git a/lms/templates/course_groups/cohort_management.html b/lms/templates/course_groups/cohort_management.html index 239863beeb41de4eb31ee0710f774d1a4ed34892..4c9ca9e5a2c7c87ceca43b352220d79c5a58ed57 100644 --- a/lms/templates/course_groups/cohort_management.html +++ b/lms/templates/course_groups/cohort_management.html @@ -1,21 +1,22 @@ +<%! from django.utils.translation import ugettext as _ %> <section class="cohort_manager" data-ajax_url="${cohorts_ajax_url}"> -<h3>Cohort groups</h3> +<h3>${_("Cohort groups")}</h3> <div class="controls" style="padding-top:15px"> - <a href="#" class="button show_cohorts">Show cohorts</a> + <a href="#" class="button show_cohorts">${_("Show cohorts")}</a> </div> <ul class="errors"> </ul> <div class="summary" style="display:none"> - <h3>Cohorts in the course</h3> + <h3>${_("Cohorts in the course")}</h3> <ul class="cohorts"> </ul> <p> <input class="cohort_name"/> - <a href="#" class="button add_cohort">Add cohort</a> + <a href="#" class="button add_cohort">${_("Add cohort")}</a> </p> </div> @@ -27,10 +28,10 @@ <span class="page_num"></span> <p> - Add users by username or email. One per line or comma-separated. + ${_("Add users by username or email. One per line or comma-separated.")} </p> <textarea cols="50" row="30" class="users_area" style="height: 200px"></textarea> - <a href="#" class="button add_members">Add cohort members</a> + <a href="#" class="button add_members">${_("Add cohort members")}</a> <ul class="op_results"> </ul> diff --git a/lms/templates/course_groups/debug.html b/lms/templates/course_groups/debug.html index d8bbc324de649bfeec75770f0e2475c683ee48b2..7554557f81d314dd5402aff12143ffedfb6f31bd 100644 --- a/lms/templates/course_groups/debug.html +++ b/lms/templates/course_groups/debug.html @@ -1,6 +1,8 @@ <!DOCTYPE html> +<%! from django.utils.translation import ugettext as _ %> <html> <head> + ## "edX" should not be translated <%block name="title"><title>edX</title></%block> <script type="text/javascript" src="/static/js/vendor/jquery.min.js"></script> diff --git a/lms/templates/courseware/accordion.html b/lms/templates/courseware/accordion.html index 5b9c6f74505e7e67751ab3c69af0e638b7cb44bf..4761408232afeebc0cd58f9a3fdc46a9beccb4e4 100644 --- a/lms/templates/courseware/accordion.html +++ b/lms/templates/courseware/accordion.html @@ -1,9 +1,20 @@ -<%! from django.core.urlresolvers import reverse %> -<%! from xmodule.util.date_utils import get_default_time_display %> +<%! + from django.core.urlresolvers import reverse + from xmodule.util.date_utils import get_default_time_display + from django.utils.translation import ugettext as _ +%> <%def name="make_chapter(chapter)"> <div class="chapter"> - <h3 ${' class="active"' if 'active' in chapter and chapter['active'] else ''} aria-label="${chapter['display_name']}${', current chapter' if 'active' in chapter and chapter['active'] else ''}"> + <% + if chapter.get('active'): + aria_label = _('{chapter}, current chapter').format(chapter=chapter['display_name']) + active_class = ' class="active"' + else: + aria_label = chapter['display_name'] + active_class = '' + %> + <h3 ${active_class} aria-label="${aria_label}"> <a href="#"> ${chapter['display_name']} </a> diff --git a/lms/templates/courseware/course_about.html b/lms/templates/courseware/course_about.html index 15317de2075e94c215c9ef67387446630bf63d52..0f17af5feec19857f9bb53939313eecd96d86bb7 100644 --- a/lms/templates/courseware/course_about.html +++ b/lms/templates/courseware/course_about.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from django.core.urlresolvers import reverse from courseware.courses import course_image_url, get_course_about_section @@ -41,9 +42,9 @@ ).css("display", "block"); } }); - + %else: - + $('#class_enroll_form').on('ajax:complete', function(event, xhr) { if(xhr.status == 200) { location.href = "${reverse('dashboard')}"; @@ -51,21 +52,21 @@ location.href = "${reverse('register_user')}?course_id=${course.id}&enrollment_action=enroll"; } else { $('#register_error').html( - (xhr.responseText ? xhr.responseText : 'An error occurred. Please try again later.') + (xhr.responseText ? xhr.responseText : ${_('An error occurred. Please try again later.')}) ).css("display", "block"); } }); %endif - - + + })(this) </script> <script src="${static.url('js/course_info.js')}"></script> </%block> -<%block name="title"><title>About ${course.number}</title></%block> +<%block name="title"><title>${_("About {course_number}").format(course_number=course.number)}</title></%block> <section class="course-info"> <header class="course-profile"> @@ -86,13 +87,13 @@ %if show_courseware_link: <a href="${course_target}"> %endif - <span class="register disabled">You are registered for this course (${course.number})</span> + <span class="register disabled">${_("You are registered for this course {course_number}").format(course_number=course.number)}</span> %if show_courseware_link: - <strong>View Courseware</strong> + <strong>${_("View Courseware")}</strong> </a> %endif %else: - <a href="#" class="register">Register for ${course.number}</a> + <a href="#" class="register">${_("Register for {course_number}").format(course_number=course.number)}</a> <div id="register_error"></div> %endif </div> @@ -115,16 +116,16 @@ </div> </div> </header> - + <section class="container"> <section class="details"> <nav> - <a href="#" class="active">Overview</a> - ## <a href="#">FAQ</a> - ## <a href="#">Requirements</a> - ## <a href="#">Text-book</a> - ## <a href="#">Syllabus</a> - ## <a href="#">Reviews</a> + <a href="#" class="active">${_("Overview")}</a> + ## <a href="#">${_("FAQ")}</a> + ## <a href="#">${_("Requirements")}</a> + ## <a href="#">${_("Text-book")}</a> + ## <a href="#">${_("Syllabus")}</a> + ## <a href="#">${_("Reviews")}</a> </nav> <div class="inner-wrapper"> @@ -136,7 +137,7 @@ <section class="course-summary"> <header> <div class="social-sharing"> - <div class="sharing-message">Share with friends and family!</div> + <div class="sharing-message">${_("Share with friends and family!")}</div> ## TODO: this should probably be an overrideable block, ## or something allowing themes to do whatever they ## want here (and on this whole page, really). @@ -161,15 +162,15 @@ </header> <ol class="important-dates"> - <li><div class="icon course-number"></div><p>Course Number</p><span class="course-number">${course.number}</span></li> - <li><div class="icon start"></div><p>Classes Start</p><span class="start-date">${course.start_date_text}</span></li> + <li><div class="icon course-number"></div><p>${_("Course Number")}</p><span class="course-number">${course.number}</span></li> + <li><div class="icon start"></div><p>${_("Classes Start")}</p><span class="start-date">${course.start_date_text}</span></li> ## We plan to ditch end_date (which is not stored in course metadata), ## but for backwards compatibility, show about/end_date blob if it exists. % if get_course_about_section(course, "end_date") or course.end: <li> <div class="icon end"></div> - <p>Classes End</p><span class="final-date"> + <p>${_("Classes End")}</p><span class="final-date"> % if get_course_about_section(course, "end_date"): ${get_course_about_section(course, "end_date")} % else: @@ -180,13 +181,13 @@ % endif % if get_course_about_section(course, "effort"): - <li><div class="icon effort"></div><p>Estimated Effort</p><span class="start-date">${get_course_about_section(course, "effort")}</span></li> + <li><div class="icon effort"></div><p>${_("Estimated Effort")}</p><span class="start-date">${get_course_about_section(course, "effort")}</span></li> % endif - ##<li><div class="icon length"></div><p>Course Length</p><span class="course-length">15 weeks</span></li> + ##<li><div class="icon length"></div><p>${_('Course Length')}</p><span class="course-length">${_('{number} weeks').format(number=15)}</span></li> % if get_course_about_section(course, "prerequisites"): - <li class="prerequisites"><div class="icon prereq"></div><p>Prerequisites</p><span class="start-date">${get_course_about_section(course, "prerequisites")}</span></li> + <li class="prerequisites"><div class="icon prereq"></div><p>${_("Prerequisites")}</p><span class="start-date">${get_course_about_section(course, "prerequisites")}</span></li> % endif </ol> </section> @@ -196,10 +197,11 @@ % if get_course_about_section(course, "ocw_links"): <section class="additional-resources"> <header> - <h1>Additional Resources</h1> + <h1>${_("Additional Resources")}</h1> </header> <section> + ## "MITOpenCourseware" should *not* be translated <h2 class="opencourseware">MITOpenCourseware</h2> ${get_course_about_section(course, "ocw_links")} </section> @@ -215,10 +217,10 @@ <form id="class_enroll_form" method="post" data-remote="true" action="${reverse('change_enrollment')}"> <fieldset class="enroll_fieldset"> <input name="course_id" type="hidden" value="${course.id}"> - <input name="enrollment_action" type="hidden" value="enroll"> + <input name="enrollment_action" type="hidden" value="${_("enroll")}"> </fieldset> <div class="submit"> - <input name="submit" type="submit" value="enroll"> + <input name="submit" type="submit" value="${_("enroll")}"> </div> </form> </div> diff --git a/lms/templates/courseware/course_navigation.html b/lms/templates/courseware/course_navigation.html index 98329b9836d4304897efc8e4fd1703cb03025448..799b10b36b17aef13e153c5d8a9742a5078fbd83 100644 --- a/lms/templates/courseware/course_navigation.html +++ b/lms/templates/courseware/course_navigation.html @@ -12,6 +12,7 @@ def url_class(is_active): return "" %> <%! from courseware.tabs import get_course_tabs %> +<%! from django.utils.translation import ugettext as _ %> <nav class="${active_page} course-material"> <div class="inner-wrapper"> @@ -32,7 +33,7 @@ def url_class(is_active): <%block name="extratabs" /> % if masquerade is not UNDEFINED: % if staff_access and masquerade is not None: - <li style="float:right"><a href="#" id="staffstatus">Staff view</a></li> + <li style="float:right"><a href="#" id="staffstatus">${_("Staff view")}</a></li> % endif % endif </ol> diff --git a/lms/templates/courseware/courses.html b/lms/templates/courseware/courses.html index f731f0d98962c79a2f867d4a199d79aaa09f55e4..53dfaf6bd4ba3b05bfc28510d5db7e6a4d5952cc 100644 --- a/lms/templates/courseware/courses.html +++ b/lms/templates/courseware/courses.html @@ -1,8 +1,9 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="../main.html" /> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>Courses</title></%block> +<%block name="title"><title>${_("Courses")}</title></%block> <section class="find-courses"> <header class="search"> @@ -16,9 +17,9 @@ % endif </div> % if self.stanford_theme_enabled(): - <h2>Explore free courses from Stanford University.</h2> + <h2>${_("Explore free courses from Stanford University.")}</h2> % else: - <h2>Explore free courses from leading universities.</h2> + <h2>${_("Explore free courses from leading universities.")}</h2> % endif </hgroup> </div> diff --git a/lms/templates/courseware/courseware-error.html b/lms/templates/courseware/courseware-error.html index e289e1c99d47a29b64538229448bf8cc733f83b6..3c61afd5d932b31f862c414e3935e21d63f8dfa1 100644 --- a/lms/templates/courseware/courseware-error.html +++ b/lms/templates/courseware/courseware-error.html @@ -1,7 +1,9 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="/main.html" /> <%namespace name='static' file='../static_content.html'/> <%block name="bodyclass">courseware</%block> -<%block name="title"><title>Courseware – edX</title></%block> +## "edX" should *not* be translated +<%block name="title"><title>${_("Courseware")} - edX</title></%block> <%block name="headextra"> <%static:css group='course'/> @@ -11,7 +13,7 @@ <section class="container"> <section class="outside-app"> - <h1>There has been an error on the <span class="edx">edX</span> servers</h1> - <p>We're sorry, this module is temporarily unavailable. Our staff is working to fix it as soon as possible. Please email us at <a href="mailto:technical@edx.org">technical@edx.org</a> to report any problems or downtime.</p> + <h1>${_('There has been an error on the {span_start}edX{span_end} servers').format(span_start='<span class="edx">', span_end='</span>')}</h1> + <p>${_("We're sorry, this module is temporarily unavailable. Our staff is working to fix it as soon as possible. Please email us at {email} to report any problems or downtime.").format(email='<a href="mailto:technical@edx.org">technical@edx.org</a>')}</p> </section> </section> diff --git a/lms/templates/courseware/courseware.html b/lms/templates/courseware/courseware.html index e009e535e3a82c7bc7a88bf8bc31948850b35d33..8d033434f09671b1e183117bbe2f5d71b4d6b9ea 100644 --- a/lms/templates/courseware/courseware.html +++ b/lms/templates/courseware/courseware.html @@ -1,7 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="/main.html" /> <%namespace name='static' file='/static_content.html'/> <%block name="bodyclass">courseware ${course.css_class}</%block> -<%block name="title"><title>${course.number} Courseware</title></%block> +<%block name="title"><title>${_("{course_number} Courseware").format(course_number=course.number)}</title></%block> <%block name="headextra"> <%static:css group='course'/> @@ -155,7 +156,7 @@ <div class="timer-main"> <div id="timer_wrapper"> % if timer_navigation_return_url: - <a href="${timer_navigation_return_url}" class="timer_return_url">Return to Exam</a> + <a href="${timer_navigation_return_url}" class="timer_return_url">${_("Return to Exam")}</a> % endif <div class="timer_label">Time Remaining:</div> <div id="exam_timer" class="timer_value"> </div> </div> @@ -170,9 +171,9 @@ <div class="course-wrapper"> % if accordion: - <section aria-label="Course Navigation" class="course-index"> + <section aria-label="${_('Course Navigation')}" class="course-index"> <header id="open_close_accordion"> - <a href="#">close</a> + <a href="#">${_("close")}</a> </header> <div id="accordion" style="display: none"> @@ -204,7 +205,7 @@ % if course.show_calculator: <div class="calc-main"> - <a aria-label="Open Calculator" href="#" class="calc">Calculator</a> + <a aria-label="${_('Open Calculator')}" href="#" class="calc">${_("Calculator")}</a> <div id="calculator_wrapper"> <form id="calculator"> @@ -212,15 +213,15 @@ <input type="text" id="calculator_input" title="Calculator Input Field" /> <div class="help-wrapper"> - <a href="#">Hints</a> + <a href="#">${_("Hints")}</a> <dl class="help"> - <dt>Suffixes:</dt> + <dt>${_("Suffixes:")}</dt> <dd> %kMGTcmunp</dd> - <dt>Operations:</dt> + <dt>${_("Operations:")}</dt> <dd>^ * / + - ()</dd> - <dt>Functions:</dt> + <dt>${_("Functions:")}</dt> <dd>sin, cos, tan, sqrt, log10, log2, ln, arccos, arcsin, arctan, abs </dd> - <dt>Constants</dt> + <dt>${_("Constants")}</dt> <dd>e, pi</dd> <!-- Students won't know what parallel means at this time. Complex numbers aren't well tested in the courseware, so we would prefer to not expose them. If you read the comments in the source, feel free to use them. If you run into a bug, please let us know. But we can't officially support them right now. diff --git a/lms/templates/courseware/grade_summary.html b/lms/templates/courseware/grade_summary.html index e5f91d9ddff8723c2733c088155c64ea061eddff..9d17ba7b2a43dffa500d5ec89c9c4f2835d73858 100644 --- a/lms/templates/courseware/grade_summary.html +++ b/lms/templates/courseware/grade_summary.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="/main.html" /> <%! from django.core.urlresolvers import reverse %> <%namespace name='static' file='/static_content.html'/> @@ -7,9 +8,9 @@ <section class="container"> <div class="gradebook-summary-wrapper"> <section class="gradebook-summary-content"> - <h1>Grade summary</h1> + <h1>${_("Grade summary")}</h1> - <p>Not implemented yet</p> + <p>${_("Not implemented yet")}</p> </section> </div> diff --git a/lms/templates/courseware/gradebook.html b/lms/templates/courseware/gradebook.html index 015004ee1cdf4501cd6804fa7622a0972a054617..2c9f3e8474741c351ab2fe40a44afb2a10f684ce 100644 --- a/lms/templates/courseware/gradebook.html +++ b/lms/templates/courseware/gradebook.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="/main.html" /> <%! from django.core.urlresolvers import reverse %> <%namespace name='static' file='/static_content.html'/> @@ -36,7 +37,7 @@ <section class="container"> <div class="gradebook-wrapper"> <section class="gradebook-content"> - <h1>Gradebook</h1> + <h1>${_("Gradebook")}</h1> <table class="student-table"> <thead> diff --git a/lms/templates/courseware/info.html b/lms/templates/courseware/info.html index 836e4934a9a7f0e1e21002bb06d3bb08fc3c2bec..62eae827c72f0ff73bb3fa8a0f4f9b7424316e67 100644 --- a/lms/templates/courseware/info.html +++ b/lms/templates/courseware/info.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="/main.html" /> <%block name="bodyclass">${course.css_class}</%block> <%namespace name='static' file='/static_content.html'/> @@ -6,10 +7,10 @@ <%static:css group='course'/> </%block> -<%block name="title"><title>${course.number} Course Info</title></%block> +<%block name="title"><title>${course.number} ${_("Course Info")}</title></%block> <%include file="/courseware/course_navigation.html" args="active_page='info'" /> -<%! +<%! from courseware.courses import get_course_info_section %> @@ -26,7 +27,7 @@ $(document).ready(function(){ <div class="info-wrapper"> % if user.is_authenticated(): <section class="updates"> - <h1>Course Updates & News</h1> + <h1>${_("Course Updates & News")}</h1> ${get_course_info_section(request, course, 'updates')} </section> <section aria-label="Handout Navigation" class="handouts"> @@ -35,11 +36,11 @@ $(document).ready(function(){ </section> % else: <section class="updates"> - <h1>Course Updates & News</h1> + <h1>${_("Course Updates & News")}</h1> ${get_course_info_section(request, course, 'guest_updates')} </section> - <section aria-label="Handout Navigation" class="handouts"> - <h1>Course Handouts</h1> + <section aria-label="${_('Handout Navigation')}" class="handouts"> + <h1>${_("Course Handouts")}</h1> ${get_course_info_section(request, course, 'guest_handouts')} </section> % endif diff --git a/lms/templates/courseware/instructor_dashboard.html b/lms/templates/courseware/instructor_dashboard.html index cfccae2ce00ba4235747b98119861cc1b9b8a972..e09e4e335096034cec6469222a963c3c17daf67c 100644 --- a/lms/templates/courseware/instructor_dashboard.html +++ b/lms/templates/courseware/instructor_dashboard.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="/main.html" /> <%! from django.core.urlresolvers import reverse %> <%namespace name='static' file='/static_content.html'/> @@ -102,19 +103,19 @@ function goto( mode) <div class="instructor-dashboard-wrapper"> <section class="instructor-dashboard-content"> - <h1>Instructor Dashboard</h1> + <h1>${_("Instructor Dashboard")}</h1> <h2 class="navbar">[ <a href="#" onclick="goto('Grades');" class="${modeflag.get('Grades')}">Grades</a> | %if settings.MITX_FEATURES.get('ENABLE_PSYCHOMETRICS'): - <a href="#" onclick="goto('Psychometrics');" class="${modeflag.get('Psychometrics')}">Psychometrics</a> | + <a href="#" onclick="goto('Psychometrics');" class="${modeflag.get('Psychometrics')}">${_("Psychometrics")}</a> | %endif - <a href="#" onclick="goto('Admin');" class="${modeflag.get('Admin')}">Admin</a> | - <a href="#" onclick="goto('Forum Admin');" class="${modeflag.get('Forum Admin')}">Forum Admin</a> | - <a href="#" onclick="goto('Enrollment');" class="${modeflag.get('Enrollment')}">Enrollment</a> | - <a href="#" onclick="goto('Data');" class="${modeflag.get('Data')}">DataDump</a> | - <a href="#" onclick="goto('Manage Groups');" class="${modeflag.get('Manage Groups')}">Manage Groups</a> + <a href="#" onclick="goto('Admin');" class="${modeflag.get('Admin')}">${_("Admin")}</a> | + <a href="#" onclick="goto('Forum Admin');" class="${modeflag.get('Forum Admin')}">${_("Forum Admin")}</a> | + <a href="#" onclick="goto('Enrollment');" class="${modeflag.get('Enrollment')}">${_("Enrollment")}</a> | + <a href="#" onclick="goto('Data');" class="${modeflag.get('Data')}">${_("DataDump")}</a> | + <a href="#" onclick="goto('Manage Groups');" class="${modeflag.get('Manage Groups')}">${_("Manage Groups")}</a> %if settings.MITX_FEATURES.get('ENABLE_INSTRUCTOR_ANALYTICS'): - | <a href="#" onclick="goto('Analytics');" class="${modeflag.get('Analytics')}">Analytics</a> + | <a href="#" onclick="goto('Analytics');" class="${modeflag.get('Analytics')}">${_("Analytics")}</a> %endif ] </h2> @@ -131,34 +132,34 @@ function goto( mode) %if offline_grade_log: <p><font color='orange'>Pre-computed grades ${offline_grade_log} available: Use? - <input type='checkbox' name='use_offline_grades' value='yes'></font> </p> + <input type='checkbox' name='use_offline_grades' value='${_("yes")}'></font> </p> %endif <p> - <a href="${reverse('gradebook', kwargs=dict(course_id=course.id))}">Gradebook</a> + <a href="${reverse('gradebook', kwargs=dict(course_id=course.id))}">${_("Gradebook")}</a> </p> <p> - <a href="${reverse('grade_summary', kwargs=dict(course_id=course.id))}">Grade summary</a> + <a href="${reverse('grade_summary', kwargs=dict(course_id=course.id))}">${_("Grade summary")}</a> </p> <p> - <input type="submit" name="action" value="Dump list of enrolled students"> + <input type="submit" name="action" value="${_("Dump list of enrolled students")}"> </p> <p> - <input type="submit" name="action" value="Dump Grades for all students in this course"> - <input type="submit" name="action" value="Download CSV of all student grades for this course"> + <input type="submit" name="action" value="${_("Dump Grades for all students in this course")}"> + <input type="submit" name="action" value="${_("Download CSV of all student grades for this course")}"> </p> <p> - <input type="submit" name="action" value="Dump all RAW grades for all students in this course"> - <input type="submit" name="action" value="Download CSV of all RAW grades"> + <input type="submit" name="action" value="${_("Dump all RAW grades for all students in this course")}"> + <input type="submit" name="action" value="${_("Download CSV of all RAW grades")}"> </p> <p> - <input type="submit" name="action" value="Download CSV of answer distributions"> - <input type="submit" name="action" value="Dump description of graded assignments configuration"> + <input type="submit" name="action" value="${_("Download CSV of answer distributions")}"> + <input type="submit" name="action" value="${_("Dump description of graded assignments configuration")}"> </p> <hr width="40%" style="align:left"> @@ -168,104 +169,102 @@ function goto( mode) rg = course.remote_gradebook %> - <h3>Export grades to remote gradebook</h3> - <p>The assignments defined for this course should match the ones - stored in the gradebook, for this to work properly!</p> + <h3>${_("Export grades to remote gradebook")}</h3> + <p>${_("The assignments defined for this course should match the ones stored in the gradebook, for this to work properly!")}</p> <ul> - <li>Gradebook name: <font color="green">${rg.get('name','None defined!')}</font> + <li>${_("Gradebook name:")} <font color="green">${rg.get('name','None defined!')}</font> <br/> <br/> - <input type="submit" name="action" value="List assignments available in remote gradebook"> - <input type="submit" name="action" value="List enrolled students matching remote gradebook"> + <input type="submit" name="action" value="${_("List assignments available in remote gradebook")}"> + <input type="submit" name="action" value="${_("List enrolled students matching remote gradebook")}"> <br/> <br/> </li> - <li><input type="submit" name="action" value="List assignments available for this course"> + <li><input type="submit" name="action" value="${_("List assignments available for this course")}"> <br/> <br/> </li> - <li>Assignment name: <input type="text" name="assignment_name" size=40 > + <li>${_("Assignment name:")} <input type="text" name="assignment_name" size=40 > <br/> <br/> - <input type="submit" name="action" value="Display grades for assignment"> - <input type="submit" name="action" value="Export grades for assignment to remote gradebook"> - <input type="submit" name="action" value="Export CSV file of grades for assignment"> + <input type="submit" name="action" value="${_("Display grades for assignment")}"> + <input type="submit" name="action" value="${_("Export grades for assignment to remote gradebook")}"> + <input type="submit" name="action" value="${_("Export CSV file of grades for assignment")}"> </li> </ul> <hr width="40%" style="align:left"> %endif %if settings.MITX_FEATURES.get('ENABLE_INSTRUCTOR_BACKGROUND_TASKS'): - <H2>Course-specific grade adjustment</h2> + <H2>${_("Course-specific grade adjustment")}</h2> <p> - Specify a particular problem in the course here by its url: + {_("Specify a particular problem in the course here by its url:")} <input type="text" name="problem_for_all_students" size="60"> </p> <p> - You may use just the "urlname" if a problem, or "modulename/urlname" if not. - (For example, if the location is <tt>i4x://university/course/problem/problemname</tt>, - then just provide the <tt>problemname</tt>. - If the location is <tt>i4x://university/course/notaproblem/someothername</tt>, then - provide <tt>notaproblem/someothername</tt>.) + ${_('You may use just the "urlname" if a problem, or "modulename/urlname" if not. ' + '(For example, if the location is <tt>i4x://university/course/problem/problemname</tt>, ' + 'then just provide the <tt>problemname</tt>. ' + 'If the location is <tt>i4x://university/course/notaproblem/someothername</tt>, then ' + 'provide <tt>notaproblem/someothername</tt>.)')} </p> <p> - Then select an action: - <input type="submit" name="action" value="Reset ALL students' attempts"> - <input type="submit" name="action" value="Rescore ALL students' problem submissions"> + ${_("Then select an action:")} + <input type="submit" name="action" value="${_("Reset ALL students' attempts")}"> + <input type="submit" name="action" value="${_("Rescore ALL students' problem submissions")}"> </p> <p> - <p>These actions run in the background, and status for active tasks will appear in a table below. - To see status for all tasks submitted for this problem, click on this button: + <p>${_("These actions run in the background, and status for active tasks will appear in a table below. To see status for all tasks submitted for this problem, click on this button:")} </p> <p> - <input type="submit" name="action" value="Show Background Task History"> + <input type="submit" name="action" value="${_("Show Background Task History")}"> </p> <hr width="40%" style="align:left"> %endif - <H2>Student-specific grade inspection and adjustment</h2> + <H2>${_("Student-specific grade inspection and adjustment")}</h2> <p> - Specify the edX email address or username of a student here: + ${_("Specify the edX email address or username of a student here:")} <input type="text" name="unique_student_identifier"> </p> <p> - Click this, and a link to student's progress page will appear below: - <input type="submit" name="action" value="Get link to student's progress page"> + ${_("Click this, and a link to student's progress page will appear below:")} + <input type="submit" name="action" value="${_(\"Get link to student's progress page\")}"> </p> <p> - Specify a particular problem in the course here by its url: + ${_("Specify a particular problem in the course here by its url:")} <input type="text" name="problem_for_student" size="60"> </p> <p> - You may use just the "urlname" if a problem, or "modulename/urlname" if not. - (For example, if the location is <tt>i4x://university/course/problem/problemname</tt>, - then just provide the <tt>problemname</tt>. - If the location is <tt>i4x://university/course/notaproblem/someothername</tt>, then - provide <tt>notaproblem/someothername</tt>.) + ${_('You may use just the "urlname" if a problem, or "modulename/urlname" if not. ' + '(For example, if the location is <tt>i4x://university/course/problem/problemname</tt>, ' + 'then just provide the <tt>problemname</tt>. ' + 'If the location is <tt>i4x://university/course/notaproblem/someothername</tt>, then ' + 'provide <tt>notaproblem/someothername</tt>.)')} </p> <p> - Then select an action: - <input type="submit" name="action" value="Reset student's attempts"> + ${_("Then select an action:")} + <input type="submit" name="action" value="${_(\"Reset student's attempts\")}"> %if settings.MITX_FEATURES.get('ENABLE_INSTRUCTOR_BACKGROUND_TASKS'): - <input type="submit" name="action" value="Rescore student's problem submission"> + <input type="submit" name="action" value="${_(\"Rescore student's problem submission\")}"> %endif </p> %if instructor_access: <p> - You may also delete the entire state of a student for the specified module: - <input type="submit" name="action" value="Delete student state for module"> + ${_("You may also delete the entire state of a student for the specified module:")} + <input type="submit" name="action" value="${_("Delete student state for module")}"> </p> %endif %if settings.MITX_FEATURES.get('ENABLE_INSTRUCTOR_BACKGROUND_TASKS'): - <p>Rescoring runs in the background, and status for active tasks will appear in a table below. - To see status for all tasks submitted for this problem and student, click on this button: + <p>${_("Rescoring runs in the background, and status for active tasks will appear in a table below. " + "To see status for all tasks submitted for this problem and student, click on this button:")} </p> <p> - <input type="submit" name="action" value="Show Background Task History for Student"> + <input type="submit" name="action" value="${_("Show Background Task History for Student")}"> </p> %endif @@ -274,7 +273,7 @@ function goto( mode) ##----------------------------------------------------------------------------- %if modeflag.get('Psychometrics'): - <p>Select a problem and an action: + <p>${_("Select a problem and an action:")} </p> <p> @@ -285,7 +284,7 @@ function goto( mode) </select> </p> <p> - <input type="submit" name="action" value="Generate Histogram and IRT Plot"> + <input type="submit" name="action" value="${_("Generate Histogram and IRT Plot")}"> </p> <p></p> @@ -298,28 +297,28 @@ function goto( mode) %if instructor_access: <hr width="40%" style="align:left"> <p> - <input type="submit" name="action" value="List course staff members"> + <input type="submit" name="action" value="${_("List course staff members")}"> <p> <input type="text" name="staffuser"> - <input type="submit" name="action" value="Remove course staff"> - <input type="submit" name="action" value="Add course staff"> + <input type="submit" name="action" value="${_("Remove course staff")}"> + <input type="submit" name="action" value="${_("Add course staff")}"> <hr width="40%" style="align:left"> %endif %if admin_access: <hr width="40%" style="align:left"> <p> - <input type="submit" name="action" value="List course instructors"> + <input type="submit" name="action" value="${_("List course instructors")}"> <p> - <input type="text" name="instructor"> <input type="submit" name="action" value="Remove instructor"> - <input type="submit" name="action" value="Add instructor"> + <input type="text" name="instructor"> <input type="submit" name="action" value="${_("Remove instructor")}"> + <input type="submit" name="action" value="${_("Add instructor")}"> <hr width="40%" style="align:left"> %endif %if settings.MITX_FEATURES['ENABLE_MANUAL_GIT_RELOAD'] and admin_access: <p> - <input type="submit" name="action" value="Reload course from XML files"> - <input type="submit" name="action" value="GIT pull and Reload course"> + <input type="submit" name="action" value="${_("Reload course from XML files")}"> + <input type="submit" name="action" value="${_("GIT pull and Reload course")}"> %endif %endif @@ -328,26 +327,26 @@ function goto( mode) %if instructor_access: <hr width="40%" style="align:left"> <p> - <input type="submit" name="action" value="List course forum admins"> + <input type="submit" name="action" value="${_("List course forum admins")}"> <p> - <input type="text" name="forumadmin"> <input type="submit" name="action" value="Remove forum admin"> - <input type="submit" name="action" value="Add forum admin"> + <input type="text" name="forumadmin"> <input type="submit" name="action" value="${_("Remove forum admin")}"> + <input type="submit" name="action" value="${_("Add forum admin")}"> <hr width="40%" style="align:left"> %endif %if instructor_access or forum_admin_access: <p> - <input type="submit" name="action" value="List course forum moderators"> - <input type="submit" name="action" value="List course forum community TAs"> + <input type="submit" name="action" value="${_("List course forum moderators")}"> + <input type="submit" name="action" value="${_("List course forum community TAs")}"> <p> <input type="text" name="forummoderator"> - <input type="submit" name="action" value="Remove forum moderator"> - <input type="submit" name="action" value="Add forum moderator"> - <input type="submit" name="action" value="Remove forum community TA"> - <input type="submit" name="action" value="Add forum community TA"> + <input type="submit" name="action" value="${_("Remove forum moderator")}"> + <input type="submit" name="action" value="${_("Add forum moderator")}"> + <input type="submit" name="action" value="${_("Remove forum community TA")}"> + <input type="submit" name="action" value="${_("Add forum community TA")}"> <hr width="40%" style="align:left"> %else: - <p>User requires forum administrator privileges to perform administration tasks. See instructor.</p> + <p>${_("User requires forum administrator privileges to perform administration tasks. See instructor.")}</p> %endif %endif @@ -356,8 +355,8 @@ function goto( mode) <hr width="40%" style="align:left"> <p> - <input type="submit" name="action" value="List enrolled students"> - <input type="submit" name="action" value="List students who may enroll but may not have yet signed up"> + <input type="submit" name="action" value="${_("List enrolled students")}"> + <input type="submit" name="action" value="${_("List students who may enroll but may not have yet signed up")}"> <hr width="40%" style="align:left"> %if settings.MITX_FEATURES.get('REMOTE_GRADEBOOK_URL','') and instructor_access: @@ -366,28 +365,28 @@ function goto( mode) rg = course.remote_gradebook %> - <p>Pull enrollment from remote gradebook</p> + <p>${_("Pull enrollment from remote gradebook")}</p> <ul> - <li>Gradebook name: <font color="green">${rg.get('name','None defined!')}</font> - <li>Section: <input type="text" name="gradebook_section" size=40 value="${rg.get('section','')}"></li> + <li>${_("Gradebook name:")} <font color="green">${rg.get('name','None defined!')}</font> + <li>${_("Section:")} <input type="text" name="gradebook_section" size=40 value="${rg.get('section','')}"></li> </ul> - <input type="submit" name="action" value="List sections available in remote gradebook"> - <input type="submit" name="action" value="List students in section in remote gradebook"> - <input type="submit" name="action" value="Overload enrollment list using remote gradebook"> - <input type="submit" name="action" value="Merge enrollment list with remote gradebook"> + <input type="submit" name="action" value="${_("List sections available in remote gradebook")}"> + <input type="submit" name="action" value="${_("List students in section in remote gradebook")}"> + <input type="submit" name="action" value="${_("Overload enrollment list using remote gradebook")}"> + <input type="submit" name="action" value="${_("Merge enrollment list with remote gradebook")}"> <hr width="40%" style="align:left"> %endif - <p>Enroll or un-enroll one or many students: enter emails, separated by new lines or commas;</p> + <p>${_("Enroll or un-enroll one or many students: enter emails, separated by new lines or commas;")}</p> <textarea rows="6" cols="70" name="multiple_students"></textarea> <p> - <input type="checkbox" name="email_students"> Notify students by email + <input type="checkbox" name="email_students"> ${_("Notify students by email")} <p> - <input type="checkbox" name="auto_enroll"> Auto-enroll students when they activate - <input type="submit" name="action" value="Enroll multiple students"> + <input type="checkbox" name="auto_enroll"> ${_("Auto-enroll students when they activate")} + <input type="submit" name="action" value="$_("Enroll multiple students")}"> <p> - <input type="submit" name="action" value="Unenroll multiple students"> + <input type="submit" name="action" value="${_("Unenroll multiple students")}"> %endif @@ -396,11 +395,11 @@ function goto( mode) %if modeflag.get('Data'): <hr width="40%" style="align:left"> <p> - <input type="submit" name="action" value="Download CSV of all student profile data"> + <input type="submit" name="action" value="${_("Download CSV of all student profile data")}"> </p> - <p> Problem urlname: + <p> ${_("Problem urlname:")} <input type="text" name="problem_to_dump" size="40"> - <input type="submit" name="action" value="Download CSV of all responses to problem"> + <input type="submit" name="action" value="${_("Download CSV of all responses to problem")}"> </p> <hr width="40%" style="align:left"> %endif @@ -411,15 +410,16 @@ function goto( mode) %if instructor_access: <hr width="40%" style="align:left"> <p> - <input type="submit" name="action" value="List beta testers"> + <input type="submit" name="action" value="${_("List beta testers")}"> <p> - Enter usernames or emails for students who should be beta-testers, one per line, or separated by commas. They will get to - see course materials early, as configured via the <tt>days_early_for_beta</tt> option in the course policy. + ## Translators: days_early_for_beta should not be translated + ${_("Enter usernames or emails for students who should be beta-testers, one per line, or separated by commas. They will get to " + "see course materials early, as configured via the <tt>days_early_for_beta</tt> option in the course policy.")} </p> <p> <textarea cols="50" row="30" name="betausers"></textarea> - <input type="submit" name="action" value="Remove beta testers"> - <input type="submit" name="action" value="Add beta testers"> + <input type="submit" name="action" value="${_("Remove beta testers")}"> + <input type="submit" name="action" value="${_("Add beta testers")}"> </p> <hr width="40%" style="align:left"> @@ -442,12 +442,12 @@ function goto( mode) %if modeflag.get('Analytics'): %if not any(analytics_results.values()): - <p>No Analytics are available at this time.</p> + <p>${_("No Analytics are available at this time.")}</p> %endif %if analytics_results.get("StudentsEnrolled"): <p> - Students enrolled: + ${_("Students enrolled:")} ${analytics_results["StudentsEnrolled"]['data'][0]['students']} (${analytics_results["StudentsEnrolled"]['time']}) </p> @@ -455,7 +455,7 @@ function goto( mode) %if analytics_results.get("StudentsActive"): <p> - Students active in the last week: + ${_("Students active in the last week:")} ${analytics_results["StudentsActive"]['data'][0]['active']} (${analytics_results["StudentsActive"]['time']}) </p> @@ -463,14 +463,14 @@ function goto( mode) %if analytics_results.get("StudentsDropoffPerDay"): <p> - Student activity day by day + ${_("Student activity day by day")} (${analytics_results["StudentsDropoffPerDay"]['time']}) </p> <div> <table class="stat_table"> <tr> - <th>Day</th> - <th>Students</th> + <th>${_("Day")}</th> + <th>${_("Students")}</th> </tr> %for row in analytics_results['StudentsDropoffPerDay']['data']: <tr> @@ -485,15 +485,15 @@ function goto( mode) <br/> %if analytics_results.get("ProblemGradeDistribution"): <p> - Answer distribution for problems + ${_("Answer distribution for problems")} (${analytics_results["ProblemGradeDistribution"]['time']}) </p> <div> <table class="stat_table"> <tr> - <th>Problem</th> - <th>Max</th> - <th colspan="99">Points Earned (Num Students)</th> + <th>${_("Problem")}</th> + <th>${_("Max")}</th> + <th colspan="99">${_("Points Earned (Num Students)")}</th> </tr> %for row in analytics_results['ProblemGradeDistribution']['data']: <tr> @@ -522,14 +522,14 @@ function goto( mode) ##instead. %if analytics_results.get("StudentsPerProblemCorrect"): <p> - Students answering correctly + ${_("Students answering correctly")} (${analytics_results["StudentsPerProblemCorrect"]['time']}) </p> <div class="divScroll"> <table class="stat_table"> <tr> - <th>Problem</th> - <th>Number of students</th> + <th>${_("Problem")}</th> + <th>${_("Number of students")}</th> </tr> %for row in analytics_results['StudentsPerProblemCorrect']['data']: <tr> @@ -542,7 +542,7 @@ function goto( mode) %endif <p> - Student distribution per country, all courses, Sep-12 to Oct-17, 1 server (shown here as an example): + ${_("Student distribution per country, all courses, Sep-12 to Oct-17, 1 server (shown here as an example):")} </p> <div id="posts-list" class="clearfix"> @@ -638,18 +638,18 @@ function goto( mode) %if instructor_tasks is not None and len(instructor_tasks) > 0: <hr width="100%"> - <h2>Pending Instructor Tasks</h2> + <h2>$_("Pending Instructor Tasks")}</h2> <div id="task-progress-wrapper"> <table class="stat_table"> <tr> - <th>Task Type</th> - <th>Task inputs</th> - <th>Task Id</th> - <th>Requester</th> - <th>Submitted</th> - <th>Task State</th> - <th>Duration (sec)</th> - <th>Task Progress</th> + <th>${_("Task Type")}</th> + <th>${_("Task inputs")}</th> + <th>${_("Task Id")}</th> + <th>${_("Requester")}</th> + <th>${_("Submitted")}</th> + <th>${_("Task State")}</th> + <th>${_("Duration (sec)")}</th> + <th>${_("Task Progress")}</th> </tr> %for tasknum, instructor_task in enumerate(instructor_tasks): <tr id="task-progress-entry-${tasknum}" class="task-progress-entry" @@ -661,8 +661,8 @@ function goto( mode) <td>${instructor_task.requester}</td> <td>${instructor_task.created}</td> <td class="task-state">${instructor_task.task_state}</td> - <td class="task-duration">unknown</td> - <td class="task-progress">unknown</td> + <td class="task-duration">${_("unknown")}</td> + <td class="task-progress">${_("unknown")}</td> </tr> %endfor </table> @@ -726,7 +726,7 @@ function goto( mode) ##----------------------------------------------------------------------------- %if modeflag.get('Admin'): % if course_errors is not UNDEFINED: - <h2>Course errors</h2> + <h2>${_("Course errors")}</h2> <div id="course-errors"> %if not course_errors: None diff --git a/lms/templates/courseware/mktg_coming_soon.html b/lms/templates/courseware/mktg_coming_soon.html index c100c1cb5d71cde0dc957829c12f2a35f6c4c750..80aeb42c37a50121b31138f948efcd6e61faf064 100644 --- a/lms/templates/courseware/mktg_coming_soon.html +++ b/lms/templates/courseware/mktg_coming_soon.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from django.core.urlresolvers import reverse from courseware.courses import course_image_url, get_course_about_section @@ -7,7 +8,7 @@ <%inherit file="../mktg_iframe.html" /> -<%block name="title"><title>About ${course_id}</title></%block> +<%block name="title"><title>${_("About {course_id}").format(course_id=course_id)}</title></%block> <%block name="bodyclass">view-partial-mktgregister</%block> @@ -23,7 +24,7 @@ <ul class="list-actions register"> <li class="item"> - <a class="action coming-soon" href="">Coming Soon</a> + <a class="action coming-soon" href="">${_("Coming Soon")}</a> </li> </ul> diff --git a/lms/templates/courseware/mktg_course_about.html b/lms/templates/courseware/mktg_course_about.html index 8dedc703375c5edd314dbb9ebe79580402c79604..a2c1bd7d0aadf13b3c9527a6d7c9d394b84faa7e 100644 --- a/lms/templates/courseware/mktg_course_about.html +++ b/lms/templates/courseware/mktg_course_about.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from django.core.urlresolvers import reverse from courseware.courses import course_image_url, get_course_about_section @@ -7,7 +8,7 @@ <%inherit file="../mktg_iframe.html" /> -<%block name="title"><title>About ${course.number}</title></%block> +<%block name="title"><title>${_("About {course_number}").format(course_number=course.number)}</title></%block> <%block name="bodyclass">view-partial-mktgregister</%block> @@ -31,7 +32,7 @@ window.top.location.href = "${reverse('register_user')}?course_id=${course.id}&enrollment_action=enroll"; } else { $('#register_error').html( - (xhr.responseText ? xhr.responseText : 'An error occurred. Please try again later.') + (xhr.responseText ? xhr.responseText : '${_("An error occurred. Please try again later.")}') ).css("display", "block"); } }); @@ -46,14 +47,14 @@ <li class="item"> %if user.is_authenticated() and registered: %if show_courseware_link: - <a class="action access-courseware" href="${course_target}" target="_top">Access Courseware</a> + <a class="action access-courseware" href="${course_target}" target="_top">${_("Access Courseware")}</a> %else: - <div class="action is-registered">You Are Registered</div> + <div class="action is-registered">${_("You Are Registered")}</div> %endif %elif allow_registration: - <a class="action action-register register" href="#">Register for <strong>${course.number}</strong></a> + <a class="action action-register register" href="#">${_("Register for")} <strong>${course.number}</strong></a> %else: - <div class="action registration-closed is-disabled">Registration Is Closed</div> + <div class="action registration-closed is-disabled">${_("Registration Is Closed")}</div> %endif </li> </ul> @@ -63,11 +64,11 @@ <form id="class_enroll_form" method="post" data-remote="true" action="${reverse('change_enrollment')}"> <fieldset class="enroll_fieldset"> <input name="course_id" type="hidden" value="${course.id}"> - <input name="enrollment_action" type="hidden" value="enroll"> + <input name="enrollment_action" type="hidden" value="${_("enroll")}"> <input type="hidden" name="csrfmiddlewaretoken" value="${ csrf_token }"> </fieldset> <div class="submit"> - <input name="enroll" type="submit" value="enroll"> + <input name="enroll" type="submit" value="${_("enroll")}"> </div> </form> </div> diff --git a/lms/templates/courseware/news.html b/lms/templates/courseware/news.html index 8a0bbda872ab9f7260f4f2049f45a32381ef10a0..1ecb4439d735e157400c045e7739079442d6c2a6 100644 --- a/lms/templates/courseware/news.html +++ b/lms/templates/courseware/news.html @@ -1,7 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="main.html" /> <%namespace name='static' file='../static_content.html'/> <%block name="bodyclass">courseware news</%block> -<%block name="title"><title>News – MITx 6.002x</title></%block> +<%block name="title"><title>${_("News - MITx 6.002x")}</title></%block> <%block name="headextra"> <%static:css group='course'/> @@ -15,7 +16,7 @@ <section class="container"> <div class="course-wrapper"> <section class="course-content"> - <h3> Updates to Discussion Posts You Follow </h3> + <h3> ${_("Updates to Discussion Posts You Follow")} </h3> ${content} </section> </div> diff --git a/lms/templates/courseware/notifications.html b/lms/templates/courseware/notifications.html index b84fd767a1450ddd885f33fd9f0fae3b3f6d12c5..39eaaa14b9dd0400ef87621b9b8cd0a3f17e41df 100644 --- a/lms/templates/courseware/notifications.html +++ b/lms/templates/courseware/notifications.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from django.core.urlresolvers import reverse %> <% @@ -37,7 +38,7 @@ def url_for_user(user_id): #TODO % if notification.get('actor_id', None): <a href="${url_for_user(notification['actor_id'])}">${info['actor_username']}</a> % else: - Anonymous + ${_("Anonymous")} % endif </%def> @@ -48,7 +49,7 @@ def url_for_user(user_id): #TODO <%def name="render_comment_link(notification)"> <% info = notification['info'] %> - <a href="${url_for_comment(info['commentable_id'], info['thread_id'], info['comment_id'])}">comment</a> + <a href="${url_for_comment(info['commentable_id'], info['thread_id'], info['comment_id'])}">${_("comment")}</a> </%def> <%def name="render_discussion_link(notification)"> @@ -59,19 +60,32 @@ def url_for_user(user_id): #TODO <%def name="render_notification(notification)"> <div class="notification"> % if notification['notification_type'] == 'post_reply': - ${render_user_link(notification)} posted a ${render_comment_link(notification)} - to the thread ${render_thread_link(notification)} in discussion ${render_discussion_link(notification)} + ${_("{user} posted a {comment} to the thread {thread} in discussion {discussion}").format( + user=render_user_link(notification), + comment=render_comment_link(notification), + thread=render_thread_link(notification), + discussion=render_discussion_link(notification), + )} % elif notification['notification_type'] == 'post_topic': - ${render_user_link(notification)} posted a new thread ${render_thread_link(notification)} - in discussion ${render_discussion_link(notification)} + ${_("{user} posted a new thread {thread} in discussion {discussion}").format( + user=render_user_link(notification), + thread=render_thread_link(notification), + discussion=render_discussion_link(notification), + )} % elif notification['notification_type'] == 'at_user': - ${render_user(info)} mentioned you in % if notification['info']['content_type'] == 'thread': - the thread ${render_thread_link(notification)} - in discussion ${render_discussion_link(notification)} + ${_("{user} mentioned you in the thread {thread} in disucssion {discussion}").format( + user=render_user(info), + thread=render_thread_link(notification), + discussion=render_discussion_link(notification), + )} % else: - ${render_comment_link(notification)} - to the thread ${render_thread_link(notification)} in discussion ${render_discussion_link(notification)} + ${_("{user} mentioned you in {comment} to the thread {thread} in discussion {discussion}").format( + user=render_user(info), + comment=render_comment_link(notification), + thread=render_thread_link(notification), + discussion=render_discussion_link(notification), + )} % endif % endif </div> diff --git a/lms/templates/courseware/progress.html b/lms/templates/courseware/progress.html index bf1414cc07735f0b1de21a68aaef0a19fda9102a..51feed23ab111d4ca30830473e029d50403de44b 100644 --- a/lms/templates/courseware/progress.html +++ b/lms/templates/courseware/progress.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="/main.html" /> <%namespace name='static' file='/static_content.html'/> @@ -7,7 +8,7 @@ <%namespace name="progress_graph" file="/courseware/progress_graph.js"/> -<%block name="title"><title>${course.number} Progress</title></%block> +<%block name="title"><title>${_("{course_number} Progress").format(course_number=course.number)}</title></%block> <%! from django.core.urlresolvers import reverse @@ -31,7 +32,7 @@ ${progress_graph.body(grade_summary, course.grade_cutoffs, "grade-detail-graph", <section class="course-info"> <header> - <h1>Course Progress for Student '${student.username}' (${student.email})</h1> + <h1>${_("Course Progress for Student '{username}' ({email})").format(username=student.username, email=student.email)}</h1> </header> %if not course.disable_progress_graph: @@ -83,7 +84,7 @@ ${progress_graph.body(grade_summary, course.grade_cutoffs, "grade-detail-graph", %endfor </ol> %else: - <h3 class="no-scores"> No problem scores in this section </h3> + <h3 class="no-scores"> ${_("No problem scores in this section")} </h3> %endif </section> diff --git a/lms/templates/courseware/syllabus.html b/lms/templates/courseware/syllabus.html index 4a95eaf894ae22bc21e671605adbe9f82e7b52ce..c908b65661fcdd500ab38ef683c82632f88e0f0d 100644 --- a/lms/templates/courseware/syllabus.html +++ b/lms/templates/courseware/syllabus.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="/main.html" /> <%namespace name='static' file='/static_content.html'/> @@ -5,17 +6,17 @@ <%static:css group='course'/> </%block> -<%block name="title"><title>${course.number} Course Info</title></%block> +<%block name="title"><title>${_("{course_number} Course Info").format(course_number=course.number)}</title></%block> <%include file="/courseware/course_navigation.html" args="active_page='syllabus'" /> -<%! +<%! from courseware.courses import get_course_syllabus_section %> <section class="container"> <div class="syllabus_wrapper"> <div class="syllabus"> - <h1> Syllabus </h1> + <h1> ${_("Syllabus ")}</h1> % if user.is_authenticated(): ${get_course_syllabus_section(course, 'syllabus')} % else: diff --git a/lms/templates/courseware/welcome-back.html b/lms/templates/courseware/welcome-back.html index ffd2e36d0a46f33b700bd612ca9fb88732e090f9..f7a34cb4213908e0f14324bd9031e9d292108c25 100644 --- a/lms/templates/courseware/welcome-back.html +++ b/lms/templates/courseware/welcome-back.html @@ -1,3 +1,9 @@ +<%! from django.utils.translation import ugettext as _ %> <h2>${chapter_module.display_name_with_default}</h2> -<p>You were most recently in <a href="${prev_section_url}">${prev_section.display_name_with_default}</a>. If you're done with that, choose another section on the left.</p> +<p>${_("You were most recently in {section_link}. If you're done with that, choose another section on the left.").format( + section_link='<a href="{url}">{section_name}</a>'.format( + url=prev_section_url + section_name=prev_section.display_name_with_default, + ) + )}</p> diff --git a/lms/templates/dashboard.html b/lms/templates/dashboard.html index 835e466ab21a14255c7b5a3b260b4b38610fe343..40e6f4fc05eef3b942ef4d37e69a2e8b9219400c 100644 --- a/lms/templates/dashboard.html +++ b/lms/templates/dashboard.html @@ -1,3 +1,5 @@ +<%! from django.utils.translation import ugettext as _ %> + <%! from django.core.urlresolvers import reverse from courseware.courses import course_image_url, get_course_about_section @@ -8,7 +10,7 @@ <%namespace name='static' file='static_content.html'/> -<%block name="title"><title>Dashboard</title></%block> +<%block name="title"><title>${_("Dashboard")}</title></%block> <%block name="js_extra"> <script type="text/javascript"> @@ -67,7 +69,7 @@ $("#unenroll_course_id").val() + "&enrollment_action=unenroll"; } else { $('#unenroll_error').html( - xhr.responseText ? xhr.responseText : "An error occurred. Please try again later." + xhr.responseText ? xhr.responseText : "${_('An error occurred. Please try again later.')}") ).stop().css("display", "block"); } }); @@ -88,10 +90,8 @@ {"new_email" : new_email, "password" : new_password}, function(data) { if (data.success) { - $("#change_email_title").html("Please verify your new email"); - $("#change_email_form").html("<p>You'll receive a confirmation in your " + - "in-box. Please click the link in the " + - "email to confirm the email change.</p>"); + $("#change_email_title").html("${_('Please verify your new email')}")); + $("#change_email_form").html("<p>${_('You'll receive a confirmation in your in-box. Please click the link in the email to confirm the email change.')}</p>"); } else { $("#change_email_error").html(data.error).stop().css("display", "block"); } @@ -108,7 +108,7 @@ function(data) { if(data.success) { location.reload(); - // $("#change_name_body").html("<p>Name changed.</p>"); + // $("#change_name_body").html("<p>${_('Name changed.')}</p>"); } else { $("#change_name_error").html(data.error).stop().css("display", "block"); } @@ -135,22 +135,22 @@ <section class="user-info"> <ul> <li> - <span class="title"><div class="icon name-icon"></div>Full Name (<a href="#apply_name_change" rel="leanModal" class="edit-name">edit</a>)</span> <span class="data">${ user.profile.name | h }</span> + <span class="title"><div class="icon name-icon"></div>${_("Full Name")} (<a href="#apply_name_change" rel="leanModal" class="edit-name">${_("edit")}</a>)</span> <span class="data">${ user.profile.name | h }</span> </li> <li> - <span class="title"><div class="icon email-icon"></div>Email + <span class="title"><div class="icon email-icon"></div>${_("Email")} % if external_auth_map is None or 'shib' not in external_auth_map.external_domain: - (<a href="#change_email" rel="leanModal" class="edit-email">edit</a>) + (<a href="#change_email" rel="leanModal" class="edit-email">${_("edit")}</a>) % endif </span> <span class="data">${ user.email | h }</span> </li> % if external_auth_map is None or 'shib' not in external_auth_map.external_domain: <li> - <span class="title"><a href="#password_reset_complete" rel="leanModal" id="pwd_reset_button">Reset Password</a></span> + <span class="title"><a href="#password_reset_complete" rel="leanModal" id="pwd_reset_button">${_("Reset Password")}</a></span> <form id="password_reset_form" method="post" data-remote="true" action="${reverse('password_reset')}"> <input id="id_email" type="hidden" name="email" maxlength="75" value="${user.email}" /> - <!-- <input type="submit" id="pwd_reset_button" value="Reset Password" /> --> + <!-- <input type="submit" id="pwd_reset_button" value="${_('Reset Password')}" /> --> </form> </li> % endif @@ -163,7 +163,7 @@ %if news: <article class="news-carousel"> <header> - <h4>edX News</h4> + <h4>${_("edX News")}</h4> <nav class="page-dots"> <ol> <li><a href="#" class="page-dot current"></a></li> @@ -185,7 +185,7 @@ %if entry.summary: <p>${entry.summary}</p> %endif - <p><a href="${entry.link}">Learn More ›</a></p> + <p><a href="${entry.link}">${_("Learn More >")}</a></p> </div> </section> %endfor @@ -196,7 +196,7 @@ <section class="my-courses"> <header> - <h2>Current Courses</h2> + <h2>${_("Current Courses")}</h2> </header> % if len(courses) > 0: @@ -211,11 +211,11 @@ % if course.id in show_courseware_links_for: <a href="${course_target}" class="cover"> - <img src="${course_image_url(course)}" alt="${course.number} ${course.display_name_with_default} Cover Image" /> + <img src="${course_image_url(course)}" alt="${_("{course_number} {course_name} Cover Image").format(course_number=course.number, course_name=course.display_name_with_default)}" /> </a> % else: <div class="cover"> - <img src="${course_image_url(course)}" alt="${course.number} ${course.display_name_with_default} Cover Image" /> + <img src="${course_image_url(course)}" alt="${_("{course_number} {course_name} Cover Image").format(course_number=course.number, course_name=course.display_name_with_default)}" /> </div> % endif @@ -223,11 +223,11 @@ <hgroup> <p class="date-block"> % if course.has_ended(): - Course Completed - ${course.end_date_text} + ${_("Course Completed - {end_date}").format(end_date=course.end_date_text)} % elif course.has_started(): - Course Started - ${course.start_date_text} + ${_("Course Started - {start_date}").format(start_date=course.start_date_text)} % else: # hasn't started yet - Course Starts - ${course.start_date_text} + ${_("Course Starts - {start_date}").format(start_date=course.start_date_text)} % endif </p> <h2 class="university">${get_course_about_section(course, 'university')}</h2> @@ -249,27 +249,41 @@ % if registration is None and testcenter_exam_info.is_registering(): <div class="message message-status is-shown exam-register"> - <a href="${testcenter_register_target}" class="button exam-button" id="exam_register_button">Register for Pearson exam</a> - <p class="message-copy">Registration for the Pearson exam is now open and will close on <strong>${testcenter_exam_info.registration_end_date_text}</strong></p> + <a href="${testcenter_register_target}" class="button exam-button" id="exam_register_button">${_("Register for Pearson exam")}</a> + <p class="message-copy">${_("Registration for the Pearson exam is now open and will close on {end_date}").format(end_date="<strong>{}</strong>".format(testcenter_exam_info.registration_end_date_text))}</p> </div> % endif <!-- display a registration for a current exam, even if the registration period is over --> % if registration is not None: % if registration.is_accepted: <div class="message message-status is-shown exam-schedule"> - <a href="${registration.registration_signup_url}" class="button exam-button">Schedule Pearson exam</a> - <p class="exam-registration-number"><a href="${testcenter_register_target}" id="exam_register_link">Registration</a> number: <strong>${registration.client_candidate_id}</strong></p> - <p class="message-copy">Write this down! You’ll need it to schedule your exam.</p> + <a href="${registration.registration_signup_url}" class="button exam-button">${_("Schedule Pearson exam")}</a> + <p class="exam-registration-number">${_("{link_start}Registration{link_end} number: {number}").format( + link_start='<a href="{url}" id="exam_register_link">'.format(url=testcenter_register_target), + link_end='</a>', + number=registration.client_candidate_id, + )}</p> + <p class="message-copy">${_("Write this down! You'll need it to schedule your exam.")}</p> </div> % endif % if registration.is_rejected: <div class="message message-status is-shown exam-schedule"> - <p class="message-copy"><strong>Your registration for the Pearson exam has been rejected. Please <a href="${testcenter_register_target}" id="exam_register_link">see your registration status details</a></strong>. Otherwise <a class="contact-link" href="mailto:exam-help@edx.org?subject=Pearson VUE Exam - ${get_course_about_section(course, 'university')} ${course.number}">contact edX at exam-help@edx.org</a> for further help.</p> + <p class="message-copy"> + <strong>${_("Your registration for the Pearson exam has been rejected. Please {link_start}see your registration status details{link_end}.").format( + link_start='<a href="{url}" id="exam_register_link">'.format(url=testcenter_register_target), + link_end='</a>')}</strong> + ${_("Otherwise {link_start}contact edX at {email}{link_end} for further help.').format( + link_start='<a class="contact-link" href="mailto:{email}?subject=Pearson VUE Exam - {about} {number}">'.format(email="exam-help@edx.org", about=get_course_about_section(course, 'university'), number=course.number), + link_end='</a>', + email="exam-help@edx.org", + )} </div> % endif % if not registration.is_accepted and not registration.is_rejected: <div class="message message-status is-shown"> - <p class="message-copy"><strong>Your <a href="${testcenter_register_target}" id="exam_register_link">registration for the Pearson exam</a> is pending</strong>. Within a few days, you should see a confirmation number here, which can be used to schedule your exam.</p> + <p class="message-copy"><strong>${_("Your {link_start}registration for the Pearson exam{link_end} is pending.").format(link_start='<a href="{url}" id="exam_register_link">'.format(url=testcenter_register_target), link_end='</a>')}</strong> + ${_("Within a few days, you should see a confirmation number here, which can be used to schedule your exam.")} + </p> </div> % endif % endif @@ -292,17 +306,16 @@ <div class="message message-status ${status_css_class} is-shown"> % if cert_status['status'] == 'processing': - <p class="message-copy">Final course details are being wrapped up at - this time. Your final standing will be available shortly.</p> + <p class="message-copy">${_("Final course details are being wrapped up at this time. Your final standing will be available shortly.")}</p> % elif cert_status['status'] in ('generating', 'ready', 'notpassing', 'restricted'): - <p class="message-copy">Your final grade: + <p class="message-copy">${_("Your final grade:")} <span class="grade-value">${"{0:.0f}%".format(float(cert_status['grade'])*100)}</span>. % if cert_status['status'] == 'notpassing': - Grade required for a certificate: <span class="grade-value"> + ${_("Grade required for a certificate:")} <span class="grade-value"> ${"{0:.0f}%".format(float(course.lowest_passing_grade)*100)}</span>. % elif cert_status['status'] == 'restricted': <p class="message-copy"> - Your certificate is being held pending confirmation that the issuance of your certificate is in compliance with strict U.S. embargoes on Iran, Cuba, Syria and Sudan. If you think our system has mistakenly identified you as being connected with one of those countries, please let us know by contacting <a class="contact-link" href="mailto:${settings.CONTACT_EMAIL}">${settings.CONTACT_EMAIL}</a>. + ${_("Your certificate is being held pending confirmation that the issuance of your certificate is in compliance with strict U.S. embargoes on Iran, Cuba, Syria and Sudan. If you think our system has mistakenly identified you as being connected with one of those countries, please let us know by contacting {email}.").format(email='<a class="contact-link" href="mailto:{email}">{email}</a>.'.format(email=settings.CONTACT_EMAIL))} </p> % endif </p> @@ -312,17 +325,17 @@ <ul class="actions"> % if cert_status['show_disabled_download_button']: <li class="action"><span class="disabled"> - Your Certificate is Generating</span></li> + ${_("Your Certificate is Generating")}</span></li> % elif cert_status['show_download_url']: <li class="action"> <a class="btn" href="${cert_status['download_url']}" - title="This link will open/download a PDF document"> + title="${_('This link will open/download a PDF document')}"> Download Your PDF Certificate</a></li> % endif % if cert_status['show_survey_button']: <li class="action"><a class="cta" href="${cert_status['survey_url']}"> - Complete our course feedback survey</a></li> + ${_('Complete our course feedback survey')}</a></li> % endif </ul> % endif @@ -332,12 +345,12 @@ % if course.id in show_courseware_links_for: % if course.has_ended(): - <a href="${course_target}" class="enter-course archived">View Archived Course</a> + <a href="${course_target}" class="enter-course archived">${_('View Archived Course')}</a> % else: - <a href="${course_target}" class="enter-course">View Course</a> + <a href="${course_target}" class="enter-course">${_('View Course')}</a> % endif % endif - <a href="#unenroll-modal" class="unenroll" rel="leanModal" data-course-id="${course.id}" data-course-number="${course.number}">Unregister</a> + <a href="#unenroll-modal" class="unenroll" rel="leanModal" data-course-id="${course.id}" data-course-number="${course.number}">${_('Unregister')}</a> </section> </article> @@ -346,16 +359,16 @@ % endfor % else: <section class="empty-dashboard-message"> - <p>Looks like you haven't registered for any courses yet.</p> + <p>${_("Looks like you haven't registered for any courses yet.")}</p> <a href="${marketing_link('COURSES')}"> - Find courses now! + ${_("Find courses now!")} </a> </section> % endif % if staff_access and len(errored_courses) > 0: <div id="course-errors"> - <h2>Course-loading errors</h2> + <h2>${_("Course-loading errors")}</h2> % for course_dir, errors in errored_courses.items(): <h3>${course_dir | h}</h3> @@ -374,7 +387,7 @@ <section id="unenroll-modal" class="modal unenroll-modal"> <div class="inner-wrapper"> <header> - <h2>Are you sure you want to unregister from <span id="unenroll_course_number"></span>?</h2> + <h2>${_('Are you sure you want to unregister from {course_number}?').format(course_number='<span id="unenroll_course_number"></span>')}</h2> <hr/> </header> @@ -399,13 +412,13 @@ <section id="password_reset_complete" class="modal"> <div class="inner-wrapper"> <header> - <h2>Password Reset Email Sent</h2> + <h2>${_('Password Reset Email Sent')}</h2> <hr/> </header> <div> <form> <!-- Here for styling reasons --> <section> - <p>An email has been sent to ${user.email}. Follow the link in the email to change your password.</p> + <p>${_('An email has been sent to {email}. Follow the link in the email to change your password.').format(email=user.email)}</p> </section> </form> </div> @@ -420,7 +433,7 @@ <section id="change_email" class="modal"> <div class="inner-wrapper"> <header> - <h2><span id="change_email_title">Change Email</span></h2> + <h2><span id="change_email_title">${_("Change Email")}</span></h2> <hr/> </header> <div id="change_email_body"> @@ -428,16 +441,16 @@ <div id="change_email_error" class="modal-form-error"> </div> <fieldset> <div class="input-group"> - <label>Please enter your new email address:</label> + <label>${_('Please enter your new email address:')}</label> <input id="new_email_field" type="email" value="" /> - <label>Please confirm your password:</label> + <label>${_('Please confirm your password:')}</label> <input id="new_email_password" value="" type="password" /> </div> <section> - <p>We will send a confirmation to both ${user.email} and your new email as part of the process.</p> + <p>${_('We will send a confirmation to both {email} and your new email as part of the process.').format(email=user.email)}</p> </section> <div class="submit"> - <input type="submit" id="submit_email_change" value="Change Email"/> + <input type="submit" id="submit_email_change" value="${_('Change Email')}"/> </div> </fieldset> </form> @@ -453,23 +466,23 @@ <section id="apply_name_change" class="modal"> <div class="inner-wrapper"> <header> - <h2>Change your name</h2> + <h2>${_("Change your name")}</h2> <hr/> </header> <div id="change_name_body"> <form id="change_name_form"> <div id="change_name_error" class="modal-form-error"> </div> - <p>To uphold the credibility of ${settings.PLATFORM_NAME} certificates, all name changes will be logged and recorded.</p> + <p>${_("To uphold the credibility of {platform} certificates, all name changes will be logged and recorded.".format(platform=settings.PLATFORM_NAME)}</p> <br/> <fieldset> <div class="input-group"> - <label>Enter your desired full name, as it will appear on the ${settings.PLATFORM_NAME} certificates: </label> + <label>${_("Enter your desired full name, as it will appear on the {platform} certificates:").format(platform=settings.PLATFORM_NAME)}</label> <input id="new_name_field" value="" type="text" /> - <label>Reason for name change:</label> + <label>${_("Reason for name change:")}</label> <textarea id="name_rationale_field" value=""></textarea> </div> <div class="submit"> - <input type="submit" id="submit" value="Change My Name"> + <input type="submit" id="submit" value="${_('Change My Name')}"> </div> </fieldset> </form> diff --git a/lms/templates/debug/run_python_form.html b/lms/templates/debug/run_python_form.html index daecdf2abdecc0af836e5ab8a0a4b8e5105b8c07..2d29480f4c15d6e79a770d33c03533f72536e944 100644 --- a/lms/templates/debug/run_python_form.html +++ b/lms/templates/debug/run_python_form.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <html><body> <div> <p>Python:</p> @@ -11,7 +12,7 @@ </div> %if results: <div> - <p>Results:</p> + <p>${_("Results:")}</p> <pre> ${results|h} </pre> diff --git a/lms/templates/discussion/_blank_slate.html b/lms/templates/discussion/_blank_slate.html index b8c8f58dda786f8c369507b04921643a62242afa..8186b30f3c2a885ddec3b05179cc29469edec50b 100644 --- a/lms/templates/discussion/_blank_slate.html +++ b/lms/templates/discussion/_blank_slate.html @@ -1,7 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> <div class="blank-state"> % if performed_search: - Sorry! We can't find anything matching your search. Please try another search. + ${_("Sorry! We can't find anything matching your search. Please try another search.")} % else: - There are no posts here yet. Be the first one to post! + ${_("There are no posts here yet. Be the first one to post!")} % endif </div> diff --git a/lms/templates/discussion/_discussion_course_navigation.html b/lms/templates/discussion/_discussion_course_navigation.html index 355e4af4d77ca27e75b73a8183cd0526b63d18e6..1efeeaf75148ffb2313c5c9046196b9dce1e0d37 100644 --- a/lms/templates/discussion/_discussion_course_navigation.html +++ b/lms/templates/discussion/_discussion_course_navigation.html @@ -1,8 +1,9 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from django_comment_client.permissions import has_permission %> <%inherit file="../courseware/course_navigation.html" /> <%block name="extratabs"> % if has_permission(user, 'create_thread', course.id): - <li class="right"><a href="#" class="new-post-btn"><span class="icon icon-edit new-post-icon"></span>New Post</a></li> + <li class="right"><a href="#" class="new-post-btn"><span class="icon icon-edit new-post-icon"></span>${_("New Post")}</a></li> % endif -</%block> \ No newline at end of file +</%block> diff --git a/lms/templates/discussion/_discussion_module.html b/lms/templates/discussion/_discussion_module.html index ef836e0b77cf7a02f02a1b1c467c9ca5c42d133a..37f8052520b2dbaf6a9e9348df7573e31ac56448 100644 --- a/lms/templates/discussion/_discussion_module.html +++ b/lms/templates/discussion/_discussion_module.html @@ -1,8 +1,7 @@ +<%! from django.utils.translation import ugettext as _ %> <%include file="_underscore_templates.html" /> <div class="discussion-module" data-discussion-id="${discussion_id | h}"> <a class="discussion-show control-button" href="javascript:void(0)" data-discussion-id="${discussion_id | h}"><span class="show-hide-discussion-icon"></span><span class="button-text">Show Discussion</span></a> - <a href="#" class="new-post-btn"><span class="icon icon-edit new-post-icon"></span>New Post</a> - - + <a href="#" class="new-post-btn"><span class="icon icon-edit new-post-icon"></span>${_("New Post")}</a> </div> diff --git a/lms/templates/discussion/_filter_dropdown.html b/lms/templates/discussion/_filter_dropdown.html index 9096d7a77e654791a2123d3211edbd30d423d8f2..c09f295b116af20421c74049135900659c1863bc 100644 --- a/lms/templates/discussion/_filter_dropdown.html +++ b/lms/templates/discussion/_filter_dropdown.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%! import json %> <%def name="render_dropdown(map)"> @@ -30,20 +31,20 @@ <ul class="browse-topic-drop-menu"> <li> <a href="#" class="drop-menu-meta-category"> - <span class="board-name" data-discussion_id='#all'>Show All Discussions</span> + <span class="board-name" data-discussion_id='#all'>${_("Show All Discussions")}</span> </a> </li> %if flag_moderator: <li> <a href="#"> - <span class="board-name" data-discussion_id='#flagged'><i class="icon-flag" style="padding-right:5px;"></i>Show Flagged Discussions</span> + <span class="board-name" data-discussion_id='#flagged'><i class="icon-flag" style="padding-right:5px;"></i>${_("Show Flagged Discussions")}</span> </a> </li> %endif <li> <a href="#" class="drop-menu-meta-category"> - <span class="board-name" data-discussion_id='#following'><i class="icon-star" style="padding-right:5px;"></i>Posts I'm Following</span> + <span class="board-name" data-discussion_id='#following'><i class="icon-star" style="padding-right:5px;"></i>${_("Posts I'm Following")}</span> </a> </li> ${render_dropdown(category_map)} diff --git a/lms/templates/discussion/_inline_new_post.html b/lms/templates/discussion/_inline_new_post.html index a7b1781b18c1aa424f892f929e4c9374048253a5..612098abea77a7626a2263791a76bcac3534dc66 100644 --- a/lms/templates/discussion/_inline_new_post.html +++ b/lms/templates/discussion/_inline_new_post.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <article class="new-post-article"> <div class="inner-wrapper"> <div class="new-post-form-errors"> @@ -5,25 +6,25 @@ <form class="new-post-form"> <div class="left-column"> <div class="options"> - <input type="checkbox" name="follow" class="discussion-follow" class="discussion-follow" id="new-post-follow" checked><label for="new-post-follow">follow this post</label> + <input type="checkbox" name="follow" class="discussion-follow" class="discussion-follow" id="new-post-follow" checked><label for="new-post-follow">${_("follow this post")}</label> <br> % if course.allow_anonymous: - <input type="checkbox" name="anonymous" class="discussion-anonymous" id="new-post-anonymous"><label for="new-post-anonymous">post anonymously</label> + <input type="checkbox" name="anonymous" class="discussion-anonymous" id="new-post-anonymous"><label for="new-post-anonymous">${_("post anonymously")}</label> %elif course.allow_anonymous_to_peers: - <input type="checkbox" name="anonymous_to_peers" class="discussion-anonymous-to-peers" id="new-post-anonymous-to-peers"><label for="new-post-anonymous-to-peers">post anonymously to classmates</label> + <input type="checkbox" name="anonymous_to_peers" class="discussion-anonymous-to-peers" id="new-post-anonymous-to-peers"><label for="new-post-anonymous-to-peers">${_("post anonymously to classmates")}</label> %endif %if is_course_cohorted: <div class="form-group-label choose-cohort"> - Make visible to: + ${_("Make visible to:")} <select class="group-filter-select new-post-group" name = "group_id"> - <option value="">All Groups</option> + <option value="">${_("All Groups")}</option> %if is_moderator: %for c in cohorts: <option value="${c.id}">${c.name}</option> %endfor %else: %if user_cohort: - <option value="${user_cohort}">My Cohort</option> + <option value="${user_cohort}">${_("My Cohort")}</option> %endif %endif @@ -44,8 +45,8 @@ ##<div class="form-row"> ## <input type="text" class="new-post-tags" name="tags" placeholder="Tags"> ##</div> - <input type="submit" class="submit" value="Add post"> - <a href="#" class="new-post-cancel">Cancel</a> + <input type="submit" class="submit" value="${_("Add post")}"> + <a href="#" class="new-post-cancel">${_("Cancel")}</a> </div> </form> </div> diff --git a/lms/templates/discussion/_new_post.html b/lms/templates/discussion/_new_post.html index f692eef6547687670200e4f3de32a36f5b8bfbec..4c11862e2069f28bf244d79fea85d6ae9715519a 100644 --- a/lms/templates/discussion/_new_post.html +++ b/lms/templates/discussion/_new_post.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%def name="render_form_filter_dropdown(map)"> % for child in map["children"]: % if child in map["entries"]: @@ -26,9 +27,9 @@ <div class="inner-wrapper"> <form class="new-post-form"> <div class="left-column"> - <label>Create new post about:</label> + <label>${_("Create new post about:")}</label> <div class="form-topic-drop"> - <a href="#" class="topic_dropdown_button">Show All Discussions<span class="drop-arrow">â–¾</span></a> + <a href="#" class="topic_dropdown_button">${_("Show All Discussions")}<span class="drop-arrow">â–¾</span></a> <div class="topic_menu_wrapper"> <div class="topic_menu_search"> <input type="text" class="form-topic-drop-search-input" placeholder="filter topics"> @@ -39,18 +40,18 @@ </div> </div> <div class="options"> - <input type="checkbox" name="follow" class="discussion-follow" class="discussion-follow" id="new-post-follow" checked><label for="new-post-follow">follow this post</label> + <input type="checkbox" name="follow" class="discussion-follow" class="discussion-follow" id="new-post-follow" checked><label for="new-post-follow">${_("follow this post")}</label> <br> % if course.allow_anonymous: - <input type="checkbox" name="anonymous" class="discussion-anonymous" id="new-post-anonymous"><label for="new-post-anonymous">post anonymously</label> + <input type="checkbox" name="anonymous" class="discussion-anonymous" id="new-post-anonymous"><label for="new-post-anonymous">${_("post anonymously")}</label> %elif course.allow_anonymous_to_peers: - <input type="checkbox" name="anonymous_to_peers" class="discussion-anonymous-to-peers" id="new-post-anonymous-to-peers"><label for="new-post-anonymous-to-peers">post anonymously to classmates</label> + <input type="checkbox" name="anonymous_to_peers" class="discussion-anonymous-to-peers" id="new-post-anonymous-to-peers"><label for="new-post-anonymous-to-peers">${_("post anonymously to classmates")}</label> %endif %if is_course_cohorted and is_moderator: <div class="form-group-label choose-cohort"> - Make visible to: + ${_("Make visible to:")} <select class="group-filter-select new-post-group" name = "group_id"> - <option value="">All Groups</option> + <option value="">${_("All Groups")}</option> %for c in cohorts: <option value="${c.id}" %if user_cohort and str(user_cohort) == str(c.id): @@ -76,8 +77,8 @@ ##<div class="form-row"> ## <input type="text" class="new-post-tags" name="tags" placeholder="Tags"> ##</div> - <input type="submit" class="submit" value="Add post"> - <a href="#" class="new-post-cancel">Cancel</a> + <input type="submit" class="submit" value="${_("Add post")}"> + <a href="#" class="new-post-cancel">${_("Cancel")}</a> </div> </form> </div> diff --git a/lms/templates/discussion/_recent_active_posts.html b/lms/templates/discussion/_recent_active_posts.html index b787df2fcf298998d3516257e78d7a27b053d0d1..a8760879f28b73bd4e13a8eeba630474e7ef22ee 100644 --- a/lms/templates/discussion/_recent_active_posts.html +++ b/lms/templates/discussion/_recent_active_posts.html @@ -1,9 +1,10 @@ +<%! from django.utils.translation import ugettext as _ %> <%! import django_comment_client.helpers as helpers %> % if recent_active_threads: <article class="discussion-sidebar-following sidebar-module"> <header> - <h4>Following</h4> + <h4>${_("Following")}</h4> <!--<a href="#" class="sidebar-view-all">view all ›</a>--> </header> <ol class="discussion-sidebar-following-list"> diff --git a/lms/templates/discussion/_search_bar.html b/lms/templates/discussion/_search_bar.html index 1f46a8e3c823f3a96f8dd436f502bb1ea92f4a50..98cabc31d6afd3c65db48f63a03e628cc77f77fa 100644 --- a/lms/templates/discussion/_search_bar.html +++ b/lms/templates/discussion/_search_bar.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from urllib import urlencode %> <% @@ -14,5 +15,5 @@ def base_url_for_search(): % else: <input class="search-input" type="text" value="${text | h}" id="keywords" autocomplete="off"/> % endif - <div class="discussion-link discussion-search-link" href="javascript:void(0)">Search posts</div> + <div class="discussion-link discussion-search-link" href="javascript:void(0)">${_("Search posts")}</div> </form> diff --git a/lms/templates/discussion/_similar_posts.html b/lms/templates/discussion/_similar_posts.html index ef6eedee2ef0105314297201c7b1f8df35448e1d..9788db758259a87fa2a5107a24cdfab4284dad57 100644 --- a/lms/templates/discussion/_similar_posts.html +++ b/lms/templates/discussion/_similar_posts.html @@ -1,6 +1,7 @@ +<%! from django.utils.translation import ugettext as _ %> % if len(threads) > 0: Similar Posts: - <a class="hide-similar-posts" href="javascript:void(0)">Hide</a> + <a class="hide-similar-posts" href="javascript:void(0)">${_("Hide")}</a> <div class="new-post-similar-posts"> % for thread in threads: <a class="similar-post" href="${thread['permalink'] | h}">${thread['title'] | h}</a> diff --git a/lms/templates/discussion/_single_thread.html b/lms/templates/discussion/_single_thread.html index e291bc955ca64a2b80d721f86a4cc8142d9e35c2..11763b18038b77a444e281429fec5499a1421009 100644 --- a/lms/templates/discussion/_single_thread.html +++ b/lms/templates/discussion/_single_thread.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%namespace name="renderer" file="_content_renderer.html"/> <%! from django_comment_client.mustache_helpers import url_for_user %> @@ -7,7 +8,7 @@ <header> %if thread['group_id']: - <div class="group-visibility-label">This post visible only to group ${cohort_dictionary[thread['group_id']]}. </div> + <div class="group-visibility-label">${_("This post visible only to group %s.") % cohort_dictionary[thread['group_id']]} </div> %endif <a href="#" class="vote-btn discussion-vote discussion-vote-up"><span class="plus-icon">+</span> <span class='votes-count-number'>${thread['votes']['up_count']}</span></a> diff --git a/lms/templates/discussion/_thread_list_template.html b/lms/templates/discussion/_thread_list_template.html index c029b673db65cf955145327d48f551ffc4defeee..4e5f48a5753d08d6ce8b52731b4da5bb775837d9 100644 --- a/lms/templates/discussion/_thread_list_template.html +++ b/lms/templates/discussion/_thread_list_template.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <script type="text/template" id="thread-list-template"> <div class="browse-search"> <div class="home"> @@ -9,7 +10,7 @@ <a href="#" class="browse-topic-drop-icon"> <i class="icon icon-reorder"></i> </a> - <a href="#" class="browse-topic-drop-btn"><span class="current-board">Show All Discussions</span> <span class="drop-arrow">â–¾</span></a> + <a href="#" class="browse-topic-drop-btn"><span class="current-board">${_("Show All Discussions")}</span> <span class="drop-arrow">â–¾</span></a> </div> <%include file="_filter_dropdown.html" /> <div class="search"> @@ -19,22 +20,22 @@ </div> </div> <div class="sort-bar"> - <span class="sort-label">Sort by:</span> + <span class="sort-label">${_("Sort by:")}</span> <ul> - <li><a href="#" class="active" data-sort="date">date</a></li> - <li><a href="#" data-sort="votes">votes</a></li> - <li><a href="#" data-sort="comments">comments</a></li> + <li><a href="#" class="active" data-sort="date">${_("date")}</a></li> + <li><a href="#" data-sort="votes">${_("votes")}</a></li> + <li><a href="#" data-sort="comments">${_("comments")}</a></li> </ul> - + %if is_course_cohorted and is_moderator: - <span class="group-filter-label cohort">Show:</span> - <select class="group-filter-select cohort-options cohort"> - <option value="all">View All</option> + <span class="group-filter-label cohort">${_("Show:")}</span> + <select class="group-filter-select cohort-options cohort"> + <option value="all">${_("View All")}</option> %for c in cohorts: - <option value="${c.id}">View as ${c.name}</option> + <option value="${c.id}">${_("View as {name}").format(name=c.name)}</option> %endfor - </select> + </select> %endif </div> <div class="post-list-wrapper"> diff --git a/lms/templates/discussion/_underscore_templates.html b/lms/templates/discussion/_underscore_templates.html index 94efae902b7ff272f65f44cb5b1faa4fd68b3c78..73d890fe18feb1a686805245b5e0c78018f790bc 100644 --- a/lms/templates/discussion/_underscore_templates.html +++ b/lms/templates/discussion/_underscore_templates.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from django_comment_client.permissions import has_permission %> <script type="text/template" id="thread-template"> @@ -8,15 +9,15 @@ <li class="loading"><div class="loading-animation"></div></li> </ol> <div class="post-status-closed bottom-post-status" style="display: none"> - This thread is closed. + ${_("This thread is closed.")} </div> % if course is UNDEFINED or has_permission(user, 'create_comment', course.id): <form class="discussion-reply-new" data-id="${'<%- id %>'}"> - <h4>Post a response:</h4> + <h4>${_("Post a response:")}</h4> <ul class="discussion-errors"></ul> <div class="reply-body" data-id="${'<%- id %>'}"></div> <div class="reply-post-control"> - <a class="discussion-submit-post control-button" href="#">Submit</a> + <a class="discussion-submit-post control-button" href="#">${_("Submit")}</a> </div> </form> % endif @@ -41,24 +42,24 @@ <span class="timeago" title="${'<%- created_at %>'}">${'<%- created_at %>'}</span> <span class="post-status-closed top-post-status" style="display: none"> - • This thread is closed. + ${_("• This thread is closed.")} </span> </p> </header> <div class="post-body">${'<%- body %>'}</div> <div class="discussion-flag-abuse notflagged" data-role="thread-flag" data-tooltip="Report Misuse"> - <i class="icon icon-flag"></i><span class="flag-label">Report Misuse</span></div> + <i class="icon icon-flag"></i><span class="flag-label">${_("Report Misuse")}</span></div> % if course and has_permission(user, 'openclose_thread', course.id): <div class="admin-pin discussion-pin notpinned" data-role="thread-pin" data-tooltip="pin this thread"> - <i class="icon icon-pushpin"></i><span class="pin-label">Pin Thread</span></div> + <i class="icon icon-pushpin"></i><span class="pin-label">${_("Pin Thread")}</span></div> %else: ${"<% if (pinned) { %>"} <div class="discussion-pin notpinned" data-role="thread-pin" data-tooltip="pin this thread"> - <i class="icon icon-pushpin"></i><span class="pin-label">Pin Thread</span></div> + <i class="icon icon-pushpin"></i><span class="pin-label">${_("Pin Thread")}</span></div> ${"<% } %>"} % endif @@ -70,16 +71,16 @@ ${'<% } %>'} <ul class="moderator-actions"> - <li style="display: none"><a class="action-edit" href="javascript:void(0)"><span class="edit-icon"></span> Edit</a></li> - <li style="display: none"><a class="action-delete" href="javascript:void(0)"><span class="delete-icon"></span> Delete</a></li> - <li style="display: none"><a class="action-openclose" href="javascript:void(0)"><span class="edit-icon"></span> Close</a></li> + <li style="display: none"><a class="action-edit" href="javascript:void(0)"><span class="edit-icon"></span> ${_("Edit")}</a></li> + <li style="display: none"><a class="action-delete" href="javascript:void(0)"><span class="delete-icon"></span> ${_("Delete")}</a></li> + <li style="display: none"><a class="action-openclose" href="javascript:void(0)"><span class="edit-icon"></span> ${_("Close")}</a></li> </ul> </div> </script> <script type="text/template" id="thread-edit-template"> <div class="discussion-post edit-post-form"> - <h1>Editing post</h1> + <h1>${_("Editing post")}</h1> <ul class="edit-post-form-errors"></ul> <div class="form-row"> <input type="text" class="edit-post-title" name="title" value="${"<%-title %>"}" placeholder="Title"> @@ -92,8 +93,8 @@ ##<div class="form-row"> ## <input type="text" class="edit-post-tags" name="tags" placeholder="Tags" value="${"<%- tags %>"}"> ##</div> - <input type="submit" class="post-update" value="Update post"> - <a href="#" class="post-cancel">Cancel</a> + <input type="submit" class="post-update" value="${_("Update post")}"> + <a href="#" class="post-cancel">${_("Cancel")}</a> </div> </script> @@ -107,7 +108,7 @@ <div class="comment-body" data-id="${'<%- wmdId %>'}" data-placeholder="Add a comment..."></div> <div class="comment-post-control"> - <a class="discussion-submit-comment control-button" href="#">Submit</a> + <a class="discussion-submit-comment control-button" href="#">${_("Submit")}</a> </div> </form> % endif @@ -129,21 +130,21 @@ <i class="icon icon-flag"></i><span class="flag-label">Report Misuse</span></div> </div> <ul class="moderator-actions response-local"> - <li style="display: none"><a class="action-edit" href="javascript:void(0)"><span class="edit-icon"></span> Edit</a></li> - <li style="display: none"><a class="action-delete" href="javascript:void(0)"><span class="delete-icon"></span> Delete</a></li> - <li style="display: none"><a class="action-openclose" href="javascript:void(0)"><span class="edit-icon"></span> Close</a></li> + <li style="display: none"><a class="action-edit" href="javascript:void(0)"><span class="edit-icon"></span> ${_("Edit")}</a></li> + <li style="display: none"><a class="action-delete" href="javascript:void(0)"><span class="delete-icon"></span> ${_("Delete")}</a></li> + <li style="display: none"><a class="action-openclose" href="javascript:void(0)"><span class="edit-icon"></span> ${_("Close")}</a></li> </ul> </script> <script type="text/template" id="thread-response-edit-template"> <div class="edit-post-form"> - <h1>Editing response</h1> + <h1>${_("Editing response")}</h1> <ul class="edit-post-form-errors"></ul> <div class="form-row"> <div class="edit-post-body" name="body">${"<%- body %>"}</div> </div> - <input type="submit" class="post-update" value="Update response"> - <a href="#" class="post-cancel">Cancel</a> + <input type="submit" class="post-update" value="${_("Update response")}"> + <a href="#" class="post-cancel">${_("Cancel")}</a> </div> </script> diff --git a/lms/templates/discussion/_user_profile.html b/lms/templates/discussion/_user_profile.html index 1ab0f2fee7ffdb60fcc3e83da58faa324dbb608e..2e803a31ce4b36a495b0b4f851394e59c9f68395 100644 --- a/lms/templates/discussion/_user_profile.html +++ b/lms/templates/discussion/_user_profile.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from django_comment_client.helpers import pluralize %> <%! from django_comment_client.permissions import has_permission, check_permissions_by_view %> <%! from operator import attrgetter %> @@ -15,9 +16,9 @@ <div class="sidebar-comments-count"><span>${profiled_user['comments_count'] | h}</span> ${pluralize('comment', profiled_user['comments_count']) | h}</div> % if check_permissions_by_view(user, course.id, content=None, name='update_moderator_status'): % if "Moderator" in role_names: - <a href="javascript:void(0)" class="sidebar-toggle-moderator-button sidebar-revoke-moderator-button">Revoke Moderator rights</a> + <a href="javascript:void(0)" class="sidebar-toggle-moderator-button sidebar-revoke-moderator-button">${_("Revoke Moderator rights")}</a> % else: - <a href="javascript:void(0)" class="sidebar-toggle-moderator-button sidebar-promote-moderator-button">Promote to Moderator</a> + <a href="javascript:void(0)" class="sidebar-toggle-moderator-button sidebar-promote-moderator-button">${_("Promote to Moderator")}</a> % endif % endif </div> diff --git a/lms/templates/discussion/index.html b/lms/templates/discussion/index.html index f0cb18d6170cc6e67611d88319446ac7904e4cff..3b6937b7d567632f71e2731b4106f44b42afb5fb 100644 --- a/lms/templates/discussion/index.html +++ b/lms/templates/discussion/index.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%! import django_comment_client.helpers as helpers %> <%! from django.template.defaultfilters import escapejs %> <%! from django.core.urlresolvers import reverse %> @@ -5,7 +6,7 @@ <%inherit file="../main.html" /> <%namespace name='static' file='../static_content.html'/> <%block name="bodyclass">discussion</%block> -<%block name="title"><title>Discussion – ${course.number | h}</title></%block> +<%block name="title"><title>${_("Discussion - {course_number}").format(course_number=course.number) | h}</title></%block> <%block name="headextra"> <%static:css group='course'/> diff --git a/lms/templates/discussion/maintenance.html b/lms/templates/discussion/maintenance.html index a0f57cdfb35ed92e5215ae318dcf374d27536c15..c5f73c02ba69e7eb35b683665efab70052032344 100644 --- a/lms/templates/discussion/maintenance.html +++ b/lms/templates/discussion/maintenance.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="../main.html" /> -<h1>We're sorry</h1> -<p>The forums are currently undergoing maintenance. We'll have them back up shortly!</p> +<h1>${_("We're sorry")}</h1> +<p>${_("The forums are currently undergoing maintenance. We'll have them back up shortly!")}</p> diff --git a/lms/templates/discussion/single_thread.html b/lms/templates/discussion/single_thread.html index 642dfcf46d7de283dc19f541ac9a95cfccaba965..6aae08a7a7a12c85b8bd841fd157b85c60b26329 100644 --- a/lms/templates/discussion/single_thread.html +++ b/lms/templates/discussion/single_thread.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%! import django_comment_client.helpers as helpers %> <%! from django.template.defaultfilters import escapejs %> <%! from django.core.urlresolvers import reverse %> @@ -6,7 +7,7 @@ <%inherit file="../main.html" /> <%namespace name='static' file='../static_content.html'/> <%block name="bodyclass">discussion</%block> -<%block name="title"><title>Discussion – ${course.number}</title></%block> +<%block name="title"><title>${_("Discussion - {course_number}").format(course_number=course.number) | h}</title></%block> <%block name="headextra"> <%static:css group='course'/> diff --git a/lms/templates/discussion/user_profile.html b/lms/templates/discussion/user_profile.html index 3b273f15fd06e7961beca32034a491d5f2b21029..1c1901c10b8e741cfee81b445ede91a6b6df7abe 100644 --- a/lms/templates/discussion/user_profile.html +++ b/lms/templates/discussion/user_profile.html @@ -1,9 +1,10 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from django.template.defaultfilters import escapejs %> <%inherit file="../main.html" /> <%namespace name='static' file='../static_content.html'/> <%block name="bodyclass">discussion</%block> -<%block name="title"><title>Discussion – ${course.number | h}</title></%block> +<%block name="title"><title>${_("Discussion - {course_number}").format(course_number=course.number) | h}</title></%block> <%block name="headextra"> <%static:css group='course'/> @@ -19,7 +20,7 @@ <section class="container"> <div class="course-wrapper"> - <section aria-label="User Profile" class="user-profile"> + <section aria-label="${_('User Profile')}" class="user-profile"> <nav> <article class="sidebar-module discussion-sidebar"> @@ -30,7 +31,7 @@ </section> <section class="course-content container discussion-user-threads" data-user-id="${django_user.id | escapejs}" data-course-id="${course.id | escapejs}" data-threads="${threads}" data-user-info="${user_info}"> - <h2>Active Threads</h2> + <h2>${_("Active Threads")}</h2> </section> </div> </section> diff --git a/lms/templates/email_change_failed.html b/lms/templates/email_change_failed.html index 0f077ec769c02409821f11f570bc2a40d92477c2..aff4fd734f5e5781c8917ec662636c2ab87681d3 100644 --- a/lms/templates/email_change_failed.html +++ b/lms/templates/email_change_failed.html @@ -1,13 +1,15 @@ +<%! from django.utils.translation import ugettext as _ %> + <%inherit file="main.html" /> <section class="container activation"> <section class="message"> - <h1 class="invalid">E-mail change failed</h1> + <h1 class="invalid">${_("E-mail change failed")}</h1> <hr class="horizontal-divider"> - <p>We were unable to send a confirmation email to ${email}</p> + <p>${_("We were unable to send a confirmation email to {email}").format(email=email)}</p> - <p>Go back to the <a href="/">home page</a>.</p> + <p>${_('Go back to the {link_start}home page{link_end}.').format(link_start='<a href="/">', link_end='</a>')}</p> </section> </section> diff --git a/lms/templates/email_change_successful.html b/lms/templates/email_change_successful.html index 01c45d70502a1632d6c844c36aa21de4e5f1bf33..1fae9739319765dbe758ef3c2afc8ef23d3cf4aa 100644 --- a/lms/templates/email_change_successful.html +++ b/lms/templates/email_change_successful.html @@ -1,12 +1,17 @@ +<%! from django.utils.translation import ugettext as _ %> + <%! from django.core.urlresolvers import reverse %> <%inherit file="main.html" /> <section class="container activation"> <section class="message"> - <h1 class="valid">E-mail change successful!</h1> + <h1 class="valid">${_("E-mail change successful!")}</h1> <hr class="horizontal-divider"> - <p>You should see your new email in your <a href="${reverse('dashboard')}">dashboard</a>.</p> + <p>${_('You should see your new email in your {link_start}dashboard{link_end}.').format( + link_start='<a href="{url}">'.format(url=reverse('dashboard')), + link_end='</a>', + )}</p> </section> </section> diff --git a/lms/templates/email_exists.html b/lms/templates/email_exists.html index e1d12bba968927689b45be5b4ec0e33f92b5c4e2..15df3e76b733dafb5140bb77ab2830b7ae72eef1 100644 --- a/lms/templates/email_exists.html +++ b/lms/templates/email_exists.html @@ -1,13 +1,15 @@ +<%! from django.utils.translation import ugettext as _ %> + <%inherit file="main.html" /> <section class="container activation"> <section class="message"> - <h1 class="invalid">E-mail change failed</h1> + <h1 class="invalid">${_("E-mail change failed")}</h1> <hr class="horizontal-divider"> - <p>An account with the new e-mail address already exists.</p> + <p>${_("An account with the new e-mail address already exists.")}</p> - <p>Go back to the <a href="/">home page</a>.</p> + <p>${_("Go back to the {link_start}home page{link_end}.").format(link_start='<a href="/">', link_end='</a>')}</p> </section> </section> diff --git a/lms/templates/emails_change_successful.html b/lms/templates/emails_change_successful.html index 34a5c6f0f2efa2f433ddb99520ad8b337a5e98d6..da622c696aa94f5af2e882ac59af48096f455b10 100644 --- a/lms/templates/emails_change_successful.html +++ b/lms/templates/emails_change_successful.html @@ -1,12 +1,17 @@ +<%! from django.utils.translation import ugettext as _ %> + <%! from django.core.urlresolvers import reverse %> <%inherit file="main.html" /> <section class="container activation"> <section class="message"> - <h1 class="invalid">E-mail change successful!</h1> + <h1 class="invalid">${_("E-mail change successful!")}</h1> <hr class="horizontal-divider"> - <p>You should see your new email in your <a href="${reverse('dashboard')}">dashboard</a>.</p> + <p>${_('You should see your new email in your {link_start}dashboard{link_end}.').format( + link_start='<a href="{url}">'.format(url=reverse('dashboard')), + link_end='</a>', + )}</p> </section> </section> diff --git a/lms/templates/enroll_students.html b/lms/templates/enroll_students.html index 2f0b6ccc012d1930af376a4364bda58c02b4033d..c3c4f5111b6783be0fd4f190daee058625e95e49 100644 --- a/lms/templates/enroll_students.html +++ b/lms/templates/enroll_students.html @@ -1,29 +1,31 @@ -<h1>Student Enrollment Form </h1> +<%! from django.utils.translation import ugettext as _ %> -<p> Course: ${ course } +<h1>${_("Student Enrollment Form")} </h1> + +<p> ${_("Course: ") % course} <form method="POST"> <input type="hidden" name="csrfmiddlewaretoken" value="${ csrf_token }"> -<h2> Add new students </h2> +<h2> ${_("Add new students")} </h2> <textarea name="new_students"> </textarea> <input type="submit"> </form> -<p> Existing students: +<p> ${_("Existing students:")} <p> ${ existing_students } -<p> New students added: +<p> ${_("New students added: ")} ${ added_students } -<p> Students rejected: +<p> ${_("Students rejected: ")} ${ rejected_students } -<p> Debug: +<p> ${_("Debug: ")} <p> ${ debug } -<p> foo -<p> bar -<p> biff +<p> ${_("foo")} +<p> ${_("bar")} +<p> ${_("biff")} diff --git a/lms/templates/extauth_failure.html b/lms/templates/extauth_failure.html index 330c63e60448a7eb53e05bf06cbd4df621a9f3e0..adc680a7de072f857b2669df1d37aa9650fa46c6 100644 --- a/lms/templates/extauth_failure.html +++ b/lms/templates/extauth_failure.html @@ -1,11 +1,13 @@ +<%! from django.utils.translation import ugettext as _ %> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> - <title>External Authentication failed</title> + <title>${_("External Authentication failed")}</title> </head> <body> - <h1>External Authentication failed</h1> + <h1>${_("External Authentication failed")}</h1> <p>${message}</p> </body> </html> diff --git a/lms/templates/folditbasic.html b/lms/templates/folditbasic.html index fc161ee45ddc9b7daa14958d0a0597aa0dac0e07..e05ceb145240ba933cef92a462d5143ab66cf23c 100644 --- a/lms/templates/folditbasic.html +++ b/lms/templates/folditbasic.html @@ -1,24 +1,26 @@ +<%! from django.utils.translation import ugettext as _ %> + <%! from xmodule.util.date_utils import get_default_time_display %> <div class="folditbasic"> -<p><strong>Due:</strong> ${get_default_time_display(due)} +<p><strong>${_("Due:")}</strong> ${get_default_time_display(due)} <p> - <strong>Status:</strong> + <strong>${_("Status:")}</strong> % if success: - You have successfully gotten to level ${goal_level}. + ${_('You have successfully gotten to level {goal_level}.').format(goal_level=goal_level)}' % else: - You have not yet gotten to level ${goal_level}. + ${_('You have not yet gotten to level {goal_level}.').format(goal_level=goal_level)} % endif </p> -<h3>Completed puzzles</h3> +<h3>${_("Completed puzzles")}</h3> <table> <tr> - <th>Level</th> - <th>Submitted</th> + <th>${_("Level")}</th> + <th>${_("Submitted")}</th> </tr> % for puzzle in completed: <tr> diff --git a/lms/templates/folditchallenge.html b/lms/templates/folditchallenge.html index 677bc286c87955816551cc1a157387a973cbd9b1..36e8f0caee1c2858f3c5528400f53e7a37e34550 100644 --- a/lms/templates/folditchallenge.html +++ b/lms/templates/folditchallenge.html @@ -1,10 +1,12 @@ +<%! from django.utils.translation import ugettext as _ %> + <div class="folditchallenge"> - <h3>Puzzle Leaderboard</h3> + <h3>${_("Puzzle Leaderboard")}</h3> <table> <tr> - <th>User</th> - <th>Score</th> + <th>${_("User")}</th> + <th>${_("Score")}</th> </tr> % for pair in top_scores: <tr> diff --git a/lms/templates/footer.html b/lms/templates/footer.html index daad0a245770a8ed5b2642989b2b0a7a904d9e2d..80772ed9f3c162de7c90d544224ee904945a9506 100644 --- a/lms/templates/footer.html +++ b/lms/templates/footer.html @@ -1,5 +1,6 @@ ## mako <%! from django.core.urlresolvers import reverse %> +<%! from django.utils.translation import ugettext as _ %> <%namespace name='static' file='static_content.html'/> <div class="wrapper wrapper-footer"> @@ -9,27 +10,27 @@ <ol> <li class="nav-colophon-01"> <a id="about" href="${marketing_link('ABOUT')}"> - About + ${_("About")} </a> </li> <li class="nav-colophon-02"> <a id="jobs" href="${marketing_link('JOBS')}"> - Jobs + ${_("Jobs")} </a> </li> <li class="nav-colophon-03"> <a id="press" href="${marketing_link('PRESS')}"> - Press + ${_("Press")} </a> </li> <li class="nav-colophon-04"> <a id="faq" href="${marketing_link('FAQ')}"> - FAQ + ${_("FAQ")} </a> </li> <li class="nav-colophon-05"> <a id="contact" href="${marketing_link('CONTACT')}"> - Contact + ${_("Contact")} </a> </li> </ol> @@ -38,7 +39,7 @@ <div class="colophon-about"> <img src="${MITX_ROOT_URL}/static/images/header-logo.png" /> - <p>EdX is a non-profit created by founding partners Harvard and MIT whose mission is to bring the best of higher education to students of all ages anywhere in the world, wherever there is Internet access. EdX’s free online MOOCs are interactive and subjects include computer science, public health, and artificial intelligence.</p> + <p>${_("EdX is a non-profit created by founding partners Harvard and MIT whose mission is to bring the best of higher education to students of all ages anywhere in the world, wherever there is Internet access. EdX's free online MOOCs are interactive and subjects include computer science, public health, and artificial intelligence.")}</p> </div> </div> @@ -73,15 +74,15 @@ </ul> </nav> - <p class="copyright">© 2013 edX, some rights reserved.</p> + <p class="copyright">${_("© 2013 edX, some rights reserved.")}</p> <nav class="nav-legal"> <ul> <li class="nav-legal-01"> - <a href="${marketing_link('TOS')}">Terms of Service and Honor Code</a> + <a href="${marketing_link('TOS')}">${_("Terms of Service and Honor Code")}</a> </li> <li class="nav-legal-02"> - <a href="${marketing_link('PRIVACY')}">Privacy Policy</a> + <a href="${marketing_link('PRIVACY')}">${_("Privacy Policy")}</a> </li> </ul> </nav> diff --git a/lms/templates/forgot_password_modal.html b/lms/templates/forgot_password_modal.html index 0f88b88f9747f733559c789d393e39b5575e3171..e4c0c02e337a0d01ecef9d319050f5416afc51c3 100644 --- a/lms/templates/forgot_password_modal.html +++ b/lms/templates/forgot_password_modal.html @@ -1,30 +1,32 @@ +<%! from django.utils.translation import ugettext as _ %> + <%! from django.core.urlresolvers import reverse %> <section id="forgot-password-modal" class="modal forgot-password-modal"> <div class="inner-wrapper"> <div id="password-reset"> <header> - <h2>Password Reset</h2> + <h2>${_("Password Reset")}</h2> </header> <div class="instructions"> - <p>Please enter your e-mail address below, and we will e-mail instructions for setting a new password.</p> + <p>${_("Please enter your e-mail address below, and we will e-mail instructions for setting a new password.")}</p> </div> <form id="pwd_reset_form" action="${reverse('password_reset')}" method="post" data-remote="true"> <fieldset class="group group-form group-form-requiredinformation"> - <legend class="is-hidden">Required Information</legend> - + <legend class="is-hidden">${_("Required Information")}</legend> + <ol class="list-input"> <li class="field required text" id="field-email"> - <label for="pwd_reset_email">Your E-mail Address</label> + <label for="pwd_reset_email">${_("Your E-mail Address")}</label> <input class="" id="pwd_reset_email" type="email" name="email" value="" placeholder="example: username@domain.com" /> - <span class="tip tip-input">This is the email address you used to register with ${settings.PLATFORM_NAME}</span> + <span class="tip tip-input">${_("This is the email address you used to register with {platform}").format(platform=settings.PLATFORM_NAME)}</span> </li> </ol> </fieldset> - + <div class="form-actions"> - <button name="submit" type="submit" id="pwd_reset_button" class="action action-primary action-update">Reset My Password</button> + <button name="submit" type="submit" id="pwd_reset_button" class="action action-primary action-update">${_("Reset My Password")}</button> </div> </form> </div> @@ -44,12 +46,12 @@ $("#password-reset").html(json.value); } else { if($('#pwd_error').length == 0) { - $('#pwd_reset_form').prepend('<div id="pwd_error" class="modal-form-error">Email is incorrect.</div>'); + $('#pwd_reset_form').prepend('<div id="pwd_error" class="modal-form-error">${_("Email is incorrect.")}</div>'); } $('#pwd_error').stop().css("display", "block"); } }); - + // removing close link's default behavior $('#login-modal .close-modal').click(function(e) { e.preventDefault(); diff --git a/lms/templates/help_modal.html b/lms/templates/help_modal.html index deb2db3610743672f8e81bd34526aa24d5324ac4..772af03f377c17d67244180cde08d629a1260a29 100644 --- a/lms/templates/help_modal.html +++ b/lms/templates/help_modal.html @@ -1,3 +1,5 @@ +<%! from django.utils.translation import ugettext as _ %> + <%namespace name='static' file='static_content.html'/> <%! from datetime import datetime %> <%! import pytz %> @@ -7,13 +9,13 @@ % if settings.MITX_FEATURES.get('ENABLE_FEEDBACK_SUBMISSION', False): <div class="help-tab"> - <a href="#help-modal" rel="leanModal">Help</a> + <a href="#help-modal" rel="leanModal">${_("Help")}</a> </div> <section id="help-modal" class="modal"> <div class="inner-wrapper" id="help_wrapper"> <header> - <h2><span class="edx">edX</span> Help</h2> + <h2>${_('{span_start}edX{span_end} Help').format(span_start='<span class="edx">', span_end='</span>')}</h2> <hr> </header> @@ -22,22 +24,22 @@ discussion_link = get_discussion_link(course) if course else None %> % if discussion_link: - <p>For <strong>questions on course lectures, homework, tools, or materials for this course</strong>, post in the - <a href="${discussion_link}" target="_blank"/>course discussion forum</a>. + <p>${_('For <strong>questions on course lectures, homework, tools, or materials for this course</strong>, post in the {link_start}course discussion forum{link_end}.').format( + link_start='<a href="{url}" target="_blank">'.format(url=discussion_link), + link_end='</a>', + )} </p> % endif - - <p>Have <strong>general questions about edX</strong>? You can find lots of helpful information in the edX - <a href="/help" target="_blank">FAQ</a>.</p> - <p>Have a <strong>question about something specific</strong>? You can contact the edX general - support team directly:</p> + <p>${_('Have <strong>general questions about edX</strong>? You can find lots of helpful information in the edX {link_start}FAQ{link_end}.').format(link_start='<a href="/help" target="_blank">', link_end='</a>')}</p> + + <p>${_('Have a <strong>question about something specific</strong>? You can contact the edX general support team directly:')}</p> <hr> <div class="help-buttons"> - <a href="#" id="feedback_link_problem">Report a problem</a> - <a href="#" id="feedback_link_suggestion">Make a suggestion</a> - <a href="#" id="feedback_link_question">Ask a question</a> + <a href="#" id="feedback_link_problem">${_('Report a problem')}</a> + <a href="#" id="feedback_link_suggestion">${_('Make a suggestion')}</a> + <a href="#" id="feedback_link_question">${_('Ask a question')}</a> </div> ## TODO: find a way to refactor this @@ -54,15 +56,15 @@ discussion_link = get_discussion_link(course) if course else None <form id="feedback_form" class="feedback_form" method="post" data-remote="true" action="/submit_feedback"> <div id="feedback_error" class="modal-form-error"></div> % if not user.is_authenticated(): - <label data-field="name">Name*</label> + <label data-field="name">${_('Name*')}</label> <input name="name" type="text"> - <label data-field="email">E-mail*</label> + <label data-field="email">${_('E-mail*')}</label> <input name="email" type="text"> % endif - <label data-field="subject">Briefly describe your issue*</label> + <label data-field="subject">${_('Briefly describe your issue*')}</label> <input name="subject" type="text"> - <label data-field="details">Tell us the details* -<span class="tip">Include error messages, steps which lead to the issue, etc</span></label> + <label data-field="details">${_('Tell us the details*')} +<span class="tip">${_('Include error messages, steps which lead to the issue, etc')}</span></label> <textarea name="details"></textarea> <input name="issue_type" type="hidden"> % if course: @@ -82,20 +84,31 @@ discussion_link = get_discussion_link(course) if course else None <div class="inner-wrapper" id="feedback_success_wrapper"> <header> - <h2>Thank You!</h2> + <h2>${_('Thank You!')}</h2> <hr> </header> <% dst = datetime.now(pytz.utc).astimezone(pytz.timezone("America/New_York")).dst() - business_hours = "13:00 UTC to 21:00 UTC" if dst else "14:00 UTC to 22:00 UTC" + if dst: + open_time = "13:00" + close_time = "21:00" + else: + open_time = "14:00" + close_time = "22:00" %> <p> - Thank you for your inquiry or feedback. We typically respond to a - request within one business day (Monday to Friday, - ${business_hours}.) In the meantime, please review our - <a href="/help" target="_blank">detailed FAQs</a> - where most questions have already been answered. + ${_( + 'Thank you for your inquiry or feedback. We typically respond to a request ' + 'within one business day (Monday to Friday, {open_time} UTC to {close_time} UTC.) In the meantime, please ' + 'review our {link_start}detailed FAQs{link_end} where most questions have ' + 'already been answered.' + ).format( + open_time=open_time, + close_time=close_time, + link_start='<a href="/help" target="_blank">', + link_end='</a>' + )} </p> <div class="close-modal"> @@ -129,28 +142,29 @@ discussion_link = get_discussion_link(course) if course else None $("#feedback_link_problem").click(function(event) { showFeedback( event, - "problem", - "Report a Problem", - "Brief description of the problem*", - "Details of the problem you are encountering* <span class='tip'>Include error messages, steps which lead to the issue, etc.</span>" + gettext("problem"), + gettext("Report a Problem"), + gettext("Brief description of the problem*"), + gettext("Details of the problem you are encountering*") + "<span class='tip'>" + + gettext("Include error messages, steps which lead to the issue, etc.") + "</span>" ); }); $("#feedback_link_suggestion").click(function(event) { showFeedback( event, - "suggestion", - "Make a Suggestion", - "Brief description of your suggestion*", - "Details*" + gettext("suggestion"), + gettext("Make a Suggestion"), + gettext("Brief description of your suggestion*"), + gettext("Details*") ); }); $("#feedback_link_question").click(function(event) { showFeedback( event, - "question", - "Ask a Question", - "Brief summary of your question*", - "Details*" + gettext("question"), + gettext("Ask a Question"), + gettext("Brief summary of your question*"), + gettext("Details*") ); }); $("#feedback_form").submit(function() { @@ -175,13 +189,16 @@ discussion_link = get_discussion_link(course) if course else None $("#feedback_error").html(responseData.error).stop().css("display", "block"); } else { // If no data (or malformed data) is returned, a server error occurred - htmlStr = "An error has occurred."; + htmlStr = gettext("An error has occurred."); % if settings.FEEDBACK_SUBMISSION_EMAIL: - htmlStr += " Please <a href='#' id='feedback_email'>send us e-mail</a>."; + htmlStr += " " + _.template( + gettext("Please {link_start}send us e-mail{link_end}."), + {link_start: '<a href="#" id="feedback_email">', link_end='</a>'}, + {interpolate: /\{(.+?)\}/g}) % else: // If no email is configured, we can't do much other than // ask the user to try again later - htmlStr += " Please try again later."; + htmlStr += gettext(" Please try again later."); % endif $("#feedback_error").html(htmlStr).stop().css("display", "block"); % if settings.FEEDBACK_SUBMISSION_EMAIL: diff --git a/lms/templates/index.html b/lms/templates/index.html index e6b9c86ba41c5cc8a5d4b01c5c34281b5338ff6d..5b282ac5d72741e32d024a38993f40f6cbc04628 100644 --- a/lms/templates/index.html +++ b/lms/templates/index.html @@ -1,3 +1,5 @@ +<%! from django.utils.translation import ugettext as _ %> + <%! from django.core.urlresolvers import reverse %> <%! from time import strftime %> <%inherit file="main.html" /> @@ -9,23 +11,23 @@ <div class="title"> <hgroup> % if self.stanford_theme_enabled(): - <h1>Free courses from <strong>Stanford</strong></h1> + <h1>${_("Free courses from <strong>Stanford</strong>")}</h1> % else: - <h1>The Future of Online Education</h1> + <h1>${_("The Future of Online Education")}</h1> % endif - <h2>For anyone, anywhere, anytime</h2> + <h2>${_("For anyone, anywhere, anytime")}</h2> </hgroup> ## Disable social buttons for non-edX sites % if not self.theme_enabled(): <section class="actions"> <div class="main-cta"> - <a href="#signup-modal" id="signup_action" class="find-courses" rel="leanModal">Sign Up</a> + <a href="#signup-modal" id="signup_action" class="find-courses" rel="leanModal">${_("Sign Up")}</a> </div> <div class="secondary-actions"> <div class="social-sharing"> - <div class="sharing-message">Stay up to date with all edX has to offer!</div> + <div class="sharing-message">${_("Stay up to date with all edX has to offer!")}</div> <a href="https://twitter.com/edXOnline" class="share"> <img src="${static.url('images/social/twitter-sharing.png')}"> </a> @@ -54,7 +56,7 @@ <section class="highlighted-courses"> ## Disable university partner logos and sites for non-edX sites % if not self.theme_enabled(): - <h2>Explore free courses from <span class="edx">edX</span> universities</h2> + <h2>${_('Explore free courses from {span_start}edX{span_end} universities').format(span_start='<span class="edx">', span_end='</span>')}</h2> <section class="university-partners university-partners2x6"> <ol class="partners"> @@ -180,8 +182,8 @@ <section class="container"> <section class="more-info"> <header> - <h2><span class="edx">edX</span> News & Announcements</h2> - <a class="action action-mediakit" href="${reverse('media-kit')}"> <span class="org-name">edX</span> MEDIA KIT</a> + <h2>${_('{span_start}edX{span_end} News & Announcements').format(span_start='<span class="edx">', span_end='</span>')}</h2> + <a class="action action-mediakit" href="${reverse('media-kit')}"> ${_('{span_start}edX{span_end} MEDIA KIT').format(span_start='<span class="org-name">', span_end='</span>')}</a> </header> <section class="news"> <section class="blog-posts"> @@ -201,13 +203,13 @@ %endfor </section> <section class="press-links"> - <h3>edX in the News:</h3> - <a target="_blank" href="http://www.nytimes.com/2013/04/30/education/adapting-to-blended-courses-and-finding-early-benefits.html?ref=education">The New York Times</a>, - <a target="_blank" href="http://online.wsj.com/article/SB10001424127887323741004578414861572832182.html?mod=googlenews_wsj">The Wall Street Journal</a>, - <a target="_blank" href="http://www.washingtonpost.com/local/education/stanford-to-help-build-edx-mooc-platform/2013/04/02/5b53bb3e-9bbe-11e2-9a79-eb5280c81c63_story.html">The Washington Post</a>, - <a target="_blank" href="http://www.cbsnews.com/video/watch/?id=50143164n">CBS Television</a>, - <a target="_blank" href="http://bostonglobe.com/2012/12/04/edx/AqnQ808q4IEcaUa8KuZuBO/story.html">The Boston Globe</a> - <a href="${reverse('press')}" class="read-more">Read More →</a> + <h3>${_("edX in the News:")}</h3> + <a target="_blank" href="http://www.nytimes.com/2013/04/30/education/adapting-to-blended-courses-and-finding-early-benefits.html?ref=education">${_("The New York Times")}</a>, + <a target="_blank" href="http://online.wsj.com/article/SB10001424127887323741004578414861572832182.html?mod=googlenews_wsj">${_("The Wall Street Journal")}</a>, + <a target="_blank" href="http://www.washingtonpost.com/local/education/stanford-to-help-build-edx-mooc-platform/2013/04/02/5b53bb3e-9bbe-11e2-9a79-eb5280c81c63_story.html">${_("The Washington Post")}</a>, + <a target="_blank" href="http://www.cbsnews.com/video/watch/?id=50143164n">${_("CBS Television")}</a>, + <a target="_blank" href="http://bostonglobe.com/2012/12/04/edx/AqnQ808q4IEcaUa8KuZuBO/story.html">${_("The Boston Globe")}</a> + <a href="${reverse('press')}" class="read-more">${_("Read More")} →</a> </section> </section> </section> @@ -228,7 +230,6 @@ </div> </section> - <%block name="js_extra"> <script type="text/javascript""> $(window).load(function() { diff --git a/lms/templates/instructor/staff_grading.html b/lms/templates/instructor/staff_grading.html index 0a28a2b02677171dcf5071b5de4607cfd9b933e7..fb6766fe15c9ae75ce774cf0bc9d00008ff8484c 100644 --- a/lms/templates/instructor/staff_grading.html +++ b/lms/templates/instructor/staff_grading.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="/main.html" /> <%block name="bodyclass">${course.css_class}</%block> <%namespace name='static' file='/static_content.html'/> @@ -6,7 +7,7 @@ <%static:css group='course'/> </%block> -<%block name="title"><title>${course.number} Staff Grading</title></%block> +<%block name="title"><title>${_("{course_number} Staff Grading").format(course_number=course.number)}</title></%block> <%include file="/courseware/course_navigation.html" args="active_page='staff_grading'" /> @@ -17,7 +18,7 @@ <section class="container"> <div class="staff-grading" data-ajax_url="${ajax_url}"> -<h1>Staff grading</h1> +<h1>${_("Staff grading")}</h1> <div class="breadcrumbs"> </div> <div class="error-container"> @@ -27,12 +28,12 @@ <! -- Problem List View --> <section class="problem-list-container"> -<h2>Instructions</h2> +<h2>${_("Instructions")}</h2> <div class="instructions"> -<p>This is the list of problems that currently need to be graded in order to train the machine learning models. Each problem needs to be trained separately, and we have indicated the number of student submissions that need to be graded in order for a model to be generated. You can grade more than the minimum required number of submissions--this will improve the accuracy of machine learning, though with diminishing returns. You can see the current accuracy of machine learning while grading.</p> +<p>${_("This is the list of problems that currently need to be graded in order to train the machine learning models. Each problem needs to be trained separately, and we have indicated the number of student submissions that need to be graded in order for a model to be generated. You can grade more than the minimum required number of submissions--this will improve the accuracy of machine learning, though with diminishing returns. You can see the current accuracy of machine learning while grading.")}</p> </div> -<h2>Problem List</h2> +<h2>${_("Problem List")}</h2> <table class="problem-list"> </table> </section> @@ -48,7 +49,7 @@ </div> </div> <div class="prompt-information-container"> - <h3>Prompt <a href="#" class="question-header">(Hide)</a> </h3> + <h3>${_('Prompt')} <a href="#" class="question-header">${_("(Hide)")}</a></h3> <div class="prompt-container"> </div> </div> @@ -56,14 +57,14 @@ </section> <div class="action-button"> - <input type=button value="Submit" class="action-button" name="show" /> + <input type=button value="${_("Submit")}" class="action-button" name="show" /> </div> <section class="grading-wrapper"> <div class="grading-container"> <div class="submission-wrapper"> -<h3>Student Response</h3> +<h3>${_("Student Response")}</h3> <div class="submission-container"> </div> </div> @@ -72,18 +73,18 @@ </p> <p class="grade-selection-container"> </p> - <h3>Written Feedback</h3> - <textarea name="feedback" placeholder="Feedback for student (optional)" + <h3>${_("Written Feedback")}</h3> + <textarea name="feedback" placeholder="${_("Feedback for student (optional)")}" class="feedback-area" cols="70" ></textarea> <p> - Flag as inappropriate content for later review <input class="flag-checkbox" type="checkbox" /> + ${_("Flag as inappropriate content for later review")} <input class="flag-checkbox" type="checkbox" /> </p> </div> - + <div class="submission"> -<input type="button" value="Submit" class="submit-button" name="show"/> -<input type="button" value="Skip" class="skip-button" name="skip"/> +<input type="button" value="${_("Submit")}" class="submit-button" name="show"/> +<input type="button" value="${_("Skip")}" class="skip-button" name="skip"/> </div> </div> diff --git a/lms/templates/invalid_email_key.html b/lms/templates/invalid_email_key.html index 212f91fa9dd97f32f8230e9d2bc95f3366b8ed3e..5fdcdb4b124656055420418286e949d8180ff756 100644 --- a/lms/templates/invalid_email_key.html +++ b/lms/templates/invalid_email_key.html @@ -1,16 +1,18 @@ +<%! from django.utils.translation import ugettext as _ %> + <%inherit file="main.html" /> <section class="container activation"> <section class="message"> - <h1 class="invalid">Invalid email change key</h1> + <h1 class="invalid">${_("Invalid email change key")}</h1> <hr class="horizontal-divider"> - <p> This e-mail key is not valid. Please check:</p> + <p> ${_("This e-mail key is not valid. Please check:")}</p> <ul> - <li>Was this key already used? Check whether the e-mail change has already happened. - <li>Did your e-mail client break the URL into two lines? - <li>The keys are valid for a limited amount of time. Has the key expired? + <li>${_("Was this key already used? Check whether the e-mail change has already happened.")} + <li>${_("Did your e-mail client break the URL into two lines?")} + <li>${_("The keys are valid for a limited amount of time. Has the key expired?")} </ul> - <p>Go back to the <a href="/">home page</a>.</p> + <p>${_('Go back to the {link_start}home page{link_end}.').format(link_start='<a href="/">', link_end='</a>')}</p> </section> </section> diff --git a/lms/templates/licenses/serial_numbers.html b/lms/templates/licenses/serial_numbers.html index 18f0ff8a9bfd425ca83eace673495057976c66aa..a9f048f18f19d4bb2aee09683dc54a51e343d2da 100644 --- a/lms/templates/licenses/serial_numbers.html +++ b/lms/templates/licenses/serial_numbers.html @@ -1,10 +1,11 @@ +<%! from django.utils.translation import ugettext as _ %> <dl> % for license in licenses: <dt> ${license.software.name}: </dt> % if license.serial: <dd> ${license.serial} </dd> % else: - <dd> None Available </dd> + <dd> ${_("None Available")} </dd> % endif % endfor </dl> diff --git a/lms/templates/login.html b/lms/templates/login.html index b7f92cc2a39ce89a67d1ccf031c0c52c81dbbc81..acc1b33b0406f6fa8f0b5debbf0b4e9f81844daf 100644 --- a/lms/templates/login.html +++ b/lms/templates/login.html @@ -1,3 +1,5 @@ +<%! from django.utils.translation import ugettext as _ %> + <%inherit file="main.html" /> <%namespace name='static' file='static_content.html'/> @@ -5,7 +7,7 @@ <%! from django.core.urlresolvers import reverse %> <%! from django.utils.translation import ugettext as _ %> -<%block name="title"><title>Log into your ${settings.PLATFORM_NAME} Account</title></%block> +<%block name="title"><title>${_("Log into your {platform_name} Account").format(platform_name=settings.PLATFORM_NAME)}</title></%block> <%block name="js_extra"> <script type="text/javascript"> @@ -66,13 +68,13 @@ $submitButton. removeClass('is-disabled'). removeProp('disabled'). - html('Log into My ${settings.PLATFORM_NAME} Account <span class="orn-plus">+</span> Access My Courses'); + html("${_('Log into My {platform_name} Account').format(platform_name=settings.PLATFORM_NAME)} <span class='orn-plus'>+</span> ${_('Access My Courses')}"); } else { $submitButton. addClass('is-disabled'). prop('disabled', true). - html('Processing your account information …'); + html(gettext('Processing your account information …')); } } </script> @@ -90,46 +92,46 @@ <!-- status messages --> <div role="alert" class="status message"> - <h3 class="message-title">We're Sorry, ${settings.PLATFORM_NAME} accounts are unavailable currently</h3> + <h3 class="message-title">${_("We're Sorry, {platform_name} accounts are unavailable currently").format(platform_name=settings.PLATFORM_NAME)}</h3> <p class="message-copy">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p> </div> <div role="alert" class="status message submission-error" tabindex="-1"> - <h3 class="message-title">The following errors occurred while logging you in: </h3> + <h3 class="message-title">${_("The following errors occured while logging you in:")} </h3> <ul class="message-copy"> - <li>Your email or password is incorrect</li> + <li>${_("Your email or password is incorrect")}</li> </ul> </div> <p class="instructions sr"> - Please provide the following information to log into your ${settings.PLATFORM_NAME} account. Required fields are noted by <strong class="indicator">bold text and an asterisk (*)</strong>. + ${_('Please provide the following information to log into your {platform_name} account. Required fields are noted by <strong class="indicator">bold text and an asterisk (*)</strong>.').format(platform_name=settings.PLATFORM_NAME)} </p> <fieldset class="group group-form group-form-requiredinformation"> - <legend class="sr">Required Information</legend> + <legend class="sr">${_('Required Information')}</legend> <ol class="list-input"> <li class="field required text" id="field-email"> - <label for="email">E-mail</label> + <label for="email">${_('E-mail')}</label> <input class="" id="email" type="email" name="email" value="" placeholder="example: username@domain.com" required aria-required="true" /> </li> <li class="field required password" id="field-password"> - <label for="password">Password</label> + <label for="password">${_('Password')}</label> <input id="password" type="password" name="password" value="" required aria-required="true" /> <span class="tip tip-input"> - <a href="#forgot-password-modal" rel="leanModal" class="pwd-reset action action-forgotpw">Forgot password?</a> + <a href="#forgot-password-modal" rel="leanModal" class="pwd-reset action action-forgotpw">${_('Forgot password?')}</a> </span> </li> </ol> </fieldset> <fieldset class="group group-form group-form-secondary group-form-accountpreferences"> - <legend class="sr">Account Preferences</legend> + <legend class="sr">${_('Account Preferences')}</legend> <ol class="list-input"> <li class="field required checkbox" id="field-remember"> <input id="remember-yes" type="checkbox" name="remember" value="true" /> - <label for="remember-yes">Remember me</label> + <label for="remember-yes">${_('Remember me')}</label> </li> </ol> </fieldset> @@ -147,27 +149,27 @@ <aside role="complementary"> <header> - <h2 class="sr">Helpful Information</h2> + <h2 class="sr">${_("Helpful Information")}</h2> </header> % if settings.MITX_FEATURES.get('AUTH_USE_OPENID'): <!-- <div class="cta cta-login-options-openid"> - <h3>Login via OpenID</h3> - <p>You can now start learning with edX by logging in with your <a rel="external" href="http://openid.net/">OpenID account</a>.</p> - <a class="action action-login-openid" href="#">Login via OpenID</a> + <h3>${_("Login via OpenID")}</h3> + <p>${_('You can now start learning with edX by logging in with your <a rel="external" href="http://openid.net/">OpenID account</a>.')}</p> + <a class="action action-login-openid" href="#">${_("Login via OpenID")}</a> </div> --> % endif <div class="cta cta-help"> - <h3>Not Enrolled?</h3> - <p><a href="${reverse('register_user')}">Sign up for ${settings.PLATFORM_NAME} today!</a></p> + <h3>${_("Not Enrolled?")}</h3> + <p><a href="${reverse('register_user')}">${_("Sign up for {platform_name} today!").format(platform_name=settings.PLATFORM_NAME)}</a></p> ## Disable help unless the FAQ marketing link is enabled % if settings.MKTG_URL_LINK_MAP.get('FAQ'): - <h3>Need Help?</h3> - <p>Looking for help in logging in or with your ${settings.PLATFORM_NAME} account? + <h3>${_("Need Help?")}</h3> + <p>${_("Looking for help in logging in or with your {platform_name} account?").format(platform_name=settings.PLATFORM_NAME)} <a href="${marketing_link('FAQ')}"> - View our help section for answers to commonly asked questions. + ${_("View our help section for answers to commonly asked questions.")} </a></p> % endif </div> diff --git a/lms/templates/login_modal.html b/lms/templates/login_modal.html index de1c437caf76ab27efc563185ad041cf43503d12..03aebfe1b41f93ac856673bc271d96463de3f54c 100644 --- a/lms/templates/login_modal.html +++ b/lms/templates/login_modal.html @@ -1,38 +1,40 @@ +<%! from django.utils.translation import ugettext as _ %> + <%! from django.core.urlresolvers import reverse %> <%namespace name='static' file='static_content.html'/> <section id="login-modal" class="modal login-modal"> <div class="inner-wrapper"> <header> - <h2>Log In</h2> + <h2>${_("Log In")}</h2> <hr> </header> <form id="login_form" class="login_form" method="post" data-remote="true" action="/login"> - <label for="login_email">E-mail</label> + <label for="login_email">${_("E-mail")}</label> <input id="login_email" type="email" name="email" placeholder="e.g. yourname@domain.com" /> - <label for="login_password">Password</label> + <label for="login_password">${_("Password")}</label> <input id="login_password" type="password" name="password" placeholder="••••••••" /> <label for="login_remember_me" class="remember-me"> <input id="login_remember_me" type="checkbox" name="remember" value="true" /> - Remember me + ${_("Remember me")} </label> <div class="submit"> - <input name="submit" type="submit" value="Access My Courses"> + <input name="submit" type="submit" value="${_('Access My Courses')}"> </div> </form> <section class="login-extra"> <p> - <span>Not enrolled? <a href="#signup-modal" class="close-login" rel="leanModal">Sign up.</a></span> - <a href="#forgot-password-modal" rel="leanModal" class="pwd-reset">Forgot password?</a> + <span>${_('Not enrolled?')} <a href="#signup-modal" class="close-login" rel="leanModal">${_('Sign up.')}</a></span> + <a href="#forgot-password-modal" rel="leanModal" class="pwd-reset">${_('Forgot password?')}</a> </p> % if settings.MITX_FEATURES.get('AUTH_USE_OPENID'): <p> - <a href="${MITX_ROOT_URL}/openid/login/">login via openid</a> + <a href="${MITX_ROOT_URL}/openid/login/">${_('login via openid')}</a> </p> % endif </section> diff --git a/lms/templates/main.html b/lms/templates/main.html index 5c0c383b8414e0f7d3963c8814a1ebc7b683ef44..a25e8f526146996d0066d4bf9649466204e95bf1 100644 --- a/lms/templates/main.html +++ b/lms/templates/main.html @@ -1,3 +1,5 @@ +<%! from django.utils.translation import ugettext as _ %> + <%namespace name='static' file='static_content.html'/> <%! from django.utils import html %> @@ -18,10 +20,11 @@ <head> <%block name="title"> % if stanford_theme_enabled(): - <title>Home | class.stanford.edu</title> + <title>${_("Home")} | class.stanford.edu</title> % else: + ## "edX" should not be translated <title>edX</title> - + <script type="text/javascript"> /* immediately break out of an iframe if coming from the marketing website */ (function(window) { @@ -33,6 +36,8 @@ % endif </%block> + <script type="text/javascript" src="/jsi18n/"></script> + <link rel="icon" type="image/x-icon" href="${static.url(settings.FAVICON_PATH)}" /> <%static:css group='application'/> diff --git a/lms/templates/main_django.html b/lms/templates/main_django.html index da3af1935c33b74c29c5d590b4fb10406c233310..dbfc43f2e14f4dfb702252f08ca3def0ad060e7f 100644 --- a/lms/templates/main_django.html +++ b/lms/templates/main_django.html @@ -2,18 +2,19 @@ {% load compressed %}{% load sekizai_tags i18n %}{% load url from future %}{% load staticfiles %} <html> <head> + {# "edX" should *not* be translated #} {% block title %}<title>edX</title>{% endblock %} - + <link rel="icon" type="image/x-icon" href="{% static "images/favicon.ico" %}" /> - + {% compressed_css 'application' %} {% block main_vendor_js %} {% compressed_js 'main_vendor' %} {% endblock %} {% block headextra %}{% endblock %} {% render_block "css" %} - - + + <!--[if lt IE 9]> <script src="${static.url('js/html5shiv.js')}"></script> <![endif]--> @@ -30,12 +31,12 @@ {% block body %}{% endblock %} {% block bodyextra %}{% endblock %} </section> - + {% include "footer.html" %} - + {% compressed_js 'application' %} {% compressed_js 'module-js' %} - + {% render_block "js" %} </body> </html> @@ -45,8 +46,8 @@ other pages inherit. This file should be rewritten to reflect any changes in main.html! Files used by {% include %} can be written as mako templates. - + Inheriting from this file allows us to include apps that use the django templating system without rewriting all of their views in - mako. + mako. {% endcomment %} diff --git a/lms/templates/module-error.html b/lms/templates/module-error.html index 659dbc1c86403574a280709531e7e2e809b5f942..6d6012c93b387546dd54809f0e0d14be02a2b17f 100644 --- a/lms/templates/module-error.html +++ b/lms/templates/module-error.html @@ -1,17 +1,19 @@ +<%! from django.utils.translation import ugettext as _ %> + <section class="outside-app"> - <h1>There has been an error on the <em>edX</em> servers</h1> - <p>We're sorry, this module is temporarily unavailable. Our staff is working to fix it as soon as possible. Please email us at <a href="mailto:technical@edx.org">technical@edx.org</a> to report any problems or downtime.</p> + <h1>${_("There has been an error on the <em>edX</em> servers")}</h1> + <p>${_("We're sorry, this module is temporarily unavailable. Our staff is working to fix it as soon as possible. Please email us at {email} to report any problems or downtime.").format(email='<a href="mailto:technical@edx.org">technical@edx.org</a>')}</p> % if staff_access: -<h1>Details</h1> +<h1>${_("Details")}</h1> -<p>Error: +<p>${_("Error:")} <pre> ${error | h} </pre> </p> -<p>Raw data: +<p>${_("Raw data:")} <pre>${data | h}</pre> </p> diff --git a/lms/templates/name_changes.html b/lms/templates/name_changes.html index da5d3b241b958416ba6c84ac4fd8e7b7fa992181..c62a471d94d429df673a160b757ee53ce795e1d6 100644 --- a/lms/templates/name_changes.html +++ b/lms/templates/name_changes.html @@ -1,12 +1,14 @@ +<%! from django.utils.translation import ugettext as _ %> + <%inherit file="main.html" /> <script> function name_confirm(id) { postJSON('/accept_name_change',{"id":id}, function(data){ if(data.success){ - $("#div"+id).html("Accepted"); + $("#div"+id).html(gettext("Accepted")); } else { - alert('Error'); + alert(gettext('Error')); } }); } @@ -15,9 +17,9 @@ function name_deny(id) { postJSON('/reject_name_change',{"id":id}, function(data){ if(data.success){ - $("#div"+id).html("Rejected"); + $("#div"+id).html(gettext("Rejected")); } else { - alert('Error'); + alert(gettext('Error')); } }); } @@ -26,7 +28,7 @@ function name_deny(id) { <section class="container"> <div class="gradebook-wrapper"> <section class="gradebook-content"> - <h1>Pending name changes</h1> + <h1>${_("Pending name changes")}</h1> <table> % for s in students: <tr> @@ -34,8 +36,8 @@ function name_deny(id) { <td>${s['new_name']|h}</td> <td>${s['email']|h}</td> <td>${s['rationale']|h}</td> - <td><span id="div${s['cid']}"><span onclick="name_confirm(${s['cid']});">[Confirm]</span> - <span onclick="name_deny(${s['cid']});">[Reject]</span></span></td></tr> + <td><span id="div${s['cid']}"><span onclick="name_confirm(${s['cid']});">${_("[Confirm]")}</span> + <span onclick="name_deny(${s['cid']});">${_("[Reject]")}</span></span></td></tr> % endfor </table> </section> diff --git a/lms/templates/navigation.html b/lms/templates/navigation.html index a26e1ca36785176440639cda4f9353f6c7f89d4a..74166b528e5d101979fcd65f6f6b12416386a0d1 100644 --- a/lms/templates/navigation.html +++ b/lms/templates/navigation.html @@ -3,6 +3,7 @@ <%namespace file='main.html' import="login_query, stanford_theme_enabled"/> <%! from django.core.urlresolvers import reverse +from django.utils.translation import ugettext as _ # App that handles subdomain specific branding import branding @@ -34,16 +35,16 @@ site_status_msg = get_site_status_msg(course_id) % if course: - <header class="global slim" aria-label="Global Navigation"> + <header class="global slim" aria-label="${_('Global Navigation')}"> % else: - <header class="global" aria-label="Global Navigation"> + <header class="global" aria-label="${_('Global Navigation')}"> % endif <nav> <h1 class="logo"> <a href="${marketing_link('ROOT')}"> <%block name="navigation_logo"> - <img src="${static.url(branding.get_logo_url(request.META.get('HTTP_HOST')))}" alt="edX home" /> + <img src="${static.url(branding.get_logo_url(request.META.get('HTTP_HOST')))}" alt="${_('edX home')}" /> </%block> </a> </h1> @@ -57,7 +58,7 @@ site_status_msg = get_site_status_msg(course_id) <ol class="left nav-global authenticated"> <%block name="navigation_global_links_authenticated"> <li class="nav-global-01"> - <a href="${marketing_link('COURSES')}">Find Courses</a> + <a href="${marketing_link('COURSES')}">${_('Find Courses')}</a> </li> </%block> </ol> @@ -65,16 +66,16 @@ site_status_msg = get_site_status_msg(course_id) <li class="primary"> <a href="${reverse('dashboard')}" class="user-link"> <span class="avatar"></span> - <span class="sr">Dashboard for: </span> ${user.username} + <span class="sr">${_("Dashboard for:")} </span> ${user.username} </a> </li> <li class="primary"> - <a href="#" class="dropdown"><span class="sr">More options dropdown</span> ▾</a> + <a href="#" class="dropdown"><span class="sr">${_("More options dropdown")}</span> ▾</a> <ul class="dropdown-menu"> <%block name="navigation_dropdown_menu_links" > - <li><a href="${marketing_link('FAQ')}">Help</a></li> + <li><a href="${marketing_link('FAQ')}">${_("Help")}</a></li> </%block> - <li><a href="${reverse('logout')}">Log Out</a></li> + <li><a href="${reverse('logout')}">${_("Log Out")}</a></li> </ul> </li> </ol> @@ -84,24 +85,24 @@ site_status_msg = get_site_status_msg(course_id) <%block name="navigation_global_links"> % if settings.MITX_FEATURES.get('ENABLE_MKTG_SITE'): <li class="nav-global-01"> - <a href="${marketing_link('HOW_IT_WORKS')}">How it Works</a> + <a href="${marketing_link('HOW_IT_WORKS')}">${_("How it Works")}</a> </li> <li class="nav-global-02"> - <a href="${marketing_link('COURSES')}">Courses</a> + <a href="${marketing_link('COURSES')}">${_("Courses")}</a> </li> <li class="nav-global-03"> - <a href="${marketing_link('SCHOOLS')}">Schools</a> + <a href="${marketing_link('SCHOOLS')}">${_("Schools")}</a> </li> % endif </%block> % if not settings.MITX_FEATURES['DISABLE_LOGIN_BUTTON']: % if course and settings.MITX_FEATURES.get('RESTRICT_ENROLL_BY_REG_METHOD') and course.enrollment_domain: <li class="nav-global-04"> - <a class="cta cta-register" href="${reverse('course-specific-register', args=[course.id])}">Register Now</a> + <a class="cta cta-register" href="${reverse('course-specific-register', args=[course.id])}">${_("Register Now")}</a> </li> % else: <li class="nav-global-04"> - <a class="cta cta-register" href="/register">Register Now</a> + <a class="cta cta-register" href="/register">${_("Register Now")}</a> </li> % endif % endif @@ -111,9 +112,9 @@ site_status_msg = get_site_status_msg(course_id) <li class="nav-courseware-01"> % if not settings.MITX_FEATURES['DISABLE_LOGIN_BUTTON']: % if course and settings.MITX_FEATURES.get('RESTRICT_ENROLL_BY_REG_METHOD') and course.enrollment_domain: - <a class="cta cta-login" href="${reverse('course-specific-login', args=[course.id])}${login_query()}">Log in</a> + <a class="cta cta-login" href="${reverse('course-specific-login', args=[course.id])}${login_query()}">${_("Log in")}</a> % else: - <a class="cta cta-login" href="/login${login_query()}">Log in</a> + <a class="cta cta-login" href="/login${login_query()}">${_("Log in")}</a> % endif % endif </li> @@ -122,7 +123,7 @@ site_status_msg = get_site_status_msg(course_id) </nav> </header> % if course: -<div class="ie-banner"><strong>Warning:</strong> Your browser is not fully supported. We strongly recommend using <a href="https://www.google.com/intl/en/chrome/browser/" target="_blank">Chrome</a> or <a href="http://www.mozilla.org/en-US/firefox/new/" target="_blank">Firefox</a>.</div> +<div class="ie-banner">${_('<strong>Warning:</strong> Your browser is not fully supported. We strongly recommend using {chrome_link_start}Chrome{chrome_link_end} or {ff_link_start}Firefox{ff_link_end}.').format(chrome_link_start='<a href="https://www.google.com/intl/en/chrome/browser/" target="_blank">', chrome_link_end='</a>', ff_link_start='<a href="http://www.mozilla.org/en-US/firefox/new/" target="_blank">', ff_link_end='</a>')}</div> % endif %if not user.is_authenticated(): diff --git a/lms/templates/notes.html b/lms/templates/notes.html index 3fea6faa3e6ed73915d2c914dab9793892be32c9..16fdc2ebc91085ef14db0675ca8a6255f2ceaeea 100644 --- a/lms/templates/notes.html +++ b/lms/templates/notes.html @@ -1,3 +1,5 @@ +<%! from django.utils.translation import ugettext as _ %> + <%namespace name='static' file='static_content.html'/> <%inherit file="main.html" /> <%! @@ -55,27 +57,24 @@ <section class="container"> <div class="notes-wrapper"> - <h1>My Notes</h1> + <h1>${_("My Notes")}</h1> % for note in notes: <div class="note"> <blockquote>${note.quote|h}</blockquote> <div class="text">${note.text.replace("\n", "<br />") | n,h}</div> <ul class="meta"> % if note.tags: - <li class="tags">Tags: ${note.tags|h}</li> + <li class="tags">${_("Tags: {tags}").format(tags=note.tags) | h}</li> % endif - <li class="user">Author: ${note.user.username}</li> - <li class="time">Created: ${note.created.strftime('%m/%d/%Y %H:%m')}</li> - <li class="uri">Source: <a href="${note.uri}">${note.uri|h}</a></li> + <li class="user">${_('Author: {username}').format(username=note.user.username)}</li> + <li class="time">${_('Created: {datetime}').format(datetime=note.created.strftime('%m/%d/%Y %H:%m'))}</li> + <li class="uri">${_('Source: {link}').format(link='<a href="{url}">{url}</a>'.format(url=note.uri))}</li> </ul> </div> % endfor % if notes is UNDEFINED or len(notes) == 0: - <p>You do not have any notes.</p> + <p>${_('You do not have any notes.')}</p> % endif </div> </section> - - - diff --git a/lms/templates/open_ended_problems/combined_notifications.html b/lms/templates/open_ended_problems/combined_notifications.html index deb66b606468ad1ce3742f7552ead48a25d05638..86eb4083ddbb6812e39568e0971bc82831a9c1ea 100644 --- a/lms/templates/open_ended_problems/combined_notifications.html +++ b/lms/templates/open_ended_problems/combined_notifications.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="/main.html" /> <%block name="bodyclass">${course.css_class}</%block> <%namespace name='static' file='/static_content.html'/> @@ -6,7 +7,7 @@ <%static:css group='course'/> </%block> -<%block name="title"><title>${course.number} Combined Notifications</title></%block> +<%block name="title"><title>${_("{course_number} Combined Notifications").format(course_number=course.number)}</title></%block> <%include file="/courseware/course_navigation.html" args="active_page='open_ended'" /> @@ -14,13 +15,13 @@ <section class="container"> <div class="combined-notifications" data-ajax_url="${ajax_url}"> <div class="error-container">${error_text}</div> - <h1>Open Ended Console</h1> - <h2>Instructions</h2> - <p>Here are items that could potentially need your attention.</p> + <h1>${_("Open Ended Console")}</h1> + <h2>${_("Instructions")}</h2> + <p>${_("Here are items that could potentially need your attention.")}</p> % if success: % if len(notification_list) == 0: <div class="message-container"> - No items require attention at the moment. + ${_("No items require attention at the moment.")} </div> %else: <div class="notification-container"> diff --git a/lms/templates/open_ended_problems/open_ended_flagged_problems.html b/lms/templates/open_ended_problems/open_ended_flagged_problems.html index b4c6f43685766c92ededc7e977e52ea2d0213098..ab60e543004f00b27d7a6eab7cda9954e8dbcbfc 100644 --- a/lms/templates/open_ended_problems/open_ended_flagged_problems.html +++ b/lms/templates/open_ended_problems/open_ended_flagged_problems.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="/main.html" /> <%block name="bodyclass">${course.css_class}</%block> <%namespace name='static' file='/static_content.html'/> @@ -6,7 +7,7 @@ <%static:css group='course'/> </%block> -<%block name="title"><title>${course.number} Flagged Open Ended Problems</title></%block> +<%block name="title"><title>${_("{course_number} Flagged Open Ended Problems").format(course_number=course.number)}</title></%block> <%include file="/courseware/course_navigation.html" args="active_page='open_ended_flagged_problems'" /> @@ -17,19 +18,19 @@ <section class="container"> <div class="open-ended-problems" data-ajax_url="${ajax_url}"> <div class="error-container">${error_text}</div> - <h1>Flagged Open Ended Problems</h1> - <h2>Instructions</h2> - <p>Here are a list of open ended problems for this course that have been flagged by students as potentially inappropriate.</p> + <h1>${_("Flagged Open Ended Problems")}</h1> + <h2>${_("Instructions")}</h2> + <p>${_("Here are a list of open ended problems for this course that have been flagged by students as potentially inappropriate.")}</p> % if success: % if len(problem_list) == 0: <div class="message-container"> - No flagged problems exist. + ${_("No flagged problems exist.")} </div> %else: <table class="problem-list"> <tr> - <th>Name</th> - <th>Response</th> + <th>${_("Name")}</th> + <th>${_("Response")}</th> <th></th> <th></th> </tr> @@ -42,10 +43,10 @@ ${problem['student_response']} </td> <td> - <a href="#unflag" class="unflag-button action-button" data-action-type="unflag">Unflag</a> + <a href="#unflag" class="unflag-button action-button" data-action-type="unflag">${_("Unflag")}</a> </td> <td> - <a href="#ban" class="ban-button action-button" data-action-type="ban">Ban</a> + <a href="#ban" class="ban-button action-button" data-action-type="ban">${_("Ban")}</a> </td> <td> <div class="action-taken"></div> diff --git a/lms/templates/open_ended_problems/open_ended_problems.html b/lms/templates/open_ended_problems/open_ended_problems.html index 3709fb2de6c45810249d5cf17563d24e37e65c3a..2905373b04c0ad394b77f5f07a8517b59a1fe104 100644 --- a/lms/templates/open_ended_problems/open_ended_problems.html +++ b/lms/templates/open_ended_problems/open_ended_problems.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="/main.html" /> <%block name="bodyclass">${course.css_class}</%block> <%namespace name='static' file='/static_content.html'/> @@ -6,7 +7,7 @@ <%static:css group='course'/> </%block> -<%block name="title"><title>${course.number} Open Ended Problems</title></%block> +<%block name="title"><title>${_("{course_number} Open Ended Problems").format(course_number=course.number)}</title></%block> <%include file="/courseware/course_navigation.html" args="active_page='open_ended_problems'" /> @@ -14,31 +15,31 @@ <section class="container"> <div class="open-ended-problems" data-ajax_url="${ajax_url}"> <div class="error-container">${error_text}</div> - <h1>Open Ended Problems</h1> - <h2>Instructions</h2> - <p>Here are a list of open ended problems for this course.</p> + <h1>${_("Open Ended Problems")}</h1> + <h2>${_("Instructions")}</h2> + <p>${_("Here are a list of open ended problems for this course.")}</p> % if success: % if len(problem_list) == 0: <div class="message-container"> - You have not attempted any open ended problems yet. + ${_("You have not attempted any open ended problems yet.")} </div> %else: <table class="problem-list"> <tr> - <th>Problem Name</th> - <th>Status</th> - <th>Grader Type</th> - <th>ETA</th> + <th>${_("Problem Name")}</th> + <th>${_("Status")}</th> + <th>${_("Grader Type")}</th> + <th>${_("ETA")}</th> </tr> %for problem in problem_list: <tr> <td> - <a href="${problem['actual_url']}">${problem['problem_name']}</a> + <a href="${problem['actual_url']}">${problem['problem_name']}</a> </td> <td> - ${problem['state']} + ${problem['state']} </td> - <td> + <td> ${problem['grader_type']} </td> <td> diff --git a/lms/templates/peer_grading/peer_grading.html b/lms/templates/peer_grading/peer_grading.html index 0485b698b2d34969caaa0dd586bb7080eaeaba32..8e32e7a2851367d50cd4d6db4c007fdd73279377 100644 --- a/lms/templates/peer_grading/peer_grading.html +++ b/lms/templates/peer_grading/peer_grading.html @@ -1,24 +1,25 @@ +<%! from django.utils.translation import ugettext as _ %> <section class="container peer-grading-container"> <div class="peer-grading" data-ajax-url="${ajax_url}" data-use-single-location="${use_single_location}"> <div class="error-container">${error_text}</div> - <h1>Peer Grading</h1> - <h2>Instructions</h2> - <p>Here are a list of problems that need to be peer graded for this course.</p> + <h1>${_("Peer Grading")}</h1> + <h2>${_("Instructions")}</h2> + <p>${_("Here are a list of problems that need to be peer graded for this course.")}</p> % if success: % if len(problem_list) == 0: <div class="message-container"> - Nothing to grade! + ${_("Nothing to grade!")} </div> %else: <div class="problem-list-container"> <table class="problem-list"> <tr> - <th>Problem Name</th> - <th>Due date</th> - <th>Graded</th> - <th>Available</th> - <th>Required</th> - <th>Progress</th> + <th>${_("Problem Name")}</th> + <th>${_("Due date")}</th> + <th>${_("Graded")}</th> + <th>${_("Available")}</th> + <th>${_("Required")}</th> + <th>${_("Progress")}</th> </tr> %for problem in problem_list: <tr data-graded="${problem['num_graded']}" data-required="${problem['num_required']}"> @@ -33,7 +34,7 @@ % if problem['due']: ${problem['due']} % else: - No due date + ${_("No due date")} % endif </td> <td> diff --git a/lms/templates/peer_grading/peer_grading_closed.html b/lms/templates/peer_grading/peer_grading_closed.html index 712ad8b3804793fd6847814a6b359eef803834e3..af5b6066742dbc6423140c660564c900a361518f 100644 --- a/lms/templates/peer_grading/peer_grading_closed.html +++ b/lms/templates/peer_grading/peer_grading_closed.html @@ -1,10 +1,9 @@ +<%! from django.utils.translation import ugettext as _ %> <section class="container peer-grading-container"> -<h2>Peer Grading</h2> - <p>The due date has passed, and +<h2>${_("Peer Grading")}</h2> % if use_for_single_location: - peer grading for this problem is closed at this time. + <p>${_("The due date has passed, and peer grading for this problem is closed at this time.")} </p> %else: - peer grading is closed at this time. + <p>${_("The due date has passed, and peer grading is closed at this time.")} </p> %endif - </p> </section> diff --git a/lms/templates/peer_grading/peer_grading_problem.html b/lms/templates/peer_grading/peer_grading_problem.html index 5ad313681543dafc7b983a2993e8ab5bd77be03a..6b00135b468e68c99266d34a0b73475211f1990e 100644 --- a/lms/templates/peer_grading/peer_grading_problem.html +++ b/lms/templates/peer_grading/peer_grading_problem.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <section class="container peer-grading-container"> <div class="peer-grading" data-ajax-url="${ajax_url}" data-location="${problem_location}" data-use-single-location="${use_single_location}"> <div class="error-container"></div> @@ -5,15 +6,15 @@ <section class="content-panel"> <div class="instructions-panel"> <div class="calibration-panel"> - <h3>Learning to Grade</h3> + <h3>${_("Learning to Grade")}</h3> </div> <div class="grading-panel"> - <h3>Peer Grading</h3> + <h3>${_("Peer Grading")}</h3> </div> </div> <div class="prompt-wrapper"> - <h2>Prompt <a href="#" class="question-header">(Hide)</a> </h2> + <h2>${_('Prompt')} <a href="#" class="question-header">${_('(Hide)')}</a></h2> <div class="prompt-information-container"> <section> <div class="prompt-container"> @@ -25,7 +26,7 @@ <section class="grading-wrapper"> - <h2>Student Response</h2> + <h2>${_("Student Response")}</h2> <div class="grading-container"> <div class="submission-wrapper"> @@ -39,17 +40,17 @@ <p class="rubric-selection-container"></p> <p class="score-selection-container"> </p> - <h3>Written Feedback</h3> - <p>Please include some written feedback as well.</p> + <h3>${_("Written Feedback")}</h3> + <p>${_("Please include some written feedback as well.")}</p> <textarea name="feedback" placeholder="Feedback for student" class="feedback-area" cols="70" ></textarea> - <div class="flag-student-container"> This submission has explicit or pornographic content : <input type="checkbox" class="flag-checkbox" value="student_is_flagged"> </div> - <div class="answer-unknown-container"> I do not know how to grade this question : <input type="checkbox" class="answer-unknown-checkbox" value="answer_is_unknown"></div> + <div class="flag-student-container"> ${_("This submission has explicit or pornographic content : ")}<input type="checkbox" class="flag-checkbox" value="student_is_flagged"> </div> + <div class="answer-unknown-container"> ${_("I do not know how to grade this question : ")}<input type="checkbox" class="answer-unknown-checkbox" value="answer_is_unknown"></div> </div> - + <div class="submission"> - <input type="button" value="Submit" class="submit-button" name="show"/> + <input type="button" value="${_("Submit")}" class="submit-button" name="show"/> </div> </div> @@ -60,41 +61,41 @@ </section> <!-- Calibration feedback: Shown after a calibration is sent --> <section class="calibration-feedback"> - <h2>How did I do?</h2> + <h2>${_("How did I do?")}</h2> <div class="calibration-feedback-wrapper"> </div> - <input type="button" class="calibration-feedback-button" value="Continue" name="calibration-feedback-button" /> + <input type="button" class="calibration-feedback-button" value="${_("Continue")}" name="calibration-feedback-button" /> </section> <!-- Interstitial Page: Shown between calibration and grading steps --> <section class="interstitial-page"> - <h1>Ready to grade!</h1> - <p> You have finished learning to grade, which means that you are now ready to start grading.</p> - <input type="button" class="interstitial-page-button" value="Start Grading!" name="interstitial-page-button" /> + <h1>${_("Ready to grade!")}</h1> + <p>${_(" You have finished learning to grade, which means that you are now ready to start grading.")}</p> + <input type="button" class="interstitial-page-button" value="${_("Start Grading!")}" name="interstitial-page-button" /> </section> <!-- Calibration Interstitial Page: Shown before calibration --> <section class="calibration-interstitial-page"> - <h1>Learning to grade</h1> - <p> You have not yet finished learning to grade this problem.</p> - <p> You will now be shown a series of instructor-scored essays, and will be asked to score them yourself.</p> - <p> Once you can score the essays similarly to an instructor, you will be ready to grade your peers.</p> - <input type="button" class="calibration-interstitial-page-button" value="Start learning to grade" name="calibration-interstitial-page-button" /> + <h1>${_("Learning to grade")}</h1> + <p>${_(" You have not yet finished learning to grade this problem.")}</p> + <p>${_(" You will now be shown a series of instructor-scored essays, and will be asked to score them yourself.")}</p> + <p>${_(" Once you can score the essays similarly to an instructor, you will be ready to grade your peers.")}</p> + <input type="button" class="calibration-interstitial-page-button" value="${_("Start learning to grade")}" name="calibration-interstitial-page-button" /> </section> <!-- Flag submission confirmation dialog --> <section class="flag-submission-confirmation"> - <h4> Are you sure that you want to flag this submission?</h4> + <h4>${_(" Are you sure that you want to flag this submission?")}</h4> <p> - You are about to flag a submission. You should only flag a submission that contains explicit or offensive content. If the submission is not addressed to the question or is incorrect, you should give it a score of zero and accompanying feedback instead of flagging it. + ${_("You are about to flag a submission. You should only flag a submission that contains explicit or offensive content. If the submission is not addressed to the question or is incorrect, you should give it a score of zero and accompanying feedback instead of flagging it.")} </p> <div> - <input type="button" class="flag-submission-removal-button" value="Remove Flag" name="calibration-interstitial-page-button" /> - <input type="button" class="flag-submission-confirmation-button" value="Keep Flag" name="calibration-interstitial-page-button" /> + <input type="button" class="flag-submission-removal-button" value="${_("Remove Flag")}" name="calibration-interstitial-page-button" /> + <input type="button" class="flag-submission-confirmation-button" value="${_("Keep Flag")}" name="calibration-interstitial-page-button" /> </div> </section> - <input type="button" value="Go Back" class="action-button" name="back" /> + <input type="button" value="${_("Go Back")}" class="action-button" name="back" /> </div> </section> diff --git a/lms/templates/problem.html b/lms/templates/problem.html index f4f8e78b66c99ee080bac6422317cb893bcb060e..efcb868cb9b683c21ed1fc8740c2130e2b83e783 100644 --- a/lms/templates/problem.html +++ b/lms/templates/problem.html @@ -1,3 +1,5 @@ +<%! from django.utils.translation import ugettext as _ %> + <%namespace name='static' file='static_content.html'/> <h2 class="problem-header"> ${ problem['name'] } @@ -16,17 +18,17 @@ <input class="check ${ check_button }" type="button" value="${ check_button }" /> % endif % if reset_button: - <input class="reset" type="button" value="Reset" /> + <input class="reset" type="button" value="${_('Reset')}" /> % endif % if save_button: - <input class="save" type="button" value="Save" /> + <input class="save" type="button" value="${_('Save')}" /> % endif % if answer_available: - <button class="show"><span class="show-label">Show Answer(s)</span> <span class="sr">(for question(s) above - adjacent to each field)</span></button> + <button class="show"><span class="show-label">${_('Show Answer(s)')}</span> <span class="sr">${_("(for question(s) above - adjacent to each field)")}</span></button> % endif % if attempts_allowed : <section class="submission_feedback"> - You have used ${ attempts_used } of ${ attempts_allowed } submissions + ${_("You have used {num_used} of {num_total} submissions").format(num_used=attempts_used, num_total=attempts_allowed)} </section> % endif </section> diff --git a/lms/templates/provider_login.html b/lms/templates/provider_login.html index a98b2ab32bfaa304f05cfc29ccf08acbd2fcd45c..3bcd22fafd7e3f1f0fe56cc10d20748f012f15ae 100644 --- a/lms/templates/provider_login.html +++ b/lms/templates/provider_login.html @@ -1,3 +1,5 @@ +<%! from django.utils.translation import ugettext as _ %> + <%inherit file="main.html" /> <%namespace name='static' file='static_content.html'/> @@ -32,19 +34,19 @@ <section id="login-modal" class="modal login-modal openid-login"> <div class="inner-wrapper"> <header> - <h2>Log In</h2> + <h2>${_("Log In")}</h2> <hr> </header> <form id="login_form" class="login_form" method="post" action="/openid/provider/login/"> %if error: - <div id="login_error" class="modal-form-error" style="display: block;">Email or password is incorrect.</div> + <div id="login_error" class="modal-form-error" style="display: block;">${_("Email or password is incorrect.")}</div> %endif - <label>E-mail</label> - <input type="text" name="email" placeholder="E-mail" tabindex="1" autofocus="autofocus" /> - <label>Password</label> - <input type="password" name="password" placeholder="Password" tabindex="2" /> + <label>${_("E-mail")}</label> + <input type="text" name="email" placeholder="${_('E-mail')}" tabindex="1" autofocus="autofocus" /> + <label>${_("Password")}</label> + <input type="password" name="password" placeholder="${_('Password')}" tabindex="2" /> <div class="submit"> - <input name="submit" type="submit" value="Return To ${return_to}" tabindex="3" /> + <input name="submit" type="submit" value="${_('Return To %s') % return_to}" tabindex="3" /> </div> </form> </div> diff --git a/lms/templates/register.html b/lms/templates/register.html index ec6bdd81bb37ac1ee5dbbb3f3b0d216a2dbd2d44..41b38d19ec813b23b0e609c71d5ddf065037acb3 100644 --- a/lms/templates/register.html +++ b/lms/templates/register.html @@ -1,3 +1,5 @@ +<%! from django.utils.translation import ugettext as _ %> + <%inherit file="main.html" /> <%namespace name='static' file='static_content.html'/> @@ -11,7 +13,7 @@ <%! from datetime import date %> <%! import calendar %> -<%block name="title"><title>Register for ${settings.PLATFORM_NAME}</title></%block> +<%block name="title"><title>${_("Register for {platform_name}").format(platform_name=settings.PLATFORM_NAME)}</title></%block> <%block name="js_extra"> <script type="text/javascript"> @@ -69,13 +71,13 @@ $submitButton. removeClass('is-disabled'). removeProp('disabled'). - html('Create My ${settings.PLATFORM_NAME} Account'); + html("${_('Create my {platform_name} Account').format(platform_name=settings.PLATFORM_NAME)}"); } else { $submitButton. addClass('is-disabled'). prop('disabled', true). - html('Processing your account information …'); + html(gettext('Processing your account information …')); } } </script> @@ -83,7 +85,7 @@ <section class="introduction"> <header> - <h1 class="sr">${_("Welcome! Register below to create your %(platform_name)s account") % {'platform_name': settings.PLATFORM_NAME}}</h1> + <h1 class="sr">${_("Welcome! Register below to create your {platform_name} account").format(platform_name=settings.PLATFORM_NAME)}</h1> </header> </section> @@ -93,51 +95,51 @@ <!-- status messages --> <div role="alert" class="status message"> - <h3 class="message-title">We're sorry, ${settings.PLATFORM_NAME} enrollment is not available in your region</h3> - <p class="message-copy">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p> + <h3 class="message-title">${_("We're sorry, {platform_name} enrollment is not available in your region").format(platform_name=settings.PLATFORM_NAME)}</h3> + <p class="message-copy">${_("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.")}</p> </div> <div role="alert" class="status message submission-error" tabindex="-1"> - <h3 class="message-title">The following errors occured while processing your registration: </h3> + <h3 class="message-title">${_("The following errors occured while processing your registration:")} </h3> <ul class="message-copy"> </ul> </div> <p class="instructions"> - Please complete the following fields to register for an account. <br /> - Required fields are noted by <strong class="indicator">bold text and an asterisk (*)</strong>. + ${_("Please complete the following fields to register for an account. ")}<br /> + ${_('Required fields are noted by <strong class="indicator">bold text and an asterisk (*)</strong>.')} </p> <fieldset class="group group-form group-form-requiredinformation"> - <legend class="sr">Required Information</legend> + <legend class="sr">${_('Required Information')}</legend> % if has_extauth_info is UNDEFINED: <ol class="list-input"> <li class="field required text" id="field-email"> - <label for="email">E-mail</label> - <input class="" id="email" type="email" name="email" value="" placeholder="example: username@domain.com" required aria-required="true" /> + <label for="email">${_('E-mail')}</label> + <input class="" id="email" type="email" name="email" value="" placeholder="${_('example: username@domain.com')}" required aria-required="true" /> </li> <li class="field required password" id="field-password"> - <label for="password">Password</label> + <label for="password">${_('Password')}</label> <input id="password" type="password" name="password" value="" required aria-required="true" /> </li> <li class="field required text" id="field-username"> - <label for="username">Public Username</label> - <input id="username" type="text" name="username" value="" placeholder="example: JaneDoe" required aria-required="true" /> - <span class="tip tip-input">Will be shown in any discussions or forums you participate in</span> + <label for="username">${_('Public Username')}</label> + <input id="username" type="text" name="username" value="" placeholder="${_('example: JaneDoe')}" required aria-required="true" /> + <span class="tip tip-input">${_('Will be shown in any discussions or forums you participate in')}</span> </li> <li class="field required text" id="field-name"> - <label for="name">Full Name</label> - <input id="name" type="text" name="name" value="" placeholder="example: Jane Doe" required aria-required="true" /> - <span class="tip tip-input">Needed for any certificates you may earn <strong>(cannot be changed later)</strong></span> + <label for="name">${_('Full Name')}</label> + <input id="name" type="text" name="name" value="" placeholder="${_('example: Jane Doe')}" required aria-required="true" /> + <span class="tip tip-input">${_("Needed for any certificates you may earn <strong>(cannot be changed later)</strong>")}</span> </li> </ol> % else: <div class="message"> - <h3 class="message-title">Welcome ${extauth_id}</h3> - <p class="message-copy">Enter a public username:</p> + <h3 class="message-title">${_("Welcome {username}").format(username=extauth_id)}</h3> + <p class="message-copy">${_("Enter a public username:")}</p> </div> <ol class="list-input"> @@ -145,24 +147,24 @@ % if ask_for_email: <li class="field required text" id="field-email"> - <label for="email">E-mail</label> - <input class="" id="email" type="email" name="email" value="" placeholder="example: username@domain.com" /> + <label for="email">${_("E-mail")}</label> + <input class="" id="email" type="email" name="email" value="" placeholder="${_('example: username@domain.com')}" /> </li> % endif <li class="field required text" id="field-username"> - <label for="username">Public Username</label> - <input id="username" type="text" name="username" value="${extauth_username}" placeholder="example: JaneDoe" required aria-required="true" /> - <span class="tip tip-input">Will be shown in any discussions or forums you participate in</span> + <label for="username">${_('Public Username')}</label> + <input id="username" type="text" name="username" value="${extauth_username}" placeholder="${_('example: JaneDoe')}" required aria-required="true" /> + <span class="tip tip-input">${_('Will be shown in any discussions or forums you participate in')}</span> </li> % if ask_for_fullname: <li class="field required text" id="field-name"> - <label for="name">Full Name</label> - <input id="name" type="text" name="name" value="" placeholder="example: Jane Doe" /> - <span class="tip tip-input">Needed for any certificates you may earn <strong>(cannot be changed later)</strong></span> + <label for="name">${_('Full Name')}</label> + <input id="name" type="text" name="name" value="" placeholder="$_('example: Jane Doe')}" /> + <span class="tip tip-input">${_("Needed for any certificates you may earn <strong>(cannot be changed later)</strong>")}</span> </li> % endif @@ -173,12 +175,12 @@ </fieldset> <fieldset class="group group-form group-form-secondary group-form-personalinformation"> - <legend class="sr">Optional Personal Information</legend> + <legend class="sr">${_("Optional Personal Information")}</legend> <ol class="list-input"> <li class="field-group"> <div class="field select" id="field-education-level"> - <label for="education-level">Highest Level of Education Completed</label> + <label for="education-level">${_("Highest Level of Education Completed")}</label> <select id="education-level" name="level_of_education"> <option value="">--</option> %for code, ed_level in UserProfile.LEVEL_OF_EDUCATION_CHOICES: @@ -188,7 +190,7 @@ </div> <div class="field select" id="field-gender"> - <label for="gender">Gender</label> + <label for="gender">${_("Gender")}</label> <select id="gender" name="gender"> <option value="">--</option> %for code, gender in UserProfile.GENDER_CHOICES: @@ -198,7 +200,7 @@ </div> <div class="field select" id="field-yob"> - <label for="yob">Year of Birth</label> + <label for="yob">${_("Year of Birth")}</label> <select id="yob" name="year_of_birth"> <option value="">--</option> %for year in UserProfile.VALID_YEARS: @@ -211,23 +213,23 @@ </fieldset> <fieldset class="group group-form group-form-personalinformation2"> - <legend class="sr">Optional Personal Information</legend> + <legend class="sr">${_("Optional Personal Information")}</legend> <ol class="list-input"> <li class="field text" id="field-address-mailing"> - <label for="address-mailing">Mailing Address</label> + <label for="address-mailing">${_("Mailing Address")}</label> <textarea id="address-mailing" name="mailing_address" value=""></textarea> </li> <li class="field text" id="field-goals"> - <label for="goals">Please share with us your reasons for registering with ${settings.PLATFORM_NAME}</label> + <label for="goals">${_("Please share with us your reasons for registering with {platform_name}").format(platform_name=settings.PLATFORM_NAME)}</label> <textarea id="goals" name="goals" value=""></textarea> </li> </ol> </fieldset> <fieldset class="group group-form group-form-accountacknowledgements"> - <legend class="sr">Account Acknowledgements</legend> + <legend class="sr">${_("Account Acknowledgements")}</legend> <ol class="list-input"> <li class="field-group"> @@ -236,7 +238,9 @@ <div class="field required checkbox" id="field-tos"> <input id="tos-yes" type="checkbox" name="terms_of_service" value="true" required aria-required="true" /> - <label for="tos-yes">I agree to the <a href="${marketing_link('TOS')}" class="new-vp">Terms of Service</a></label> + <label for="tos-yes">${_('I agree to the {link_start}Terms of Service{link_end}').format( + link_start='<a href="{url}" class="new-vp">'.format(url=marketing_link('TOS')), + link_end='</a>')}</label> </div> % endif @@ -250,7 +254,9 @@ else: honor_code_path = marketing_link('HONOR') %> - <label for="honorcode-yes">I agree to the <a href="${honor_code_path}" class="new-vp">Honor Code</a></label> + <label for="honorcode-yes">${_('I agree to the {link_start}Honor Code{link_end}').format( + link_start='<a href="{url}" class="new-vp">'.format(url=honor_code_path), + link_end='</a>')}</label> </div> </li> </ol> @@ -262,23 +268,23 @@ % endif <div class="form-actions"> - <button name="submit" type="submit" id="submit" class="action action-primary action-update">Register <span class="orn-plus">+</span> Create My Account</button> + <button name="submit" type="submit" id="submit" class="action action-primary action-update">${_('Register')} <span class="orn-plus">+</span> ${_('Create My Account')}</button> </div> </form> </section> <aside role="complementary"> <header> - <h3 class="sr">Registration Help</h3> + <h3 class="sr">${_("Registration Help")}</h3> </header> % if has_extauth_info is UNDEFINED: <div class="cta"> - <h3>Already registered?</h3> + <h3>${_("Already registered?")}</h3> <p class="instructions"> <a href="${reverse('signin_user')}${login_query()}"> - Click here to log in. + ${_("Click here to log in.")} </a> </p> </div> @@ -289,28 +295,28 @@ ## override in a more generalizable fashion. % if not self.stanford_theme_enabled(): <div class="cta cta-welcome"> - <h3>Welcome to ${settings.PLATFORM_NAME}</h3> - <p>Registering with ${settings.PLATFORM_NAME} gives you access to all of our current and future free courses. Not ready to take a course just yet? Registering puts you on our mailing list – we will update you as courses are added.</p> + <h3>${_("Welcome to {platform_name}").format(platform_name=settings.PLATFORM_NAME)}</h3> + <p>${_("Registering with {platform_name} gives you access to all of our current and future free courses. Not ready to take a course just yet? Registering puts you on our mailing list - we will update you as courses are added.").format(platform_name=settings.PLATFORM_NAME)}</p> </div> % endif <div class="cta cta-nextsteps"> - <h3>Next Steps</h3> + <h3>${_("Next Steps")}</h3> % if self.stanford_theme_enabled(): - <p>You will receive an activation email. You must click on the activation link to complete the process. Don’t see the email? Check your spam folder and mark emails from class.stanford.edu as ‘not spam’, since you'll want to be able to receive email from your courses.</p> + <p>${_("You will receive an activation email. You must click on the activation link to complete the process. Don't see the email? Check your spam folder and mark emails from class.stanford.edu as 'not spam', since you'll want to be able to receive email from your courses.")}</p> % else: - <p>As part of joining ${settings.PLATFORM_NAME}, you will receive an activation email. You must click on the activation link to complete the process. Don’t see the email? Check your spam folder and mark ${settings.PLATFORM_NAME} emails as ‘not spam’. At ${settings.PLATFORM_NAME}, we communicate mostly through email.</p> + <p>${_("As part of joining {platform_name}, you will receive an activation email. You must click on the activation link to complete the process. Don't see the email? Check your spam folder and mark {platform_name} emails as 'not spam'. At {platform_name}, we communicate mostly through email.").format(platform_name=settings.PLATFORM_NAME)}</p> % endif </div> % if settings.MKTG_URL_LINK_MAP.get('FAQ'): <div class="cta cta-help"> - <h3>Need Help?</h3> - <p>Need help in registering with ${settings.PLATFORM_NAME}? + <h3>${_("Need Help?")}</h3> + <p>${_("Need help in registering with {platform_name}?").format(platform_name=settings.PLATFORM_NAME)} <a href="${marketing_link('FAQ')}"> - View our FAQs for answers to commonly asked questions. + ${_("View our FAQs for answers to commonly asked questions.")} </a> - Once registered, most questions can be answered in the course specific discussion forums or through the FAQs.</p> + ${_("Once registered, most questions can be answered in the course specific discussion forums or through the FAQs.")}</p> </div> % endif </aside> diff --git a/lms/templates/registration/activate_account_notice.html b/lms/templates/registration/activate_account_notice.html index ca051902b1de1e6725a99097c6cd97607daa2651..b65a36e2738fca88cce6a173f25b48ae21c308c5 100644 --- a/lms/templates/registration/activate_account_notice.html +++ b/lms/templates/registration/activate_account_notice.html @@ -1,3 +1,3 @@ -<h2>Thanks For Registering!</h2> -<p class='activation-message'>Your account is not active yet. An activation link has been sent to <strong>${ email }</strong>, along with -instructions for activating your account.</p> +<%! from django.utils.translation import ugettext as _ %> +<h2>${_("Thanks For Registering!")}</h2> +<p class='activation-message'>${_("Your account is not active yet. An activation link has been sent to {email}, along with instructions for activating your account.").format(email="<strong>{}</strong>".format(email))}</p> diff --git a/lms/templates/registration/activation_complete.html b/lms/templates/registration/activation_complete.html index 7eb805e730982fbeff58d41ae7bfd9fea1297343..cc6263406e08b8ebfcb1846de78adf9de152815c 100644 --- a/lms/templates/registration/activation_complete.html +++ b/lms/templates/registration/activation_complete.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from django.core.urlresolvers import reverse %> <%inherit file="../main.html" /> @@ -7,23 +8,23 @@ <section class="message"> %if not already_active: - <h1 class="valid">Activation Complete!</h1> + <h1 class="valid">${_("Activation Complete!")}</h1> %else: - <h1>Account already active!</h1> + <h1>${_("Account already active!")}</h1> %endif <hr class="horizontal-divider"> - + <p> %if not already_active: - Thanks for activating your account. + ${_("Thanks for activating your account.")} %else: - This account has already been activated. + ${_("This account has already been activated.")} %endif - + %if user_logged_in: - Visit your <a href="${reverse('dashboard')}">dashboard</a> to see your courses. + ${_("Visit your {link_start}dashboard{link_end} to see your courses.").format(link_start='<a href="{url}">'.format(url=reverse('dashboard')), link_end='</a>')} %else: - You can now <a href="${reverse('signin_user')}">log in</a>. + ${_("You can now {link_start}log in{link_end}.").format(link_start='<a href="{url}">'.format(url=reverse('signin_user')), link_end='</a>')} %endif </p> </section> diff --git a/lms/templates/registration/activation_invalid.html b/lms/templates/registration/activation_invalid.html index 0a6d6d30c9e26b54e9d9ae14f94a7947370a3fee..edeede84e7a6ffba5ee828be6633365068802a2a 100644 --- a/lms/templates/registration/activation_invalid.html +++ b/lms/templates/registration/activation_invalid.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from django.core.urlresolvers import reverse %> <%inherit file="../main.html" /> @@ -6,14 +7,14 @@ <section class="container activation"> <section class="message"> - <h1 class="invalid">Activation Invalid</h1> + <h1 class="invalid">${_("Activation Invalid")}</h1> <hr class="horizontal-divider"> - <p>Something went wrong. Check to make sure the URL you went to was - correct -- e-mail programs will sometimes split it into two - lines. If you still have issues, e-mail us to let us know what happened - at <a href="mailto:${settings.BUGS_EMAIL}">${settings.BUGS_EMAIL}</a>.</p> + <p>${_('Something went wrong. Check to make sure the URL you went to was ' + 'correct -- e-mail programs will sometimes split it into two ' + 'lines. If you still have issues, e-mail us to let us know what happened ' + 'at {email}.').format(email='<a href="mailto:{email}">{email}</a>'.format(email=settings.BUGS_EMAIL))}</p> - <p>Or you can go back to the <a href="/">home page</a>.</p> + <p>${_('Or you can go back to the {link_start}home page{link_end}.').format(link_start='<a href="/">', link_end='</a>')}</p> </section> </section> diff --git a/lms/templates/registration/login.html b/lms/templates/registration/login.html index 70e58965a4c4a6d8a42d6a5e1b9cda531d431be6..d8fb92855e930ac0ee2466c4e5a9de6cad3cc5c2 100644 --- a/lms/templates/registration/login.html +++ b/lms/templates/registration/login.html @@ -1,28 +1,28 @@ +<%! from django.utils.translation import ugettext as _ %> {% extends "registration/base.html" %} -{% block title %}Log in{% endblock %} +{% block title %}${_("Log in")}{% endblock %} {% block content %} -<h1>Log in</h1> +<h1>${_("Log in")}</h1> {% if form.errors %} -<p class="error">Please correct the errors below:</p> +<p class="error">${_("Please correct the errors below:")}</p> {% endif %} <form method="post" action="?next={{ next|default:"/" }}"> {% csrf_token %} <dl> -<dt><label for="id_username">Username:</label>{% if form.username.errors %} <span class="error">{{ form.username.errors|join:", " }}</span>{% endif %}</dt> +<dt><label for="id_username">${_("Username:")}</label>{% if form.username.errors %} <span class="error">{{ form.username.errors|join:", " }}</span>{% endif %}</dt> <dd>{{ form.username }}</dd> -<dt><label for="id_password">Password:</label>{% if form.password.errors %} <span class="error">{{ form.password.errors|join:", " }}</span>{% endif %}</dt> +<dt><label for="id_password">${_("Password:")}</label>{% if form.password.errors %} <span class="error">{{ form.password.errors|join:", " }}</span>{% endif %}</dt> <dd>{{ form.password }}</dd> -<dt><input type="submit" value="Log in" /></dt> +<dt><input type="submit" value="${_("Log in")}" /></dt> </dl> </form> {% endblock %} {% block content-related %} -<p>If you don't have an account, you can <a href="/accounts/register/">sign -up</a> for one. +<p>${_("If you don't have an account, you can {link_start}sign up{link_end} for one.").format(link_start='<a href="/accounts/register/">', link_end='</a>')} {% endblock %} diff --git a/lms/templates/registration/logout.html b/lms/templates/registration/logout.html index 3275d2e1b4692caaac8537979affb11e7f6bc61a..a3ff64507a0f6282217c3f07ee6dfbf470698425 100644 --- a/lms/templates/registration/logout.html +++ b/lms/templates/registration/logout.html @@ -1,8 +1,9 @@ +<%! from django.utils.translation import ugettext as _ %> {% extends "registration/base.html" %} -{% block title %}Logged out{% endblock %} +{% block title %}${_("Logged out")}{% endblock %/} {% block content %} -<h1>You've been logged out.</h1> -<p>Thanks for stopping by; when you come back, don't forget to <a href="/accounts/login/">log in</a> again.</p> -{% endblock %} \ No newline at end of file +<h1>${_("You've been logged out.")}</h1> +<p>${_("Thanks for stopping by; when you come back, don't forget to {link_start}log in{link_end} again.").format(link_start='<a href="/accounts/login">', link_end='</a>')}</p> +{% endblock %} diff --git a/lms/templates/registration/password_reset_complete.html b/lms/templates/registration/password_reset_complete.html index 3847f615b9bfd4ccb85104d168a4860e0c1b734d..3f301102b5c4bc568fd24e5143790ca289114d62 100644 --- a/lms/templates/registration/password_reset_complete.html +++ b/lms/templates/registration/password_reset_complete.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> {% load i18n %} {% load compressed %} {% load staticfiles %} @@ -5,7 +6,7 @@ <html> <head> - <title>Your Password Reset is Complete</title> + <title>${_("Your Password Reset is Complete")}</title> {% compressed_css 'application' %} @@ -53,13 +54,13 @@ <section class="passwordreset container"> <section class="introduction"> <header> - <h1>Your Password Reset is Complete</h1> + <h1>${_("Your Password Reset is Complete")}</h1> </header> </section> {% block content %} <section role="main" class="content"> - <p>Your password has been set. You may go ahead and <a href="/login">log in</a> now.</a>.</p> + <p>${_('Your password has been set. You may go ahead and {link_start}log in{link_end} now.').format(link_start='<a href="/login">', link_end='</a>')}</p> </section> {% endblock %} </section> diff --git a/lms/templates/registration/password_reset_confirm.html b/lms/templates/registration/password_reset_confirm.html index 5809408dad13b853c3cfa2b0f331c86f4de15d43..3ca40fd45dc498a331243b513cbd575061ad5424 100644 --- a/lms/templates/registration/password_reset_confirm.html +++ b/lms/templates/registration/password_reset_confirm.html @@ -1,10 +1,11 @@ +<%! from django.utils.translation import ugettext as _ %> {% load compressed %} {% load staticfiles %} <!DOCTYPE html> <html> <head> - <title>Reset Your edX Password</title> + <title>${_("Reset Your edX Password")}</title> {% compressed_css 'application' %} @@ -52,79 +53,79 @@ <section class="passwordreset container"> <section class="introduction"> <header> - <h1>Reset Your edX Password</h1> + <h1>${_("Reset Your edX Password")}</h1> </header> </section> <section role="main" class="content"> {% if validlink %} <header> - <h2 class="sr">Password Reset Form</h2> + <h2 class="sr">${_("Password Reset Form")}</h2> </header> <form role="form" id="passwordreset-form" method="post" data-remote="true" action="">{% csrf_token %} <!-- status messages --> <div role="alert" class="status message"> - <h3 class="message-title">We're sorry, edX enrollment is not available in your region</h3> - <p class="message-copy">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p> + <h3 class="message-title">${_("We're sorry, edX enrollment is not available in your region")}</h3> + <p class="message-copy">${_("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.")}</p> </div> <div role="alert" class="status message submission-error"> - <h3 class="message-title">The following errors occured while processing your registration: </h3> + <h3 class="message-title">${_("The following errors occured while processing your registration: ")}</h3> <ul class="message-copy"> - <li>You must complete all fields.</li> - <li>The two password fields didn't match.</li> + <li>${_("You must complete all fields.")}</li> + <li>${_("The two password fields didn't match.")}</li> </ul> </div> <div role="alert" class="status message system-error"> - <h3 class="message-title">We're sorry, our systems seem to be having trouble processing your password reset</h3> - <p class="message-copy">Someone has been made aware of this issue. Please try again shortly. Please <a href="{{MKTG_URL_CONTACT}}">contact us</a> about any concerns you have.</p> + <h3 class="message-title">${_("We're sorry, our systems seem to be having trouble processing your password reset")}</h3> + <p class="message-copy">${_('Someone has been made aware of this issue. Please try again shortly. Please <a href="{{MKTG_URL_CONTACT}}">contact us</a> about any concerns you have.')}</p> </div> <p class="instructions"> - Please enter your new password twice so we can verify you typed it in correctly. <br /> - Required fields are noted by <strong class="indicator">bold text and an asterisk (*)</strong>. + ${_('Please enter your new password twice so we can verify you typed it in correctly. <br /> ' + 'Required fields are noted by <strong class="indicator">bold text and an asterisk (*)</strong>.')} </p> <fieldset class="group group-form group-form-requiredinformation"> - <legend class="sr">Required Information</legend> + <legend class="sr">${_("Required Information")}</legend> <ol class="list-input"> <li class="field required password" id="field-new_password1"> - <label for="new_password1">Your New Password</label> + <label for="new_password1">${_("Your New Password")}</label> <input id="new_password1" type="password" name="new_password1" placeholder="*****" /> </li> <li class="field required password" id="field-new_password2"> - <label for="new_password2">Your New Password Again</label> + <label for="new_password2">${_("Your New Password Again")}</label> <input id="new_password2" type="password" name="new_password2" placeholder="*****" /> </li> </ol> </fieldset> <div class="form-actions"> - <button name="submit" type="submit" id="submit" class="action action-primary action-update">Change My Password</button> + <button name="submit" type="submit" id="submit" class="action action-primary action-update">${_("Change My Password")}</button> </div> </form> {% else %} <header> - <h2 class="sr">Your Password Reset Was Unsuccessful</h2> + <h2 class="sr">${_("Your Password Reset Was Unsuccessful")}</h2> </header> - <p>The password reset link was invalid, possibly because the link has already been used. Please return to the <a href="/login">login page</a> and start the password reset process again.</p> + <p>${_('The password reset link was invalid, possibly because the link has already been used. Please return to the <a href="/login">login page</a> and start the password reset process again.')}</p> {% endif %} </section> <aside role="complementary"> <header> - <h3 class="sr">Password Reset Help</h3> + <h3 class="sr">${_("Password Reset Help")}</h3> </header> <div class="cta cta-help"> - <h3>Need Help?</h3> - <p>View our <a href="{{MKTG_URL_FAQ}}">help section for contact information and answers to commonly asked questions</a></p> + <h3>${_("Need Help?")}</h3> + <p>${_('View our <a href="{{MKTG_URL_FAQ}}">help section for contact information and answers to commonly asked questions</a>')}</p> </div> </aside> </section> diff --git a/lms/templates/registration/password_reset_done.html b/lms/templates/registration/password_reset_done.html index 0b029a854fe91f176418b343b41d501756425597..fa34ab6e19b5db363829efc9fcd1470bd0804dfc 100644 --- a/lms/templates/registration/password_reset_done.html +++ b/lms/templates/registration/password_reset_done.html @@ -1,8 +1,9 @@ +<%! from django.utils.translation import ugettext as _ %> <header> - <h2>Password reset successful</h2> + <h2>${_("Password reset successful")}</h2> <hr> </header> <div class="message"> - <p>We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly.</p> + <p>${_("We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly.")}</p> </div> diff --git a/lms/templates/registration/registration_complete.html b/lms/templates/registration/registration_complete.html index 9f0cea41dbb402affd96184722ad52c0ab388cb6..7cbe93ec51d3a7adbd2162fec7107ff90692cb1f 100644 --- a/lms/templates/registration/registration_complete.html +++ b/lms/templates/registration/registration_complete.html @@ -5,4 +5,4 @@ {% block content %} <h1>Check your email</h1> <p>An activation link has been sent to the email address you supplied, along with instructions for activating your account.</p> -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/lms/templates/registration/registration_form.html b/lms/templates/registration/registration_form.html index 1e9d6306396a0f1d3fe5920d0cff90750d71ed98..f90392d73f1f7fa16ca68e6b0694a67b16100d07 100644 --- a/lms/templates/registration/registration_form.html +++ b/lms/templates/registration/registration_form.html @@ -1,58 +1,59 @@ +<%! from django.utils.translation import ugettext as _ %> {% extends "registration/base.html" %} -{% block title %}Sign up{% endblock %} +{% block title %}${_("Sign up")}{% endblock %} {% block content %} {% if form.errors %} - <p class="errors">Please correct the errors below: {{ form.non_field_errors }}</p> + <p class="errors">${_("Please correct the errors below: {{ form.non_field_errors }}")}</p> {% endif %} - <h1>Create an account</h1> - + <h1>${_("Create an account")}</h1> + <form method="post" action="" class="wide"> {% csrf_token %} <p> - <label for="id_username">Username:</label> + <label for="id_username">${_("Username:")}</label> {% if form.username.errors %} <p class="errors">{{ form.username.errors.as_text }}</p> {% endif %} {{ form.username }} </p> <p> - <label for="id_email">Email address:</label> + <label for="id_email">${_("Email address:")}</label> {% if form.email.errors %} <p class="errors">{{ form.email.errors.as_text }}</p> {% endif %} {{ form.email }} </p> <p> - <label for="id_password1">Password:</label> + <label for="id_password1">${_("Password:")}</label> {% if form.password1.errors %} <p class="errors">{{ form.password1.errors.as_text }}</p> {% endif %} {{ form.password1 }} </p> <p> - <label for="id_password2">Password (type again to catch typos):</label> + <label for="id_password2">${_("Password (type again to catch typos):")}</label> {% if form.password2.errors %} <p class="errors">{{ form.password2.errors.as_text }}</p> {% endif %} {{ form.password2 }} </p> - <p class="submit"><input type="submit" value="Register →"></p> + <p class="submit"><input type="submit" value="${_("Register")} →"></p> </form> - + {% endblock %} {% block content-related %} -<p>Fill out the form to the left (all fields are required), and your -account will be created; you'll be sent an email with instructions on how -to finish your registration.</p> +<p>${_("Fill out the form to the left (all fields are required), and your " +"account will be created; you'll be sent an email with instructions on how " +"to finish your registration.")}</p> -<p>We'll only use your email to send you signup instructions. We hate spam -as much as you do.</p> +<p>${_("We'll only use your email to send you signup instructions. We hate spam " +"as much as you do.")}</p> -<p>This account will let you log into the ticket tracker, claim tickets, -and be exempt from spam filtering.</p> +<p>${_("This account will let you log into the ticket tracker, claim tickets, " +"and be exempt from spam filtering")}.</p> {% endblock %} diff --git a/lms/templates/seq_module.html b/lms/templates/seq_module.html index fff1279cd640ac5d0dc3f357f63590f9413555d2..bb04d1b31c33f3d0882f4d1aecbbcba8f6837da3 100644 --- a/lms/templates/seq_module.html +++ b/lms/templates/seq_module.html @@ -1,7 +1,9 @@ +<%! from django.utils.translation import ugettext as _ %> + <div id="sequence_${element_id}" class="sequence" data-id="${item_id}" data-position="${position}" data-course_modx_root="/course/modx" > - <nav aria-label="Section Navigation" class="sequence-nav"> + <nav aria-label="${_('Section Navigation')}" class="sequence-nav"> <ul class="sequence-nav-buttons"> - <li class="prev"><a href="#">Previous</a></li> + <li class="prev"><a href="#">${_('Previous')}</a></li> </ul> <div class="sequence-list-wrapper"> @@ -24,7 +26,7 @@ </div> <ul class="sequence-nav-buttons"> - <li class="next"><a href="#">Next</a></li> + <li class="next"><a href="#">${_("Next")}</a></li> </ul> </nav> @@ -34,9 +36,9 @@ <div id="seq_content"></div> <nav class="sequence-bottom"> - <ul aria-label="Section Navigation" class="sequence-nav-buttons"> - <li class="prev"><a href="#">Previous</a></li> - <li class="next"><a href="#">Next</a></li> + <ul aria-label="${_('Section Navigation')}" class="sequence-nav-buttons"> + <li class="prev"><a href="#">${_("Previous")}</a></li> + <li class="next"><a href="#">${_("Next")}</a></li> </ul> </nav> </div> diff --git a/lms/templates/signup_modal.html b/lms/templates/signup_modal.html index 9c1a868e2d83fb3a2ba6a645704ccc2b8a1a6883..b9abc10e896eb0ba22634deaec186b6ac6547195 100644 --- a/lms/templates/signup_modal.html +++ b/lms/templates/signup_modal.html @@ -1,3 +1,5 @@ +<%! from django.utils.translation import ugettext as _ %> + <%namespace name='static' file='static_content.html'/> <%! from django.core.urlresolvers import reverse %> <%! from django_countries.countries import COUNTRIES %> @@ -9,7 +11,7 @@ <div class="inner-wrapper"> <div id="register"> <header> - <h2>Sign Up for <span class="edx">edX</span></h2> + <h2>${_('Sign Up for {span_start}edX{span_end}').format(span_start='<span class="edx">', span_end='</span>')}</h2> <hr> </header> @@ -20,41 +22,41 @@ <div class="input-group"> % if has_extauth_info is UNDEFINED: - <label data-field="email" for="signup_email">E-mail *</label> - <input id="signup_email" type="email" name="email" placeholder="e.g. yourname@domain.com" required /> - - <label data-field="password" for="signup_password">Password *</label> + <label data-field="email" for="signup_email">${_('E-mail *')}</label> + <input id="signup_email" type="email" name="email" placeholder="${_('e.g. yourname@domain.com')}" required /> + + <label data-field="password" for="signup_password">${_('Password *')}</label> <input id="signup_password" type="password" name="password" placeholder="••••••••" required /> - - <label data-field="username" for="signup_username">Public Username *</label> - <input id="signup_username" type="text" name="username" placeholder="e.g. yourname (shown on forums)" required /> - - <label data-field="name" for="signup_fullname">Full Name *</label> - <input id="signup_fullname" type="text" name="name" placeholder="e.g. Your Name (for certificates)" required /> + + <label data-field="username" for="signup_username">${_('Public Username *')}</label> + <input id="signup_username" type="text" name="username" placeholder="${_('e.g. yourname (shown on forums)')}" required /> + + <label data-field="name" for="signup_fullname">${_('Full Name *')}</label> + <input id="signup_fullname" type="text" name="name" placeholder="${_('e.g. Your Name (for certificates)')}" required /> % else: - <p><i>Welcome</i> ${extauth_id}</p><br/> - <p><i>Enter a public username:</i></p> - - <label data-field="username" for="signup_username">Public Username *</label> - <input id="signup_username" type="text" name="username" value="${extauth_username}" placeholder="e.g. yourname (shown on forums)" required /> + <p>${_('<i>Welcome</i> {name}').format(name=extauth_id)}</p><br/> + <p><i>${_('Enter a public username:')}</i></p> + + <label data-field="username" for="signup_username">${_('Public Username *')}</label> + <input id="signup_username" type="text" name="username" value="${extauth_username}" placeholder="${_('e.g. yourname (shown on forums)')}" required /> % if ask_for_email: - <label data-field="email" for="signup_email">E-mail *</label> - <input id="signup_email" type="email" name="email" placeholder="e.g. yourname@domain.com" required /> + <label data-field="email" for="signup_email">${_('E-mail *')}</label> + <input id="signup_email" type="email" name="email" placeholder="${_('e.g. yourname@domain.com')}" required /> % endif - + % if ask_for_fullname: - <label data-field="name" for="signup_fullname">Full Name *</label> - <input id="signup_fullname" type="text" name="name" placeholder="e.g. Your Name (for certificates)" required /> + <label data-field="name" for="signup_fullname">${_("Full Name *")}</label> + <input id="signup_fullname" type="text" name="name" placeholder="${_('e.g. Your Name (for certificates)')}" required /> % endif - + % endif </div> <div class="input-group"> <section class="citizenship"> - <label data-field="level_of_education" for="signup_ed_level">Ed. Completed</label> + <label data-field="level_of_education" for="signup_ed_level">${_("Ed. Completed")}</label> <div class="input-wrapper"> <select id="signup_ed_level" name="level_of_education"> <option value="">--</option> @@ -66,7 +68,7 @@ </section> <section class="gender"> - <label data-field="gender" for="signup_gender">Gender</label> + <label data-field="gender" for="signup_gender">${_("Gender")}</label> <div class="input-wrapper"> <select id="signup_gender" name="gender"> <option value="">--</option> @@ -78,7 +80,7 @@ </section> <section class="date-of-birth"> - <label data-field="date-of-birth" for="signup_birth_year">Year of birth</label> + <label data-field="date-of-birth" for="signup_birth_year">${_("Year of birth")}</label> <div class="input-wrapper"> <select id="signup_birth_year" name="year_of_birth"> <option value="">--</option> @@ -90,10 +92,10 @@ </div> </section> - <label data-field="mailing_address" for="signup_mailing_address">Mailing address</label> + <label data-field="mailing_address" for="signup_mailing_address">${_("Mailing address")}</label> <textarea id="signup_mailing_address" name="mailing_address"></textarea> - - <label data-field="goals" for="signup_goals">Goals in signing up for edX</label> + + <label data-field="goals" for="signup_goals">${_("Goals in signing up for edX")}</label> <textarea name="goals" id="signup_goals"></textarea> </div> @@ -101,33 +103,35 @@ <div class="input-group"> <label data-field="terms_of_service" class="terms-of-service" for="signup_tos"> <input id="signup_tos" name="terms_of_service" type="checkbox" value="true"> - I agree to the - <a href="${reverse('tos')}" target="_blank">Terms of Service</a>* + ${_('I agree to the {link_start}Terms of Service{link_end}*').format( + link_start='<a href="{url}" target="_blank">'.format(url=reverse('tos')), + link_end='</a>')} </label> <label data-field="honor_code" class="honor-code" for="signup_honor"> <input id="signup_honor" name="honor_code" type="checkbox" value="true"> - I agree to the - <a href="${reverse('honor')}" target="_blank">Honor Code</a>* + ${_('I agree to the {link_start}Honor Code{link_end}*').format( + link_start='<a href="{url}" target="_blank">'.format(url=reverse('honor')), + link_end='</a>')} </label> </div> <div class="submit"> - <input name="submit" type="submit" value="Create My Account"> + <input name="submit" type="submit" value="${_('Create My Account')}"> </div> </form> % if has_extauth_info is UNDEFINED: <section class="login-extra"> <p> - <span>Already have an account? <a href="#login-modal" class="close-signup" rel="leanModal">Login.</a></span> + <span>${_("Already have an account?")} <a href="#login-modal" class="close-signup" rel="leanModal">${_("Login.")}</a></span> </p> </section> % endif </div> - <a href="#" class="close-modal" title="Close Modal"> + <a href="#" class="close-modal" title="${_('Close Modal')}"> <div class="inner"> <p>✕</p> </div> @@ -146,7 +150,7 @@ $("[data-field='"+json.field+"']").addClass('field-error') } }); - + // removing close link's default behavior $('#login-modal .close-modal').click(function(e) { e.preventDefault(); diff --git a/lms/templates/staff_problem_info.html b/lms/templates/staff_problem_info.html index d24d6528acdad43e0634b6ee52c13906bc7a8a72..e29828fb5efbd7bc78cbb5b170979861d97d1134 100644 --- a/lms/templates/staff_problem_info.html +++ b/lms/templates/staff_problem_info.html @@ -1,3 +1,5 @@ +<%! from django.utils.translation import ugettext as _ %> + ## The JS for this is defined in xqa_interface.html ${module_content} %if location.category in ['problem','video','html','combinedopenended','graphical_slider_tool']: @@ -14,27 +16,27 @@ ${module_content} % endif </div> % endif -<div><a href="#${element_id}_debug" id="${element_id}_trig">Staff Debug Info</a></div> +<div><a href="#${element_id}_debug" id="${element_id}_trig">${_("Staff Debug Info")}</a></div> % if settings.MITX_FEATURES.get('ENABLE_STUDENT_HISTORY_VIEW') and \ location.category == 'problem': -<div><a href="#${element_id}_history" id="${element_id}_history_trig">Submission history</a></div> +<div><a href="#${element_id}_history" id="${element_id}_history_trig">${_("Submission history")}</a></div> % endif <section id="${element_id}_xqa-modal" class="modal xqa-modal" style="width:80%; left:20%; height:80%; overflow:auto" > <div class="inner-wrapper"> <header> - <h2>edX Content Quality Assessment</h2> + <h2>${_("edX Content Quality Assessment")}</h2> </header> <form id="${element_id}_xqa_form" class="xqa_form"> - <label>Comment</label> - <input id="${element_id}_xqa_entry" type="text" placeholder="comment"> - <label>Tag</label> - <span style="color:black;vertical-align: -10pt">Optional tag (eg "done" or "broken"): </span> - <input id="${element_id}_xqa_tag" type="text" placeholder="tag" style="width:80px;display:inline"> + <label>${_("Comment")}</label> + <input id="${element_id}_xqa_entry" type="text" placeholder="${_('comment')}"> + <label>${_("Tag")}</label> + <span style="color:black;vertical-align: -10pt">${_('Optional tag (eg "done" or "broken"): ')} </span> + <input id="${element_id}_xqa_tag" type="text" placeholder="${_('tag')}" style="width:80px;display:inline"> <div class="submit"> - <button name="submit" type="submit">Add comment</button> + <button name="submit" type="submit">${_('Add comment')}</button> </div> <hr> <div id="${element_id}_xqa_log_data"></div> @@ -46,25 +48,25 @@ ${module_content} <section class="modal staff-modal" id="${element_id}_debug" style="width:80%; left:20%; height:80%; overflow:auto;" > <div class="inner-wrapper" style="color:black"> <header> - <h2>Staff Debug</h2> + <h2>${_('Staff Debug')}</h2> </header> <div class="staff_info" style="display:block"> is_released = ${is_released} location = ${location | h} <table> - <tr><th>Module Fields</th></tr> + <tr><th>${_('Module Fields')}</th></tr> %for name, field in fields: <tr><td>${name}</td><td><pre style="display:inline-block; margin: 0;">${field | h}</pre></td></tr> %endfor </table> <table> - <tr><th>edX Fields</th></tr> + <tr><th>${_('edX Fields')}</th></tr> %for name, field in lms_fields: <tr><td>${name}</td><td><pre style="display:inline-block; margin: 0;">${field | h}</pre></td></tr> %endfor </table> <table> - <tr><th>XML attributes</th></tr> + <tr><th>${_('XML attributes')}</th></tr> %for name, field in xml_attributes.items(): <tr><td>${name}</td><td><pre style="display:inline-block; margin: 0;">${field | h}</pre></td></tr> %endfor @@ -80,14 +82,14 @@ category = ${category | h} <section class="modal history-modal" id="${element_id}_history" style="width:80%; left:20%; height:80%; overflow:auto;" > <div class="inner-wrapper" style="color:black"> <header> - <h2>Submission History Viewer</h2> + <h2>${_("Submission History Viewer")}</h2> </header> <form id="${element_id}_history_form"> - <label for="${element_id}_history_student_username">User:</label> + <label for="${element_id}_history_student_username">${_("User:")}</label> <input id="${element_id}_history_student_username" type="text" placeholder=""/> <input type="hidden" id="${element_id}_history_location" value="${location}"/> <div class="submit"> - <button name="submit" type="submit">View History</button> + <button name="submit" type="submit">${_("View History")}</button> </div> </form> diff --git a/lms/templates/static_htmlbook.html b/lms/templates/static_htmlbook.html index 8a3c50f680eb1e6f36082eaceef23aacd49adc38..67274e30c91deb05a6ddfaf3e8743d3ca458b112 100644 --- a/lms/templates/static_htmlbook.html +++ b/lms/templates/static_htmlbook.html @@ -1,6 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> + <%inherit file="main.html" /> <%namespace name='static' file='static_content.html'/> -<%block name="title"><title>${course.number} Textbook</title> +<%block name="title"><title>${_('{course_number} Textbook').format(course_number=course.number)}</title> </%block> <%block name="headextra"> @@ -22,7 +24,7 @@ } var chapterToLoad = 1; if (options.chapterNum) { - // TODO: this should only be specified if there are + // TODO: this should only be specified if there are // chapters, and it should be in-bounds. chapterToLoad = options.chapterNum; } @@ -51,9 +53,9 @@ // if there is an anchor set, then go to that location: if (anchorId != null) { // TODO: add implementation.... - } + } - }; + }; loadChapterUrl = function htmlViewLoadChapterUrl(chapterNum, anchorId) { if (chapterNum < 1 || chapterNum > chapterUrls.length) { @@ -63,7 +65,7 @@ loadUrl(chapterUrl, anchorId); }; - // define navigation links for chapters: + // define navigation links for chapters: if (chapterUrls != null) { var loadChapterUrlHelper = function(i) { return function(event) { @@ -73,7 +75,7 @@ }; for (var index = 1; index <= chapterUrls.length; index += 1) { $("#htmlchapter-" + index).click(loadChapterUrlHelper(index)); - } + } } // finally, load the appropriate url/page @@ -81,7 +83,7 @@ loadUrl(urlToLoad, anchorToLoad); } else { loadChapterUrl(chapterToLoad, anchorToLoad); - } + } } })(jQuery); @@ -112,7 +114,7 @@ $('#outerContainer').myHTMLViewer(options); }); - </script> + </script> </%block> <%include file="/courseware/course_navigation.html" args="active_page='htmltextbook/{0}'.format(book_index)" /> @@ -121,7 +123,7 @@ <div id="mainContainer" class="book-wrapper"> %if 'chapters' in textbook: - <section aria-label="Textbook Navigation" class="book-sidebar"> + <section aria-label="${_('Textbook Navigation')}" class="book-sidebar"> <ul id="booknav" class="treeview-booknav"> <%def name="print_entry(entry, index_value)"> <li id="htmlchapter-${index_value}"> @@ -139,9 +141,9 @@ %endif <section id="viewerContainer" class="book"> - <section class="page"> + <section class="page"> <div id="bookpage" /> - </section> + </section> </section> </div> diff --git a/lms/templates/static_pdfbook.html b/lms/templates/static_pdfbook.html index 754e51911345580a242e4218416b486594e4d513..dfa7a4715768d8998519700b91717514692355ec 100644 --- a/lms/templates/static_pdfbook.html +++ b/lms/templates/static_pdfbook.html @@ -1,134 +1,135 @@ <%! from django.utils.translation import ugettext as _ %> + <%inherit file="main.html" /> <%namespace name='static' file='static_content.html'/> <%block name="title"> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> - <title>${course.number} Textbook</title> +<meta charset="utf-8"> +<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> +<title>${_('{course_number} Textbook').format(course_number=course.number)}</title> </%block> <%block name="headextra"> <%static:css group='course'/> <%static:js group='courseware'/> - <link rel="stylesheet" href="/static/css/pdfviewer.css"/> - <script type="text/javascript" src="/static/js/vendor/pdfjs/pdf.js"></script> - <script type="text/javascript" src="/static/js/pdfviewer.js"></script> +<link rel="stylesheet" href="/static/css/pdfviewer.css"/> +<script type="text/javascript" src="/static/js/vendor/pdfjs/pdf.js"></script> +<script type="text/javascript" src="/static/js/pdfviewer.js"></script> </%block> <%block name="js_extra"> - <script type="text/javascript"> +<script type="text/javascript"> - $(document).ready(function() { - var options = {}; - %if 'url' in textbook: - options.url = "${textbook['url']}"; - %endif - %if 'chapters' in textbook: - var chptrs = []; - %for chap in textbook['chapters']: - chptrs.push("${chap['url']}"); - %endfor - options.chapters = chptrs; - %endif - %if chapter is not None: - options.chapterNum = ${chapter}; - %endif - %if page is not None: - options.pageNum = ${page}; - %endif +$(document).ready(function() { + var options = {}; + %if 'url' in textbook: + options.url = "${textbook['url']}"; + %endif + %if 'chapters' in textbook: + var chptrs = []; + %for chap in textbook['chapters']: + chptrs.push("${chap['url']}"); + %endfor + options.chapters = chptrs; + %endif + %if chapter is not None: + options.chapterNum = ${chapter}; + %endif + %if page is not None: + options.pageNum = ${page}; + %endif - $('#outerContainer').PDFViewer(options); - }); - </script> + $('#outerContainer').PDFViewer(options); +}); +</script> </%block> <%include file="/courseware/course_navigation.html" args="active_page='pdftextbook/{0}'.format(book_index)" /> - <div id="outerContainer"> - <div id="mainContainer" class="book-wrapper"> +<div id="outerContainer"> + <div id="mainContainer" class="book-wrapper"> - <div class="toolbar"> - <div id="toolbarContainer"> - <div id="toolbarViewer"> - <div id="toolbarViewerLeft"> - <label id="pageNumberLabel" class="toolbarLabel" for="pageNumber">Page: </label> - <input type="number" id="pageNumber" class="toolbarField pageNumber" value="1" size="4" min="1" tabindex="7"> - </input> - <span id="numPages" class="toolbarLabel"></span> - </div> + <div class="toolbar"> + <div id="toolbarContainer"> + <div id="toolbarViewer"> + <div id="toolbarViewerLeft"> + <label id="pageNumberLabel" class="toolbarLabel" for="pageNumber">${_('Page:')} </label> + <input type="number" id="pageNumber" class="toolbarField pageNumber" value="1" size="4" min="1" tabindex="7"> + </input> + <span id="numPages" class="toolbarLabel"></span> + </div> - <div class="outerCenter"> - <div class="innerCenter" id="toolbarViewerMiddle"> - <div class="splitToolbarButton"> - <button class="toolbarButton zoomOut" id="zoom_out" title="Zoom Out" tabindex="8"> - <span>Zoom Out</span> - </button> - <div class="splitToolbarButtonSeparator"></div> - <button class="toolbarButton zoomIn" id="zoom_in" title="Zoom In" tabindex="9"> - <span>Zoom In</span> - </button> - </div> - <span id="scaleSelectContainer" class="dropdownToolbarButton"> - <select id="scaleSelect" title="Zoom" oncontextmenu="return false;" tabindex="10"> + <div class="outerCenter"> + <div class="innerCenter" id="toolbarViewerMiddle"> + <div class="splitToolbarButton"> + <button class="toolbarButton zoomOut" id="zoom_out" title="${_('Zoom Out')}" tabindex="8"> + <span>${_('Zoom Out')}</span> + </button> + <div class="splitToolbarButtonSeparator"></div> + <button class="toolbarButton zoomIn" id="zoom_in" title="${_('Zoom In')}" tabindex="9"> + <span>${_('Zoom In')}</span> + </button> + </div> + <span id="scaleSelectContainer" class="dropdownToolbarButton"> + <select id="scaleSelect" title="${_('Zoom')}" oncontextmenu="return false;" tabindex="10"> <!-- - <option id="pageAutoOption" value="auto" selected="selected">Automatic Zoom</option> - <option id="pageActualOption" value="page-actual">Actual Size</option> - <option id="pageFitOption" value="page-fit">Fit Page</option> - <option id="pageWidthOption" value="page-width">Full Width</option> ---> - <option id="customScaleOption" value="custom"></option> - <option value="0.5">50%</option> - <option value="0.75">75%</option> - <option value="1">100%</option> - <option value="1.25">125%</option> - <option value="1.5">150%</option> - <option value="2">200%</option> - </select> - </span> - </div> - </div> + <option id="pageAutoOption" value="auto" selected="selected">${_('Automatic Zoom')}</option> + <option id="pageActualOption" value="page-actual">${_('Actual Size')}</option> + <option id="pageFitOption" value="page-fit">${_('Fit Page')}</option> + <option id="pageWidthOption" value="page-width">${_('Full Width')}</option> + --> + <option id="customScaleOption" value="custom"></option> + <option value="0.5">50%</option> + <option value="0.75">75%</option> + <option value="1">100%</option> + <option value="1.25">125%</option> + <option value="1.5">150%</option> + <option value="2">200%</option> + </select> + </span> </div> </div> </div> + </div> + </div> - %if 'chapters' in textbook: - <div class="pdfbook-wrap"> - <div class="pdfbook-wrap-inner"> - <section aria-label="Textbook Navigation" class="book-sidebar"> - <ul id="booknav" class="treeview-booknav"> - <%def name="print_entry(entry, index_value)"> - <li id="pdfchapter-${index_value}"> - <a class="chapter"> - ${entry.get('title')} - </a> - </li> - </%def> + %if 'chapters' in textbook: + <div class="pdfbook-wrap"> + <div class="pdfbook-wrap-inner"> + <section aria-label="${_('Textbook Navigation')}" class="book-sidebar"> + <ul id="booknav" class="treeview-booknav"> + <%def name="print_entry(entry, index_value)"> + <li id="pdfchapter-${index_value}"> + <a class="chapter"> + ${entry.get('title')} + </a> + </li> + </%def> - % for (index, entry) in enumerate(textbook['chapters']): - ${print_entry(entry, index+1)} - % endfor - </ul> - </section> - %endif + % for (index, entry) in enumerate(textbook['chapters']): + ${print_entry(entry, index+1)} + % endfor + </ul> + </section> - <section id="viewerContainer" class="book"> - <section class="page"> - <!-- use same page-turning as used in image-based textbooks --> - <nav> - <ul> - <li class="last"> - <a id="previous">${_("Previous page")}</a> - </li> - <li class="next"> - <a id="next">${_("Next page")}</a> - </li> - </ul> - </nav> - <div id="viewer" contextmenu="viewerContextMenu"></div> - </section> - </section> - </div> <!-- pdfbook-wrap-inner --> - </div> <!-- pdfbook-wrap --> - </div> <!-- mainContainer --> + <section id="viewerContainer" class="book"> + <section class="page"> + <!-- use same page-turning as used in image-based textbooks --> + <nav> + <ul> + <li class="last"> + <a id="previous">${_('Previous page')}</a> + </li> + <li class="next"> + <a id="next">${_('Next page')}</a> + </li> + </ul> + </nav> + <div id="viewer" contextmenu="viewerContextMenu"></div> + </section> + </section> + </div> <!-- pdfbook-wrap-inner --> + </div> <!-- pdfbook-wrap --> + %endif + </div> <!-- mainContainer --> - </div> <!-- outerContainer --> +</div> <!-- outerContainer --> diff --git a/lms/templates/static_templates/404.html b/lms/templates/static_templates/404.html index c297cec881a96cd1dfe377f0ffcb806f745436d3..4a3618b79059cb2294f0341d663130bf24a7adb2 100644 --- a/lms/templates/static_templates/404.html +++ b/lms/templates/static_templates/404.html @@ -1,8 +1,10 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="../main.html" /> <%block name="title"><title>404</title></%block> <section class="outside-app"> - <h1>Page not found</h1> - <p>The page that you were looking for was not found. Go back to the <a href="/">homepage</a> or let us know about any pages that may have been moved at <a href="mailto:${settings.TECH_SUPPORT_EMAIL}">${settings.TECH_SUPPORT_EMAIL}</a>.</p> +<h1>${_("Page not found")}</h1> +<p>${_('The page that you were looking for was not found. Go back to the {link_start}homepage{link_end} or let us know about any pages that may have been moved at {email}.').format( + link_start='<a href="/">', link_end='</a>', email='<a href="mailto:{email}">{email}</a>'.format(email=settings.TECH_SUPPORT_EMAIL))}</p> </section> diff --git a/lms/templates/static_templates/about.html b/lms/templates/static_templates/about.html index 3466505540a446ff4c6d03874a94395d00ec3965..4261fc6081df1c5238fba24aef32cd61d1f05a41 100644 --- a/lms/templates/static_templates/about.html +++ b/lms/templates/static_templates/about.html @@ -1,16 +1,17 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from django.core.urlresolvers import reverse %> <%namespace name='static' file='../static_content.html'/> <%inherit file="../main.html" /> -<%block name="title"><title>About edX</title></%block> +<%block name="title"><title>${_("About edX")}</title></%block> <section class="container about"> <nav> - <a href="${reverse('about_edx')}" class="active">Vision</a> - <a href="${reverse('faq_edx')}">Faq</a> - <a href="${reverse('press')}">Press</a> - <a href="${reverse('contact')}">Contact</a> + <a href="${reverse('about_edx')}" class="active">${_("Vision")}</a> + <a href="${reverse('faq_edx')}">${_("Faq")}</a> + <a href="${reverse('press')}">${_("Press")}</a> + <a href="${reverse('contact')}">${_("Contact")}</a> </nav> <section class="vision"> @@ -18,7 +19,7 @@ ## <div class="logo"> ## <img src="${static.url('images/edx-logo-large-bw.png')}"> ## </div> - ## <h2 class="mission-quote">“The mission of <span class="edx">edX</span> is to enhance human fulfillment worldwide through online ## learning, transforming education in quality, efficiency and scale through technology and research, for the benefit of campus-based ## students and the worldwide community of online learners.”</h2> + ## <h2 class="mission-quote">“${_('The mission of <span class="edx">edX</span> is to enhance human fulfillment worldwide through online ## learning, transforming education in quality, efficiency and scale through technology and research, for the benefit of campus-based ## students and the worldwide community of online learners.')}”</h2> ## </div> <section class="message left"> @@ -26,8 +27,8 @@ <img src="${static.url('images/about_1.jpg')}"> </div> <article> - <h2>About <span class="edx">edX</span></h2> - <p>EdX is a not-for-profit enterprise of its founding partners Harvard University and the Massachusetts Institute of Technology that features learning designed specifically for interactive study via the web. Based on a long history of collaboration and their shared educational missions, the founders are creating a new online-learning experience with online courses that reflect their disciplinary breadth. Along with offering online courses, the institutions will use edX to research how students learn and how technology can transform learning–both on-campus and worldwide. Anant Agarwal, former Director of MIT's Computer Science and Artificial Intelligence Laboratory, serves as the first president of edX. EdX's goals combine the desire to reach out to students of all ages, means, and nations, and to deliver these teachings from a faculty who reflect the diversity of its audience. EdX is based in Cambridge, Massachusetts and is governed by MIT and Harvard.</p> + <h2>${_('About {span_start}edX{span_end}').format(span_start='<span class="edx">', span_end='</span>')}</h2> + <p>${_("EdX is a not-for-profit enterprise of its founding partners Harvard University and the Massachusetts Institute of Technology that features learning designed specifically for interactive study via the web. Based on a long history of collaboration and their shared educational missions, the founders are creating a new online-learning experience with online courses that reflect their disciplinary breadth. Along with offering online courses, the institutions will use edX to research how students learn and how technology can transform learning–both on-campus and worldwide. Anant Agarwal, former Director of MIT's Computer Science and Artificial Intelligence Laboratory, serves as the first president of edX. EdX's goals combine the desire to reach out to students of all ages, means, and nations, and to deliver these teachings from a faculty who reflect the diversity of its audience. EdX is based in Cambridge, Massachusetts and is governed by MIT and Harvard.")}</p> </article> <hr class="fade-right-hr-divider"> </section> @@ -37,9 +38,9 @@ <img src="${static.url('images/university/harvard/about-harvard.jpg')}"> </div> <article> - <h2>Harvard University</h2> - <p>Harvard University is devoted to excellence in teaching, learning, and research, and to developing leaders in many disciplines who make a difference globally. Harvard faculty are engaged with teaching and research to push the boundaries of human knowledge. The University has twelve degree-granting Schools in addition to the Radcliffe Institute for Advanced Study.</p> - <p>Established in 1636, Harvard is the oldest institution of higher education in the United States. The University, which is based in Cambridge and Boston, Massachusetts, has an enrollment of over 20,000 degree candidates, including undergraduate, graduate, and professional students. Harvard has more than 360,000 alumni around the world.</p> + <h2>${_("Harvard University")}</h2> + <p>${_("Harvard University is devoted to excellence in teaching, learning, and research, and to developing leaders in many disciplines who make a difference globally. Harvard faculty are engaged with teaching and research to push the boundaries of human knowledge. The University has twelve degree-granting Schools in addition to the Radcliffe Institute for Advanced Study.")}</p> + <p>${_("Established in 1636, Harvard is the oldest institution of higher education in the United States. The University, which is based in Cambridge and Boston, Massachusetts, has an enrollment of over 20,000 degree candidates, including undergraduate, graduate, and professional students. Harvard has more than 360,000 alumni around the world.")}</p> </article> <hr class="fade-left-hr-divider"> </section> @@ -49,10 +50,10 @@ <img src="${static.url('images/university/mit/about-mit.jpg')}"> </div> <article> - <h2>Massachusetts Institute of Technology</h2> - <p>The Massachusetts Institute of Technology — a coeducational, privately endowed research university founded in 1861 — is dedicated to advancing knowledge and educating students in science, technology, and other areas of scholarship that will best serve the nation and the world in the 21st century. The Institute has close to 1,000 faculty and 10,000 undergraduate and graduate students. It is organized into five Schools: Architecture and Urban Planning; Engineering; Humanities, Arts, and Social Sciences; Sloan School of Management; and Science.</p> - <p>MIT's commitment to innovation has led to a host of scientific breakthroughs and technological advances. Achievements of the Institute's faculty and graduates have included the first chemical synthesis of penicillin and vitamin A, the development of inertial guidance systems, modern technologies for artificial limbs, and the magnetic core memory that made possible the development of digital computers. 78 alumni, faculty, researchers and staff have won Nobel Prizes.</p> - <p>Current areas of research and education include neuroscience and the study of the brain and mind, bioengineering, cancer, energy, the environment and sustainable development, information sciences and technology, new media, financial technology, and entrepreneurship.</p> + <h2>${_("Massachusetts Institute of Technology")}</h2> + <p>${_("The Massachusetts Institute of Technology — a coeducational, privately endowed research university founded in 1861 — is dedicated to advancing knowledge and educating students in science, technology, and other areas of scholarship that will best serve the nation and the world in the 21st century. The Institute has close to 1,000 faculty and 10,000 undergraduate and graduate students. It is organized into five Schools: Architecture and Urban Planning; Engineering; Humanities, Arts, and Social Sciences; Sloan School of Management; and Science.")}</p> + <p>${_("MIT's commitment to innovation has led to a host of scientific breakthroughs and technological advances. Achievements of the Institute's faculty and graduates have included the first chemical synthesis of penicillin and vitamin A, the development of inertial guidance systems, modern technologies for artificial limbs, and the magnetic core memory that made possible the development of digital computers. 78 alumni, faculty, researchers and staff have won Nobel Prizes.")}</p> + <p>${_("Current areas of research and education include neuroscience and the study of the brain and mind, bioengineering, cancer, energy, the environment and sustainable development, information sciences and technology, new media, financial technology, and entrepreneurship.")}</p> </article> </section> diff --git a/lms/templates/static_templates/contact.html b/lms/templates/static_templates/contact.html index 79e2743dbc37cb733b35224e18fd689eccfe0cca..c7cd122c86602c7d714b9d355afb14ab9068d310 100644 --- a/lms/templates/static_templates/contact.html +++ b/lms/templates/static_templates/contact.html @@ -1,16 +1,17 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from django.core.urlresolvers import reverse %> <%namespace name='static' file='../static_content.html'/> <%inherit file="../main.html" /> -<%block name="title"><title>Contact edX</title></%block> +<%block name="title"><title>${_("Contact edX")}</title></%block> <section class="container about"> <nav> - <a href="${reverse('about_edx')}">Vision</a> - <a href="${reverse('faq_edx')}">Faq</a> - <a href="${reverse('press')}">Press</a> - <a href="${reverse('contact')}" class="active">Contact</a> + <a href="${reverse('about_edx')}">${_("Vision")}</a> + <a href="${reverse('faq_edx')}">${_("Faq")}</a> + <a href="${reverse('press')}">${_("Press")}</a> + <a href="${reverse('contact')}" class="active">${_("Contact")}</a> </nav> <section class="contact"> @@ -18,23 +19,36 @@ <img src="${static.url('images/contact-page.jpg')}"> </div> <div class="contacts"> - <h2>Class Feedback</h2> - <p>We are always seeking feedback to improve our courses. If you are an enrolled student and have any questions, feedback, suggestions, or any other issues specific to a particular class, please post on the discussion forums of that class.</p> - - <h2>General Inquiries and Feedback</h2> - <p>If you have a general question about edX please email <a href="mailto:info@edx.org">info@edx.org</a>. To see if your question has already been answered, visit our <a href="${reverse('faq_edx')}">FAQ page</a>. You can also join the discussion on our <a href="http://www.facebook.com/EdxOnline">Facebook page</a>. Though we may not have a chance to respond to every email, we take all feedback into consideration.</p> - - <h2>Technical Inquiries and Feedback</h2> - <p>If you have suggestions/feedback about the overall edX platform, or are facing general technical issues with the platform (e.g., issues with email addresses and passwords), you can reach us at <a href="mailto:technical@edx.org">technical@edx.org</a>. For technical questions, please make sure you are using a current version of Firefox or Chrome, and include browser and version in your e-mail, as well as screenshots or other pertinent details. If you find a bug or other issues, you can reach us at the following: <a href="mailto:bugs@edx.org">bugs@edx.org</a>.</p> - - <h2>Media</h2> - <p>Please visit our <a href="${reverse('press')}">media/press page</a> for more information. For any media or press enquiries, please email <a href="mailto:press@edx.org">press@edx.org</a>.</p> - - <h2>Universities</h2> - <p>If you are a university wishing to collaborate or with questions about edX, please email <a href="mailto:university@edx.org">university@edx.org</a>.</p> - - <h2>Accessibility</h2> - <p>EdX strives to create an innovative online-learning platform that promotes accessibility for everyone, including students with disabilities. We are dedicated to improving the accessibility of the platform and welcome your comments or questions at <a href="mailto:accessibility@edx.org">accessibility@edx.org.</a></p> + <h2>${_("Class Feedback")}</h2> + <p>${_("We are always seeking feedback to improve our courses. If you are an enrolled student and have any questions, feedback, suggestions, or any other issues specific to a particular class, please post on the discussion forums of that class.")}</p> + + <h2>${_("General Inquiries and Feedback")}</h2> + <p>${_('If you have a general question about edX please email {email}. To see if your question has already been answered, visit our {faq_link_start}FAQ page{faq_link_end}. You can also join the discussion on our {fb_link_start}facebook page{fb_link_end}. Though we may not have a chance to respond to every email, we take all feedback into consideration.').format( + email='<a href="mailto:info@edx.org">info@edx.org</a>', + faq_link_start='<a href="{url}">'.format(url=reverse('faq_edx')), + faq_link_end='</a>', + fb_link_start='<a href="http://www.facebook.com/EdxOnline">'. + fb_link_end='</a>' + )}</p> + + <h2>${_("Technical Inquiries and Feedback")}</h2> + <p>${_('If you have suggestions/feedback about the overall edX platform, or are facing general technical issues with the platform (e.g., issues with email addresses and passwords), you can reach us at {tech_email}. For technical questions, please make sure you are using a current version of Firefox or Chrome, and include browser and version in your e-mail, as well as screenshots or other pertinent details. If you find a bug or other issues, you can reach us at the following: {bug_email}.').format( + tech_email='<a href="mailto:technical@edx.org">technical@edx.org</a>', + bug_email='<a href="mailto:bugs@edx.org">bugs@edx.org</a>' + )}</p> + + <h2>${_("Media")}</h2> + <p>${_('Please visit our {link_start}media/press page{link_end} for more information. For any media or press inquiries, please email {email}.').format( + link_start='<a href="{url}">'.format(url=reverse('faq_edx')), + link_end='</a>', + email='<a href="mailto:{email}">{email}</a>'.format(email="press@edx.org"), + )}</p> + + <h2>${_("Universities")}</h2> + <p>${_('If you are a university wishing to Collaborate or with questions about edX, please email {email}.'.format(email='<a href="mailto:{email}">{email}</a>'.format(email="university@edx.org"))}</p> + + <h2>${_("Accessibility")}</h2> + <p>${_('EdX strives to create an innovative online-learning platform that promotes accessibility for everyone, including students with disabilities. We are dedicated to improving the accessibility of the platform and welcome your comments or questions at {email}.'.format(email='<a href="mailto:{email}">{email}</a>'.format(email="accessibility@edx.org"))}</p> </div> </section> diff --git a/lms/templates/static_templates/copyright.html b/lms/templates/static_templates/copyright.html index 67058ad6390ab265247e1c839d14955b3156e79b..4b10cff17404bd3698930cde65cb48b61cbd618d 100644 --- a/lms/templates/static_templates/copyright.html +++ b/lms/templates/static_templates/copyright.html @@ -1,24 +1,25 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from django.core.urlresolvers import reverse %> <%inherit file="../main.html" /> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>Copyright</title></%block> +<%block name="title"><title>${_("Copyright")}</title></%block> <section class="static-container copyright"> - <h1> Licensing Information </h1> + <h1>${_(" Licensing Information ")}</h1> <hr class="horizontal-divider"> <div class="inner-wrapper"> - <h2>Videos and Exercises</h2> - <p> Copyright © 2012 MIT. All rights reserved. In order to further MIT's goal of making education accessible and affordable to the world, MIT is planning to make <i>MITx</i> course content available under open source licenses.</p> + <h2>${_("Videos and Exercises")}</h2> + <p>${_(" Copyright © 2012 MIT. All rights reserved. In order to further MIT's goal of making education accessible and affordable to the world, MIT is planning to make <i>MITx</i> course content available under open source licenses.")}</p> - <h2>Textbook</h2> - <p> Copyright © 2005 Elsevier Inc. All Rights Reserved. Used with permission. While our goal is to build courses with as much free and open content as possible, we apologize that we do not have the ability to do so entirely. </p> + <h2>${_("Textbook")}</h2> + <p>${_(" Copyright © 2005 Elsevier Inc. All Rights Reserved. Used with permission. While our goal is to build courses with as much free and open content as possible, we apologize that we do not have the ability to do so entirely. ")}</p> - <h2>Student-generated content</h2> - <p>Copyright © 2012. All Rights Reserved. Due to privacy concerns, we do not know what portion of these will be released under open licenses.</p> + <h2>${_("Student-generated content")}</h2> + <p>${_("Copyright © 2012. All Rights Reserved. Due to privacy concerns, we do not know what portion of these will be released under open licenses.")}</p> - <p>MIT and <i>MITx</i> are trademarks of the Massachusetts Institute of Technology, and may not be used without permission.</p> + <p>${_("MIT and <i>MITx</i> are trademarks of the Massachusetts Institute of Technology, and may not be used without permission.")}</p> </div> </section> diff --git a/lms/templates/static_templates/faq.html b/lms/templates/static_templates/faq.html index 8b4561da7e26353116476cc400e51f312b7346ad..56dec83d6466894524c3ad7a447da41cc8737e01 100644 --- a/lms/templates/static_templates/faq.html +++ b/lms/templates/static_templates/faq.html @@ -1,98 +1,99 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from django.core.urlresolvers import reverse %> <%namespace name='static' file='../static_content.html'/> <%inherit file="../main.html" /> -<%block name="title"><title>FAQ</title></%block> +<%block name="title"><title>${_("FAQ")}</title></%block> <section class="container about"> <nav> - <a href="${reverse('about_edx')}">Vision</a> - <a href="${reverse('faq_edx')}" class="active">Faq</a> - <a href="${reverse('press')}">Press</a> - <a href="${reverse('contact')}">Contact</a> + <a href="${reverse('about_edx')}">${_("Vision")}</a> + <a href="${reverse('faq_edx')}" class="active">${_("Faq")}</a> + <a href="${reverse('press')}">${_("Press")}</a> + <a href="${reverse('contact')}">${_("Contact")}</a> </nav> <section class="faq"> <section class="responses"> <section id="the-organization" class="category"> - <h2>Organization</h2> + <h2>${_("Organization")}</h2> <article class="response"> - <h3>What is edX?</h3> - <p>edX is a not-for-profit enterprise of its founding partners, the Massachusetts Institute of Technology (MIT) and Harvard University that offers online learning to on-campus students and to millions of people around the world. To do so, edX is building an open-source online learning platform and hosts an online web portal at <a href="http://www.edx.org">www.edx.org</a> for online education.</p> - <p>EdX currently offers HarvardX, MITx and BerkeleyX classes online for free. Beginning in fall 2013, edX will offer WellesleyX , GeorgetownX and the University of Texas System classes online for free. The UT System includes nine universities and six health institutions. In 2014, edX will further expand its consortium, including several international schools, when it begins offering courses from École Polytechnique Fédérale de Lausanne, McGill University, University of Toronto, Australian National University, Delft University of Technology, and Rice University. The edX institutions aim to extend their collective reach to build a global community of online students. Along with offering online courses, the three universities undertake research on how students learn and how technology can transform learning both on-campus and online throughout the world.</p> + <h3>${_("What is edX?")}</h3> + <p>${_('edX is a not-for-profit enterprise of its founding partners, the Massachusetts Institute of Technology (MIT) and Harvard University that offers online learning to on-campus students and to millions of people around the world. To do so, edX is building an open-source online learning platform and hosts an online web portal at <a href=\"http://www.edx.org\">www.edx.org</a> for online education.')}</p> + <p>${_("EdX currently offers HarvardX, MITx and BerkeleyX classes online for free. Beginning in fall 2013, edX will offer WellesleyX , GeorgetownX and the University of Texas System classes online for free. The UT System includes nine universities and six health institutions. In 2014, edX will further expand its consortium, including several international schools, when it begins offering courses from École Polytechnique Fédérale de Lausanne, McGill University, University of Toronto, Australian National University, Delft University of Technology, and Rice University. The edX institutions aim to extend their collective reach to build a global community of online students. Along with offering online courses, the three universities undertake research on how students learn and how technology can transform learning both on-campus and online throughout the world.")}</p> </article> <article class="response"> - <h3>Will edX be adding additional X Universities?</h3> - <p>More than 200 institutions from around the world have expressed interest in collaborating with edX since Harvard and MIT announced its creation in May. EdX is focused above all on quality and developing the best not-for-profit model for online education. In addition to providing online courses on the edX platform, the "X University" Consortium will be a forum in which members can share experiences around online learning. Harvard, MIT, UC Berkeley, the University of Texas system and the other consortium members will work collaboratively to establish the "X University" Consortium, whose membership will expand to include additional "X Universities." As noted above, edX’s newest consortium members include Wellesley, Georgetown, École Polytechnique Fédérale de Lausanne, McGill University, University of Toronto, Australian National University, Delft University of Technology, and Rice University. Each member of the consortium will offer courses on the edX platform as an "X University." The gathering of many universities' educational content together on one site will enable learners worldwide to access the offered course content of any participating university from a single website, and to use a set of online educational tools shared by all participating universities.</p> - <p>edX will actively explore the addition of other institutions from around the world to the edX platform, and looks forward to adding more "X Universities."</p> + <h3>${_("Will edX be adding additional X Universities?")}</h3> + <p>${_("More than 200 institutions from around the world have expressed interest in collaborating with edX since Harvard and MIT announced its creation in May. EdX is focused above all on quality and developing the best not-for-profit model for online education. In addition to providing online courses on the edX platform, the \"X University\" Consortium will be a forum in which members can share experiences around online learning. Harvard, MIT, UC Berkeley, the University of Texas system and the other consortium members will work collaboratively to establish the \"X University\" Consortium, whose membership will expand to include additional \"X Universities.\" As noted above, edX's newest consortium members include Wellesley, Georgetown, École Polytechnique Fédérale de Lausanne, McGill University, University of Toronto, Australian National University, Delft University of Technology, and Rice University. Each member of the consortium will offer courses on the edX platform as an \"X University\". The gathering of many universities' educational content together on one site will enable learners worldwide to access the offered course content of any participating university from a single website, and to use a set of online educational tools shared by all participating universities.")}</p> + <p>${_("edX will actively explore the addition of other institutions from around the world to the edX platform, and looks forward to adding more \"X Universities\".")}</p> </article> </section> <section id="students" class="category"> - <h2>Students</h2> + <h2>${_("Students")}</h2> <article class="response"> - <h3>Who can take edX courses? Will there be an admissions process?</h3> - <p>EdX will be available to anyone in the world with an internet connection, and in general, there will not be an admissions process.</p> + <h3>${_("Who can take edX courses? Will there be an admissions process?")}</h3> + <p>${_("EdX will be available to anyone in the world with an internet connection, and in general, there will not be an admissions process.")}</p> </article> <article class="response"> - <h3>Will certificates be awarded?</h3> - <p>Yes. Online learners who demonstrate mastery of subjects can earn a certificate - of mastery. Certificates will be issued at the discretion of edX and the underlying - X University that offered the course under the name of the underlying "X - University" from where the course originated, i.e. HarvardX, MITx or BerkeleyX. - For the courses in Fall 2012, those certificates will be free. There is a plan to - charge a modest fee for certificates in the future. Note: At this time, edX is - holding certificates for learners connected with Cuba, Iran, Syria and Sudan - pending confirmation that the issuance is in compliance with U.S. embargoes.</p> + <h3>${_("Will certificates be awarded?")}</h3> + <p>${_("Yes. Online learners who demonstrate mastery of subjects can earn a certificate " + "of mastery. Certificates will be issued at the discretion of edX and the underlying " + "X University that offered the course under the name of the underlying \"X " + "University\" from where the course originated, i.e. HarvardX, MITx or BerkeleyX. " + "For the courses in Fall 2012, those certificates will be free. There is a plan to " + "charge a modest fee for certificates in the future. Note: At this time, edX is " + "holding certificates for learners connected with Cuba, Iran, Syria and Sudan " + "pending confirmation that the issuance is in compliance with U.S. embargoes.")}</p> </article> <article class="response"> - <h3>What will the scope of the online courses be? How many? Which faculty?</h3> - <p>Our goal is to offer a wide variety of courses across disciplines. There are currently <a href="/courses">fifteen</a> offered on the edX platform.</p> + <h3>${_("What will the scope of the online courses be? How many? Which faculty?")}</h3> + <p>${_('Our goal is to offer a wide variety of courses across disciplines. There are currently {link_start}fifteen{link_end} offered on the edX platform.').format(link_start='<a href="/courses">', link_end='</a>')}</p> </article> <article class="response"> - <h3>Who is the learner? Domestic or international? Age range?</h3> - <p>Improving teaching and learning for students on our campuses is one of our primary goals. Beyond that, we don't have a target group of potential learners, as the goal is to make these courses available to anyone in the world - from any demographic - who has interest in advancing their own knowledge. The only requirement is to have a computer with an internet connection. More than 150,000 students from over 160 countries registered for MITx's first course, 6.002x: Circuits and Electronics. The age range of students certified in this course was from 14 to 74 years-old.</p> + <h3>${_("Who is the learner? Domestic or international? Age range?")}</h3> + <p>${_("Improving teaching and learning for students on our campuses is one of our primary goals. Beyond that, we don't have a target group of potential learners, as the goal is to make these courses available to anyone in the world - from any demographic - who has interest in advancing their own knowledge. The only requirement is to have a computer with an internet connection. More than 150,000 students from over 160 countries registered for MITx's first course, 6.002x: Circuits and Electronics. The age range of students certified in this course was from 14 to 74 years-old.")}</p> </article> <article class="response"> - <h3>Will participating universities' standards apply to all courses offered on the edX platform?</h3> - <p>Yes: the reach changes exponentially, but the rigor remains the same.</p> + <h3>${_("Will participating universities' standards apply to all courses offered on the edX platform?")}</h3> + <p>${_("Yes: the reach changes exponentially, but the rigor remains the same.")}</p> </article> <article class="response"> - <h3>How do you intend to test whether this approach is improving learning?</h3> - <p>Edx institutions have assembled faculty members who will collect and analyze data to assess results and the impact edX is having on learning.</p> + <h3>${_("How do you intend to test whether this approach is improving learning?")}</h3> + <p>${_("Edx institutions have assembled faculty members who will collect and analyze data to assess results and the impact edX is having on learning.")}</p> </article> <article class="response"> - <h3>How may I apply to study with edX?</h3> - <p>Simply complete the online <a href="#signup-modal" rel="leanModal">signup form</a>. Enrolling will create your unique student record in the edX database, allow you to register for classes, and to receive a certificate on successful completion.</p> + <h3>${_("How may I apply to study with edX?")}</h3> + <p>${_('Simply complete the online {link_start}signup form{link_end}. Enrolling will create your unique student record in the edX database, allow you to register for classes, and to receive a certificate on successful completion.').format(link_start='<a href="#signup-modal" rel="leanModal">', link_end='</a>')}</p> </article> <article class="response"> - <h3>How may another university participate in edX? </h3> - <p>If you are from a university interested in discussing edX, please email <a href="mailto:university@edx.org">university@edx.org</a></p> + <h3>${_("How may another university participate in edX? ")}</h3> + <p>${_('If you are from a university interested in discussing edX, please email {email}').format(email='<a href="mailto:university@edx.org">university@edx.org</a>')}</p> </article> </section> <section id="technology-platform" class="category"> - <h2>Technology Platform</h2> + <h2>${_("Technology Platform")}</h2> <article class="response"> - <h3>What technology will edX use?</h3> - <p>The edX open-source online learning platform will feature interactive learning designed specifically for the web. Features will include: self-paced learning, online discussion groups, wiki-based collaborative learning, assessment of learning as a student progresses through a course, and online laboratories and other interactive learning tools. The platform will also serve as a laboratory from which data will be gathered to better understand how students learn. Because it is open source, the platform will be continuously improved by a worldwide community of collaborators, with new features added as needs arise.</p> - <p>The first version of the technology was used in the first <em>MITx</em> course, 6.002x Circuits and Electronics, which launched in Spring, 2012.</p> + <h3>${_("What technology will edX use?")}</h3> + <p>${_("The edX open-source online learning platform will feature interactive learning designed specifically for the web. Features will include: self-paced learning, online discussion groups, wiki-based collaborative learning, assessment of learning as a student progresses through a course, and online laboratories and other interactive learning tools. The platform will also serve as a laboratory from which data will be gathered to better understand how students learn. Because it is open source, the platform will be continuously improved by a worldwide community of collaborators, with new features added as needs arise.")}</p> + <p>${_("The first version of the technology was used in the first <em>MITx</em> course, 6.002x Circuits and Electronics, which launched in Spring, 2012.")}</p> </article> <article class="response"> - <h3>How is this different from what other universities are doing online?</h3> - <p>EdX is a not-for-profit enterprise built upon the shared educational missions of its founding partners, Harvard University and MIT. The edX platform will be available as open source. Also, a primary goal of edX is to improve teaching and learning on campus by experimenting with blended models of learning and by supporting faculty in conducting significant research on how students learn.</p> + <h3>${_("How is this different from what other universities are doing online?")}</h3> + <p>${_("EdX is a not-for-profit enterprise built upon the shared educational missions of its founding partners, Harvard University and MIT. The edX platform will be available as open source. Also, a primary goal of edX is to improve teaching and learning on campus by experimenting with blended models of learning and by supporting faculty in conducting significant research on how students learn.")}</p> </article> </section> </section> <nav class="categories"> - <a href="#organization">Organization</a> - <a href="${reverse('help_edx')}">Students</a> - <a href="#technology-platform">Technology Platform</a> + <a href="#organization">${_("Organization")}</a> + <a href="${reverse('help_edx')}">${_("Students")}</a> + <a href="#technology-platform">${_("Technology Platform")}</a> </nav> </section> </section> diff --git a/lms/templates/static_templates/help.html b/lms/templates/static_templates/help.html index 417033fe0e2a719fc93ee5d538d05edff10210be..7af712f570bc4925c90a6e1607bc5538542c9ca2 100644 --- a/lms/templates/static_templates/help.html +++ b/lms/templates/static_templates/help.html @@ -1,319 +1,320 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from django.core.urlresolvers import reverse %> <%inherit file="../main.html" /> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>edX Help</title></%block> +<%block name="title"><title>${_("edX Help")}</title></%block> <%block name="js_extra"> <script src="${static.url('js/help.js')}"></script> </%block> <section class="static-container help"> - <h1>Help</h1> + <h1>${_("Help")}</h1> <hr class="horizontal-divider"> <section class="questions"> <section class="responses"> <section id="edx_basics_faq" class="category"> - <h2>edX Basics</h2> + <h2>${_("edX Basics")}</h2> <article class="response"> - <h3 class="question">How do I sign up to take a class?</h3> + <h3 class="question">${_("How do I sign up to take a class?")}</h3> <div class ="answer" id="edx_basics_faq_answer_0"> - <p>Simply create an edX account (it's free) and then register for the course of your choice (also free). Follow the prompts on the edX website.</p> + <p>${_("Simply create an edX account (it's free) and then register for the course of your choice (also free). Follow the prompts on the edX website.")}</p> </div> </article> <article class="response"> - <h3 class="question">What does it cost to take a class? Is this really free?</h3> + <h3 class="question">${_("What does it cost to take a class? Is this really free?")}</h3> <div class ="answer" id="edx_basics_faq_answer_1"> - <p>EdX courses are free for everyone. All you need is an Internet connection.</p> + <p>${_("EdX courses are free for everyone. All you need is an Internet connection.")}</p> </div> </article> <article class="response"> - <h3 class="question">What happens after I sign up for a course?</h3> + <h3 class="question">${_("What happens after I sign up for a course?")}</h3> <div class ="answer" id="edx_basics_faq_answer_2"> - <p>You will receive an activation email. Follow the prompts in that email to activate your account. You will need to log in each time you access your course(s). Once the course begins, it’s time to hit the virtual books. You can access the lectures, homework, tutorials, etc., for each week, one week at a time.</p> + <p>${_("You will receive an activation email. Follow the prompts in that email to activate your account. You will need to log in each time you access your course(s). Once the course begins, it\'s time to hit the virtual books. You can access the lectures, homework, tutorials, etc., for each week, one week at a time.")}</p> </div> </article> <article class="response"> - <h3 class="question">Who can take an edX course?</h3> + <h3 class="question">${_("Who can take an edX course?")}</h3> <div class ="answer" id="edx_basics_faq_answer_3"> - <p>You, your mom, your little brother, your grandfather -- anyone with Internet access can take an edX course. Free.</p> + <p>${_("You, your mom, your little brother, your grandfather -- anyone with Internet access can take an edX course. Free.")}</p> </div> </article> <article class="response"> - <h3 class="question">Are the courses only offered in English?</h3> + <h3 class="question">${_("Are the courses only offered in English?")}</h3> <div class ="answer" id="edx_basics_faq_answer_4"> - <p>Some edX courses include a translation of the lecture in the text bar to the right of the video. Some have the specific option of requesting a course in other languages. Please check your course to determine foreign language options.</p> + <p>${_("Some edX courses include a translation of the lecture in the text bar to the right of the video. Some have the specific option of requesting a course in other languages. Please check your course to determine foreign language options.")}</p> </div> </article> <article class="response"> - <h3 class="question">When will there be more courses on other subjects?</h3> + <h3 class="question">${_("When will there be more courses on other subjects?")}</h3> <div class ="answer" id="edx_basics_faq_answer_5"> - <p>We are continually reviewing and creating courses to add to the edX platform. Please check the website for future course announcements. You can also "friend" edX on Facebook – you’ll receive updates and announcements.</p> + <p>${_("We are continually reviewing and creating courses to add to the edX platform. Please check the website for future course announcements. You can also \"friend\" edX on Facebook - you\'ll receive updates and announcements.")}</p> </div> </article> <article class="response"> - <h3 class="question">When does my course start and/or finish?</h3> + <h3 class="question">${_("When does my course start and/or finish?")}</h3> <div class ="answer" id="edx_basics_faq_answer_7"> - <p>You can find the start and stop dates for each course on each course description page.</p> + <p>${_("You can find the start and stop dates for each course on each course description page.")}</p> </div> </article> <article class="response"> - <h3 class="question">Is there a walk-through of a sample course session?</h3> + <h3 class="question">${_("Is there a walk-through of a sample course session?")}</h3> <div class ="answer" id="edx_basics_faq_answer_8"> - <p> There are video introductions for every course that will give you a good sense of how the course works and what to expect.</p> + <p>${_(" There are video introductions for every course that will give you a good sense of how the course works and what to expect.")}</p> </div> </article> <article class="response"> - <h3 class="question">I don't have the prerequisites for a course that I am interested in. Can I still take the course?</h3> + <h3 class="question">${_("I don't have the prerequisites for a course that I am interested in. Can I still take the course?")}</h3> <div class ="answer" id="edx_basics_faq_answer_9"> - <p>We do not check students for prerequisites, so you are allowed to attempt the course. However, if you do not know prerequisite subjects before taking a class, you will have to learn the prerequisite material on your own over the semester, which can be an extremely difficult task.</p> + <p>${_("We do not check students for prerequisites, so you are allowed to attempt the course. However, if you do not know prerequisite subjects before taking a class, you will have to learn the prerequisite material on your own over the semester, which can be an extremely difficult task.")}</p> </div> </article> <article class="response"> - <h3 class="question">What happens if I have to quit a course? Are there any penalties? Will I be able to take another course in the future?</h3> + <h3 class="question">${_("What happens if I have to quit a course? Are there any penalties? Will I be able to take another course in the future?")}</h3> <div class ="answer" id="edx_basics_faq_answer_10"> - <p>You may unregister from an edX course at anytime, there are absolutely no penalties associated with incomplete edX studies, and you may register for the same course (provided we are still offering it) at a later time.</p> + <p>${_("You may unregister from an edX course at anytime, there are absolutely no penalties associated with incomplete edX studies, and you may register for the same course (provided we are still offering it) at a later time.")}</p> </div> </article> </section> <section id="classes_faq" class="category"> - <h2>The Classes</h2> + <h2>${_("The Classes")}</h2> <article class="response"> - <h3 class="question">How much work will I have to do to pass my course?</h3> + <h3 class="question">${_("How much work will I have to do to pass my course?")}</h3> <div class ="answer" id="classes_faq_answer_0"> - <p>The projected hours of study required for each course are described on the specific course description page.</p> + <p>${_("The projected hours of study required for each course are described on the specific course description page.")}</p> </div> </article> <article class="response"> - <h3 class="question">What should I do before I take a course (prerequisites)?</h3> + <h3 class="question">${_("What should I do before I take a course (prerequisites)?")}</h3> <div class ="answer" id="classes_faq_answer_1"> - <p>Each course is different – some have prerequisites, and some don’t. Take a look at your specific course’s recommended prerequisites. If you do not have a particular prerequisite, you may still take the course.</p> + <p>${_("Each course is different - some have prerequisites, and some don\'t. Take a look at your specific course/'s recommended prerequisites. If you do not have a particular prerequisite, you may still take the course.")}</p> </div> </article> <article class="response"> - <h3 class="question">What books should I read? (I am interested in reading materials before the class starts).</h3> + <h3 class="question">${_("What books should I read? (I am interested in reading materials before the class starts).")}</h3> <div class ="answer" id="classes_faq_answer_2"> - <p>Take a look at the specific course prerequisites. All required academic materials will be provided during the course, within the browser. Some of the course descriptions may list additional resources. For supplemental reading material before or during the course, you can post a question on the course’s Discussion Forum to ask your online coursemates for suggestions.</p> + <p>${_("Take a look at the specific course prerequisites. All required academic materials will be provided during the course, within the browser. Some of the course descriptions may list additional resources. For supplemental reading material before or during the course, you can post a question on the course\'s Discussion Forum to ask your online coursemates for suggestions.")}</p> </div> </article> <article class="response"> - <h3 class="question"> Can I download the book for my course?</h3> + <h3 class="question">${_(" Can I download the book for my course?")}</h3> <div class ="answer" id="classes_faq_answer_3"> - <p>EdX book content may only be viewed within the browser, and downloading it violates copyright laws. If you need or want a hard copy of the book, we recommend that you purchase a copy.</p> + <p>${_("EdX book content may only be viewed within the browser, and downloading it violates copyright laws. If you need or want a hard copy of the book, we recommend that you purchase a copy.")}</p> </div> </article> <article class="response"> - <h3 class="question">Can I take more than one course at a time?</h3> + <h3 class="question">${_("Can I take more than one course at a time?")}</h3> <div class ="answer" id="classes_faq_answer_4"> - <p>You may take multiple edX courses, however we recommend checking the requirements on each course description page to determine your available study hours and the demands of the intended courses.</p> + <p>${_("You may take multiple edX courses, however we recommend checking the requirements on each course description page to determine your available study hours and the demands of the intended courses.")}</p> </div> </article> <article class="response"> - <h3 class="question">How do I log in to take an edX class?</h3> + <h3 class="question">${_("How do I log in to take an edX class?")}</h3> <div class ="answer" id="classes_faq_answer_5"> - <p>Once you sign up for a course and activate your account, click on the "Log In" button on the edx.org home page. You will need to type in your email address and edX password each time you log in.</p> + <p>${_("Once you sign up for a course and activate your account, click on the \"Log In\" button on the edx.org home page. You will need to type in your email address and edX password each time you log in.")}</p> </div> </article> <article class="response"> - <h3 class="question">What time is the class?</h3> + <h3 class="question">${_("What time is the class?")}</h3> <div class ="answer" id="classes_faq_answer_6"> - <p>EdX classes take place at your convenience. Prefer to sleep in and study late? No worries. Videos and problem sets are available 24 hours a day, which means you can watch video and complete work whenever you have spare time. You simply log in to your course via the Internet and work through the course material, one week at a time.</p> + <p>${_("EdX classes take place at your convenience. Prefer to sleep in and study late? No worries. Videos and problem sets are available 24 hours a day, which means you can watch video and complete work whenever you have spare time. You simply log in to your course via the Internet and work through the course material, one week at a time.")}</p> </div> </article> <article class="response"> - <h3 class="question">If I miss a week, how does this affect my grade?</h3> + <h3 class="question">${_("If I miss a week, how does this affect my grade?")}</h3> <div class ="answer" id="classes_faq_answer_7"> - <p>It is certainly possible to pass an edX course if you miss a week; however, coursework is progressive, so you should review and study what you may have missed. You can check your progress dashboard in the course to see your course average along the way if you have any concerns.</p> + <p>${_("It is certainly possible to pass an edX course if you miss a week; however, coursework is progressive, so you should review and study what you may have missed. You can check your progress dashboard in the course to see your course average along the way if you have any concerns.")}</p> </div> </article> <article class="response"> - <h3 class="question">How can I meet/find other students?</h3> + <h3 class="question">${_("How can I meet/find other students?")}</h3> <div class ="answer" id="classes_faq_answer_8"> - <p>All edX courses have Discussion Forums where you can chat with and help each other within the framework of the Honor Code.</p> + <p>${_("All edX courses have Discussion Forums where you can chat with and help each other within the framework of the Honor Code.")}</p> </div> </article> <article class="response"> - <h3 class="question">How can I talk to professors, fellows and teaching assistants?</h3> + <h3 class="question">${_("How can I talk to professors, fellows and teaching assistants?")}</h3> <div class ="answer" id="classes_faq_answer_9"> - <p>The Discussion Forums are the best place to reach out to the edX teaching team for your class, and you don’t have to wait in line or rearrange your schedule to fit your professor’s – just post your questions. The response isn’t always immediate, but it’s usually pretty darned quick.</p> + <p>${_("The Discussion Forums are the best place to reach out to the edX teaching team for your class, and you don\'t have to wait in line or rearrange your schedule to fit your professor'\s - just post your questions. The response isn\'t always immediate, but it\'s usually pretty darned quick.")}</p> </div> </article> <article class="response"> - <h3 class="question">Getting help.</h3> + <h3 class="question">${_("Getting help.")}</h3> <div class="answer" id="classes_faq_answer_10"> - <p>You have a vibrant, global community of fellow online learners available 24-7 to help with the course within the framework of the Honor Code, as well as support from the TAs who monitor the course. Take a look at the course’s Discussion Forum where you can review questions, answers and comments from fellow online learners, as well as post a question.</p> + <p>${_("You have a vibrant, global community of fellow online learners available 24-7 to help with the course within the framework of the Honor Code, as well as support from the TAs who monitor the course. Take a look at the course\'s Discussion Forum where you can review questions, answers and comments from fellow online learners, as well as post a question.")}</p> </div> </article> <article class="response"> - <h3 class="question">Can I re-take a course?</h3> + <h3 class="question">${_("Can I re-take a course?")}</h3> <div class ="answer" id="classes_faq_answer_11"> - <p>Good news: there are unlimited "mulligans" in edX. You may re-take edX courses as often as you wish. Your performance in any particular offering of a course will not effect your standing in future offerings of any edX course, including future offerings of the same course.</p> + <p>${_("Good news: there are unlimited \"mulligans\" in edX. You may re-take edX courses as often as you wish. Your performance in any particular offering of a course will not effect your standing in future offerings of any edX course, including future offerings of the same course.")}</p> </div> </article> <article class="response"> - <h3 class="question">Enrollment for a course that I am interested in is open, but the course has already started. Can I still enroll?</h3> + <h3 class="question">${_("Enrollment for a course that I am interested in is open, but the course has already started. Can I still enroll?")}</h3> <div class ="answer" id="classes_faq_answer_12"> - <p>Yes, but you will not be able to turn in any assignments or exams that have already been due. If it is early in the course, you might still be able to earn enough points for a certificate, but you will have to check with the course in question in order to find out more.</p> + <p>${_("Yes, but you will not be able to turn in any assignments or exams that have already been due. If it is early in the course, you might still be able to earn enough points for a certificate, but you will have to check with the course in question in order to find out more.")}</p> </div> </article> <article class="response"> - <h3 class="question">Is there an exam at the end?</h3> + <h3 class="question">${_("Is there an exam at the end?")}</h3> <div class ="answer" id="classes_faq_answer_13"> - <p>Different courses have slightly different structures. Please check the course material description to see if there is a final exam or final project.</p> + <p>${_("Different courses have slightly different structures. Please check the course material description to see if there is a final exam or final project.")}</p> </div> </article> <article class="response"> - <h3 class="question">Will the same courses be offered again in the future?</h3> + <h3 class="question">${_("Will the same courses be offered again in the future?")}</h3> <div class ="answer" id="classes_faq_answer_14"> - <p>Existing edX courses will be re-offered, and more courses added.</p> + <p>${_("Existing edX courses will be re-offered, and more courses added.")}</p> </div> </article> </section> - + <section id="certificates_and_credits_faq" class="category"> - <h2>Certificates & Credits</h2> + <h2>${_("Certificates & Credits")}</h2> <article class="response"> - <h3 class="question">Will I get a certificate for taking an edX course?</h3> + <h3 class="question">${_("Will I get a certificate for taking an edX course?")}</h3> <div class ="answer" id="certificates_and_credits_faq_answer_0"> - <p>Online learners who receive a passing grade for a course will receive a certificate - of mastery at the discretion of edX and the underlying X University that offered - the course. For example, a certificate of mastery for MITx’s 6.002x Circuits & - Electronics will come from edX and MITx.</p> - <p>If you passed the course, your certificate of mastery will be delivered online - through edx.org. So be sure to check your email in the weeks following the final - grading – you will be able to download and print your certificate. Note: At this - time, edX is holding certificates for learners connected with Cuba, Iran, Syria - and Sudan pending confirmation that the issuance is in compliance with U.S. - embargoes.</p> + <p>${_("Online learners who receive a passing grade for a course will receive a certificate " + "of mastery at the discretion of edX and the underlying X University that offered " + "the course. For example, a certificate of mastery for MITx\'s 6.002x Circuits & " + "Electronics will come from edX and MITx.")}</p> + <p>${_("If you passed the course, your certificate of mastery will be delivered online " + "through edx.org. So be sure to check your email in the weeks following the final " + "grading - you will be able to download and print your certificate. Note: At this " + "time, edX is holding certificates for learners connected with Cuba, Iran, Syria " + "and Sudan pending confirmation that the issuance is in compliance with U.S. " + "embargoes.")}</p> </div> </article> <article class="response"> - <h3 class="question">How are edX certificates delivered?</h3> + <h3 class="question">${_("How are edX certificates delivered?")}</h3> <div class ="answer" id="certificates_and_credits_faq_answer_1"> - <p>EdX certificates are delivered online through edx.org. So be sure to check your email in the weeks following the final grading – you will be able to download and print your certificate.</p> + <p>${_("EdX certificates are delivered online through edx.org. So be sure to check your email in the weeks following the final grading - you will be able to download and print your certificate.")}</p> </div> </article> <article class="response"> - <h3 class="question">What is the difference between a proctored certificate and an honor code certificate?</h3> + <h3 class="question">${_("What is the difference between a proctored certificate and an honor code certificate?")}</h3> <div class ="answer" id="certificates_and_credits_faq_answer_2"> - <p>A proctored certificate is given to students who take and pass an exam under proctored conditions. An honor-code certificate is given to students who have completed all of the necessary online coursework associated with a course and have signed <link> the edX honor code </link>.</p> + <p>${_("A proctored certificate is given to students who take and pass an exam under proctored conditions. An honor-code certificate is given to students who have completed all of the necessary online coursework associated with a course and have signed <link> the edX honor code </link>.")}</p> </div> </article> <article class="response"> - <h3 class="question">Can I get both a proctored certificate and an honor code certificate?</h3> + <h3 class="question">${_("Can I get both a proctored certificate and an honor code certificate?")}</h3> <div class="answer" id="certificates_and_credits_faq_answer_3"> - <p>Yes. The requirements for both certificates can be independently satisfied.</p> + <p>${_("Yes. The requirements for both certificates can be independently satisfied.")}</p> </div> </article> <article class="response"> - <h3 class="question">Will my grade be shown on my certificate?</h3> + <h3 class="question">${_("Will my grade be shown on my certificate?")}</h3> <div class ="answer" id="certificates_and_credits_faq_answer_4"> - <p>No. Grades are not displayed on either honor code or proctored certificates.</p> + <p>${_("No. Grades are not displayed on either honor code or proctored certificates.")}</p> </div> </article> <article class="response"> - <h3 class="question">How can I talk to professors, fellows and teaching assistants?</h3> + <h3 class="question">${_("How can I talk to professors, fellows and teaching assistants?")}</h3> <div class ="answer" id="certificates_and_credits_faq_answer_5"> - <p>The Discussion Forums are the best place to reach out to the edX teaching team for your class, and you don’t have to wait in line or rearrange your schedule to fit your professor’s – just post your questions. The response isn’t always immediate, but it’s usually pretty darned quick.</p> + <p>${_("The Discussion Forums are the best place to reach out to the edX teaching team for your class, and you don\'t have to wait in line or rearrange your schedule to fit your professor\'s - just post your questions. The response isn/'t always immediate, but it/'s usually pretty darned quick.")}</p> </div> </article> <article class="response"> - <h3 class="question">The only certificates distributed with grades by edX were for the initial prototype course.</h3> + <h3 class="question">${_("The only certificates distributed with grades by edX were for the initial prototype course.")}</h3> <div class ="answer" id="certificates_and_credits_faq_answer_6"> - <p>You may unregister from an edX course at anytime, there are absolutely no penalties associated with incomplete edX studies, and you may register for the same course (provided we are still offering it) at a later time.</p> + <p>${_("You may unregister from an edX course at anytime, there are absolutely no penalties associated with incomplete edX studies, and you may register for the same course (provided we are still offering it) at a later time.")}</p> </div> </article> <article class="response"> - <h3 class="question">Will my university accept my edX coursework for credit?</h3> + <h3 class="question">${_("Will my university accept my edX coursework for credit?")}</h3> <div class ="answer" id="certificates_and_credits_faq_answer_7"> - <p>Each educational institution makes its own decision regarding whether to accept edX coursework for credit. Check with your university for its policy.</p> + <p>${_("Each educational institution makes its own decision regarding whether to accept edX coursework for credit. Check with your university for its policy.")}</p> </div> </article> <article class="response"> - <h3 class="question">I lost my edX certificate – can you resend it to me?</h3> + <h3 class="question">${_("I lost my edX certificate - can you resend it to me?")}</h3> <div class ="answer" id="certificates_and_credits_faq_answer_8"> - <p>Please log back in to your account to find certificates from the same profile page where they were originally posted. You will be able to re-print your certificate from there.</p> + <p>${_("Please log back in to your account to find certificates from the same profile page where they were originally posted. You will be able to re-print your certificate from there.")}</p> </div> </article> </section> <section id="open_source_faq" class="category"> - <h2>edX & Open Source</h2> + <h2>${_("edX & Open Source")}</h2> <article class="response"> - <h3 class="question">What’s open source?</h3> + <h3 class="question">${_("What\'s open source?")}</h3> <div class ="answer" id="open_source_faq_answer_0"> - <p>Open source is a philosophy that generally refers to making software freely available for use or modification as users see fit. In exchange for use of the software, users generally add their contributions to the software, making it a public collaboration. The edX platform will be made available as open source code in order to allow world talent to improve and share it on an ongoing basis.</p> + <p>${_("Open source is a philosophy that generally refers to making software freely available for use or modification as users see fit. In exchange for use of the software, users generally add their contributions to the software, making it a public collaboration. The edX platform will be made available as open source code in order to allow world talent to improve and share it on an ongoing basis.")}</p> </div> </article> <article class="response"> - <h3 class="question">When/how can I get the open-source platform technology?</h3> + <h3 class="question">${_("When/how can I get the open-source platform technology?")}</h3> <div class ="answer" id="open_source_faq_answer_1"> - <p>We are still building the edX technology platform and will be making announcements in the future about its availability.</p> + <p>${_("We are still building the edX technology platform and will be making announcements in the future about its availability.")}</p> </div> </article> </section> <section id="other_help_faq" class="category"> - <h2>Other Help Questions - Account Questions</h2> + <h2>${_("Other Help Questions - Account Questions")}</h2> <article class="response"> - <h3 class="question">My username is taken.</h3> + <h3 class="question">${_("My username is taken.")}</h3> <div class ="answer" id="other_help_faq_answer_0"> - <p>Now’s your chance to be creative: please try a different, more unique username – for example, try adding a random number to the end.</p> + <p>${_("Now/'s your chance to be creative: please try a different, more unique username - for example, try adding a random number to the end.")}</p> </div> </article> <article class="response"> - <h3 class="question">Why does my password show on my course login page?</h3> + <h3 class="question">${_("Why does my password show on my course login page?")}</h3> <div class ="answer" id="other_help_faq_answer_1"> - <p>Oops! This may be because of the way you created your account. For example, you may have mistakenly typed your password into the login box.</p> + <p>${_("Oops! This may be because of the way you created your account. For example, you may have mistakenly typed your password into the login box.")}</p> </div> </article> <article class="response"> - <h3 class="question">I am having login problems (password/email unrecognized).</h3> + <h3 class="question">${_("I am having login problems (password/email unrecognized).")}</h3> <div class ="answer" id="other_help_faq_answer_2"> - <p>Please check your browser’s settings to make sure that you have the current version of Firefox or Chrome, and then try logging in again. If you find access impossible, you may simply create a new account using an alternate email address – the old, unused account will disappear later.</p> + <p>${_("Please check your browser/'s settings to make sure that you have the current version of Firefox or Chrome, and then try logging in again. If you find access impossible, you may simply create a new account using an alternate email address - the old, unused account will disappear later.")}</p> </div> </article> <article class="response"> - <h3 class="question">I did not receive an activation email.</h3> + <h3 class="question">${_("I did not receive an activation email.")}</h3> <div class ="answer" id="other_help_faq_answer_3"> - <p>If you did not receive an activation email it may be because:</p> + <p>${_("If you did not receive an activation email it may be because:")}</p> <ul> - <li>There was a typo in your email address.</li> - <li>Your spam filter may have caught the activation email. Please check your spam folder. </li> - <li>You may be using an older browser. We recommend downloading the current version of Firefox or Chrome. </li> - <li>JavaScript is disabled in your browser. Please check your browser settings and confirm that JavaScript is enabled. </li> + <li>${_("There was a typo in your email address.")}</li> + <li>${_("Your spam filter may have caught the activation email. Please check your spam folder. ")}</li> + <li>${_("You may be using an older browser. We recommend downloading the current version of Firefox or Chrome. ")}</li> + <li>${_("JavaScript is disabled in your browser. Please check your browser settings and confirm that JavaScript is enabled. ")}</li> </ul> - <p>If you continue to have problems activating your account, we recommend that you try creating a new account. There is no need to do anything about the old account. If it is not activated through the link in the email, it will disappear later.</p> + <p>${_("If you continue to have problems activating your account, we recommend that you try creating a new account. There is no need to do anything about the old account. If it is not activated through the link in the email, it will disappear later.")}</p> </div> </article> <article class="response"> - <h3 class="question">Can I delete my account?</h3> + <h3 class="question">${_("Can I delete my account?")}</h3> <div class ="answer" id="other_help_faq_answer_4"> - <p>There’s no need to delete you account. An old, unused edX account with no course completions associated with it will disappear.</p> + <p>${_("There/'s no need to delete you account. An old, unused edX account with no course completions associated with it will disappear.")}</p> </div> </article> <article class="response"> - <h3 class="question">I made a mistake creating my username – how do I fix it?</h3> + <h3 class="question">${_("I made a mistake creating my username - how do I fix it?")}</h3> <div class ="answer" id="other_help_faq_answer_4.5"> - <p>In most cases it would simplest and fastest to create a new account. Your old unused account will vanish naturally. If you were not aware of your mistake until much later, you should send us a detailed change request and we will do our best to edit your username. Please bear in mind that usernames are unique, and the one you want may be taken.</p> + <p>${_("In most cases it would simplest and fastest to create a new account. Your old unused account will vanish naturally. If you were not aware of your mistake until much later, you should send us a detailed change request and we will do our best to edit your username. Please bear in mind that usernames are unique, and the one you want may be taken.")}</p> </div> </article> <article class="response"> - <h3 class="question">I am experiencing problems with the display. E.g., There are tools missing from the course display, or I am unable to view video.</h3> + <h3 class="question">${_("I am experiencing problems with the display. E.g., There are tools missing from the course display, or I am unable to view video.")}</h3> <div class ="answer" id="other_help_faq_answer_5"> - <p>Please check your browser and settings. We recommend downloading the current version of Firefox or Chrome. Alternatively, you may re-register with a different email account. There is no need to delete the old account, as it will disappear if unused.</p> + <p>${_("Please check your browser and settings. We recommend downloading the current version of Firefox or Chrome. Alternatively, you may re-register with a different email account. There is no need to delete the old account, as it will disappear if unused.")}</p> </div> </article> <article class="response"> - <h3 class="question">How can I help edX?</h3> + <h3 class="question">${_("How can I help edX?")}</h3> <div class ="answer" id="edx_basics_faq_answer_6"> - <p>You may not realize it, but just by taking a course you are helping edX. That’s because the edX platform has been specifically designed to not only teach, but also gather data about learning. EdX will utilize this data to find out how to improve education online and on-campus.</p> + <p>${_("You may not realize it, but just by taking a course you are helping edX. That/'s because the edX platform has been specifically designed to not only teach, but also gather data about learning. EdX will utilize this data to find out how to improve education online and on-campus.")}</p> </div> </article> @@ -322,11 +323,11 @@ </section> <nav class="categories"> - <a href="#edx_basics_faq">edX Basics</a> - <a href="#classes_faq">The Classes</a> - <a href="#certificates_and_credits_faq">Certificates and Credits</a> - <a href="#open_source_faq">edX & Open source</a> - <a href="#other_help_faq">Other Help Questions - Account Questions</a> + <a href="#edx_basics_faq">${_("edX Basics")}</a> + <a href="#classes_faq">${_("The Classes")}</a> + <a href="#certificates_and_credits_faq">${_("Certificates and Credits")}</a> + <a href="#open_source_faq">${_("edX & Open source")}</a> + <a href="#other_help_faq">$${_("Other Help Questions - Account Questions")}</a> </nav> </section> diff --git a/lms/templates/static_templates/honor.html b/lms/templates/static_templates/honor.html index dc88b3f1efd1cf7250e0bf0939550cfe10df0637..742410259247c30ea37febfffbc0e398c904f526 100644 --- a/lms/templates/static_templates/honor.html +++ b/lms/templates/static_templates/honor.html @@ -1,33 +1,34 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="../main.html" /> <%! from django.core.urlresolvers import reverse %> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>Honor Code</title></%block> +<%block name="title"><title>${_("Honor Code")}</title></%block> <section class="static-container honor-code"> - <h1>Honor Code</h1> + <h1>${_("Honor Code")}</h1> <hr class="horizontal-divider"> <div class="inner-wrapper"> - <h2>Collaboration Policy</h2> - <p>By enrolling in a course on edX, you are joining a special worldwide community of learners. The aspiration of edX is to provide anyone in the world who has the motivation and ability to engage coursework from the Massachusetts Institute of Technology, Harvard University and the University of California, Berkeley the opportunity to attain the best MIT, Harvard and UC Berkeley-based educational experience that internet technology enables. You are part of the community who will help edX achieve this goal.</p> - <p>EdX depends upon your motivation to learn the material and to do so with honesty. In order to participate in edX, you must agree to the Honor Code below and any additional terms specific to a class. This Honor Code, and any additional terms, will be posted on each class website.</p> + <h2>${_("Collaboration Policy")}</h2> + <p>${_("By enrolling in a course on edX, you are joining a special worldwide community of learners. The aspiration of edX is to provide anyone in the world who has the motivation and ability to engage coursework from the Massachusetts Institute of Technology, Harvard University and the University of California, Berkeley the opportunity to attain the best MIT, Harvard and UC Berkeley-based educational experience that internet technology enables. You are part of the community who will help edX achieve this goal.")}</p> + <p>${_("EdX depends upon your motivation to learn the material and to do so with honesty. In order to participate in edX, you must agree to the Honor Code below and any additional terms specific to a class. This Honor Code, and any additional terms, will be posted on each class website.")}</p> - <h2>edX Honor Code Pledge</h2> - <p>By enrolling in an edX course, I agree that I will:</p> + <h2>${_("edX Honor Code Pledge")}</h2> + <p>${_("By enrolling in an edX course, I agree that I will:")}</p> <ul> - <li>Complete all mid-terms and final exams with my own work and only my own work. I will not submit the work of any other person.</li> - <li>Maintain only one user account and not let anyone else use my username and/or password.</li> - <li>Not engage in any activity that would dishonestly improve my results, or improve or hurt the results of others.</li> - <li>Not post answers to problems that are being used to assess student performance.</li> + <li>${_("Complete all mid-terms and final exams with my own work and only my own work. I will not submit the work of any other person.")}</li> + <li>${_("Maintain only one user account and not let anyone else use my username and/or password.")}</li> + <li>${_("Not engage in any activity that would dishonestly improve my results, or improve or hurt the results of others.")}</li> + <li>${_("Not post answers to problems that are being used to assess student performance.")}</li> </ul> - <p>Unless otherwise indicated by the instructor of an edX course, learners on edX are encouraged to:</p> + <p>${_("Unless otherwise indicated by the instructor of an edX course, learners on edX are encouraged to:")}</p> <ul> - <li>Collaborate with others on the lecture videos, exercises, homework and labs.</li> - <li>Discuss with others general concepts and materials in each course.</li> - <li>Present ideas and written work to fellow edX learners or others for comment or criticism.</li> + <li>${_("Collaborate with others on the lecture videos, exercises, homework and labs.")}</li> + <li>${_("Discuss with others general concepts and materials in each course.")}</li> + <li>${_("Present ideas and written work to fellow edX learners or others for comment or criticism.")}</li> </ul> </div> </section> diff --git a/lms/templates/static_templates/jobs.html b/lms/templates/static_templates/jobs.html index d041d107377e05a91fbec1cb5951b19db77af351..ca96031e8b6f168f3eb23c68f58c86e1477ba691 100644 --- a/lms/templates/static_templates/jobs.html +++ b/lms/templates/static_templates/jobs.html @@ -1,10 +1,11 @@ +<%! from django.utils.translation import ugettext as _ %> <%namespace name='static' file='../static_content.html'/> <%inherit file="../main.html" /> -<%block name="title"><title>Jobs</title></%block> +<%block name="title"><title>${_("Jobs")}</title></%block> <section class="container jobs"> - <h1>Do You Want to Change the Future of Education?</h1> + <h1>${_("Do You Want to Change the Future of Education?")}</h1> <hr class="horizontal-divider"/> @@ -14,15 +15,15 @@ <img src="${static.url('images/jobs.jpeg')}"> </div> <header> - <h2>Our mission is to transform learning.</h2> + <h2>${_("Our mission is to transform learning.")}</h2> <blockquote> - <p>“EdX represents a unique opportunity to improve education on our campuses through online learning, while simultaneously creating a bold new educational path for millions of learners worldwide.”</p> + <p>${_("“EdX represents a unique opportunity to improve education on our campuses through online learning, while simultaneously creating a bold new educational path for millions of learners worldwide.”")}</p> <cite>—Rafael Reif, MIT President </cite> </blockquote> <blockquote> - <p>“EdX gives Harvard and MIT an unprecedented opportunity to dramatically extend our collective reach by conducting groundbreaking research into effective education and by extending online access to quality higher education.”</p> + <p>${_("“EdX gives Harvard and MIT an unprecedented opportunity to dramatically extend our collective reach by conducting groundbreaking research into effective education and by extending online access to quality higher education.”")}</p> <cite>—Drew Faust, Harvard President</cite> </blockquote> </header> @@ -36,19 +37,19 @@ <article id="intro" class="job"> <div class="inner-wrapper"> - <h3>EdX is looking to add new talent to our team! </h3> - <p align="center"><em>Our mission is to give a world-class education to everyone, everywhere, regardless of gender, income or social status</em></p> - <p>Today, EdX.org, a not-for-profit provides hundreds of thousands of people from around the globe with access to free education. We offer amazing quality classes by the best professors from the best schools. We enable our members to uncover a new passion that will transform their lives and their communities.</p> - <p>Around the world-from coast to coast, in over 192 countries, people are making the decision to take one or several of our courses. As we continue to grow our operations, we are looking for talented, passionate people with great ideas to join the edX team. We aim to create an environment that is supportive, diverse, and as fun as our brand. If you’re results-oriented, dedicated, and ready to contribute to an unparalleled member experience for our community, we really want you to apply.</p> - <p>As part of the edX team, you’ll receive:</p> + <h3>${_("EdX is looking to add new talent to our team! ")}</h3> + <p align="center"><em>${_("Our mission is to give a world-class education to everyone, everywhere, regardless of gender, income or social status")}</em></p> + <p>${_("Today, EdX.org, a not-for-profit provides hundreds of thousands of people from around the globe with access to free education. We offer amazing quality classes by the best professors from the best schools. We enable our members to uncover a new passion that will transform their lives and their communities.")}</p> + <p>${_("Around the world-from coast to coast, in over 192 countries, people are making the decision to take one or several of our courses. As we continue to grow our operations, we are looking for talented, passionate people with great ideas to join the edX team. We aim to create an environment that is supportive, diverse, and as fun as our brand. If you’re results-oriented, dedicated, and ready to contribute to an unparalleled member experience for our community, we really want you to apply.")}</p> + <p>${_("As part of the edX team, you’ll receive:")}</p> <ul> - <li>Competitive compensation</li> - <li>Generous benefits package</li> - <li>Free lunch every day</li> - <li>A great working experience where everyone cares and wants to change the world (no, we’re not kidding)</li> + <li>${_("Competitive compensation")}</li> + <li>${_("Generous benefits package")}</li> + <li>${_("Free lunch every day")}</li> + <li>${_("A great working experience where everyone cares and wants to change the world (no, we\'re not kidding)")}</li> </ul> - <p>While we appreciate every applicant’s interest, only those under consideration will be contacted. We regret that phone calls will not be accepted. Equal opportunity employer.</p> - <p>All positions are located in our Cambridge offices.</p> + <p>${_("While we appreciate every applicant’s interest, only those under consideration will be contacted. We regret that phone calls will not be accepted. Equal opportunity employer.")}</p> + <p>${_("All positions are located in our Cambridge offices.")}</p> </div> </article> @@ -56,525 +57,524 @@ <!-- Template <article id="SOME-JOB" class="job"> <div class="inner-wrapper"> - <h3><strong>TITLE</strong></h3> - <p>INTRO</p> - <p><strong>Responsibilities:</strong></p> + <h3>${_("<strong>TITLE</strong>")}</h3> + <p>${_("INTRO")}</p> + <p><strong>${_("Responsibilities:")}</strong></p> <ul> - <li>A LIST</li> + <li>${_("A LIST")}</li> </ul> - <p><strong>Qualifications:</strong></p> + <p><strong>${_("Qualifications:")}</strong></p> <ul> - <li>A LIST</li> + <li>${_("A LIST")}</li> </ul> - - <p>TEXT</p> - <p>If you are interested in this position, please send an email to <a href="mailto:jobs@edx.org">jobs@edx.org</a>.</p> + + <p>${_("TEXT")}</p> + <p>${_("If you are interested in this position, please send an email to <a href=\"mailto:jobs@edx.org\">jobs@edx.org</a>.")}</p> </div> </article> --> - + <article id="director-of-education-services" class="job"> <div class="inner-wrapper"> - <h3><strong>DIRECTOR OF EDUCATION SERVICES</strong></h3> - <p>The edX Director of Education Services reporting to the VP of Engineering and Education Services is responsible for:</p> + <h3><strong>${_("DIRECTOR OF EDUCATION SERVICES")}</strong></h3> + <p>${_("The edX Director of Education Services reporting to the VP of Engineering and Education Services is responsible for:")}</p> <ol> - <li>Delivering 20 new courses in 2013 in collaboration with the partner Universities + <li>${_("Delivering 20 new courses in 2013 in collaboration with the partner Universities")} <ul> - <li><p>Reporting to the Director of Education Services are the Video production team, responsible for post-production of Course Video. The Director must understand how to balance artistic quality and learning objectives, and reduce production time so that video capabilities are readily accessible and at reasonable costs.</p> - <li>Reporting to the Director are a small team of Program Managers, who are responsible for managing the day to day of course production and operations. The Director must be experienced in capacity planning and operations, understand how to deploy lean collaboration and able to build alliances inside edX and the University. In conjunction with the Program Managers, the Director of Education Services will supervise the collection of research, the retrospectives with Professors and the assembly of best practices in course production and operations. The three key deliverables are the use of a well-defined lean process for onboarding Professors, the development of tracking tools, and assessment of effectiveness of Best Practices. - <li> Also reporting to the Director of Education Services are content engineers and Course Fellows, skilled in the development of edX assessments. The Director of Education Services will also be responsible for communicating to the VP of Engineering requirements for new types of course assessments. Course Fellows are extremely talented Ph.D.’s who work directly with the Professors to define and develop assessments and course curriculum.</li> + <li><p>${_("Reporting to the Director of Education Services are the Video production team, responsible for post-production of Course Video. The Director must understand how to balance artistic quality and learning objectives, and reduce production time so that video capabilities are readily accessible and at reasonable costs.")}</p> + <li>${_("Reporting to the Director are a small team of Program Managers, who are responsible for managing the day to day of course production and operations. The Director must be experienced in capacity planning and operations, understand how to deploy lean collaboration and able to build alliances inside edX and the University. In conjunction with the Program Managers, the Director of Education Services will supervise the collection of research, the retrospectives with Professors and the assembly of best practices in course production and operations. The three key deliverables are the use of a well-defined lean process for onboarding Professors, the development of tracking tools, and assessment of effectiveness of Best Practices.")}</li> + <li>${_(" Also reporting to the Director of Education Services are content engineers and Course Fellows, skilled in the development of edX assessments. The Director of Education Services will also be responsible for communicating to the VP of Engineering requirements for new types of course assessments. Course Fellows are extremely talented Ph.D.\'s who work directly with the Professors to define and develop assessments and course curriculum.")}</li> </ul> </li> - <li>Training and Onboarding of 30 Partner Universities and Affiliates + <li>${_("Training and Onboarding of 30 Partner Universities and Affiliates")} <ul> - <li>The edX Director of Education Services is responsible for building out the Training capabilities and delivery mechanisms for onboarding Professors at partner Universities. The edX Director must build out both the Training Team and the curriculum. Training will be delivered in both online courses, self-paced formats, and workshops. The training must cover a curriculum that enables partner institutions to be completely independent. Additionally, partner institutions should be engaged to contribute to the curriculum and partner with edX in the delivery of the material. The curriculum must exemplify the best in online learning, so the Universities are inspired to offer the kind of learning they have experienced in their edX Training.</li> - <li>Expand and extend the education goals of the partner Universities by operationalizing best practices.</li> - <li>Engage with University Boards to design and define the success that the technology makes possible.</li> + <li>${_("The edX Director of Education Services is responsible for building out the Training capabilities and delivery mechanisms for onboarding Professors at partner Universities. The edX Director must build out both the Training Team and the curriculum. Training will be delivered in both online courses, self-paced formats, and workshops. The training must cover a curriculum that enables partner institutions to be completely independent. Additionally, partner institutions should be engaged to contribute to the curriculum and partner with edX in the delivery of the material. The curriculum must exemplify the best in online learning, so the Universities are inspired to offer the kind of learning they have experienced in their edX Training.")}</li> + <li>${_("Expand and extend the education goals of the partner Universities by operationalizing best practices.")}</li> + <li>${_("Engage with University Boards to design and define the success that the technology makes possible.")}</li> </ul> </li> - <li>Growing the Team, Growing the Business + <li>${_("Growing the Team, Growing the Business")} <ul> - <li>The edX Director will be responsible for working with Business Development to identify revenue opportunities and build profitable plans to grow the business and grow the team.</li> - <li>Maintain for-profit nimbleness in an organization committed to non-profit ideals.</li> - <li>Design scalable solutions to opportunities revealed by technical innovations</li> + <li>${_("The edX Director will be responsible for working with Business Development to identify revenue opportunities and build profitable plans to grow the business and grow the team.")}</li> + <li>${_("Maintain for-profit nimbleness in an organization committed to non-profit ideals.")}</li> + <li>${_("Design scalable solutions to opportunities revealed by technical innovations")}</li> </ul> </li> - <li>Integrating a Strong Team within Strong Organization + <li>${_("Integrating a Strong Team within Strong Organization")} <ul> - <li>Connect organization’s management and University leadership with consistent and high quality expectations and deployment</li> - <li>Integrate with a highly collaborative leadership team to maximize talents of the organization</li> - <li>Successfully escalate issues within and beyond the organization to ensure the best possible educational outcome for students and Universities</li> + <li>${_("Connect organization\'s management and University leadership with consistent and high quality expectations and deployment")}</li> + <li>${_("Integrate with a highly collaborative leadership team to maximize talents of the organization")}</li> + <li>${_("Successfully escalate issues within and beyond the organization to ensure the best possible educational outcome for students and Universities")}</li> </ul> </li> </ol> - <p><strong>Skills:</strong></p> + <p><strong>${_("Skills:")}</strong></p> <ul> - <li>Ability to lead simultaneous initiatives in an entrepreneurial culture</li> - <li>Self-starter, challenger, strategic planner, analytical thinker</li> - <li>Excellent written and verbal skills</li> - <li>Strong, proactive leadership</li> - <li>Experience with deploying educational technologies on a large scale</li> - <li>Develop team skills in a ferociously intelligent group</li> - <li>Fan the enthusiasm of the partner Universities when the enormity of the transition they are facing becomes intimidating</li> - <li>Encourage creativity to allow the technology to provoke pedagogical possibilities that brick and mortar classes have precluded.</li> - <li>Lean and Agile thinking and training. Experienced in Scrum or Kanban.</li> - <li>Design and deliver hiring/development plans which meet rapidly changing skill needs.</li> + <li>${_("Ability to lead simultaneous initiatives in an entrepreneurial culture")}</li> + <li>${_("Self-starter, challenger, strategic planner, analytical thinker")}</li> + <li>${_("Excellent written and verbal skills")}</li> + <li>${_("Strong, proactive leadership")}</li> + <li>${_("Experience with deploying educational technologies on a large scale")}</li> + <li>${_("Develop team skills in a ferociously intelligent group")}</li> + <li>${_("Fan the enthusiasm of the partner Universities when the enormity of the transition they are facing becomes intimidating")}</li> + <li>${_("Encourage creativity to allow the technology to provoke pedagogical possibilities that brick and mortar classes have precluded.")}</li> + <li>${_("Lean and Agile thinking and training. Experienced in Scrum or Kanban.")}</li> + <li>${_("Design and deliver hiring/development plans which meet rapidly changing skill needs.")}</li> </ul> - - <p>If you are interested in this position, please send an email to <a href="mailto:jobs@edx.org">jobs@edx.org</a>.</p> + + <p>${_("If you are interested in this position, please send an email to <a href=\"mailto:jobs@edx.org\">jobs@edx.org</a>.")}</p> </div> </article> <article id="manager-of-training-services" class="job"> <div class="inner-wrapper"> - <h3><strong>MANAGER OF TRAINING SERVICES</strong></h3> - <p>The Manager of Training Services is an integral member of the edX team, a leader who is also a doer, working hands-on in the development and delivery of edX’s training portfolio. Reporting to the Director of Education Services, the manager will be a strategic thinker, providing leadership and vision in the development of world-class training solutions tailored to meet the diverse needs of edX Universities, partners and stakeholders</p> - <p><strong>Responsibilities:</strong></p> + <h3><strong>${_("MANAGER OF TRAINING SERVICES")}</strong></h3> + <p>${_("The Manager of Training Services is an integral member of the edX team, a leader who is also a doer, working hands-on in the development and delivery of edX’s training portfolio. Reporting to the Director of Education Services, the manager will be a strategic thinker, providing leadership and vision in the development of world-class training solutions tailored to meet the diverse needs of edX Universities, partners and stakeholders")}</p> + <p><strong>${_("Responsibilities:")}</strong></p> <ul> - <li>Working with the Director of Education Services, create and manage a world-class training program that includes in-person workshops and online formats such as self-paced courses, and webinars.</li> - <li>Work across a talented team of product developers, video producers and content experts to identify training needs and proactively develop training curricula for new products and services as they are deployed.</li> - <li>Develop the means for sharing and showcasing edX best practices for both internal and external audiences.</li> - <li>Apply sound instructional design theory and practice in the development of all edX training resources. </li> - <li>Work with program managers to develop training benchmarks and Key Performance Indicators. Monitor progress and proactively make adjustments as necessary.</li> - <li>Collaborate with product development on creating documentation and user guides. </li> - <li>Provide on-going evaluation of the effectiveness of edX training programs.</li> - <li>Assist in the revision/refinement of training curricula and resources. </li> - <li>Grow a train-the-trainer organization with edX partners, identifying expert edX users to provide on-site peer assistance. </li> - <li>Deliver internal and external trainings.</li> - <li>Coordinate with internal teams to ensure appropriate preparation for trainings, and follow-up after delivery.</li> - <li>Maintain training reporting database and training records.</li> - <li>Produce training evaluation reports, training support plans, and training improvement plans. </li> - <li>Quickly become an expert on edX’s standards, procedures and tools.</li> - <li>Stay current on emerging trends in eLearning, platform support and implementation strategy.</li> + <li>${_("Working with the Director of Education Services, create and manage a world-class training program that includes in-person workshops and online formats such as self-paced courses, and webinars.")}</li> + <li>${_("Work across a talented team of product developers, video producers and content experts to identify training needs and proactively develop training curricula for new products and services as they are deployed.")}</li> + <li>${_("Develop the means for sharing and showcasing edX best practices for both internal and external audiences.")}</li> + <li>${_("Apply sound instructional design theory and practice in the development of all edX training resources. ")}</li> + <li>${_("Work with program managers to develop training benchmarks and Key Performance Indicators. Monitor progress and proactively make adjustments as necessary.")}</li> + <li>${_("Collaborate with product development on creating documentation and user guides. ")}</li> + <li>${_("Provide on-going evaluation of the effectiveness of edX training programs.")}</li> + <li>${_("Assist in the revision/refinement of training curricula and resources. ")}</li> + <li>${_("Grow a train-the-trainer organization with edX partners, identifying expert edX users to provide on-site peer assistance. ")}</li> + <li>${_("Deliver internal and external trainings.")}</li> + <li>${_("Coordinate with internal teams to ensure appropriate preparation for trainings, and follow-up after delivery.")}</li> + <li>${_("Maintain training reporting database and training records.")}</li> + <li>${_("Produce training evaluation reports, training support plans, and training improvement plans. ")}</li> + <li>${_("Quickly become an expert on edX\'s standards, procedures and tools.")}</li> + <li>${_("Stay current on emerging trends in eLearning, platform support and implementation strategy.")}</li> </ul> - <p><strong>Requirements:</strong></p> + <p>${_("<strong>Requirements:</strong>")}</p> <ul> - <li>Minimum of 5-7 years experience developing and delivering educational training, preferably in an educational technology organization. </li> - <li>Lean and Agile thinking and training. Experienced in Scrum or Kanban.</li> - <li>Excellent interpersonal skills including proven presentation and facilitation skills.</li> - <li>Strong oral and written communication skills.</li> - <li>Proven experience with production and delivery of online training programs that utilize asychronous and synchronous delivery mechanisms. </li> - <li>Flexibility to work on a variety of initiatives; prior startup experience preferred.</li> - <li>Outstanding work ethic, results-oriented, and creative/innovative style.</li> - <li>Proactive, optimistic approach to problem solving.</li> - <li>Commitment to constant personal and organizational improvement.</li> - <li>Willingness to travel to partner sites as needed. </li> - <li>Bachelor's or Master’s in Education, organizational learning, or other related field preferred. But we're all about education, so let us know how you gained what you need to succeed in this role: projects after completing 6.00x or CS50x, Xbox cheevos, on-line guilds led, large scale innovations championed.</li> + <li>${_("Minimum of 5-7 years experience developing and delivering educational training, preferably in an educational technology organization. ")}</li> + <li>${_("Lean and Agile thinking and training. Experienced in Scrum or Kanban.")}</li> + <li>${_("Excellent interpersonal skills including proven presentation and facilitation skills.")}</li> + <li>${_("Strong oral and written communication skills.")}</li> + <li>${_("Proven experience with production and delivery of online training programs that utilize asychronous and synchronous delivery mechanisms. ")}</li> + <li>${_("Flexibility to work on a variety of initiatives; prior startup experience preferred.")}</li> + <li>${_("Outstanding work ethic, results-oriented, and creative/innovative style.")}</li> + <li>${_("Proactive, optimistic approach to problem solving.")}</li> + <li>${_("Commitment to constant personal and organizational improvement.")}</li> + <li>${_("Willingness to travel to partner sites as needed. ")}</li> + <li>${_("Bachelor's or Master's in Education, organizational learning, or other related field preferred. But we're all about education, so let us know how you gained what you need to succeed in this role: projects after completing 6.00x or CS50x, Xbox cheevos, on-line guilds led, large scale innovations championed.")}</li> </ul> - - <p>If you are interested in this position, please send an email to <a href="mailto:jobs@edx.org">jobs@edx.org</a>.</p> + + <p>${_("If you are interested in this position, please send an email to <a href=\"mailto:jobs@edx.org\">jobs@edx.org</a>.")}</p> </div> </article> <article id="trainer" class="job"> <div class="inner-wrapper"> - <h3><strong>TRAINER</strong></h3> - <p>All those Universities on the edX homepage are full of incredible professors and teaching teams, designing on-line courses that will change the face of education. The edX team is constantly training whole new university teams on how to make their visions shine using edX software. We’re looking for some truly talented people to help train people on the tools that are enabling the future of education.</p> - <p><strong>Responsibilities:</strong></p> + <h3><strong>${_("TRAINER")}</strong></h3> + <p>${_("All those Universities on the edX homepage are full of incredible professors and teaching teams, designing on-line courses that will change the face of education. The edX team is constantly training whole new university teams on how to make their visions shine using edX software. We\'re looking for some truly talented people to help train people on the tools that are enabling the future of education.")}</p> + <p><strong>${_("Responsibilities:")}</strong></p> <ul> - <li>Facilitate training programs as required ensuring that best practices are incorporated in all learning environments.</li> - <li>Create and design learning materials for training curriculums, incorporate edX best practices into training curriculum.</li> - <li>Incorporate key performance metrics into training modules; participate in strategic initiatives</li> - <li>Measure, monitor and share training results with business units to identify future training opportunities.</li> - <li>Identify and leverage existing resources to maximize partner efficiency and productivity. </li> - <li>Work with both Universities and edX to provide strategic input based on future training needs.</li> - <li>Communicate effectively in oral and written presentations.</li> - <li>Analyze learners training needs and identify cross training opportunities.</li> - <li>Mentor and train others on training tools to expand training efficiency and uniformity.</li> - <li>Build relationships with universities to be viewed as a trusted training partner. </li> + <li>${_("Facilitate training programs as required ensuring that best practices are incorporated in all learning environments.")}</li> + <li>${_("Create and design learning materials for training curriculums, incorporate edX best practices into training curriculum.")}</li> + <li>${_("Incorporate key performance metrics into training modules; participate in strategic initiatives")}</li> + <li>${_("Measure, monitor and share training results with business units to identify future training opportunities.")}</li> + <li>${_("Identify and leverage existing resources to maximize partner efficiency and productivity. ")}</li> + <li>${_("Work with both Universities and edX to provide strategic input based on future training needs.")}</li> + <li>${_("Communicate effectively in oral and written presentations.")}</li> + <li>${_("Analyze learners training needs and identify cross training opportunities.")}</li> + <li>${_("Mentor and train others on training tools to expand training efficiency and uniformity.")}</li> + <li>${_("Build relationships with universities to be viewed as a trusted training partner. ")}</li> </ul> - <p><strong>Requirements:</strong></p> + <p>${_("<strong>Requirements:</strong>")}</p> <ul> - <li>Minimum of 1-3 years experience developing and delivering educational training, preferably in an educational technology organization. </li> - <li>Lean and Agile thinking and training. Experienced in Scrum or Kanban preferred.</li> - <li>Excellent interpersonal skills including proven presentation and facilitation skills.</li> - <li>Strong oral and written communication skills.</li> - <li>Flexibility to work on a variety of initiatives; prior startup experience preferred.</li> - <li>Outstanding work ethic, results-oriented, and creative/innovative style.</li> - <li>Proactive, optimistic approach to problem solving.</li> - <li>Commitment to constant personal and organizational improvement.</li> - <li>Willingness to travel to partner sites as needed.</li> - <li>Bachelors or Master’s in Education, organizational learning, instructional design or other related field preferred. But we're all about education, so let us know how you gained what you need to succeed in this role: projects after completing 6.00x or CS50x, Xbox cheevos, on-line guilds led, large scale innovations championed.</li> + <li>${_("Minimum of 1-3 years experience developing and delivering educational training, preferably in an educational technology organization. ")}</li> + <li>${_("Lean and Agile thinking and training. Experienced in Scrum or Kanban preferred.")}</li> + <li>${_("Excellent interpersonal skills including proven presentation and facilitation skills.")}</li> + <li>${_("Strong oral and written communication skills.")}</li> + <li>${_("Flexibility to work on a variety of initiatives; prior startup experience preferred.")}</li> + <li>${_("Outstanding work ethic, results-oriented, and creative/innovative style.")}</li> + <li>${_("Proactive, optimistic approach to problem solving.")}</li> + <li>${_("Commitment to constant personal and organizational improvement.")}</li> + <li>${_("Willingness to travel to partner sites as needed.")}</li> + <li>${_("Bachelors or Master's in Education, organizational learning, instructional design or other related field preferred. But we're all about education, so let us know how you gained what you need to succeed in this role: projects after completing 6.00x or CS50x, Xbox cheevos, on-line guilds led, large scale innovations championed.")}</li> </ul> - - <p>If you are interested in this position, please send an email to <a href="mailto:jobs@edx.org">jobs@edx.org</a>.</p> + + <p>${_("If you are interested in this position, please send an email to <a href=\"mailto:jobs@edx.org\">jobs@edx.org</a>.")}</p> </div> </article> <article id="instructional-designer" class="job"> <div class="inner-wrapper"> - <h3><strong>INSTRUCTIONAL DESIGNER</strong></h3> - <p>The Instructional Designer will work collaboratively with the edX content and engineering teams to plan, develop and deliver highly engaging and media rich online courses. The Instructional Designer will be a flexible thinker, able to determine and apply sound pedagogical strategies to unique situations and a diverse set of academic disciplines.</p> - <p><strong>Responsibilities:</strong></p> + <h3><strong>${_("INSTRUCTIONAL DESIGNER")}</strong></h3> + <p>${_("The Instructional Designer will work collaboratively with the edX content and engineering teams to plan, develop and deliver highly engaging and media rich online courses. The Instructional Designer will be a flexible thinker, able to determine and apply sound pedagogical strategies to unique situations and a diverse set of academic disciplines.")}</p> + <p><strong>${_("Responsibilities:")}</strong>")}</p> <ul> - <li>Work with the video production team, product managers and course staff on the implementation of instructional design approaches in the development of media and other course materials.</li> - <li>Based on course staff and faculty input, articulate learning objectives and align them to design strategies and assessments.</li> - <li>Develop flipped classroom instructional strategies in coordination with community college faculty.</li> - <li>Produce clear and instructionally effective copy, instructional text, and audio and video scripts</li> - <li>Identify and deploy instructional design best practices for edX course staff and faculty as needed.</li> - <li>Create course communication style guides. Train and coach teaching staff on best practices for communication and discussion management.</li> - <li>Serve as a liaison to instructional design teams based at our partner Universities.</li> - <li>Consult on peer review processes to be used by learners in selected courses.</li> - <li>Ability to apply game-based learning theory and design into selected courses as appropriate.</li> - <li>Use learning analytics and metrics to inform course design and revision process.</li> - <li>Collaborate with key research and learning sciences stakeholders at edX and partner institutions for the development of best practices for MOOC teaching and learning and course design.</li> - <li>Support the development of pilot courses and modules used for sponsored research initiatives.</li> + <li>${_("Work with the video production team, product managers and course staff on the implementation of instructional design approaches in the development of media and other course materials.")}</li> + <li>${_("Based on course staff and faculty input, articulate learning objectives and align them to design strategies and assessments.")}</li> + <li>${_("Develop flipped classroom instructional strategies in coordination with community college faculty.")}</li> + <li>${_("Produce clear and instructionally effective copy, instructional text, and audio and video scripts")}</li> + <li>${_("Identify and deploy instructional design best practices for edX course staff and faculty as needed.")}</li> + <li>${_("Create course communication style guides. Train and coach teaching staff on best practices for communication and discussion management.")}</li> + <li>${_("Serve as a liaison to instructional design teams based at our partner Universities.")}</li> + <li>${_("Consult on peer review processes to be used by learners in selected courses.")}</li> + <li>${_("Ability to apply game-based learning theory and design into selected courses as appropriate.")}</li> + <li>${_("Use learning analytics and metrics to inform course design and revision process.")}</li> + <li>${_("Collaborate with key research and learning sciences stakeholders at edX and partner institutions for the development of best practices for MOOC teaching and learning and course design.")}</li> + <li>${_("Support the development of pilot courses and modules used for sponsored research initiatives.")}</li> </ul> - <p><strong>Qualifications:</strong></p> + <p>${_("<strong>Qualifications:</strong>")}</p> <ul> - <li>Master's Degree in Educational Technology, Instructional Design or related field. Experience in higher education with additional experience in a start-up or research environment preferable. But we're all about education, so let us know how you gained what you need to succeed in this role: projects after completing 6.00x or CS50x, Xbox cheevos, on-line guilds led, large scale innovations championed.</li> - <li>Experience in higher education with additional experience in a start-up or research environment preferable.</li> - <li>Excellent interpersonal and communication (written and verbal), project management, problem-solving and time management skills. The ability to be flexible with projects and to work on multiple courses essential.</li> - <li>Ability to meet deadlines and manage expectations of constituents.</li> - <li>Capacity to develop new and relevant technology skills. Experience using game theory design and learning analytics to inform instructional design decisions and strategy.</li> - <li>Technical Skills: Video and screencasting experience. LMS Platform experience, XML, HTML, CSS, Adobe Design Suite, Camtasia or Captivate experience. Experience with web 2.0 collaboration tools.</li> + <li>${_("Master's Degree in Educational Technology, Instructional Design or related field. Experience in higher education with additional experience in a start-up or research environment preferable. But we're all about education, so let us know how you gained what you need to succeed in this role: projects after completing 6.00x or CS50x, Xbox cheevos, on-line guilds led, large scale innovations championed.")}</li> + <li>${_("Experience in higher education with additional experience in a start-up or research environment preferable.")}</li> + <li>${_("Excellent interpersonal and communication (written and verbal), project management, problem-solving and time management skills. The ability to be flexible with projects and to work on multiple courses essential.")}</li> + <li>${_("Ability to meet deadlines and manage expectations of constituents.")}</li> + <li>${_("Capacity to develop new and relevant technology skills. Experience using game theory design and learning analytics to inform instructional design decisions and strategy.")}</li> + <li>${_("Technical Skills: Video and screencasting experience. LMS Platform experience, XML, HTML, CSS, Adobe Design Suite, Camtasia or Captivate experience. Experience with web 2.0 collaboration tools.")}</li> </ul> - - <p>Eligible candidates will be invited to respond to an Instructional Design task based on current or future edX course development needs.</p> - <p>If you are interested in this position, please send an email to <a href="mailto:jobs@edx.org">jobs@edx.org</a>.</p> + + <p>${_("Eligible candidates will be invited to respond to an Instructional Design task based on current or future edX course development needs.")}</p> + <p>${_("If you are interested in this position, please send an email to <a href=\"mailto:jobs@edx.org\">jobs@edx.org</a>.")}</p> </div> </article> <article id="program-manager" class="job"> <div class="inner-wrapper"> - <h3><strong>PROGRAM MANAGER</strong></h3> - <p>EdX Program Managers (PM) lead the edX's course production process. They are systems thinkers who manage the creation of a course from start to finish. PMs work with University Professors and course staff to help them take advantage of edX services to create world class online learning offerings and encourage the exploration of an emerging form of higher education.</p> - <p><strong>Responsibilities:</strong></p> + <h3><strong>${_("PROGRAM MANAGER")}</strong></h3> + <p>${_("EdX Program Managers (PM) lead the edX's course production process. They are systems thinkers who manage the creation of a course from start to finish. PMs work with University Professors and course staff to help them take advantage of edX services to create world class online learning offerings and encourage the exploration of an emerging form of higher education.")}</p> + <p><strong>${_("Responsibilities:")}</strong></p> <ul> - <li>Create and execute the course production cycle. PMs are able to examine and explain what they do in great detail and able to think abstractly about people, time, and processes. They coordinate the efforts of multiple teams engaged in the production of the courses assigned to them.</li> - <li>Train partners and drive best practices adoption. PMs train course staff from partner institutions and help them adopt best practices for workflow and tools. </li> - <li>Build capacity. Mentor staff at partner institutions, train the trainers that help them scale their course production ability.</li> - <li>Create visibility. PMs are responsible for making the state of the course production system accessible and comprehensible to all stakeholders. They are capable of training Course development teams in Scrum and Kanban, and are Lean thinkers and educators.</li> - <li>Improve workflows. PMs are responsible for carefully assessing the methods and outputs of each course and adjusting them to take best advantage of available resources.</li> - <li>Encourage innovation. Spark creativity in course teams to build new courses that could never be produced in brick and mortar settings.</li> + <li>${_("Create and execute the course production cycle. PMs are able to examine and explain what they do in great detail and able to think abstractly about people, time, and processes. They coordinate the efforts of multiple teams engaged in the production of the courses assigned to them.")}</li> + <li>${_("Train partners and drive best practices adoption. PMs train course staff from partner institutions and help them adopt best practices for workflow and tools. ")}</li> + <li>${_("Build capacity. Mentor staff at partner institutions, train the trainers that help them scale their course production ability.")}</li> + <li>${_("Create visibility. PMs are responsible for making the state of the course production system accessible and comprehensible to all stakeholders. They are capable of training Course development teams in Scrum and Kanban, and are Lean thinkers and educators.")}</li> + <li>${_("Improve workflows. PMs are responsible for carefully assessing the methods and outputs of each course and adjusting them to take best advantage of available resources.")}</li> + <li>${_("Encourage innovation. Spark creativity in course teams to build new courses that could never be produced in brick and mortar settings.")}</li> </ul> - <p><strong>Qualifications:</strong></p> + <p><strong>${_("Qualifications:")}</strong></p> <ul> - <li>Bachelor's Degree. Master's Degree preferred. But we're all about education, so let us know how you gained what you need to succeed in this role: projects after completing 6.00x or CS50x, Xbox cheevos, on-line guilds led, large scale innovations championed.</li> - <li>At least 2 years of experience working with University faculty and administrators.</li> - <li>Proven record of successful Scrum or Kanban project management, including use of project management tools. </li> - <li>Ability to create processes that systematically provide solutions to open ended challenges.</li> - <li>Excellent interpersonal and communication (written and verbal) skills, the ability to define and solve technical, process and organizational problems, and time management skills.</li> - <li>Proactive, optimistic approach to problem solving.</li> - <li>Commitment to constant personal and organizational improvement.</li> + <li>${_("Bachelor's Degree. Master's Degree preferred. But we're all about education, so let us know how you gained what you need to succeed in this role: projects after completing 6.00x or CS50x, Xbox cheevos, on-line guilds led, large scale innovations championed.")}</li> + <li>${_("At least 2 years of experience working with University faculty and administrators.")}</li> + <li>${_("Proven record of successful Scrum or Kanban project management, including use of project management tools. ")}</li> + <li>${_("Ability to create processes that systematically provide solutions to open ended challenges.")}</li> + <li>${_("Excellent interpersonal and communication (written and verbal) skills, the ability to define and solve technical, process and organizational problems, and time management skills.")}</li> + <li>${_("Proactive, optimistic approach to problem solving.")}</li> + <li>${_("Commitment to constant personal and organizational improvement.")}</li> </ul> - <p><strong>Preferred qualifications</strong></p> + <p><strong>${_("Preferred qualifications")}</strong></p> <ul> - <li>Some teaching experience, </li> - <li>Online course design and development experience.</li> - <li>Experience with Lean and Agile thinking and processes.</li> - <li>Experience with online collaboration tools</li> - <li>Familiarity with video production.</li> - <li>Basic HTML, XML, programming skills.</li> + <li>${("Some teaching experience, ")}</li> + <li>${_("Online course design and development experience.")}</li> + <li>${_("Experience with Lean and Agile thinking and processes.")}</li> + <li>${_("Experience with online collaboration tools")}</li> + <li>${_("Familiarity with video production.")}</li> + <li>${_("Basic HTML, XML, programming skills.")}</li> </ul> - <p>If you are interested in this position, please send an email to <a href="mailto:jobs@edx.org">jobs@edx.org</a>.</p> + <p>${_("If you are interested in this position, please send an email to <a href=\"mailto:jobs@edx.org\">jobs@edx.org</a>.")}</p> </div> </article> <article id="director-of-product-management" class="job"> <div class="inner-wrapper"> - <h3><strong>DIRECTOR, PRODUCT MANAGEMENT</strong></h3> - <p>When the power of edX is at its fullest, individuals become the students they had always hoped to be, Professors teach the courses they had always imagined and Universities offer educational opportunities never before seen. None of that happens by accident, so edX is seeking a Product Manager who can keep their eyes on the future and their heart and hands with a team of ferociously intelligent and dedicated technologists. + <h3><strong>${_("DIRECTOR, PRODUCT MANAGEMENT")}</strong></h3> + <p>${_("When the power of edX is at its fullest, individuals become the students they had always hoped to be, Professors teach the courses they had always imagined and Universities offer educational opportunities never before seen. None of that happens by accident, so edX is seeking a Product Manager who can keep their eyes on the future and their heart and hands with a team of ferociously intelligent and dedicated technologists.")} </p> - <p>The responsibility of a Product Manager is first and foremost to provide evidence to the development team that what they build will succeed in the marketplace. It is the responsibility of the Product Manager to define the product backlog and the team to build the backlog. The Product Manager is one of the most highly leveraged individuals in the Engineering organization. They work to bring a deep knowledge of the Customer – Students, Professors and Course Staff to the product roadmap. The Product Manager is well-versed in the data and sets the KPI’s that drives the team, the Product Scorecard and the Company Scorecard. They are expected to become experts in the business of online learning, familiar with blended models, MOOC’s and University and Industry needs and the competition. The Product Manager must be able to understand the edX stakeholders. + <p>${_("The responsibility of a Product Manager is first and foremost to provide evidence to the development team that what they build will succeed in the marketplace. It is the responsibility of the Product Manager to define the product backlog and the team to build the backlog. The Product Manager is one of the most highly leveraged individuals in the Engineering organization. They work to bring a deep knowledge of the Customer - Students, Professors and Course Staff to the product roadmap. The Product Manager is well-versed in the data and sets the KPI\'s that drives the team, the Product Scorecard and the Company Scorecard. They are expected to become experts in the business of online learning, familiar with blended models, MOOC\'s and University and Industry needs and the competition. The Product Manager must be able to understand the edX stakeholders.")} </p> - <p><strong>Responsibilities:</strong></p> + <p><strong>${_("Responsibilities:")}</strong></p> <ul> - <li>Assess users’ needs, whether students, Professors or Universities.</li> - <li>Research markets and competitors to provide data driven decisions.</li> - <li>Work with multiple engineering teams, through consensus and with data-backed arguments, in order to provide technology which defines the state of the art for online courses.</li> - <li>Repeatedly build and launch new products and services, complete with the training, documentation and metrics needed to enhance the already impressive brands of the edX partner institutions.</li> - <li>Establish the vision and future direction of the product with input from edX leadership and guidance from partner organizations.</li> - <li>Work in a lean organization, committed to Scrum and Kanban.</li> + <li>${_("Assess users\' needs, whether students, Professors or Universities.")}</li> + <li>${_("Research markets and competitors to provide data driven decisions.")}</li> + <li>${_("Work with multiple engineering teams, through consensus and with data-backed arguments, in order to provide technology which defines the state of the art for online courses.")}</li> + <li>${_("Repeatedly build and launch new products and services, complete with the training, documentation and metrics needed to enhance the already impressive brands of the edX partner institutions.")}</li> + <li>${_("Establish the vision and future direction of the product with input from edX leadership and guidance from partner organizations.")}</li> + <li>${_("Work in a lean organization, committed to Scrum and Kanban.")}</li> </ul> - <p><strong>Qualifications:</strong></p> + <p><strong>${_("Qualifications:")}</strong></p> <ul> - <li>Bachelor’s degree or higher in a Technical Area, MBA or Masters in Design preferred. But we're all about education, so let us know how you gained what you need to succeed in this role: projects after completing 6.00x or CS50x, Xbox cheevos, on-line guilds led, large scale innovations championed.</li> - <li>Proven ability to develop and implement strategy</li> - <li>Exquisite organizational skills</li> - <li>Deep analytical skills</li> - <li>Social finesse and business sense</li> - <li>Scrum, Kanban</li> - <li>Infatuation with technology, in all its frustrating and fragile complexity</li> - <li>Top flight communication skills, oral and written, with teams which are centrally located and spread all over the world.</li> - <li>Personal commitment and experience of the transformational possibilities of higher education</li> + <li>${_("Bachelor\'s degree or higher in a Technical Area, MBA or Masters in Design preferred. But we're all about education, so let us know how you gained what you need to succeed in this role: projects after completing 6.00x or CS50x, Xbox cheevos, on-line guilds led, large scale innovations championed.")}</li> + <li>${_("Proven ability to develop and implement strategy")}</li> + <li>${_("Exquisite organizational skills")}</li> + <li>${_("Deep analytical skills")}</li> + <li>${_("Social finesse and business sense")}</li> + <li>${_("Scrum, Kanban")}</li> + <li>${_("Infatuation with technology, in all its frustrating and fragile complexity")}</li> + <li>${_("Top flight communication skills, oral and written, with teams which are centrally located and spread all over the world.")}</li> + <li>${_("Personal commitment and experience of the transformational possibilities of higher education")}</li> </ul> - - <p>If you are interested in this position, please send an email to <a href="mailto:jobs@edx.org">jobs@edx.org</a>.</p> + + <p>${_("If you are interested in this position, please send an email to <a href=\"mailto:jobs@edx.org\">jobs@edx.org</a>.")}</p> </div> </article> <article id="content-engineer" class="job"> <div class="inner-wrapper"> - <h3><strong>CONTENT ENGINEER</strong></h3> - <p>Content engineers help create the technology for specific courses. The tasks include:</p> + <h3>${_("<strong>CONTENT ENGINEER</strong>")}</h3> + <p>${_("Content engineers help create the technology for specific courses. The tasks include:")}</p> <ul> - <li>Developing of course-specific user-facing elements, such as the circuit editor and simulator. </li> - <li>Integrating course materials into courses.</li> - <li>Creating programs to grade questions designed with complex technical features.</li> - <li>Knowledge of Python, XML, and/or JavaScript is desired. Strong interest and background in pedagogy and education is desired as well.</li> - <li>Building course components in straight XML or through our course authoring tool, edX Studio.</li> - <li>Assisting University teams and in house staff take advantage of new course software, including designing and developing technical refinements for implementation.</li> - <li>Pushing content to production servers predictably and cleanly.</li> - <li>Sending high volumes of course email adhering to email engine protocols.</li> + <li>${_("Developing of course-specific user-facing elements, such as the circuit editor and simulator. ")}</li> + <li>${_("Integrating course materials into courses.")}</li> + <li>${_("Creating programs to grade questions designed with complex technical features.")}</li> + <li>${_("Knowledge of Python, XML, and/or JavaScript is desired. Strong interest and background in pedagogy and education is desired as well.")}</li> + <li>${_("Building course components in straight XML or through our course authoring tool, edX Studio.")}</li> + <li>${_("Assisting University teams and in house staff take advantage of new course software, including designing and developing technical refinements for implementation.")}</li> + <li>${_("Pushing content to production servers predictably and cleanly.")}</li> + <li>${_("Sending high volumes of course email adhering to email engine protocols.")}</li> </ul> - <p><strong>Qualifications:</strong></p> + <p><strong>${_("Qualifications:")}</strong></p> <ul> - <li>Bachelor’s degree or higher. But we're all about education, so let us know how you gained what you need to succeed in this role: projects after completing 6.00x or CS50x, Xbox cheevos, on-line guilds led, large scale innovations championed.</li> - <li>Thorough knowledge of Python, DJango, XML, HTML, CSS, JavaScript and backbone.js.</li> - <li>Ability to work on multiple projects simultaneously without splintering.</li> - <li>Tactfully escalate conflicting deadlines or priorities only when needed. Otherwise help the team members negotiate a solution.</li> - <li>Unfailing attention to detail, especially the details the course teams have seen so often they don’t notice them anymore.</li> - <li>Readily zoom from the big picture to the smallest course component to notice when typos, inconsistencies or repetitions have unknowingly crept in.</li> - <li>Curiosity to step into the shoes of an online student working to master the course content.</li> - <li>Solid interpersonal skills, especially good listening.</li> + <li>${_("Bachelor's degree or higher. But we're all about education, so let us know how you gained what you need to succeed in this role: projects after completing 6.00x or CS50x, Xbox cheevos, on-line guilds led, large scale innovations championed.")}</li> + <li>${_("Thorough knowledge of Python, DJango, XML, HTML, CSS, JavaScript and backbone.js.")}</li> + <li>${_("Ability to work on multiple projects simultaneously without splintering.")}</li> + <li>${_("Tactfully escalate conflicting deadlines or priorities only when needed. Otherwise help the team members negotiate a solution.")}</li> + <li>${_("Unfailing attention to detail, especially the details the course teams have seen so often they don't notice them anymore.")}</li> + <li>${_("Readily zoom from the big picture to the smallest course component to notice when typos, inconsistencies or repetitions have unknowingly crept in.")}</li> + <li>${_("Curiosity to step into the shoes of an online student working to master the course content.")}</li> + <li>${_("Solid interpersonal skills, especially good listening.")}</li> </ul> - - <p>If you are interested in this position, please send an email to <a href="mailto:jobs@edx.org">jobs@edx.org</a>.</p> + + <p>${_("If you are interested in this position, please send an email to <a href=\"mailto:jobs@edx.org\">jobs@edx.org</a>.")}</p> </div> </article> <article id="software-engineer" class="job"> <div class="inner-wrapper"> - <h3><strong>SOFTWARE ENGINEER</strong></h3> - <p>EdX is looking for engineers who can contribute to its Open Source learning platform. We are a small team with a startup, lean culture, committed to building open-source software that scales and dramatically changes the face of education. Our ideal candidates are hands on developers who understand how to build scalable, service based systems, preferably in Python and have a proven track record of bringing their ideas to market. We are looking for engineers with all levels of experience, but you must be a proven leader and outstanding developer to work at edX.</p> + <h3>${_("<strong>SOFTWARE ENGINEER</strong>")}</h3> + <p>${_("EdX is looking for engineers who can contribute to its Open Source learning platform. We are a small team with a startup, lean culture, committed to building open-source software that scales and dramatically changes the face of education. Our ideal candidates are hands on developers who understand how to build scalable, service based systems, preferably in Python and have a proven track record of bringing their ideas to market. We are looking for engineers with all levels of experience, but you must be a proven leader and outstanding developer to work at edX.")}</p> <p>There are a number of projects for which we are recruiting engineers:<br> - <p><strong>Learning Management System</strong>: We are developing an Open Source Standard that allows for the creation of instructional plug-ins and assessments in our platform. You must have a deep interest in semantics of learning, and able to build services at scale.</p> + <p>${_("<strong>Learning Management System</strong>: We are developing an Open Source Standard that allows for the creation of instructional plug-ins and assessments in our platform. You must have a deep interest in semantics of learning, and able to build services at scale.")}</p> - <p><strong>Forums</strong>: We are building our own Forums software because we believe that education requires a forums platform capable of supporting learning communities. We are analytics driven. The ideal Forums candidates are focused on metrics and key performance indicators, understand how to build on top of a service based architecture and are wedded to quick iterations and user feedback. + <p>${_("<strong>Forums</strong>: We are building our own Forums software because we believe that education requires a forums platform capable of supporting learning communities. We are analytics driven. The ideal Forums candidates are focused on metrics and key performance indicators, understand how to build on top of a service based architecture and are wedded to quick iterations and user feedback.")}</p> - <p><strong>Analytics</strong>: We are looking for a platform engineer who has deep MongoDB or no SQL database experience. Our data infrastructure needs to scale to multiple terabytes. Researchers from Harvard, MIT, Berkeley and edX Universities will use our analytics platform to research and examine the fundamentals of learning. The analytics engineer will be responsible for both building out an analytics platform and a pub-sub and real-time pipeline processing architecture. Together they will allow researchers, students and Professors access to never before seen analytics. + <p>${_("<strong>Analytics</strong>: We are looking for a platform engineer who has deep MongoDB or no SQL database experience. Our data infrastructure needs to scale to multiple terabytes. Researchers from Harvard, MIT, Berkeley and edX Universities will use our analytics platform to research and examine the fundamentals of learning. The analytics engineer will be responsible for both building out an analytics platform and a pub-sub and real-time pipeline processing architecture. Together they will allow researchers, students and Professors access to never before seen analytics.")}</p> - <p><strong>Course Development Authoring Tools</strong>: We are committed to making it easy for Professors to develop and publish their courses online. So we are building the tools that allow them to readily convert their vision to an online course ready for thousands of students. </p> + <p>${_("<strong>Course Development Authoring Tools</strong>: We are committed to making it easy for Professors to develop and publish their courses online. So we are building the tools that allow them to readily convert their vision to an online course ready for thousands of students. ")}</p> - <p><strong>Requirements:</strong></p> + <p>${_("<strong>Requirements:</strong>")}</p> <ul> - <li>Real-world experience with Python or other dynamic development languages.</li> - <li>Able to code front to back, including HTML, CSS, JavaScript, Django, Python.</li> - <li>You must be committed to an agile development practices, in Scrum or Kanban.</li> - <li>Demonstrated skills in building Service based architecture.</li> - <li>Test Driven Development.</li> - <li>Committed to Documentation best practices so your code can be consumed in an open source environment.</li> - <li>Contributor to or consumer of Open Source Frameworks.</li> - <li>BS in Computer Science from top-tier institution. But we're all about education, so let us know how you gained what you need to succeed in this role: projects after completing 6.00x or CS50x, Xbox cheevos, on-line guilds led, large scale innovations championed.</li> - <li>Acknowledged by peers as a technology leader. </li> + <li>${_("Real-world experience with Python or other dynamic development languages.")}</li> + <li>${_("Able to code front to back, including HTML, CSS, JavaScript, Django, Python.")}</li> + <li>${_("You must be committed to an agile development practices, in Scrum or Kanban.")}</li> + <li>${_("Demonstrated skills in building Service based architecture.")}</li> + <li>${_("Test Driven Development.")}</li> + <li>${_("Committed to Documentation best practices so your code can be consumed in an open source environment.")}</li> + <li>${_("Contributor to or consumer of Open Source Frameworks.")}</li> + <li>${_("BS in Computer Science from top-tier institution. But we're all about education, so let us know how you gained what you need to succeed in this role: projects after completing 6.00x or CS50x, Xbox cheevos, on-line guilds led, large scale innovations championed.")}</li> + <li>${_("Acknowledged by peers as a technology leader. ")}</li> </ul> - <p>If you are interested in this position, please send an email to <a href="mailto:jobs@edx.org">jobs@edx.org</a>.</p> + <p>${_("If you are interested in this position, please send an email to <a href=\"mailto:jobs@edx.org\">jobs@edx.org</a>.")}</p> </div> </article> <article id="learning-sciences-engineer" class="job"> <div class="inner-wrapper"> - <h3><strong>LEARNING SCIENCES ENGINEER</strong></h3> - <p>In 2012, edX reinvented education. In 2013, the edX learning sciences team is charged with reinventing education, again. The goal of the team is to prototype and develop technologies which will radically change the way students learn and instructors teach. We will engage in projects in learning analytics, crowdsourced content development, intelligent tutoring, as well as radical changes to the ways course content is structured. We are looking to opportunistically build a small (3 person), fast-moving team capable of rapidly bringing advanced development projects to prototype and to market. All members of the team must be spectacular software engineers capable of working in or adapting to dynamic, duck typed, functional languages (Python and JavaScript). In addition, we are looking for some combination of:</p> + <h3><strong>${_("LEARNING SCIENCES ENGINEER")}</strong></h3> + <p>${_("In 2012, edX reinvented education. In 2013, the edX learning sciences team is charged with reinventing education, again. The goal of the team is to prototype and develop technologies which will radically change the way students learn and instructors teach. We will engage in projects in learning analytics, crowdsourced content development, intelligent tutoring, as well as radical changes to the ways course content is structured. We are looking to opportunistically build a small (3 person), fast-moving team capable of rapidly bringing advanced development projects to prototype and to market. All members of the team must be spectacular software engineers capable of working in or adapting to dynamic, duck typed, functional languages (Python and JavaScript). In addition, we are looking for some combination of:")}</p> <ul> - <li>Deep expertise in mathematics, and in particular, advanced linear algebra, machine learning, big data, psychometrics, and probability. </li> - <li>UX design. Capable of envisioning user interface for software that does things that have never been done before, and bringing them through to market. Skills should be broad and range the full gamut: graphic design, UX, HTML5, basic JavaScript, and CSS. </li> - <li>Interest and experience in both research and practice of education, cognitive science, and related fields. </li> - <li>Core backend experience (Python, Django, MongoDB, SQL)</li> - <li>Background in social networks and social network analysis (both social science and mathematics) is desirable as well.</li> + <li>${_("Deep expertise in mathematics, and in particular, advanced linear algebra, machine learning, big data, psychometrics, and probability. ")}</li> + <li>${_("UX design. Capable of envisioning user interface for software that does things that have never been done before, and bringing them through to market. Skills should be broad and range the full gamut: graphic design, UX, HTML5, basic JavaScript, and CSS. ")}</li> + <li>${_("Interest and experience in both research and practice of education, cognitive science, and related fields. ")}</li> + <li>${_("Core backend experience (Python, Django, MongoDB, SQL)")}</li> + <li>${_("Background in social networks and social network analysis (both social science and mathematics) is desirable as well.")}</li> </ul> - <p>More than anything, we’re looking for spectacular people capable of very rapidly building things which have never been built before. We’re capable of providing both traditional employment, and potentially, in partnership with MIT, more academic opportunities.</p> - - <p>If you are interested in this position, please send an email to <a href="mailto:jobs@edx.org">jobs@edx.org</a>.</p> + <p>${_("More than anything, we're looking for spectacular people capable of very rapidly building things which have never been built before. We're capable of providing both traditional employment, and potentially, in partnership with MIT, more academic opportunities.")}</p> + + <p>${_("If you are interested in this position, please send an email to <a href=\"mailto:jobs@edx.org\">jobs@edx.org</a>.")}</p> </div> </article> - + <article id="sales-engineer" class="job"> <div class="inner-wrapper"> - <h3><strong>SALES ENGINEER, BUSINESS DEVELOPMENT TEAM</strong></h3> - <p>A great relationship with edX begins long before the first student signs up. We are -looking for some talented, self-motivated people to help set a solid foundation for -our emerging corporate customers, NGO’s, and governmental partners. As the Sales -Engineer you will be expected to provide oversight if requested over more junior -staff. This may include skills development, knowledge transfer, sharing technical -expertise, and review of demos prior to presentation. The Sales Engineer should -have familiarity with instructional design and competency in that area is a plus.</p> - -<p>Experience teaching and mentoring, needs assessment and prior management -responsibility, and LMS experience, also a plus. This is a team atmosphere with -many constituencies working to develop a new global perspective regarding higher -education and online learning. Respect and patience, along with knowledge and -understanding of the development process is critical to success in order to maintain -strong bonds between development teams, sales team, and prospect/client -implementation teams. In addition the Sales Engineer may also work with our -xUniversity partners and the affiliated professors joining the edX movement. This -position requires customer facing skills, comfort in demonstrating the product, and -ability to code ‘demos’ as required. Additionally you will be contributing to -proposals, so clear documentation and writing skills are critical. The job will -require travel to client sites around the US upon occasion, and possibly -internationally as well. Job also requires good speaking skills, and a willingness and -ability to communicate clearly and respond quickly to prospect and customer -requests. This is a salaried position and will on occasion require work and -responsiveness to both the edX team and customers ‘after hours’. This position -reports to the VP, Business Development and will be dotted lined to the -development and program management teams.</p> - <p><strong>Responsibilities:</strong></p> - <ul> - <li>Can code demos and evaluate demos of others</li> - <li>Prepare and deliver standard and custom demonstrations</li> - <li>Handle all pre-sales technical issues professionally and efficiently</li> - <li>Maintain in-depth knowledge of products and pending new releases</li> - <li>Maintain a working knowledge of documentation and training</li> - <li>Maintain a working knowledge of workflow systems</li> - <li>Respond to technical questions from universities looking to expand their on-line offerings</li> - <li>Provide feedback to Product Development regarding new features, improving product performance, and eliminating bugs in the product</li> - <li>Prepare Professional Services for efficient onboarding – professionally managing the transition from pre-sales to post-sales</li> - <li>Deliver high-level presentation and associated ‘click-thru’ demonstrations</li> - <li>and be able to customize to prospect’s requirements</li> - <li>Understand and articulate the underlying technology concepts</li> - <li>Understand and articulate how all products components fit together technically as well as how they integrate and work with external technologies and cross functional applications found within clients organizations.</li> - <li>Build relationships with our prospects and universities, to be viewed as a trusted training partner.</li> + <h3><strong>${_("SALES ENGINEER, BUSINESS DEVELOPMENT TEAM")}</strong></h3> + <p>${_("A great relationship with edX begins long before the first student signs up. We are " + "looking for some talented, self-motivated people to help set a solid foundation for " + "our emerging corporate customers, NGO's, and governmental partners. As the Sales " + "Engineer you will be expected to provide oversight if requested over more junior " + "staff. This may include skills development, knowledge transfer, sharing technical " + "expertise, and review of demos prior to presentation. The Sales Engineer should " + "have familiarity with instructional design and competency in that area is a plus.")}</p> + + <p>${_("Experience teaching and mentoring, needs assessment and prior management " + "responsibility, and LMS experience, also a plus. This is a team atmosphere with " + "many constituencies working to develop a new global perspective regarding higher " + "education and online learning. Respect and patience, along with knowledge and " + "understanding of the development process is critical to success in order to maintain " + "strong bonds between development teams, sales team, and prospect/client " + "implementation teams. In addition the Sales Engineer may also work with our " + "xUniversity partners and the affiliated professors joining the edX movement. This " + "position requires customer facing skills, comfort in demonstrating the product, and " + "ability to code 'demos' as required. Additionally you will be contributing to " + "proposals, so clear documentation and writing skills are critical. The job will " + "require travel to client sites around the US upon occasion, and possibly " + "internationally as well. Job also requires good speaking skills, and a willingness and " + "ability to communicate clearly and respond quickly to prospect and customer " + "requests. This is a salaried position and will on occasion require work and " + "responsiveness to both the edX team and customers 'after hours'. This position " + "reports to the VP, Business Development and will be dotted lined to the " + "development and program management teams.")}</p> + <p><strong>${_("Responsibilities:")}</strong></p> + <ul> + <li>${_("Can code demos and evaluate demos of others")}</li> + <li>${_("Prepare and deliver standard and custom demonstrations")}</li> + <li>${_("Handle all pre-sales technical issues professionally and efficiently")}</li> + <li>${_("Maintain in-depth knowledge of products and pending new releases")}</li> + <li>${_("Maintain a working knowledge of documentation and training")}</li> + <li>${_("Maintain a working knowledge of workflow systems")}</li> + <li>${_("Respond to technical questions from universities looking to expand their on-line offerings")}</li> + <li>${_("Provide feedback to Product Development regarding new features, improving product performance, and eliminating bugs in the product")}</li> + <li>${_("Prepare Professional Services for efficient onboarding - professionally managing the transition from pre-sales to post-sales")}</li> + <li>${_("Deliver high-level presentation and associated 'click-thru' demonstrations")}</li> + <li>${_("and be able to customize to prospect's requirements")}</li> + <li>{(_"Understand and articulate the underlying technology concepts")}</li> + <li>${_("Understand and articulate how all products components fit together technically as well as how they integrate and work with external technologies and cross functional applications found within clients organizations.")}</li> + <li>${_("Build relationships with our prospects and universities, to be viewed as a trusted training partner.")}</li> </ul> - <p><strong>Qualifications:</strong></p> + <p><strong>${_("Qualifications:")}</strong></p> <ul> - <li>Minimum of 5 years of experience working closely with relationship based sales organizations, preferably in an educational technology organization.</li> - <li>Excellent interpersonal skills including proven presentation and facilitation skills.</li> - <li>Strong oral and written communication skills.</li> - <li>Flexibility to work on a variety of initiatives; prior startup experience preferred.</li> - <li>Outstanding work ethic, results-oriented, and creative/innovative style.</li> - <li>Proactive, optimistic approach to problem solving.</li> - <li>Commitment to constant personal and organizational improvement.</li> - <li>Willingness to travel to partner sites as needed.</li> - <li>Lean and Agile thinking and training. Experienced in Scrum or Kanban.</li> - <li>Bachelors or Master’s in Education, organizational learning, or other related field preferred. But we're all about education, so let us know how you gained what you need to succeed in this role: projects after completing 6.00x or CS50x, Xbox cheevos, on-line guilds led, large scale innovations championed.</li> + <li>${_("Minimum of 5 years of experience working closely with relationship based sales organizations, preferably in an educational technology organization.")}</li> + <li>${_("Excellent interpersonal skills including proven presentation and facilitation skills.")}</li> + <li>${_("Strong oral and written communication skills.")}</li> + <li>${_("Flexibility to work on a variety of initiatives; prior startup experience preferred.")}</li> + <li>${_("Outstanding work ethic, results-oriented, and creative/innovative style.")}</li> + <li>${_("Proactive, optimistic approach to problem solving.")}</li> + <li>${_("Commitment to constant personal and organizational improvement.")}</li> + <li>${_("Willingness to travel to partner sites as needed.")}</li> + <li>${_("Lean and Agile thinking and training. Experienced in Scrum or Kanban.")}</li> + <li>${_("Bachelors or Master's in Education, organizational learning, or other related field preferred. But we're all about education, so let us know how you gained what you need to succeed in this role: projects after completing 6.00x or CS50x, Xbox cheevos, on-line guilds led, large scale innovations championed.")}</li> </ul> - - <p>If you are interested in this position, please send an email to <a href="mailto:jobs@edx.org">jobs@edx.org</a>.</p> + + <p>${_("If you are interested in this position, please send an email to <a href=\"mailto:jobs@edx.org\">jobs@edx.org</a>.")}</p> </div> </article> <article id="front-end-developer" class="job"> <div class="inner-wrapper"> - <h3><strong>FRONT END DEVELOPER</strong></h3> - <p>edX is looking for a Front End Developer to join our Product and Engineering Teams to shape the experience of all of edX's online learning tools. Thousands of students learn with us every day – the way they connect with their courses, their professors and edX is through our ever more powerful front end. Our ideal candidates not only know modern front end development best practices, but make organization standards and teach others with them; sweat the mechanical, visual, and transactional details when bring a design to life in the browser; can instinctually bring organization to their HTML/CSS/JavaScript, documentation, or project; and thrive on collaborating with both designers and developers throughout a project's lifecycle.</p> - <p><strong>As an edX Front End Developer, you:</strong></p> + <h3><strong>${_("FRONT END DEVELOPER")}</strong></h3> + <p>${_("edX is looking for a Front End Developer to join our Product and Engineering Teams to shape the experience of all of edX's online learning tools. Thousands of students learn with us every day - the way they connect with their courses, their professors and edX is through our ever more powerful front end. Our ideal candidates not only know modern front end development best practices, but make organization standards and teach others with them; sweat the mechanical, visual, and transactional details when bring a design to life in the browser; can instinctually bring organization to their HTML/CSS/JavaScript, documentation, or project; and thrive on collaborating with both designers and developers throughout a project's lifecycle.")}</p> + <p><strong>${_("As an edX Front End Developer, you:")}</strong></p> <ul> - <li>Translate flat design comps, wireframes, and prototypes to production-ready interactive interfaces with joy and passion.</li> - <li>Are very familiar with cutting-edge front-end development practices and technology (CSS3, media queries, responsive web design, HTML5, etc.).</li> - <li>Write JavaScript without the use of a library while still being familiar with popular libraries such as jQuery.</li> - <li>Can abstract layouts, design patterns, and UI components while building out the interface to a product or application.</li> - <li>Appreciate that web standards, accessibility, and usability are essential to uphold.</li> - <li>Generally have experience with server-side templating and data extraction code while enjoying learning more from the development team.</li> - <li>Maintain the sanctity of a project's information architecture, interaction design, and visual design details while contributing to the effort.</li> - <li>Know how to test and refactor your code across browsers and with QA teams.</li> - <li>Work well with designers, developers, and colleagues.</li> - <li>Take pride in your communicative and collaborative abilities.</li> + <li>${("Translate flat design comps, wireframes, and prototypes to production-ready interactive interfaces with joy and passion.")}</li> + <li>${("Are very familiar with cutting-edge front-end development practices and technology (CSS3, media queries, responsive web design, HTML5, etc.).")}</li> + <li>${("Write JavaScript without the use of a library while still being familiar with popular libraries such as jQuery.")}</li> + <li>${("Can abstract layouts, design patterns, and UI components while building out the interface to a product or application.")}</li> + <li>${("Appreciate that web standards, accessibility, and usability are essential to uphold.")}</li> + <li>${("Generally have experience with server-side templating and data extraction code while enjoying learning more from the development team.")}</li> + <li>${("Maintain the sanctity of a project's information architecture, interaction design, and visual design details while contributing to the effort.")}</li> + <li>${("Know how to test and refactor your code across browsers and with QA teams.")}</li> + <li>${("Work well with designers, developers, and colleagues.")}</li> + <li>${("Take pride in your communicative and collaborative abilities.")}</li> </ul> - <p><strong>Front End Developers must also:</strong></p> + <p><strong>${_("Front End Developers must also:")}</strong></p> <ul> - <li>Have at least two years of professional, post-collegiate experience.</li> - <li>Have a BS, BFA or equivalent work experience. But we're all about education, so let us know how you gained what you need to succeed in this role: projects after completing 6.00x or CS50x, Xbox cheevos, on-line guilds led, large scale innovations championed.</li> + <li>${_("Have at least two years of professional, post-collegiate experience.")}</li> + <li>${_("Have a BS, BFA or equivalent work experience. But we're all about education, so let us know how you gained what you need to succeed in this role: projects after completing 6.00x or CS50x, Xbox cheevos, on-line guilds led, large scale innovations championed.")}</li> </ul> - <p><strong>About the Product Design and Development Teams:</strong></p> - <p>We are a small team with a startup, lean culture, committed to building tools that help our users learn and teach online. Working alongside developers, course staff, product owners, and project stakeholders, our Designers shepherd the experience of an idea or tool through research and strategy phases and lead the Information Architecture, Interaction Design, Visual Design, and Front End Development efforts in bringing that experience to life.</p> + <p><strong>${_("About the Product Design and Development Teams:")}</strong></p> + <p>${_("We are a small team with a startup, lean culture, committed to building tools that help our users learn and teach online. Working alongside developers, course staff, product owners, and project stakeholders, our Designers shepherd the experience of an idea or tool through research and strategy phases and lead the Information Architecture, Interaction Design, Visual Design, and Front End Development efforts in bringing that experience to life.")}</p> - <p>If you wish to apply, please send your resume (PDF, text, or Word Doc), a thoughtful email that includes specifics about how your previous experience matches the Front End Developer role at edX, and online samples of your work to <a href="mailto:jobs@edx.org">jobs@edx.org</a>. Candidates who do not provide these will not be considered. EdX is open to considering candidates outside of the Boston/Cambridge, MA area who are willing to relocate.</p> + <p>${_("If you wish to apply, please send your resume (PDF, text, or Word Doc), a thoughtful email that includes specifics about how your previous experience matches the Front End Developer role at edX, and online samples of your work to <a href=\"mailto:jobs@edx.org\">jobs@edx.org</a>. Candidates who do not provide these will not be considered. EdX is open to considering candidates outside of the Boston/Cambridge, MA area who are willing to relocate.")}</p> </div> </article> - + <article id="test-engineer" class="job"> <div class="inner-wrapper"> - <h3><strong>TEST ENGINEER</strong></h3> - <p>EdX is looking for a Software Engineer in Test to help architect and implement improvements to our testing infrastructure and write code to validate and verify development and deployment of our MOOC platform.</p> - <p>You are an experienced professional who is passionate about and current with cutting edge methodologies and practices for delivering high quality software. For example, you understand and can articulate the difference between BDD and TDD. You champion for developers to be confident in the quality of their code by giving them the tools they need to create and execute their own tests. You write unit tests that follow best practices for each layer of an MVC architecture. You work side by side with the DevOps team to define environments and automate their buildouts.</p> - <p><strong>Responsibilities:</strong></p> + <h3><strong>${_("TEST ENGINEER")}</strong></h3> + <p>${_("EdX is looking for a Software Engineer in Test to help architect and implement improvements to our testing infrastructure and write code to validate and verify development and deployment of our MOOC platform.")}</p> + <p>${_("You are an experienced professional who is passionate about and current with cutting edge methodologies and practices for delivering high quality software. For example, you understand and can articulate the difference between BDD and TDD. You champion for developers to be confident in the quality of their code by giving them the tools they need to create and execute their own tests. You write unit tests that follow best practices for each layer of an MVC architecture. You work side by side with the DevOps team to define environments and automate their buildouts.")}</p> + <p><strong>${_("Responsibilities:")}</strong></p> <ul> - <li>Review software designs with a focus on code quality, risk, and testability</li> - <li>Build tools and frameworks that enable fellow engineers be more productive, write better code and test it themselves</li> - <li>Code test automation at all levels including class library, web application framework, javascript, and end-to-end</li> - <li>Enable metrics collection to measure adoption and expand the reach of the delivered tools</li> - <li>Fix framework bugs and improve test architecture, including adding required unit tests</li> - <li>Train and mentor other team members</li> + <li>${_("Review software designs with a focus on code quality, risk, and testability")}</li> + <li>${_("Build tools and frameworks that enable fellow engineers be more productive, write better code and test it themselves")}</li> + <li>${_("Code test automation at all levels including class library, web application framework, javascript, and end-to-end")}</li> + <li>${_("Enable metrics collection to measure adoption and expand the reach of the delivered tools")}</li> + <li>${_("Fix framework bugs and improve test architecture, including adding required unit tests")}</li> + <li>${_("Train and mentor other team members")}</li> </ul> - <p><strong>Qualifications:</strong></p> + <p><strong>${_("Qualifications:")}</strong></p> <ul> - <li>Excellent coding skills across a number of languages: Python or other high level programming languages, Javascript, bash, etc.</li> - <li>Experience in building test automation frameworks</li> - <li>Comfortable with source code in various languages (Python/Django, Ruby/Rails, Javascript/Backbone/JQuery, etc.)</li> - <li>Highly proficient in a Unix/Linux environment</li> - <li>Experience with database technologies from SQLite to MongoDB</li> - <li>Familiar with deployment automation (Puppet, Jenkins, AWS)</li> - <li>Open Source development experience preferred, extra points for sharing your GitHub / StackOverflow / etc. profile</li> + <li>${_("Excellent coding skills across a number of languages: Python or other high level programming languages, Javascript, bash, etc.")}</li> + <li>${_("Experience in building test automation frameworks")}</li> + <li>${_("Comfortable with source code in various languages (Python/Django, Ruby/Rails, Javascript/Backbone/JQuery, etc.)")}</li> + <li>${_("Highly proficient in a Unix/Linux environment")}</li> + <li>${_("Experience with database technologies from SQLite to MongoDB")}</li> + <li>${_("Familiar with deployment automation (Puppet, Jenkins, AWS)")}</li> + <li>${_("Open Source development experience preferred, extra points for sharing your GitHub / StackOverflow / etc. profile")}</li> </ul> - - <p>If you are interested in this position, please send an email to <a href="mailto:jobs@edx.org">jobs@edx.org</a>.</p> + + <p>${_("If you are interested in this position, please send an email to <a href=\"mailto:jobs@edx.org\">jobs@edx.org</a>.")}</p> </div> </article> <article id="coordinator-university-business-affairs" class="job"> <div class="inner-wrapper"> - <h3><strong>COORDINATOR OF UNIVERSITY AND BUSINESS AFFAIRS</strong></h3> - <p>EdX is looking for a Coordinator of External Affairs, to streamline, organize and maintain our efforts in Business Development and University Relations.</p> - <p><strong>There are 4 primary areas of responsibility:</strong></p> + <h3><strong>${_("COORDINATOR OF UNIVERSITY AND BUSINESS AFFAIRS")}</strong></h3> + <p>${_("EdX is looking for a Coordinator of External Affairs, to streamline, organize and maintain our efforts in Business Development and University Relations.")}</p> + <p><strong>${_("There are 4 primary areas of responsibility:")}</strong></p> <ol> - <li>To ensure all visits to and from the edX offices by any partners and affiliates are managed, coordinated, and documented. This involves developing itineraries, booking flights and schedules, and managing meetings and events in concert with members of our executive team in University Relations and Business Development and our consortium of partners.</li> - <li>To maintain a database of partners and prospects and manage any data flows/reporting required.</li> - <li>To manage the information flow, recording activity on the edX Wiki page by synthesizing data and analysis from all visits and meetings and create updates on the edX Wiki page.</li> - <li>To act as a central point of contact for all relationship and event activity within this scope.</li> + <li>${_("To ensure all visits to and from the edX offices by any partners and affiliates are managed, coordinated, and documented. This involves developing itineraries, booking flights and schedules, and managing meetings and events in concert with members of our executive team in University Relations and Business Development and our consortium of partners.")}</li> + <li>${_("To maintain a database of partners and prospects and manage any data flows/reporting required.")}</li> + <li>${_("To manage the information flow, recording activity on the edX Wiki page by synthesizing data and analysis from all visits and meetings and create updates on the edX Wiki page.")}</li> + <li>${_("To act as a central point of contact for all relationship and event activity within this scope.")}</li> </ol> - <p><strong>Detailed Responsibilities:</strong></p> + <p><strong>${_("Detailed Responsibilities:")}</strong></p> <ul> - <li>Provide support and coordinate activities for these 3 executives</li> - <li>Acquire strong user knowledge of related systems, processes and tools</li> - <li>Participate in the new partner on-boarding process</li> - <li>Provide an escalation point for Sales personnel for systems, procedures and policies</li> - <li>Maintain Salesforce database for client/partner set up and support information, generating reports as needed</li> - <li>Document proofreading, editing as directed for proposals, contracts, contact and call reports</li> - <li>Coordinate and manage travel, events and meetings, including invitations, RSVP’s, hotel/meeting space contracts, and providing event materials to attendees</li> + <li>${_("Provide support and coordinate activities for these 3 executives")}</li> + <li>${_("Acquire strong user knowledge of related systems, processes and tools")}</li> + <li>${_("Participate in the new partner on-boarding process")}</li> + <li>${_("Provide an escalation point for Sales personnel for systems, procedures and policies")}</li> + <li>${_("Maintain Salesforce database for client/partner set up and support information, generating reports as needed")}</li> + <li>${_("Document proofreading, editing as directed for proposals, contracts, contact and call reports")}</li> + <li>${_("Coordinate and manage travel, events and meetings, including invitations, RSVP's, hotel/meeting space contracts, and providing event materials to attendees")}</li> </ul> - <p><strong>Qualifications:</strong></p> + <p><strong>${_("Qualifications:")}</strong></p> <ul> - <li>5-7 years of experience in a similar project/coordinator type position with progressively responsible administrative experience</li> - <li>Self-starter, possessing tenacity and a desire for challenges, not afraid to take risks, and the initiative to get things done with little direction </li> - <li>Superior interpersonal and communications skills, including concise writing and editing skills</li> - <li>Strong organizational skills to manage multiple competing priorities and projects with attention to detail </li> - <li>Exceptional ability to effectively interact with multiple external and internal stakeholders </li> - <li>Adept at analyzing complex issues with the ability to synthesize data and perform gap analyses</li> - <li>Performs well with a variety of disciplines while remaining effective in a high-volume, fast-pace start-up environment with high workload</li> - <li>Must be proficient in: MS PowerPoint, Word and Excel, Salesforce.com, and online tools such as Google docs and Wiki, and knowledge of Kanban is also helpful</li> + <li>${_("5-7 years of experience in a similar project/coordinator type position with progressively responsible administrative experience")}</li> + <li>${_("Self-starter, possessing tenacity and a desire for challenges, not afraid to take risks, and the initiative to get things done with little direction ")}</li> + <li>${_("Superior interpersonal and communications skills, including concise writing and editing skills")}</li> + <li>${_("Strong organizational skills to manage multiple competing priorities and projects with attention to detail ")}</li> + <li>${_("Exceptional ability to effectively interact with multiple external and internal stakeholders ")}</li> + <li>${_("Adept at analyzing complex issues with the ability to synthesize data and perform gap analyses")}</li> + <li>${_("Performs well with a variety of disciplines while remaining effective in a high-volume, fast-pace start-up environment with high workload")}</li> + <li>${_("Must be proficient in: MS PowerPoint, Word and Excel, Salesforce.com, and online tools such as Google docs and Wiki, and knowledge of Kanban is also helpful")}</li> </ul> - - <p>If you are interested in this position, please send an email to <a href="mailto:jobs@edx.org">jobs@edx.org</a>.</p> + + <p>${_("If you are interested in this position, please send an email to <a href=\"mailto:jobs@edx.org\">jobs@edx.org</a>.")}</p> </div> </article> </section> <section class="jobs-sidebar"> - <h2>Positions</h2> + <h2>${_("Positions")}</h2> <nav> - <a href="#director-of-education-services">Director of Education Services</a> - <a href="#manager-of-training-services">Manager of Training Services</a> - <a href="#trainer">Trainer</a> - <a href="#instructional-designer">Instructional Designer</a> - <a href="#program-manager">Program Manager</a> - <a href="#director-of-product-management">Director, Product Management</a> - <a href="#content-engineer">Content Engineer</a> - <a href="#software-engineer">Software Engineer</a> - <a href="#learning-sciences-engineer">Learning Sciences Engineer</a> - <a href="#sales-engineer">Sales Engineer, Business Development Team</a> - <a href="#front-end-developer">Front End Developer</a> - <a href="#test-engineer">Test Engineer</a> - <a href="#coordinator-university-business-affairs">Coordinator of University and Business Affairs</a> + <a href="#director-of-education-services">${_("Director of Education Services")}</a> + <a href="#manager-of-training-services">${_("Manager of Training Services")}</a> + <a href="#trainer">${_("Trainer")}</a> + <a href="#instructional-designer">${_("Instructional Designer")}</a> + <a href="#program-manager">${_("Program Manager")}</a> + <a href="#director-of-product-management">${_("Director, Product Management")}</a> + <a href="#content-engineer">${_("Content Engineer")}</a> + <a href="#software-engineer">${_("Software Engineer")}</a> + <a href="#learning-sciences-engineer">${_("Learning Sciences Engineer")}</a> + <a href="#sales-engineer">${_("Sales Engineer, Business Development Team")}</a> + <a href="#front-end-developer">${_("Front End Developer")}</a> + <a href="#test-engineer">${_("Test Engineer")}</a> + <a href="#coordinator-university-business-affairs">${_("Coordinator of University and Business Affairs")}</a> </nav> - <h2>How to Apply</h2> - <p>E-mail your resume, cover letter and any other materials to <a href="mailto:jobs@edx.org">jobs@edx.org</a></p> - <h2>Our Location</h2> - <p>11 Cambridge Center <br> - Cambridge, MA 02142</p> + <h2>${_("How to Apply")}</h2> + <p>${_("E-mail your resume, cover letter and any other materials to <a href=\"mailto:jobs@edx.org\">jobs@edx.org</a>")}</p> + <h2>${_("Our Location")}</h2> + <p>${_("11 Cambridge Center <br>Cambridge, MA 02142")}</p> </section> </section> </section> diff --git a/lms/templates/static_templates/media-kit.html b/lms/templates/static_templates/media-kit.html index 73eea9c3b812ed6791c64c367325cac59094253f..3c7ef00c387dfaf1f5558f1efc84ddcceae0245b 100644 --- a/lms/templates/static_templates/media-kit.html +++ b/lms/templates/static_templates/media-kit.html @@ -1,32 +1,33 @@ +<%! from django.utils.translation import ugettext as _ %> <%namespace name='static' file='../static_content.html'/> <%inherit file="../main.html" /> -<%block name="title"><title>edX Media Kit</title></%block> +<%block name="title"><title>${_("edX Media Kit")}</title></%block> <section class="mediakit"> - <h1>edX Media Kit</h1> + <h1>${_("edX Media Kit")}</h1> <hr /> <div class="wrapper wrapper-mediakit"> <section class="introduction"> <header> - <h2>Welcome to the <span class="org-name">edX</span> Media Kit</h2> + <h2>${_("Welcome to the <span class=\"org-name\">edX</span> Media Kit")}</h2> </header> <article> - <p>Need images for a news story? Feel free to download high-resolution versions of the photos below by clicking on the thumbnail. Please credit edX in your use.</p> - <p>We’ve included visual guidelines on how to use the edX logo within the download zip which also includes Adobe Illustrator and eps versions of the logo. </p> - <p>For more information about edX, please contact <strong>Dan O'Connell Associate Director of Communications</strong> via <a href="mailto:oconnell@edx.org?subject=edX Information Request (from Media Kit)">oconnell@edx.org</a>.</p> + <p>${_("Need images for a news story? Feel free to download high-resolution versions of the photos below by clicking on the thumbnail. Please credit edX in your use.")}</p> + <p>${_("We\'ve included visual guidelines on how to use the edX logo within the download zip which also includes Adobe Illustrator and eps versions of the logo. ")}</p> + <p>${_("For more information about edX, please contact <strong>Dan O'Connell Associate Director of Communications</strong> via <a href=\"mailto:oconnell@edx.org?subject=edX Information Request (from Media Kit)\">oconnell@edx.org</a>.")}</p> </article> <aside> - <h3>The <span class="org-name">edX</span> Logo</h3> + <h3>${_("The <span class=\"org-name\">edX</span> Logo")}</h3> <figure class="logo"> <a rel="asset" class="action action-download" href="${static.url('files/edx-identity.zip')}"> <img src="${static.url('images/edx.png')}" /> - <figcaption>.zip file containing Adobe Illustrator and .eps formats of logo alongside visual guidelines for use</figcaption> - <span class="note">Download (.zip file)</span> + <figcaption>${_(".zip file containing Adobe Illustrator and .eps formats of logo alongside visual guidelines for use")}</figcaption> + <span class="note">${_("Download (.zip file)")}</span> </a> </figure> </aside> @@ -35,7 +36,7 @@ <section class="library"> <header> - <h2>The <span class="org-name">edX</span> Media Library</h2> + <h2>${_("The <span class=\"org-name\">edX</span> Media Library")}</h2> </header> <article> @@ -44,8 +45,8 @@ <figure> <a rel="asset" class="action action-download" href="${static.url('images/press-kit/anant-agarwal_high-res.jpg')}"> <img src="${static.url('images/press-kit/anant-agarwal_x200.jpg')}"/> - <figcaption>Ananat Agarwal, President of edX, in his office in Cambridge, MA. The computer screen behind him shows a portion of a video lecture from 6.002x, Circuits & Electronics, the MITx course taught by Agarwal.</figcaption> - <span class="note">Download (High Resolution Photo)</span> + <figcaption>${_("Ananat Agarwal, President of edX, in his office in Cambridge, MA. The computer screen behind him shows a portion of a video lecture from 6.002x, Circuits & Electronics, the MITx course taught by Agarwal.")}</figcaption> + <span class="note">${_("Download (High Resolution Photo)")}</span> </a> </figure> </li> @@ -53,8 +54,8 @@ <figure> <a rel="asset" class="action action-download" href="${static.url('images/press-kit/anant-tablet_high-res.jpg')}"> <img src="${static.url('images/press-kit/anant-tablet_x200.jpg')}"/> - <figcaption>Anant Agarwal creating a tablet-based lecture for 6.002x, Circuits & Electronics.</figcaption> - <span class="note">Download (High Resolution Photo)</span> + <figcaption>${_("Anant Agarwal creating a tablet-based lecture for 6.002x, Circuits & Electronics.")}</figcaption> + <span class="note">${_("Download (High Resolution Photo)")}</span> </a> </figure> </li> @@ -62,8 +63,8 @@ <figure> <a rel="asset" class="action action-download" href="${static.url('images/press-kit/piotr-mitros_high-res.jpg')}"> <img src="${static.url('images/press-kit/piotr-mitros_x200.jpg')}"/> - <figcaption>Piotr Mitros, Chief Scientist at edX, uses a Rostrum camera to create an overhead camera-based lecture. During this process, voice and video are recorded for an interactive tutorial.</figcaption> - <span class="note">Download (High Resolution Photo)</span> + <figcaption>${_("Piotr Mitros, Chief Scientist at edX, uses a Rostrum camera to create an overhead camera-based lecture. During this process, voice and video are recorded for an interactive tutorial.")}</figcaption> + <span class="note">${_("Download (High Resolution Photo)")}</span> </a> </figure> </li> @@ -71,8 +72,8 @@ <figure> <a rel="asset" class="action action-download" href="${static.url('images/press-kit/edx-video-editing_high-res.jpg')}"> <img src="${static.url('images/press-kit/edx-video-editing_x200.jpg')}"/> - <figcaption>One of edX’s video editors edits a lecture in a video suite.</figcaption> - <span class="note">Download (High Resolution Photo)</span> + <figcaption>${_("One of edX\'s video editors edits a lecture in a video suite.")}</figcaption> + <span class="note">${_("Download (High Resolution Photo)")}</span> </a> </figure> </li> @@ -80,8 +81,8 @@ <figure> <a rel="asset" class="action action-download" href="${static.url('images/press-kit/6.002x_high-res.png')}"> <img src="${static.url('images/press-kit/6.002x_x200.jpg')}"/> - <figcaption>Screenshot of 6.002x Circuits and Elecronics course.</figcaption> - <span class="note">Download (High Resolution Photo)</span> + <figcaption>${_("Screenshot of 6.002x Circuits and Elecronics course.")}</figcaption> + <span class="note">${_("Download (High Resolution Photo)")}</span> </a> </figure> </li> @@ -89,8 +90,8 @@ <figure> <a rel="asset" class="action action-download" href="${static.url('images/press-kit/3.091x_high-res.png')}"> <img src="${static.url('images/press-kit/3.091x_x200.jpg')}"/> - <figcaption>Screenshot of 3.091x: Introduction to Solid State Chemistry.</figcaption> - <span class="note">Download (High Resolution Photo)</span> + <figcaption>${_("Screenshot of 3.091x: Introduction to Solid State Chemistry.")}</figcaption> + <span class="note">${_("Download (High Resolution Photo)")}</span> </a> </figure> </li> diff --git a/lms/templates/static_templates/press.html b/lms/templates/static_templates/press.html index 277cb91bd2e48114bbff828b29183ce506a38132..6ab9cd2d448d842394667c37d893c95fffd29816 100644 --- a/lms/templates/static_templates/press.html +++ b/lms/templates/static_templates/press.html @@ -1,23 +1,24 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from django.core.urlresolvers import reverse %> <%namespace name='static' file='../static_content.html'/> <%inherit file="../main.html" /> -<%block name="title"><title>edX in the Press</title></%block> +<%block name="title"><title>${_("edX in the Press")}</title></%block> <section class="container about"> <nav> - <a href="${reverse('about_edx')}">Vision</a> - <a href="${reverse('faq_edx')}">Faq</a> - <a href="${reverse('press')}" class="active">Press</a> - <a href="${reverse('contact')}">Contact</a> + <a href="${reverse('about_edx')}">${_("Vision")}</a> + <a href="${reverse('faq_edx')}">${_("Faq")}</a> + <a href="${reverse('press')}" class="active">${_("Press")}</a> + <a href="${reverse('contact')}">${_("Contact")}</a> </nav> <section class="press"> % for article in articles: <article class="press-story"> <div class="article-cover"> - <a href="${article.url}" target="_blank"/><img src="${static.url('images/press/' + article.image)}" /></a> + <a href="${article.url}" target="_blank"/>${"<img src='%s' />" % static.url('images/press/' + article.image)}</a> </div> <div class="press-info"> <header> diff --git a/lms/templates/static_templates/privacy.html b/lms/templates/static_templates/privacy.html index 053291737f8d5490d78407c5bf3d6412712f54fe..6c53a286b0a6d7c26e7e567c1da17af248a023e3 100644 --- a/lms/templates/static_templates/privacy.html +++ b/lms/templates/static_templates/privacy.html @@ -1,77 +1,78 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from django.core.urlresolvers import reverse %> <%inherit file="../main.html" /> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>Privacy Policy</title></%block> +<%block name="title"><title>${_("Privacy Policy")}</title></%block> <section class="static-container privacy-policy"> - <h1>Privacy Policy</h1> + <h1>${_("Privacy Policy")}</h1> <hr class="horizontal-divider"/> <div class="inner-wrapper"> - <p><strong>NOTICE: on September 26, 2012 edX adopted an amended Privacy Policy, providing as follows:</strong></p> + <p><strong>${_("NOTICE: on September 26, 2012 edX adopted an amended Privacy Policy, providing as follows:")}</strong></p> - <h2>Confidentiality & Security of Personal Information</h2> - <p>We care about the confidentiality and security of your personal information. We will use commercially reasonable efforts to keep your Personal Information secure. (“Personal Information” is defined below.) However, no method of transmitting or storing electronic data is ever completely secure, and we therefore cannot guarantee the security of information transmitted to or stored by the edX Website. (As used in this Privacy Policy, “we,” “us” and “our” refer to edX.)</p> - <p>This Privacy Policy only applies to information that we collect through the edX Website (the “Site,” which consists of all content and pages located within the edX.org web domain) and does not apply to information that we may collect from you in other ways (for example, this policy does not apply to information that you may provide to us over the phone, by fax or through conventional mail). In addition, please note that your education records are protected by the Family Educational Rights and Privacy Act (“FERPA”) to the extent FERPA applies. </p> + <h2>${_("Confidentiality & Security of Personal Information")}</h2> + <p>${_("We care about the confidentiality and security of your personal information. We will use commercially reasonable efforts to keep your Personal Information secure. (“Personal Information” is defined below.) However, no method of transmitting or storing electronic data is ever completely secure, and we therefore cannot guarantee the security of information transmitted to or stored by the edX Website. (As used in this Privacy Policy, “we,” “us” and “our” refer to edX.)")}</p> + <p>${_("This Privacy Policy only applies to information that we collect through the edX Website (the “Site,” which consists of all content and pages located within the edX.org web domain) and does not apply to information that we may collect from you in other ways (for example, this policy does not apply to information that you may provide to us over the phone, by fax or through conventional mail). In addition, please note that your education records are protected by the Family Educational Rights and Privacy Act (“FERPA”) to the extent FERPA applies. ")}</p> - <h2>Usernames and Postings</h2> - <p>Comments or other information posted by you to our forums, wikis or other areas of the Site designed for public communications or communications among registered class members may be viewed and downloaded by others who visit the Site. For this reason, we encourage you to use discretion when deciding whether to post any information that can be used to identify you to those forums (or other public or classwide areas).</p> + <h2>${_("Usernames and Postings")}</h2> + <p>${_("Comments or other information posted by you to our forums, wikis or other areas of the Site designed for public communications or communications among registered class members may be viewed and downloaded by others who visit the Site. For this reason, we encourage you to use discretion when deciding whether to post any information that can be used to identify you to those forums (or other public or classwide areas).")}</p> - <h2>What You Consent to by Using Our Site</h2> - <p>By accessing, browsing, or registering for the Site, you consent and agree that information about you collected through the Site may be used and disclosed in accordance with the Privacy Policy and our Terms of Service and as permitted or required by law, and that such information may be transferred to, processed in and stored in the United States and elsewhere. If you do not agree with these terms, then please do not access, browse, or register for the Site. If you choose not to provide us with certain information required to provide you with various services offered on our Site, you may not be able to establish a user account and we may not be able to provide you with those services.</p> - <p>As used in this Privacy Policy, “Personal Information” means any information about yourself that you may provide to us when using the Site, such as when you sign up for a user account or enter into a transaction through the Site, which may include (but is not limited to) your name, contact information, gender, date of birth, and occupation.</p> + <h2>${_("What You Consent to by Using Our Site")}</h2> + <p>${_("By accessing, browsing, or registering for the Site, you consent and agree that information about you collected through the Site may be used and disclosed in accordance with the Privacy Policy and our Terms of Service and as permitted or required by law, and that such information may be transferred to, processed in and stored in the United States and elsewhere. If you do not agree with these terms, then please do not access, browse, or register for the Site. If you choose not to provide us with certain information required to provide you with various services offered on our Site, you may not be able to establish a user account and we may not be able to provide you with those services.")}</p> + <p>${_("As used in this Privacy Policy, “Personal Information” means any information about yourself that you may provide to us when using the Site, such as when you sign up for a user account or enter into a transaction through the Site, which may include (but is not limited to) your name, contact information, gender, date of birth, and occupation.")}</p> - <h2>Information We Collect and How We Use It</h2> - <p>We collect information, including Personal Information, when you sign up for a user account, participate in online courses, send us email messages and/or participate in our public forums. We collect information about student performance and patterns of learning. We track information indicating, among other things, which pages of our Site were visited, the order in which they were visited, when they were visited and which hyperlinks and other user interface controls were used.</p> + <h2>${_("Information We Collect and How We Use It")}</h2> + <p>${_("We collect information, including Personal Information, when you sign up for a user account, participate in online courses, send us email messages and/or participate in our public forums. We collect information about student performance and patterns of learning. We track information indicating, among other things, which pages of our Site were visited, the order in which they were visited, when they were visited and which hyperlinks and other user interface controls were used.")}</p> - <p>We may log the IP address, operating system and browser software used by each user of the Site, and we may be able to determine from an IP address a user's Internet Service Provider and the geographic location of his or her point of connectivity. Various web analytics tools are used to collect this information. Some of the information is collected through cookies (small text files placed on your computer that store information about you, which can be accessed by the Site). You should be able to control how and whether cookies will be accepted by your web browser. Most browsers offer instructions on how to reset the browser to reject cookies in the “Help” section of the toolbar. If you reject our cookies, many functions and conveniences of this Site may not work properly. </p> + <p>${_("We may log the IP address, operating system and browser software used by each user of the Site, and we may be able to determine from an IP address a user's Internet Service Provider and the geographic location of his or her point of connectivity. Various web analytics tools are used to collect this information. Some of the information is collected through cookies (small text files placed on your computer that store information about you, which can be accessed by the Site). You should be able to control how and whether cookies will be accepted by your web browser. Most browsers offer instructions on how to reset the browser to reject cookies in the “Help” section of the toolbar. If you reject our cookies, many functions and conveniences of this Site may not work properly. ")}</p> - <p>Among other things, we and the educational institutions that provide courses through edX (the “Universities”) may use the information about you collected through the Site (including your Personal Information) in connection with the following:</p> + <p>${_("Among other things, we and the educational institutions that provide courses through edX (the “Universities”) may use the information about you collected through the Site (including your Personal Information) in connection with the following:")}</p> <ul> - <li>To enable the Universities to provide, administer and improve the courses.</li> - <li>To help us and the Universities improve edX offerings, both individually (e.g., by course staff when working with a student) and in aggregate, and to individualize the experience and to evaluate the access and use of the Site and the impact of edX on the worldwide educational community. </li> - <li>For purposes of scientific research, particularly, for example, in the areas of cognitive science and education. </li> - <li>For the purpose for which you specifically provided the information, for example, to respond to a specific inquiry or provide you with access to the specific course content and/or services you select.</li> - <li>To track both individual and aggregate attendance, progress and completion of an online course, and to analyze statistics on student performance and how students learn.</li> - <li>To monitor and detect violations of the Honor Code, the Terms of Service, as well as other misuses and potential misuses of the Site. </li> - <li>To publish information, but not Personal Information, gathered about edX access, use, impact and student performance.</li> - <li>To send you updates about online courses offered by edX or other events, to send you communications about products or services of edX, edX affiliates, or selected business partners that may be of interest to you, or to send you email messages about Site maintenance or updates.</li> - <li>To archive this information and/or use it for future communications with you.</li> - <li>To maintain and improve the functioning and security of the Site and our software, systems and network.</li> - <li>For purposes described elsewhere in this Privacy Policy (including, e.g., Sharing with Third Parties).</li> - <li>As otherwise described to you at the point of collection, pursuant to your consent, or as otherwise permitted by law.</li> + <li>${_("To enable the Universities to provide, administer and improve the courses.")}</li> + <li>${_("To help us and the Universities improve edX offerings, both individually (e.g., by course staff when working with a student) and in aggregate, and to individualize the experience and to evaluate the access and use of the Site and the impact of edX on the worldwide educational community. ")}</li> + <li>${_("For purposes of scientific research, particularly, for example, in the areas of cognitive science and education. ")}</li> + <li>${_("For the purpose for which you specifically provided the information, for example, to respond to a specific inquiry or provide you with access to the specific course content and/or services you select.")}</li> + <li>${_("To track both individual and aggregate attendance, progress and completion of an online course, and to analyze statistics on student performance and how students learn.")}</li> + <li>${_("To monitor and detect violations of the Honor Code, the Terms of Service, as well as other misuses and potential misuses of the Site. ")}</li> + <li>${_("To publish information, but not Personal Information, gathered about edX access, use, impact and student performance.")}</li> + <li>${_("To send you updates about online courses offered by edX or other events, to send you communications about products or services of edX, edX affiliates, or selected business partners that may be of interest to you, or to send you email messages about Site maintenance or updates.")}</li> + <li>${_("To archive this information and/or use it for future communications with you.")}</li> + <li>${_("To maintain and improve the functioning and security of the Site and our software, systems and network.")}</li> + <li>${_("For purposes described elsewhere in this Privacy Policy (including, e.g., Sharing with Third Parties).")}</li> + <li>${_("As otherwise described to you at the point of collection, pursuant to your consent, or as otherwise permitted by law.")}</li> </ul> - <h2>Sharing with Third Parties</h2> - <p>We will share information we collect with the Universities, and we and the Universities may share this information (including Personal Information) with third parties as follows:</p> + <h2>${_("Sharing with Third Parties")}</h2> + <p>${_("We will share information we collect with the Universities, and we and the Universities may share this information (including Personal Information) with third parties as follows:")}</p> <ul> - <li>With service providers or contractors that perform certain functions on our or the Universities' behalf, including processing information that you provide to us on the Site, processing purchases and other transactions through the Site, operating the Site or portions of it, providing or administering courses, or in connection with other aspects of edX or University services.</li> - <li>With other visitors to the Site, to the extent that you submit comments, course work or other information or content (collectively, “Postings”) to a portion of the Site designed for public communications; and with other members of an edX class of which you are a member, to the extent you submit Postings to a portion of the Site designed for viewing by those class members. We may provide your Postings to students who later enroll in the same classes as you, within the context of the forums, the courseware or otherwise. If we do re-post your Postings originally made to non-public portions of the Site, we will post them without your real name and e-mail (except with explicit permission), but we may use your username. </li> - <li>For purposes of scientific research, particularly, for example, in the areas of cognitive science and education. However, we will only share Personal Information about you for this purpose to the extent doing so complies with applicable law.</li> - <li>To provide opportunities for you to communicate with other users who may have similar interests or educational goals. For instance, we may recommend specific study partners or connect potential student mentees and mentors. In such cases, we may use all information collected about you to determine who might be interested in communicating with you, but we will only provide other users your username, and not disclose your real name or e-mail address to your contact. </li> - <li>To respond to subpoenas, court orders, or other legal process; in response to a request for cooperation from law enforcement or another government agency; to investigate, prevent or take action regarding illegal activities, suspected fraud, security or technical issues, or to enforce our Terms of Service, Honor Code or this Privacy Policy; as otherwise may be required by applicable law; or to protect our rights, property or safety or those of others.</li> - <li>With affiliates of edX or the Universities, or with successors in the event of a merger, acquisition or reorganization, for their use consistent with this Privacy Policy. </li> - <li>As otherwise described to you at the point of collection, pursuant to your consent, or otherwise as permitted by law (e.g., disclosures permitted under FERPA, to the extent FERPA applies to the information).</li> - <li>For integration with third party services. For example, videos and other content may be hosted on YouTube and other websites not controlled by edX.</li> + <li>${_("With service providers or contractors that perform certain functions on our or the Universities' behalf, including processing information that you provide to us on the Site, processing purchases and other transactions through the Site, operating the Site or portions of it, providing or administering courses, or in connection with other aspects of edX or University services.")}</li> + <li>${_("With other visitors to the Site, to the extent that you submit comments, course work or other information or content (collectively, “Postings”) to a portion of the Site designed for public communications; and with other members of an edX class of which you are a member, to the extent you submit Postings to a portion of the Site designed for viewing by those class members. We may provide your Postings to students who later enroll in the same classes as you, within the context of the forums, the courseware or otherwise. If we do re-post your Postings originally made to non-public portions of the Site, we will post them without your real name and e-mail (except with explicit permission), but we may use your username. ")}</li> + <li>${_("For purposes of scientific research, particularly, for example, in the areas of cognitive science and education. However, we will only share Personal Information about you for this purpose to the extent doing so complies with applicable law.")}</li> + <li>${_("To provide opportunities for you to communicate with other users who may have similar interests or educational goals. For instance, we may recommend specific study partners or connect potential student mentees and mentors. In such cases, we may use all information collected about you to determine who might be interested in communicating with you, but we will only provide other users your username, and not disclose your real name or e-mail address to your contact. ")}</li> + <li>${_("To respond to subpoenas, court orders, or other legal process; in response to a request for cooperation from law enforcement or another government agency; to investigate, prevent or take action regarding illegal activities, suspected fraud, security or technical issues, or to enforce our Terms of Service, Honor Code or this Privacy Policy; as otherwise may be required by applicable law; or to protect our rights, property or safety or those of others.")}</li> + <li>${_("With affiliates of edX or the Universities, or with successors in the event of a merger, acquisition or reorganization, for their use consistent with this Privacy Policy. ")}</li> + <li>${_("As otherwise described to you at the point of collection, pursuant to your consent, or otherwise as permitted by law (e.g., disclosures permitted under FERPA, to the extent FERPA applies to the information).")}</li> + <li>${_("For integration with third party services. For example, videos and other content may be hosted on YouTube and other websites not controlled by edX.")}</li> </ul> - <p>In addition, we may share aggregated information that does not personally identify you with the public and with third parties, including, e.g., researchers and business partners.</p> + <p>${_("In addition, we may share aggregated information that does not personally identify you with the public and with third parties, including, e.g., researchers and business partners.")}</p> - <h2>Links to Other Websites</h2> + <h2>${_("Links to Other Websites")}</h2> - <p>The Sites may contain links to websites published by other content providers. These other websites are not under our control, and you acknowledge and agree that we are not responsible for the collection and use of your information by such websites. We encourage you to review the privacy policies of each website you visit and use.</p> + <p>${_("The Sites may contain links to websites published by other content providers. These other websites are not under our control, and you acknowledge and agree that we are not responsible for the collection and use of your information by such websites. We encourage you to review the privacy policies of each website you visit and use.")}</p> - <h2>Personalization and Pedagogical Improvements</h2> - <p>Our goal is to provide current and future visitors with the best possible educational experience. To further this goal, we sometimes present different users with different versions of course materials and software. We do this to personalize the experience to the individual learner (assess the learner's level of ability and learning style, and present materials best suited to the learner), to evaluate the effectiveness of our course materials, to improve our understanding of the learning process and to otherwise improve the effectiveness of our offerings. We may publish or otherwise publicize results from this process, but, unless otherwise permitted under this Privacy Policy, those publications or public disclosures will not include Personal Information.</p> + <h2>${_("Personalization and Pedagogical Improvements")}</h2> + <p>${_("Our goal is to provide current and future visitors with the best possible educational experience. To further this goal, we sometimes present different users with different versions of course materials and software. We do this to personalize the experience to the individual learner (assess the learner's level of ability and learning style, and present materials best suited to the learner), to evaluate the effectiveness of our course materials, to improve our understanding of the learning process and to otherwise improve the effectiveness of our offerings. We may publish or otherwise publicize results from this process, but, unless otherwise permitted under this Privacy Policy, those publications or public disclosures will not include Personal Information.")}</p> - <h2>Changing Our Privacy Policy</h2> - <p>Please note that we review and may make changes to this Privacy Policy from time to time. Any changes to this Privacy Policy will be effective immediately upon posting on this page, with an updated effective date. By accessing the Site after any changes have been made, you signify your agreement on a prospective basis to the modified Privacy Policy and any changes contained therein. Be sure to return to this page periodically to ensure familiarity with the most current version of this Privacy Policy.</p> + <h2>${_("Changing Our Privacy Policy")}</h2> + <p>${_("Please note that we review and may make changes to this Privacy Policy from time to time. Any changes to this Privacy Policy will be effective immediately upon posting on this page, with an updated effective date. By accessing the Site after any changes have been made, you signify your agreement on a prospective basis to the modified Privacy Policy and any changes contained therein. Be sure to return to this page periodically to ensure familiarity with the most current version of this Privacy Policy.")}</p> - <h2>Privacy Concerns</h2> - <p>If you have privacy concerns, have disclosed data you would prefer to keep private, or would like to access the information we maintain about you, please contact us at <a href="mailto:privacy@edx.org">privacy@edx.org</a>.</p> + <h2>${_("Privacy Concerns")}</h2> + <p>${_('If you have privacy concerns, have disclosed data you would prefer to keep private, or would like to access the information we maintain about you, please contact us at <a href="mailto:privacy@edx.org">privacy@edx.org</a>.')}</p> - <p><strong>Effective Date:</strong> September 26, 2012</p> + <p>${_("<strong>Effective Date:</strong> September 26, 2012")}</p> </div> </section> diff --git a/lms/templates/static_templates/server-down.html b/lms/templates/static_templates/server-down.html index ac847db9ee2c2dda8ad440c75be8d914ff7550be..4c5c66e91ad0720423254bdb67001e0e12d7793d 100644 --- a/lms/templates/static_templates/server-down.html +++ b/lms/templates/static_templates/server-down.html @@ -1,6 +1,7 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="../main.html" /> <section class="outside-app"> - <h1>Currently the <em>${settings.PLATFORM_NAME}</em> servers are down</h1> - <p>Our staff is currently working to get the site back up as soon as possible. Please email us at <a href="mailto:${settings.TECH_SUPPORT_EMAIL}">${settings.TECH_SUPPORT_EMAIL}</a> to report any problems or downtime.</p> + <h1>${_("Currently the <em>%s</em> servers are down") % settings.PLATFORM_NAME}</h1> + <p>${_("Our staff is currently working to get the site back up as soon as possible. Please email us at <a href=\"mailto:%s\">$s</a> to report any problems or downtime.") % {settings.TECH_SUPPORT_EMAIL, settings.TECH_SUPPORT_EMAIL}}</p> </section> diff --git a/lms/templates/static_templates/server-error.html b/lms/templates/static_templates/server-error.html index 04fc11d11a1e1047ce6a5cde3a8975da640e0857..dcf1b7b1583f8f9d4f60d20784e133af4a1ffc24 100644 --- a/lms/templates/static_templates/server-error.html +++ b/lms/templates/static_templates/server-error.html @@ -1,6 +1,7 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="../main.html" /> <section class="outside-app"> - <h1>There has been a 500 error on the <em>${settings.PLATFORM_NAME}</em> servers</h1> - <p>Please wait a few seconds and then reload the page. If the problem persists, please email us at <a href="mailto:${settings.TECH_SUPPORT_EMAIL}">${settings.TECH_SUPPORT_EMAIL}</a>.</p> + <h1>${_("There has been a 500 error on the <em>%s</em> servers") % settings.PLATFORM_NAME}</h1> + <p>${_('Please wait a few seconds and then reload the page. If the problem persists, please email us at <a href="{email}">{email}</a>.').format(email=settings.TECH_SUPPORT_EMAIL)}</p> </section> diff --git a/lms/templates/static_templates/server-overloaded.html b/lms/templates/static_templates/server-overloaded.html index 2432f2b481afb4272e151945fb44cf4b4a770b65..8dc9906047befd2d0ce61774fb9cad44bfd41c20 100644 --- a/lms/templates/static_templates/server-overloaded.html +++ b/lms/templates/static_templates/server-overloaded.html @@ -1,6 +1,7 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="../main.html" /> <section class="outside-app"> - <h1>Currently the <em>${settings.PLATFORM_NAME}</em> servers are overloaded</h1> - <p>Our staff is currently working to get the site back up as soon as possible. Please email us at <a href="mailto:${settings.TECH_SUPPORT_EMAIL}">${settings.TECH_SUPPORT_EMAIL}</a> to report any problems or downtime.</p> + <h1>${_("Currently the <em>%s</em> servers are overloaded") % settings.PLATFORM_NAME}</h1> + <p>${_("Our staff is currently working to get the site back up as soon as possible. Please email us at <a href=\"mailto:\%s\">%s</a> to report any problems or downtime.") % {settings.TECH_SUPPORT_EMAIL, settings.TECH_SUPPORT_EMAIL}}</p> </section> diff --git a/lms/templates/static_templates/tos.html b/lms/templates/static_templates/tos.html index 02e5a8fbc4105e71adefd2716ca7ea6f384328d8..8d4b025b6531036cf2df09ffd5cb1afc9b2ad6a8 100644 --- a/lms/templates/static_templates/tos.html +++ b/lms/templates/static_templates/tos.html @@ -1,121 +1,122 @@ +<%! from django.utils.translation import ugettext as _ %> <%! from django.core.urlresolvers import reverse %> <%inherit file="../main.html" /> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>Terms of Service</title></%block> +<%block name="title"><title>${_("Terms of Service")}</title></%block> <section class="static-container tos"> - <h1>edX Terms of Service</h1> + <h1>${_("edX Terms of Service")}</h1> <hr class="horizontal-divider"/> <div class="inner-wrapper"> - <p><strong>NOTICE: on September 26, 2012 edX adopted amended Terms of Service, providing as follows:</strong></p> + <p><strong>${_("NOTICE: on September 26, 2012 edX adopted amended Terms of Service, providing as follows:")}</strong></p> - <p>Welcome to edX. Please read these Terms of Service ("TOS") and edX's <a href="${reverse('privacy_edx')}">Privacy Policy</a> and <a href="${reverse('honor')}">Honor Code</a> prior to registering for edX.org or using any portion of the edX website (the "Site," which consists of all content and pages located within the edX.org web domain), including accessing any course material, chat rooms, or other electronic services. These TOS, the Privacy Policy and the Honor Code are agreements (the "Agreements") between you and edX. By using the Site, you accept and agree to be legally bound by the Agreements, whether or not you are a registered user. If you do not understand or do not wish to be bound by the terms of the Agreements, you should not use the Site.</p> + <p>${_("Welcome to edX. Please read these Terms of Service (\"TOS\") and edX's <a href=\"%s\">Privacy Policy</a> and <a href=\"%s\">Honor Code</a> prior to registering for edX.org or using any portion of the edX website (the \"Site,\" which consists of all content and pages located within the edX.org web domain), including accessing any course material, chat rooms, or other electronic services. These TOS, the Privacy Policy and the Honor Code are agreements (the \"Agreements\") between you and edX. By using the Site, you accept and agree to be legally bound by the Agreements, whether or not you are a registered user. If you do not understand or do not wish to be bound by the terms of the Agreements, you should not use the Site.") % (reverse('privacy_edx'), reverse('honor'))}</p> - <p>EdX reserves the right to modify these TOS at any time without advance notice. Any changes to these TOS will be effective immediately upon posting on this page, with an updated effective date. By accessing the Site after any changes have been made, you signify your agreement on a prospective basis to the modified TOS and all of the changes. Be sure to return to this page periodically to ensure familiarity with the most current version of these TOS.</p> + <p>${_("EdX reserves the right to modify these TOS at any time without advance notice. Any changes to these TOS will be effective immediately upon posting on this page, with an updated effective date. By accessing the Site after any changes have been made, you signify your agreement on a prospective basis to the modified TOS and all of the changes. Be sure to return to this page periodically to ensure familiarity with the most current version of these TOS.")}</p> - <h2>Description of edX</h2> - <p>EdX offers online courses that include opportunities for professor-to-student and student-to-student interactivity, individual assessment of a student's work and for students who demonstrate their mastery of subjects, a certificate of mastery.</p> + <h2>${_("Description of edX")}</h2> + <p>${_("EdX offers online courses that include opportunities for professor-to-student and student-to-student interactivity, individual assessment of a student's work and for students who demonstrate their mastery of subjects, a certificate of mastery.")}</p> - <h2>Rules for Online Conduct</h2> - <p>You agree that you are responsible for your own use of the Site and for your User Postings. "User Postings" include all content submitted, posted, published or distributed on the Site by you or other users of the Site, including but not limited to all forum posts, wiki edits, notes, questions, comments, videos and file uploads. You agree that you will use the Site in compliance with these TOS, the Honor Code and all applicable local, state, national and international laws, rules and regulations, including copyright laws, any laws regarding the transmission of technical data exported from your country of residence, and all United States export control laws.</p> + <h2>${_("Rules for Online Conduct")}</h2> + <p>${_("You agree that you are responsible for your own use of the Site and for your User Postings. \"User Postings\" include all content submitted, posted, published or distributed on the Site by you or other users of the Site, including but not limited to all forum posts, wiki edits, notes, questions, comments, videos and file uploads. You agree that you will use the Site in compliance with these TOS, the Honor Code and all applicable local, state, national and international laws, rules and regulations, including copyright laws, any laws regarding the transmission of technical data exported from your country of residence, and all United States export control laws.")}</p> - <p>As a condition of your use of the edX services, you will not use the Site in any manner intended to damage, disable, overburden or impair any edX server or the network(s) connected to any edX server or to interfere with any other party's use and enjoyment of the Site. You may not attempt to gain unauthorized access to the Site, other accounts, computer systems or networks connected to any edX server through hacking, password mining or any other means. You may not obtain or attempt to obtain any materials or information stored on the Site, its servers or associated computers through any means not intentionally made available through the Site.</p> + <p>${_("As a condition of your use of the edX services, you will not use the Site in any manner intended to damage, disable, overburden or impair any edX server or the network(s) connected to any edX server or to interfere with any other party's use and enjoyment of the Site. You may not attempt to gain unauthorized access to the Site, other accounts, computer systems or networks connected to any edX server through hacking, password mining or any other means. You may not obtain or attempt to obtain any materials or information stored on the Site, its servers or associated computers through any means not intentionally made available through the Site.")}</p> - <h2>The following list of items is strictly prohibited on the Site:</h2> + <h2>${_("The following list of items is strictly prohibited on the Site:")}</h2> <ol> - <li>Content that defames, harasses or threatens others;</li> - <li>Content that discusses illegal activities with the intent to commit them;</li> - <li>Content that infringes another's intellectual property, including, but not limited to, copyrights or trademarks;</li> - <li>Profane, pornographic, obscene, indecent or unlawful content;</li> - <li>Advertising or any form of commercial solicitation;</li> - <li>Content related to partisan political activities;</li> - <li>Viruses, trojan horses, worms, time bombs, corrupted files, malware, spyware or any other similar software that may damage the operation of another's computer or property; and</li> - <li>Content that contains intentionally inaccurate information or that is posted with the intent of misleading others.</li> + <li>${_("Content that defames, harasses or threatens others;")}</li> + <li>${_("Content that discusses illegal activities with the intent to commit them;")}</li> + <li>${_("Content that infringes another's intellectual property, including, but not limited to, copyrights or trademarks;")}</li> + <li>${_("Profane, pornographic, obscene, indecent or unlawful content;")}</li> + <li>${_("Advertising or any form of commercial solicitation;")}</li> + <li>${_("Content related to partisan political activities;")}</li> + <li>${_("Viruses, trojan horses, worms, time bombs, corrupted files, malware, spyware or any other similar software that may damage the operation of another's computer or property; and")}</li> + <li>${_("Content that contains intentionally inaccurate information or that is posted with the intent of misleading others.")}</li> </ol> - <p>Furthermore, you agree not to scrape, or otherwise download in bulk, any Site content, including but not limited to a list or directory of users on the system, on-line textbooks, User Postings or user information. You agree not to misrepresent or attempt to misrepresent your identity while using the Sites (although you are welcome and encouraged to use an anonymous username in the forums and to act in a manner that keeps your identity concealed).</p> + <p>${_("Furthermore, you agree not to scrape, or otherwise download in bulk, any Site content, including but not limited to a list or directory of users on the system, on-line textbooks, User Postings or user information. You agree not to misrepresent or attempt to misrepresent your identity while using the Sites (although you are welcome and encouraged to use an anonymous username in the forums and to act in a manner that keeps your identity concealed).")}</p> - <h2>User Accounts and Authority</h2> - <p>In order to participate fully in Site activities, you must provide your name, an email address and a user password in order to create a user account ("User Account"). You agree that you will never divulge or share access or access information to your User Account with any third party for any reason. In setting up your User Account, you may be prompted to enter additional optional information (e.g., your address). You represent that all information provided by you is accurate and current. You agree to maintain and update your information to keep it accurate and current.</p> + <h2>${_("User Accounts and Authority")}</h2> + <p>${_("In order to participate fully in Site activities, you must provide your name, an email address and a user password in order to create a user account (\"User Account\"). You agree that you will never divulge or share access or access information to your User Account with any third party for any reason. In setting up your User Account, you may be prompted to enter additional optional information (e.g., your address). You represent that all information provided by you is accurate and current. You agree to maintain and update your information to keep it accurate and current.")}</p> - <p>We care about the confidentiality and security of your personal information. Please see our <a href="${reverse('privacy_edx')}">Privacy Policy</a> for more information about what information about you edX collects and how edX uses that information.</p> + <p>${_("We care about the confidentiality and security of your personal information. Please see our <a href=\"%s\">Privacy Policy</a> for more information about what information about you edX collects and how edX uses that information.") % reverse('privacy_edx')}</p> - <h2>Your Right to Use Content on the Site</h2> - <p>Unless indicated as being in the public domain, the content on the Site is protected by United States and foreign copyright laws. Unless otherwise expressly stated on the Site, the texts, exams, video, images and other instructional materials provided with the courses offered on this Site are for your personal use in connection with those courses only. MIT and Harvard aim to make much of the edX course content available under more open license terms that will help create a vibrant ecosystem of contributors and further edX's goal of making education accessible and affordable to the world.</p> + <h2>${_("Your Right to Use Content on the Site")}</h2> + <p>${_("Unless indicated as being in the public domain, the content on the Site is protected by United States and foreign copyright laws. Unless otherwise expressly stated on the Site, the texts, exams, video, images and other instructional materials provided with the courses offered on this Site are for your personal use in connection with those courses only. MIT and Harvard aim to make much of the edX course content available under more open license terms that will help create a vibrant ecosystem of contributors and further edX's goal of making education accessible and affordable to the world.")}</p> - <p>Certain reference documents, digital textbooks, articles and other information on the Site are used with the permission of third parties, and use of that information is subject to certain rules and conditions, which will be posted along with the information. By using this Site you agree to abide by all such rules and conditions.</p> + <p>${_("Certain reference documents, digital textbooks, articles and other information on the Site are used with the permission of third parties, and use of that information is subject to certain rules and conditions, which will be posted along with the information. By using this Site you agree to abide by all such rules and conditions.")}</p> - <p>You agree to retain all copyright and other notices on any content you obtain from the Site. All rights in the Site and its content, if not expressly granted, are reserved.</p> + <p>${_("You agree to retain all copyright and other notices on any content you obtain from the Site. All rights in the Site and its content, if not expressly granted, are reserved.")}</p> - <h2>User Postings</h2> + <h2>${_("User Postings")}</h2> - <p><strong>User Postings Representations and Warranties.</strong> By submitting or distributing your User Postings, you affirm, represent and warrant (1) that you have the necessary rights, licenses, consents and/or permissions to reproduce and publish the User Postings and to authorize edX and its users to reproduce, modify, publish and otherwise use and distribute your User Postings in a manner consistent with the licenses granted by you below, and (2) that neither your submission of your User Postings nor the exercise of the licenses granted below will infringe or violate the rights of any third party. You, and not edX, are solely responsible for your User Postings and the consequences of posting or publishing them.</p> + <p>${_("<strong>User Postings Representations and Warranties.</strong> By submitting or distributing your User Postings, you affirm, represent and warrant (1) that you have the necessary rights, licenses, consents and/or permissions to reproduce and publish the User Postings and to authorize edX and its users to reproduce, modify, publish and otherwise use and distribute your User Postings in a manner consistent with the licenses granted by you below, and (2) that neither your submission of your User Postings nor the exercise of the licenses granted below will infringe or violate the rights of any third party. You, and not edX, are solely responsible for your User Postings and the consequences of posting or publishing them.")}</p> - <p><strong>License Grant to edX.</strong> By submitting or distributing User Postings to the Site, you hereby grant to edX a worldwide, non-exclusive, transferable, assignable, sublicensable, fully paid-up, royalty-free, perpetual, irrevocable right and license to host, transfer, display, perform, reproduce, modify, distribute, re-distribute, relicense and otherwise use, make available and exploit your User Postings, in whole or in part, in any form and in any media formats and through any media channels (now known or hereafter developed).</p> + <p>${_("<strong>License Grant to edX.</strong> By submitting or distributing User Postings to the Site, you hereby grant to edX a worldwide, non-exclusive, transferable, assignable, sublicensable, fully paid-up, royalty-free, perpetual, irrevocable right and license to host, transfer, display, perform, reproduce, modify, distribute, re-distribute, relicense and otherwise use, make available and exploit your User Postings, in whole or in part, in any form and in any media formats and through any media channels (now known or hereafter developed).")}</p> - <p><strong>License Grant to edX Users.</strong> By submitting or distributing User Postings to the Site, you hereby grant to each user of the Site a non-exclusive license to access and use your User Postings in connection with their use of the Site for their own personal purposes.</p> + <p>${_("<strong>License Grant to edX Users.</strong> By submitting or distributing User Postings to the Site, you hereby grant to each user of the Site a non-exclusive license to access and use your User Postings in connection with their use of the Site for their own personal purposes.")}</p> - <h2>Certificates, etc.</h2> + <h2>${_("Certificates, etc.")}</h2> - <p>EdX and/or the colleges and universities providing courses on the Site may offer a certificate of mastery or other acknowledgment (a "Certificate") for students who, in their judgment, have satisfactorily demonstrated mastery of the course material. Certificates will be issued by edX under the name of the underlying "X University" from where the course originated, i.e. HarvardX, MITx. etc. The decision whether a Certificate will be awarded to a given student will be solely within the discretion of the awarding entity, as will the name and form of any such Certificate. EdX and/or the institutions providing courses on the Site may choose not to offer a Certificate for some courses.</p> + <p>${_("EdX and/or the colleges and universities providing courses on the Site may offer a certificate of mastery or other acknowledgment (a \"Certificate\") for students who, in their judgment, have satisfactorily demonstrated mastery of the course material. Certificates will be issued by edX under the name of the underlying \"X University\" from where the course originated, i.e. HarvardX, MITx. etc. The decision whether a Certificate will be awarded to a given student will be solely within the discretion of the awarding entity, as will the name and form of any such Certificate. EdX and/or the institutions providing courses on the Site may choose not to offer a Certificate for some courses.")}</p> - <p>When you take a course through edX, you will not be an applicant for admission to, or enrolled in, any degree program of the institution as a result of registering for or completing a course through edX. You will not be entitled to use any of the resources of the institution beyond the online courses provided on the Site, nor will you be eligible to receive student privileges or benefits provided to students enrolled in degree programs of the institution.</p> + <p>${_("When you take a course through edX, you will not be an applicant for admission to, or enrolled in, any degree program of the institution as a result of registering for or completing a course through edX. You will not be entitled to use any of the resources of the institution beyond the online courses provided on the Site, nor will you be eligible to receive student privileges or benefits provided to students enrolled in degree programs of the institution.")}</p> - <h2>Trademarks</h2> + <h2>${_("Trademarks")}</h2> - <p><strong>Use of edX, MIT, Harvard University and X University Names, Trademarks and Service Marks.</strong> The "edX," "MIT," and "Harvard University" names, logos and seals are trademarks ("Trademarks") of the respective entities. Likewise, the names, logos, and seals of the other colleges and universities providing courses on the Site (the "X Universities") are Trademarks owned by the X Universities. You may not use any of these Trademarks, or any variations thereof, without the owner's prior written consent. You may not use any of these Trademarks, or any variations thereof, for promotional purposes, or in any way that deliberately or inadvertently claims, suggests or, in these institutions' sole judgment, gives the appearance or impression of a relationship with or endorsement by these institutions.</p> + <p>${_("<strong>Use of edX, MIT, Harvard University and X University Names, Trademarks and Service Marks.</strong> The \"edX\", \"MIT\", and \"Harvard University\" names, logos and seals are trademarks (\"Trademarks\") of the respective entities. Likewise, the names, logos, and seals of the other colleges and universities providing courses on the Site (the \"X Universities\") are Trademarks owned by the X Universities. You may not use any of these Trademarks, or any variations thereof, without the owner's prior written consent. You may not use any of these Trademarks, or any variations thereof, for promotional purposes, or in any way that deliberately or inadvertently claims, suggests or, in these institutions' sole judgment, gives the appearance or impression of a relationship with or endorsement by these institutions.")}</p> - <p>All Trademarks not owned by these institutions that appear on the Site or on or through the services made available on or through the Site, if any, are the property of their respective owners.</p> + <p>${_("All Trademarks not owned by these institutions that appear on the Site or on or through the services made available on or through the Site, if any, are the property of their respective owners.")}</p> - <p>Nothing contained on the Site should be construed as granting, by implication, estoppel or otherwise, any license or right to use any Trademark displayed on the Site without the written permission of the owner of the applicable Trademark.</p> + <p>${_("Nothing contained on the Site should be construed as granting, by implication, estoppel or otherwise, any license or right to use any Trademark displayed on the Site without the written permission of the owner of the applicable Trademark.")}</p> - <h2>Digital Millennium Copyright Act</h2> + <h2>${_("Digital Millennium Copyright Act")}</h2> - <p>Copyright owners who believe their material has been infringed on the Site should contact edX's designated copyright agent at <a href="mailto:dcma-agent@mit.edu">dcma-agent@mit.edu</a> or at 77 Massachusetts Avenue, Cambridge, MA 02138-4307 Attention: MIT DCMA Agent, W92-263A.</p> + <p>${_("Copyright owners who believe their material has been infringed on the Site should contact edX's designated copyright agent at <a href=\"mailto:dcma-agent@mit.edu\">dcma-agent@mit.edu</a> or at 77 Massachusetts Avenue, Cambridge, MA 02138-4307 Attention: MIT DCMA Agent, W92-263A.")}</p> - <p>Notification must include:</p> + <p>${_("Notification must include:")}</p> <ul> - <li>Identification of the copyrighted work, or, in the case of multiple works at the same location, a representative list of such works at that site.</li> - <li>Identification of the material that is claimed to be infringing or to be the subject of infringing activity. You must include sufficient information for us to locate the material (e.g., URL, IP address, computer name).</li> - <li>Information for us to be able to contact the complaining party (e.g., email address, phone number).</li> - <li>A statement that the complaining party believes that the use of the material has not been authorized by the copyright owner or an authorized agent.</li> - <li>A statement that the information in the notification is accurate and that the complaining party is authorized to act on behalf of the copyright owner.</li> + <li>${_("Identification of the copyrighted work, or, in the case of multiple works at the same location, a representative list of such works at that site.")}</li> + <li>${_("Identification of the material that is claimed to be infringing or to be the subject of infringing activity. You must include sufficient information for us to locate the material (e.g., URL, IP address, computer name).")}</li> + <li>${_("Information for us to be able to contact the complaining party (e.g., email address, phone number).")}</li> + <li>${_("A statement that the complaining party believes that the use of the material has not been authorized by the copyright owner or an authorized agent.")}</li> + <li>${_("A statement that the information in the notification is accurate and that the complaining party is authorized to act on behalf of the copyright owner.")}</li> </ul> - <h2>Disclaimers of Warranty / Limitations of Liabilities</h2> - <p><strong>THE SITE AND ANY INFORMATION, CONTENT OR SERVICES MADE AVAILABLE ON OR THROUGH THE SITE ARE PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTY OF ANY KIND (EXPRESS, IMPLIED OR OTHERWISE), INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT, EXCEPT INSOFAR AS ANY SUCH IMPLIED WARRANTIES MAY NOT BE DISCLAIMED UNDER APPLICABLE LAW.</strong></p> + <h2>${_("Disclaimers of Warranty / Limitations of Liabilities")}</h2> + <p>${_("<strong>THE SITE AND ANY INFORMATION, CONTENT OR SERVICES MADE AVAILABLE ON OR THROUGH THE SITE ARE PROVIDED \"AS IS\" AND \"AS AVAILABLE\" WITHOUT WARRANTY OF ANY KIND (EXPRESS, IMPLIED OR OTHERWISE), INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT, EXCEPT INSOFAR AS ANY SUCH IMPLIED WARRANTIES MAY NOT BE DISCLAIMED UNDER APPLICABLE LAW.</strong>")}</p> - <p><strong>EDX AND THE EDX PARTICIPANTS (AS HERINAFTER DEFINED) DO NOT WARRANT THAT THE SITE WILL OPERATE IN AN UNINTERRUPTED OR ERROR-FREE MANNER, THAT THE SITE IS FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS, OR THAT THE COURSES OR CONTENT PROVIDED WILL MEET YOUR NEEDS OR EXPECTATIONS. EDX AND THE EDX PARTICIPANTS ALSO MAKE NO WARRANTY ABOUT THE ACCURACY, COMPLETENESS, TIMELINESS, OR QUALITY OF THE SITE OR ANY COURSES OR CONTENT, OR THAT ANY PARTICULAR COURSES OR CONTENT WILL CONTINUE TO BE MADE AVAILABLE. “EDX PARTICIPANTS” MEANS MIT, HARVARD, X UNIVERSITIES, THE ENTITIES PROVIDING INFORMATION, CONTENT OR SERVICES FOR THE SITE, THE COURSE INSTRUCTORS AND THEIR STAFFS.</strong></p> + <p>${_("<strong>EDX AND THE EDX PARTICIPANTS (AS HERINAFTER DEFINED) DO NOT WARRANT THAT THE SITE WILL OPERATE IN AN UNINTERRUPTED OR ERROR-FREE MANNER, THAT THE SITE IS FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS, OR THAT THE COURSES OR CONTENT PROVIDED WILL MEET YOUR NEEDS OR EXPECTATIONS. EDX AND THE EDX PARTICIPANTS ALSO MAKE NO WARRANTY ABOUT THE ACCURACY, COMPLETENESS, TIMELINESS, OR QUALITY OF THE SITE OR ANY COURSES OR CONTENT, OR THAT ANY PARTICULAR COURSES OR CONTENT WILL CONTINUE TO BE MADE AVAILABLE. “EDX PARTICIPANTS” MEANS MIT, HARVARD, X UNIVERSITIES, THE ENTITIES PROVIDING INFORMATION, CONTENT OR SERVICES FOR THE SITE, THE COURSE INSTRUCTORS AND THEIR STAFFS.</strong>")}</p> - <p><strong>USE OF THE SITE, AND THE CONTENT AND SERVICES OBTAINED FROM OR THROUGH THE SITE, IS AT YOUR OWN RISK. YOUR ACCESS TO OR DOWNLOAD OF INFORMATION, MATERIALS OR DATA THROUGH THE SITE OR ANY REFERENCE SITES IS AT YOUR OWN DISCRETION AND RISK, AND YOU WILL BE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR PROPERTY (INCLUDING YOUR COMPUTER SYSTEM) OR LOSS OF DATA THAT RESULTS FROM THE DOWNLOAD OR USE OF SUCH MATERIAL OR DATA.</strong></p> + <p>${_("<strong>USE OF THE SITE, AND THE CONTENT AND SERVICES OBTAINED FROM OR THROUGH THE SITE, IS AT YOUR OWN RISK. YOUR ACCESS TO OR DOWNLOAD OF INFORMATION, MATERIALS OR DATA THROUGH THE SITE OR ANY REFERENCE SITES IS AT YOUR OWN DISCRETION AND RISK, AND YOU WILL BE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR PROPERTY (INCLUDING YOUR COMPUTER SYSTEM) OR LOSS OF DATA THAT RESULTS FROM THE DOWNLOAD OR USE OF SUCH MATERIAL OR DATA.</strong>")}</p> - <p><strong>User Postings Disclaimer.</strong> You understand that when using the Site you will be exposed to User Postings from a variety of sources and that neither edX nor the edX Participants are responsible for the accuracy, usefulness, reliability or intellectual property rights of or relating to such User Postings. You further understand and acknowledge that you may be exposed to User Postings that are inaccurate, offensive, defamatory, indecent or objectionable and you agree to waive, and hereby do waive, any legal or equitable rights or remedies you have or may have against edX or any of the edX Participants with respect thereto. Neither edX nor the edX Participants endorse any User Postings or any opinion, recommendation or advice expressed therein. Neither edX nor the edX Participants have any obligation to monitor any User Postings or any other user communications through the Site.</p> + <p>${_("<strong>User Postings Disclaimer.</strong> You understand that when using the Site you will be exposed to User Postings from a variety of sources and that neither edX nor the edX Participants are responsible for the accuracy, usefulness, reliability or intellectual property rights of or relating to such User Postings. You further understand and acknowledge that you may be exposed to User Postings that are inaccurate, offensive, defamatory, indecent or objectionable and you agree to waive, and hereby do waive, any legal or equitable rights or remedies you have or may have against edX or any of the edX Participants with respect thereto. Neither edX nor the edX Participants endorse any User Postings or any opinion, recommendation or advice expressed therein. Neither edX nor the edX Participants have any obligation to monitor any User Postings or any other user communications through the Site.")}</p> - <p>However, edX reserves the right to review User Postings and to exercise its sole discretion to edit or remove, in whole or in part, any User Posting at any time or for any reason, or to allow the edX Participants to do so. Without limiting the foregoing, upon receiving notice from a user or a content owner that a User Posting allegedly does not conform to these TOS, edX may investigate the allegation and determine in its sole discretion whether to remove the User Posting, which it reserves the right to do at any time and without notice.</p> + <p>${_("However, edX reserves the right to review User Postings and to exercise its sole discretion to edit or remove, in whole or in part, any User Posting at any time or for any reason, or to allow the edX Participants to do so. Without limiting the foregoing, upon receiving notice from a user or a content owner that a User Posting allegedly does not conform to these TOS, edX may investigate the allegation and determine in its sole discretion whether to remove the User Posting, which it reserves the right to do at any time and without notice.")}</p> - <p><strong>Links to Other Sites.</strong> The Site may include hyperlinks to sites maintained or controlled by others. EdX and the edX Participants are not responsible for and do not routinely screen, approve, review or endorse the contents of or use of any of the products or services that may be offered at these sites. If you decide to access linked third party web sites, you do so at your own risk.</p> + <p>${_("<strong>Links to Other Sites.</strong> The Site may include hyperlinks to sites maintained or controlled by others. EdX and the edX Participants are not responsible for and do not routinely screen, approve, review or endorse the contents of or use of any of the products or services that may be offered at these sites. If you decide to access linked third party web sites, you do so at your own risk.")}</p> - <p><strong>TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, YOU AGREE THAT NEITHER EDX NOR ANY OF THE EDX PARTICIPANTS WILL BE LIABLE TO YOU FOR ANY LOSS OR DAMAGES, EITHER ACTUAL OR CONSEQUENTIAL, ARISING OUT OF OR RELATING TO THESE TERMS OF SERVICE, OR YOUR (OR ANY THIRD PARTY'S) USE OF OR INABILITY TO USE THE SITE, OR YOUR PLACEMENT OF CONTENT ON THE SITE, OR YOUR RELIANCE UPON INFORMATION OBTAINED FROM OR THROUGH THE SITE, WHETHER YOUR CLAIM IS BASED IN CONTRACT, TORT, STATUTORY OR OTHER LAW.</strong></p> + <p>${_("<strong>TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, YOU AGREE THAT NEITHER EDX NOR ANY OF THE EDX PARTICIPANTS WILL BE LIABLE TO YOU FOR ANY LOSS OR DAMAGES, EITHER ACTUAL OR CONSEQUENTIAL, ARISING OUT OF OR RELATING TO THESE TERMS OF SERVICE, OR YOUR (OR ANY THIRD PARTY'S) USE OF OR INABILITY TO USE THE SITE, OR YOUR PLACEMENT OF CONTENT ON THE SITE, OR YOUR RELIANCE UPON INFORMATION OBTAINED FROM OR THROUGH THE SITE, WHETHER YOUR CLAIM IS BASED IN CONTRACT, TORT, STATUTORY OR OTHER LAW.</strong>")}</p> - <p><strong>IN PARTICULAR, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER EDX NOR ANY OF THE EDX PARTICIPANTS WILL HAVE ANY LIABILITY FOR ANY CONSEQUENTIAL, INDIRECT, PUNITIVE, SPECIAL, EXEMPLARY OR INCIDENTAL DAMAGES, WHETHER FORESEEABLE OR UNFORESEEABLE AND WHETHER OR NOT EDX OR ANY OF THE EDX PARTICIPANTS HAS BEEN NEGLIGENT OR OTHERWISE AT FAULT (INCLUDING, BUT NOT LIMITED TO, CLAIMS FOR DEFAMATION, ERRORS, LOSS OF PROFITS, LOSS OF DATA OR INTERRUPTION IN AVAILABILITY OF DATA).</strong></p> + <p>${_("<strong>IN PARTICULAR, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER EDX NOR ANY OF THE EDX PARTICIPANTS WILL HAVE ANY LIABILITY FOR ANY CONSEQUENTIAL, INDIRECT, PUNITIVE, SPECIAL, EXEMPLARY OR INCIDENTAL DAMAGES, WHETHER FORESEEABLE OR UNFORESEEABLE AND WHETHER OR NOT EDX OR ANY OF THE EDX PARTICIPANTS HAS BEEN NEGLIGENT OR OTHERWISE AT FAULT (INCLUDING, BUT NOT LIMITED TO, CLAIMS FOR DEFAMATION, ERRORS, LOSS OF PROFITS, LOSS OF DATA OR INTERRUPTION IN AVAILABILITY OF DATA).</strong>")}</p> - <h2>Indemnification</h2> + <h2>${_("Indemnification")}</h2> - <p>You agree to defend, hold harmless and indemnify edX and the edX Participants, and their respective subsidiaries, affiliates, officers, faculty, students, fellows, governing board members, agents and employees from and against any third-party claims, actions or demands arising out of, resulting from or in any way related to your use of the Site, including any liability or expense arising from any and all claims, losses, damages (actual and consequential), suits, judgments, litigation costs and attorneys' fees, of every kind and nature. In such a case, edX or one of the edX Participants will provide you with written notice of such claim, suit or action.</p> + <p>${_("You agree to defend, hold harmless and indemnify edX and the edX Participants, and their respective subsidiaries, affiliates, officers, faculty, students, fellows, governing board members, agents and employees from and against any third-party claims, actions or demands arising out of, resulting from or in any way related to your use of the Site, including any liability or expense arising from any and all claims, losses, damages (actual and consequential), suits, judgments, litigation costs and attorneys' fees, of every kind and nature. In such a case, edX or one of the edX Participants will provide you with written notice of such claim, suit or action.")}</p> - <h2>Miscellaneous</h2> + <h2>${_("Miscellaneous")}</h2> - <p><strong>Termination Rights; Discontinuation of Courses and Content.</strong> You agree that edX, in its sole discretion, may terminate your use of the Site or your participation in it, for any reason or no reason, upon notice to you. It is edX's policy to terminate in appropriate circumstances users of the Site who are repeat copyright infringers. EdX and the edX Participants reserve the right at any time in their sole discretion to cancel, delay, reschedule or alter the format of any course offered through edX, or to cease providing any part or all of the Site content or related services, and you agree that neither edX nor any of the edX Participants will have any liability to you for such an action. If you no longer desire to participate in the Site, you may terminate your participation at any time. The rights granted to you hereunder will terminate upon any termination of your right to use the Site, but the other provisions of these TOS will survive any such termination. </p> + <p>${_("<strong>Termination Rights; Discontinuation of Courses and Content.</strong> You agree that edX, in its sole discretion, may terminate your use of the Site or your participation in it, for any reason or no reason, upon notice to you. It is edX's policy to terminate in appropriate circumstances users of the Site who are repeat copyright infringers. EdX and the edX Participants reserve the right at any time in their sole discretion to cancel, delay, reschedule or alter the format of any course offered through edX, or to cease providing any part or all of the Site content or related services, and you agree that neither edX nor any of the edX Participants will have any liability to you for such an action. If you no longer desire to participate in the Site, you may terminate your participation at any time. The rights granted to you hereunder will terminate upon any termination of your right to use the Site, but the other provisions of these TOS will survive any such termination. ")}</p> - <p><strong>Entire Agreement.</strong> These TOS, the Honor Code, and the Privacy Policy together constitute the entire agreement between you and edX with respect to your use of the Site, superseding any prior agreements between you and edX regarding your use of the Site.</p> + <p>${_("<strong>Entire Agreement.</strong> These TOS, the Honor Code, and the Privacy Policy together constitute the entire agreement between you and edX with respect to your use of the Site, superseding any prior agreements between you and edX regarding your use of the Site.")}</p> - <p><strong>Waiver and Severability of TOS.</strong> The failure of edX to exercise or enforce any right or provision of these TOS shall not constitute a waiver of such right or provision. If any provision of these TOS is found by a court of competent jurisdiction to be invalid, the parties nevertheless agree that the court should endeavor to give effect to the parties' intentions as reflected in the provision and the other provisions of these TOS shall remain in full force and effect.</p> + <p>${_("<strong>Waiver and Severability of TOS.</strong> The failure of edX to exercise or enforce any right or provision of these TOS shall not constitute a waiver of such right or provision. If any provision of these TOS is found by a court of competent jurisdiction to be invalid, the parties nevertheless agree that the court should endeavor to give effect to the parties' intentions as reflected in the provision and the other provisions of these TOS shall remain in full force and effect.")}</p> - <p><strong>Choice of Law/Forum Selection.</strong> You agree that these TOS and any claim or dispute arising out of or relating to these TOS or any content or service obtained from or through the Site will be governed by the laws of the Commonwealth of Massachusetts, excluding its conflicts of law provisions. You agree that all such claims and disputes will be heard and resolved exclusively in the federal or state courts located in and serving Cambridge, Massachusetts, U.S.A. You consent to the personal jurisdiction of those courts over you for this purpose, and you waive and agree not to assert any objection to such proceedings in those courts (including any defense or objection of lack of proper jurisdiction or venue or inconvenience of forum).</p> + <p>${_("<strong>Choice of Law/Forum Selection.</strong> You agree that these TOS and any claim or dispute arising out of or relating to these TOS or any content or service obtained from or through the Site will be governed by the laws of the Commonwealth of Massachusetts, excluding its conflicts of law provisions. You agree that all such claims and disputes will be heard and resolved exclusively in the federal or state courts located in and serving Cambridge, Massachusetts, U.S.A. You consent to the personal jurisdiction of those courts over you for this purpose, and you waive and agree not to assert any objection to such proceedings in those courts (including any defense or objection of lack of proper jurisdiction or venue or inconvenience of forum).")}</p> - <p><strong>Effective Date:</strong> September 26, 2012</p> + <p>${_("<strong>Effective Date:</strong> September 26, 2012")}</p> </div> </section> diff --git a/lms/templates/staticbook.html b/lms/templates/staticbook.html index f99bfb6d92a5774d353a476081576d9e6bf7c69a..980448b482ada61cfe688f1eec4d837cdbbdad79 100644 --- a/lms/templates/staticbook.html +++ b/lms/templates/staticbook.html @@ -1,6 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> + <%inherit file="main.html" /> <%namespace name='static' file='static_content.html'/> -<%block name="title"><title>${course.number} Textbook</title></%block> +<%block name="title"><title>${_("{course_number} Textbook").format(course_number=course.number)}</title></%block> <%block name="headextra"> <%static:css group='course'/> @@ -66,7 +68,7 @@ $("#open_close_accordion a").click(function(){ <section class="container"> <div class="book-wrapper"> - <section aria-label="Textbook Navigation" class="book-sidebar"> + <section aria-label="${_('Textbook Navigation')}" class="book-sidebar"> <header id="open_close_accordion"> <a href="#">close</a> </header> @@ -97,10 +99,10 @@ $("#open_close_accordion a").click(function(){ % for entry in table_of_contents: ${print_entry(entry)} % endfor - + ## Don't delete this empty list item. Without it, Jquery.TreeView won't ## render the last list item as expandable. - <li></li> + <li></li> </ul> </section> @@ -109,10 +111,10 @@ $("#open_close_accordion a").click(function(){ <nav> <ul> <li class="last"> - <a href="javascript:prev_page()">Previous page</a> + <a href="javascript:prev_page()">${_('Previous page')}</a> </li> <li class="next"> - <a href="javascript:next_page()">Next page</a> + <a href="javascript:next_page()">${_('Next page')}</a> </li> </ul> </nav> diff --git a/lms/templates/stripped-main.html b/lms/templates/stripped-main.html index 1c1a28fec15902b610f414b44ca0118562b2c39e..c6c193e2694b9f7223417332ee1de8ac8a38c80b 100644 --- a/lms/templates/stripped-main.html +++ b/lms/templates/stripped-main.html @@ -1,7 +1,10 @@ +<%! from django.utils.translation import ugettext as _ %> + <%namespace name='static' file='static_content.html'/> <!DOCTYPE html> <html> <head> + ## "edX" should not be translated <%block name="title"><title>edX</title></%block> <link rel="icon" type="image/x-icon" href="${static.url('images/favicon.ico')}" /> diff --git a/lms/templates/test_center_register.html b/lms/templates/test_center_register.html index c9ea907263cbf94de478f36808038a15aaac84cd..bf6c539201b3e1e12af9ce606631e130630cf34b 100644 --- a/lms/templates/test_center_register.html +++ b/lms/templates/test_center_register.html @@ -1,3 +1,5 @@ +<%! from django.utils.translation import ugettext as _ %> + <%! from django.core.urlresolvers import reverse from courseware.courses import course_image_url, get_course_about_section @@ -8,7 +10,7 @@ <%namespace name='static' file='static_content.html'/> -<%block name="title"><title>Pearson VUE Test Center Proctoring - Registration</title></%block> +<%block name="title"><title>${_('Pearson VUE Test Center Proctoring - Registration')}</title></%block> <%block name="js_extra"> <script type="text/javascript"> @@ -96,9 +98,9 @@ <h2><a href="${reverse('dashboard')}">${get_course_about_section(course, 'university')} ${course.number} ${course.display_name_with_default}</a></h2> % if registration: - <h1>Your Pearson VUE Proctored Exam Registration</h1> + <h1>${_('Your Pearson VUE Proctored Exam Registration')}</h1> % else: - <h1>Register for a Pearson VUE Proctored Exam</h1> + <h1>${_('Register for a Pearson VUE Proctored Exam')}</h1> % endif </hgroup> </header> @@ -112,30 +114,31 @@ <!-- select one of four registration status banners to display --> % if registration.is_accepted: <section class="status message message-flash registration-processed message-action is-shown"> - <h3 class="message-title">Your registration for the Pearson exam has been processed</h3> - <p class="message-copy">Your registration number is <strong>${registration.client_candidate_id}</strong>. (Write this down! You’ll need it to schedule your exam.)</p> - <a href="${registration.registration_signup_url}" class="button exam-button">Schedule Pearson exam</a> + <h3 class="message-title">${_('Your registration for the Pearson exam has been processed')}</h3> + <p class="message-copy">${_("Your registration number is <strong>{reg_number}</strong>. " + "(Write this down! You\'ll need it to schedule your exam.)").format(reg_number=registration.client_candidate_id)}</p> + <a href="${registration.registration_signup_url}" class="button exam-button">${_('Schedule Pearson exam')}</a> </section> % endif % if registration.demographics_is_rejected: <section class="status message message-flash demographics-rejected message-action is-shown"> - <h3 class="message-title">Your demographic information contained an error and was rejected</h3> - <p class="message-copy">Please check the information you provided, and correct the errors noted below. + <h3 class="message-title">${_('Your demographic information contained an error and was rejected')}</h3> + <p class="message-copy">${_('Please check the information you provided, and correct the errors noted below.')} </section> % endif % if registration.registration_is_rejected: <section class="status message message-flash registration-rejected message-action is-shown"> - <h3 class="message-title">Your registration for the Pearson exam has been rejected</h3> - <p class="message-copy">Please see your <strong>registration status</strong> details for more information.</p> + <h3 class="message-title">${_('Your registration for the Pearson exam has been rejected')}</h3> + <p class="message-copy">${_('Please see your <strong>registration status</strong> details for more information.')}</p> </section> % endif % if registration.is_pending: <section class="status message message-flash registration-pending is-shown"> - <h3 class="message-title">Your registration for the Pearson exam is pending</h3> - <p class="message-copy">Once your information is processed, it will be forwarded to Pearson and you will be able to schedule an exam.</p> + <h3 class="message-title">${_('Your registration for the Pearson exam is pending')}</h3> + <p class="message-copy">${_('Once your information is processed, it will be forwarded to Pearson and you will be able to schedule an exam.')}</p> </section> % endif @@ -143,7 +146,7 @@ <section class="content"> <header> - <h3 class="is-hidden">Registration Form</h3> + <h3 class="is-hidden">${_('Registration Form')}</h3> </header> % if exam_info.is_registering(): <form id="testcenter_register_form" method="post" data-remote="true" action="/create_exam_registration"> @@ -151,18 +154,18 @@ <form id="testcenter_register_form" method="post" data-remote="true" action="/create_exam_registration" class="disabled"> <!-- registration closed, so tell them they can't do anything: --> <div class="status message registration-closed is-shown"> - <h3 class="message-title">Registration for this Pearson exam is closed</h3> - <p class="message-copy">Your previous information is available below, however you may not edit any of the information. + <h3 class="message-title">${_('Registration for this Pearson exam is closed')}</h3> + <p class="message-copy">${_('Your previous information is available below, however you may not edit any of the information.')} </div> % endif % if registration: <p class="instructions"> - Please use the following form if you need to update your demographic information used in your Pearson VUE Proctored Exam. Required fields are noted by <strong class="indicator">bold text and an asterisk (*)</strong>. + ${_('Please use the following form if you need to update your demographic information used in your Pearson VUE Proctored Exam. Required fields are noted by <strong class="indicator">bold text and an asterisk (*)')}</strong>. </p> % else: <p class="instructions"> - Please provide the following demographic information to register for a Pearson VUE Proctored Exam. Required fields are noted by <strong class="indicator">bold text and an asterisk (*)</strong>. + ${_('Please provide the following demographic information to register for a Pearson VUE Proctored Exam. Required fields are noted by <strong class="indicator">bold text and an asterisk (*)')}</strong>. </p> % endif @@ -174,102 +177,102 @@ <div class="form-fields-primary"> <fieldset class="group group-form group-form-personalinformation"> - <legend class="is-hidden">Personal Information</legend> + <legend class="is-hidden">${_('Personal Information')}</legend> <ol class="list-input"> <li class="field" id="field-salutation"> - <label for="salutation">Salutation</label> - <input class="short" id="salutation" type="text" name="salutation" value="${testcenteruser.salutation}" placeholder="e.g. Mr., Ms., Mrs., Dr." /> + <label for="salutation">${_('Salutation')}</label> + <input class="short" id="salutation" type="text" name="salutation" value="${testcenteruser.salutation}" placeholder="${_('e.g. Mr., Ms., Mrs., Dr.')}" /> </li> <li class="field required" id="field-first_name"> - <label for="first_name">First Name </label> - <input id="first_name" type="text" name="first_name" value="${testcenteruser.first_name}" placeholder="e.g. Albert" /> + <label for="first_name">${_('First Name')} </label> + <input id="first_name" type="text" name="first_name" value="${testcenteruser.first_name}" placeholder="${_('e.g. Albert')}" /> </li> <li class="field" id="field-middle_name"> - <label for="middle_name">Middle Name</label> + <label for="middle_name">${_("Middle Name")}</label> <input id="middle_name" type="text" name="middle_name" value="${testcenteruser.middle_name}" placeholder="" /> </li> <li class="field required" id="field-last_name"> - <label for="last_name">Last Name</label> - <input id="last_name" type="text" name="last_name" value="${testcenteruser.last_name}" placeholder="e.g. Einstein" /> + <label for="last_name">${_('Last Name')}</label> + <input id="last_name" type="text" name="last_name" value="${testcenteruser.last_name}" placeholder="${_('e.g. Einstein')}" /> </li> <li class="field" id="field-suffix"> - <label for="suffix">Suffix</label> - <input class="short" id="suffix" type="text" name="suffix" value="${testcenteruser.suffix}" placeholder="e.g. Jr., Sr. " /> + <label for="suffix">${_('Suffix')}</label> + <input class="short" id="suffix" type="text" name="suffix" value="${testcenteruser.suffix}" placeholder="${_('e.g. Jr., Sr. ')}" /> </li> </ol> </fieldset> <fieldset class="group group-form group-form-mailingaddress"> - <legend class="is-hidden">Mailing Address</legend> + <legend class="is-hidden">${_('Mailing Address')}</legend> <ol class="list-input"> <li class="field required" id="field-address_1"> - <label class="long" for="address_1">Address Line #1</label> - <input id="address_1" type="text" name="address_1" value="${testcenteruser.address_1}" placeholder="e.g. 112 Mercer Street" /> + <label class="long" for="address_1">${_('Address Line #1')}</label> + <input id="address_1" type="text" name="address_1" value="${testcenteruser.address_1}" placeholder="${_('e.g. 112 Mercer Street')}" /> </li> <li class="field-group addresses"> <div class="field" id="field-address_2"> - <label for="address_2">Address Line #2</label> - <input id="address_2" class="long" type="text" name="address_2" value="${testcenteruser.address_2}" placeholder="e.g. Apartment 123" /> + <label for="address_2">${_('Address Line #2')}</label> + <input id="address_2" class="long" type="text" name="address_2" value="${testcenteruser.address_2}" placeholder="${_('e.g. Apartment 123')}" /> </div> <div class="field" id="field-address_3"> - <label for="address_3">Address Line #3</label> - <input id="address_3" class="long" type="text" name="address_3" value="${testcenteruser.address_3}" placeholder="e.g. Attention: Albert Einstein" /> + <label for="address_3">${_('Address Line #3')}</label> + <input id="address_3" class="long" type="text" name="address_3" value="${testcenteruser.address_3}" placeholder="${_('e.g. Attention: Albert Einstein')}" /> </div> </li> <li class="field required postal-1" id="field-city"> - <label for="city">City</label> - <input id="city" class="long" type="text" name="city" value="${testcenteruser.city}" placeholder="e.g. Newark" /> + <label for="city">${_('City')}</label> + <input id="city" class="long" type="text" name="city" value="${testcenteruser.city}" placeholder="${_('e.g. Newark')}" /> </li> <li class="field-group postal-2"> <div class="field" id="field-state"> - <label for="state">State/Province</label> - <input id="state" class="short" type="text" name="state" value="${testcenteruser.state}" placeholder="e.g. NJ" /> + <label for="state">${_('State/Province')}</label> + <input id="state" class="short" type="text" name="state" value="${testcenteruser.state}" placeholder="${_('e.g. NJ')}" /> </div> <div class="field" id="field-postal_code"> - <label for="postal_code">Postal Code</label> - <input id="postal_code" class="short" type="text" name="postal_code" value="${testcenteruser.postal_code}" placeholder="e.g. 08540" /> + <label for="postal_code">${_('Postal Code')}</label> + <input id="postal_code" class="short" type="text" name="postal_code" value="${testcenteruser.postal_code}" placeholder="${_('e.g. 08540')}" /> </div> <div class="field required" id="field-country"> - <label class="short" for="country">Country Code</label> - <input id="country" class="short" type="text" name="country" value="${testcenteruser.country}" placeholder="e.g. USA" /> + <label class="short" for="country">${_('Country Code')}</label> + <input id="country" class="short" type="text" name="country" value="${testcenteruser.country}" placeholder="${_('e.g. USA')}" /> </div> </li> </ol> </fieldset> <fieldset class="group group-form group-form-contactinformation"> - <legend class="is-hidden">Contact & Other Information</legend> + <legend class="is-hidden">${_('Contact & Other Information')}</legend> <ol class="list-input"> <li class="field-group phoneinfo"> <div class="field required" id="field-phone"> - <label for="phone">Phone Number</label> + <label for="phone">${_('Phone Number')}</label> <input id="phone" type="tel" name="phone" value="${testcenteruser.phone}" /> </div> <div class="field" id="field-extension"> - <label for="extension">Extension</label> + <label for="extension">${_('Extension')}</label> <input id="extension" class="short" type="tel" name="extension" value="${testcenteruser.extension}" /> </div> <div class="field required" id="field-phone_country_code"> - <label for="phone_country_code">Phone Country Code</label> + <label for="phone_country_code">${_('Phone Country Code')}</label> <input id="phone_country_code" class="short" type="text" name="phone_country_code" value="${testcenteruser.phone_country_code}" /> </div> </li> <li class="field-group faxinfo"> <div class="field" id="field-fax"> - <label for="fax">Fax Number</label> + <label for="fax">${_('Fax Number')}</label> <input id="fax" type="tel" class="short" name="fax" value="${testcenteruser.fax}" /> </div> <div class="field" id="field-fax_country_code"> - <label for="fax_country_code">Fax Country Code</label> + <label for="fax_country_code">${_('Fax Country Code')}</label> <input id="fax_country_code" class="short" type="text" name="fax_country_code" value="${testcenteruser.fax_country_code}" /> </div> </li> <li class="field" id="field-company_name"> - <label for="company_name">Company</label> - <input id="company_name" type="text" name="company_name" value="${testcenteruser.company_name}" placeholder="e.g. American Association of University Professors" /> + <label for="company_name">${_('Company')}</label> + <input id="company_name" type="text" name="company_name" value="${testcenteruser.company_name}" placeholder="${_('e.g. American Association of University Professors')}" /> </li> </ol> </fieldset> @@ -285,26 +288,26 @@ % if registration: % if registration.accommodation_request and len(registration.accommodation_request) > 0: - <p class="note"><span class="title">Note</span>: Your previous accommodation request below needs to be reviewed in detail <strong>and will add a significant delay to your registration process</strong>.</p> + <p class="note">${_('<span class="title">Note</span>: Your previous accommodation request below needs to be reviewed in detail <strong>and will add a significant delay to your registration process</strong>.')}</p> % endif % else: - <p class="note"><span class="title">Note</span>: Accommodation requests are not part of your demographic information, <strong>and cannot be changed once submitted</strong>. Accommodation requests, which are reviewed on a case-by-case basis, <strong>will add significant delay to the registration process</strong>.</p> + <p class="note">${_('<span class="title">Note</span>: Accommodation requests are not part of your demographic information, <strong>and cannot be changed once submitted</strong>. Accommodation requests, which are reviewed on a case-by-case basis, <strong>will add significant delay to the registration process</strong>.')}</p> % endif <fieldset class="group group-form group-form-optional"> - <legend class="is-hidden">Optional Information</legend> + <legend class="is-hidden">${_('Optional Information')}</legend> <ol class="list-input"> % if registration: % if registration.accommodation_request and len(registration.accommodation_request) > 0: <li class="field submitted" id="field-accommodation_request"> - <label for="accommodation_request">Accommodations Requested</label> + <label for="accommodation_request">${_('Accommodations Requested')}</label> <p class="value" id="accommodations">${registration.accommodation_request}</p> </li> % endif % else: <li class="field" id="field-accommodation_request"> - <label for="accommodation_request">Accommodations Requested</label> + <label for="accommodation_request">${_('Accommodations Requested')}</label> <textarea class="long" id="accommodation_request" name="accommodation_request" value="" placeholder=""></textarea> </li> % endif @@ -314,11 +317,11 @@ <div class="form-actions"> % if registration: - <button type="submit" id="submit" class="action action-primary action-update">Update Demographics</button> - <a href="${reverse('dashboard')}" class="action action-secondary action-cancel">Cancel Update</a> + <button type="submit" id="submit" class="action action-primary action-update">${_('Update Demographics')}</button> + <a href="${reverse('dashboard')}" class="action action-secondary action-cancel">${_('Cancel Update')}</a> % else: - <button type="submit" id="submit" class="action action-primary action-register">Register for Pearson VUE Test</button> - <a href="${reverse('dashboard')}" class="action action-secondary action-cancel">Cancel Registration</a> + <button type="submit" id="submit" class="action action-primary action-register">${_('Register for Pearson VUE Test')}</button> + <a href="${reverse('dashboard')}" class="action action-secondary action-cancel">${_('Cancel Registration')}</a> % endif <div class="message message-status submission-error"> @@ -330,10 +333,10 @@ % if registration: % if registration.accommodation_request and len(registration.accommodation_request) > 0: - <a class="actions form-fields-secondary-visibility is-hidden" href="#form-fields-secondary">Special (<abbr title="Americans with Disabilities Act">ADA</abbr>) Accommodations</a> + <a class="actions form-fields-secondary-visibility is-hidden" href="#form-fields-secondary">${_('Special (<abbr title="Americans with Disabilities Act">ADA</abbr>) Accommodations')}</a> % endif % else: - <a class="actions form-fields-secondary-visibility" href="#form-fields-secondary">Special (<abbr title="Americans with Disabilities Act">ADA</abbr>) Accommodations</a> + <a class="actions form-fields-secondary-visibility" href="#form-fields-secondary">${_('Special (<abbr title="Americans with Disabilities Act">ADA</abbr>) Accommodations')}</a> % endif </section> @@ -349,47 +352,46 @@ % if registration.is_pending: <div class="message message-status registration-pending is-shown"> % endif - <h3>Pearson Exam Registration Status</h3> + <h3>${_('Pearson Exam Registration Status')}</h3> <ol class="status-list"> <!-- first provide status of demographics --> % if registration.demographics_is_pending: <li class="item status status-pending status-demographics"> - <h4 class="title">Demographic Information</h4> - <p class="details">The demographic information you most recently provided is pending. You may edit this information at any point before exam registration closes on <strong>${exam_info.registration_end_date_text}</strong></p> + <h4 class="title">${_('Demographic Information')}</h4> + <p class="details">${_('The demographic information you most recently provided is pending. You may edit this information at any point before exam registration closes on <strong>{end_date}</strong>').format(end_date=exam_info.registration_end_date_text)}</p> </li> % endif % if registration.demographics_is_accepted: <li class="item status status-processed status-demographics"> - <h4 class="title">Demographic Information</h4> - <p class="details">The demographic information you most recently provided has been processed. You may edit this information at any point before exam registration closes on <strong>${exam_info.registration_end_date_text}</strong></p> + <h4 class="title">${_('Demographic Information')}</h4> + <p class="details">${_('The demographic information you most recently provided has been processed. You may edit this information at any point before exam registration closes on <strong>{end_date}</strong>').format(end_date=exam_info.registration_end_date_text)}</p> </li> % endif % if registration.demographics_is_rejected: <li class="item status status-rejected status-demographics"> - <h4 class="title">Demographic Information</h4> - <p class="details">The demographic information you most recently provided has been rejected by Pearson. You can correct and submit it again before the exam registration closes on <strong>${exam_info.registration_end_date_text}</strong>. - The error message is:</p> + <h4 class="title">${_('Demographic Information')}</h4> + <p class="details">${_('The demographic information you most recently provided has been rejected by Pearson. You can correct and submit it again before the exam registration closes on <strong>{end_date}</strong>. The error message is:').format(end_date=exam_info.registration_end_date_text)}</p> <ul class="error-list"> <li class="item">${registration.testcenter_user.upload_error_message}.</li> </ul> - <p class="action">If the error is not correctable by revising your demographic information, please <a class="contact-link" href="${exam_help_href}">contact edX at exam-help@edx.org</a>.</p> + <p class="action">${_('If the error is not correctable by revising your demographic information, please {contact_link_start}contact edX at exam-help@edx.org{contact_link_end}.').format(contact_link_start='<a class="contact-link" href="{}"'.format(exam_help_href), contact_link_end='</a>')}</p> </li> % endif <!-- then provide status of accommodations, if any --> % if registration.accommodation_is_pending: <li class="item status status-pending status-accommodations"> - <h4 class="title">Accommodations Request</h4> - <p class="details">Your requested accommodations are pending. Within a few days, you should see confirmation here of granted accommodations.</p> + <h4 class="title">${_('Accommodations Request')}</h4> + <p class="details">${_('Your requested accommodations are pending. Within a few days, you should see confirmation here of granted accommodations.')}</p> </li> % endif % if registration.accommodation_is_accepted: <li class="item status status-processed status-accommodations"> - <h4 class="title">Accommodations Request</h4> - <p class="details">Your requested accommodations have been reviewed and processed. You are allowed:</p> + <h4 class="title">${_('Accommodations Request')}</h4> + <p class="details">${_('Your requested accommodations have been reviewed and processed. You are allowed:')}</p> <ul class="accommodations-list"> % for accommodation_name in registration.get_accommodation_names(): @@ -400,36 +402,36 @@ % endif % if registration.accommodation_is_rejected: <li class="item status status-processed status-accommodations"> - <h4 class="title">Accommodations Request</h4> - <p class="details">Your requested accommodations have been reviewed and processed. You are allowed no accommodations.</p> + <h4 class="title">${_('Accommodations Request')}</h4> + <p class="details">${_('Your requested accommodations have been reviewed and processed. You are allowed no accommodations.')}</p> - <p class="action">Please <a class="contact-link" href="${exam_help_href}">contact edX at exam-help@edx.org</a> if you have any questions.</p> + <p class="action">${_('Please {contact_link_start}contact edX at exam-help@edx.org{contact_link_end}.').format(contact_link_start='<a class="contact-link" href="{}"'.format(exam_help_href), contact_link_end='</a>')}</p> </li> % endif <!-- finally provide status of registration --> % if registration.registration_is_pending: <li class="item status status-pending status-registration"> - <h4 class="title">Registration Request</h4> - <p class="details">Your exam registration is pending. Once your information is processed, it will be forwarded to Pearson and you will be able to schedule an exam.</p> + <h4 class="title">${_('Registration Request')}</h4> + <p class="details">${_('Your exam registration is pending. Once your information is processed, it will be forwarded to Pearson and you will be able to schedule an exam.')}</p> </li> % endif % if registration.registration_is_accepted: <li class="item status status-processed status-registration"> - <h4 class="title">Registration Request</h4> - <p class="details">Your exam registration has been processed and has been forwarded to Pearson. <strong>You are now able to <a href="${registration.registration_signup_url}" class="exam-link">schedule a Pearson exam</a></strong>.</p> + <h4 class="title">${_('Registration Request')}</h4> + <p class="details">${_('Your exam registration has been processed and has been forwarded to Pearson. <strong>You are now able to {exam_link_start}schedule a Pearson exam{exam_link_end}</strong>.').format(exam_link_start='<a href="{}" class="exam-link">'.format(registration.registration_signup_url), exam_link_end='</a>')}</p> </li> % endif % if registration.registration_is_rejected: <li class="item status status-rejected status-registration"> - <h4 class="title">Registration Request</h4> - <p class="details">Your exam registration has been rejected by Pearson. <strong>You currently cannot schedule an exam</strong>. The errors found include:</p> + <h4 class="title">${_('Registration Request')}</h4> + <p class="details">${_('Your exam registration has been rejected by Pearson. <strong>You currently cannot schedule an exam</strong>. The errors found include:')}</p> <ul class="error-list"> <li class="item">${registration.upload_error_message}</li> </ul> - <p class="action">Please <a class="contact-link" href="${exam_help_href}">contact edX at exam-help@edx.org</a>.</p> + <p class="action">${_('Please {contact_link_start}contact edX at exam-help@edx.org{contact_link_end}.').format(contact_link_start='<a class="contact-link" href="{}"'.format(exam_help_href), contact_link_end='</a>')}</p> </li> % endif </ol> @@ -440,41 +442,41 @@ % endif <div class="details details-course"> - <h4>About ${get_course_about_section(course, 'university')} ${course.number}</h4> + <h4>${_("About {university} {course_number}").format(university=get_course_about_section(course, 'university'), course_number=course.number)}</h4> <p> % if course.has_ended(): - <span class="label">Course Completed:</span> <span class="value">${course.end_date_text}</span> + <span class="label">${_('Course Completed:')}</span> <span class="value">${course.end_date_text}</span> % elif course.has_started(): - <span class="label">Course Started:</span> <span class="value">${course.start_date_text}</span> + <span class="label">${_('Course Started:')}</span> <span class="value">${course.start_date_text}</span> % else: # hasn't started yet - <span class="label">Course Starts:</span> <span class="value">${course.start_date_text}</span> + <span class="label">${_('Course Starts:')}</span> <span class="value">${course.start_date_text}</span> % endif </p> </div> <div class="details details-registration"> - <h4>Pearson VUE Test Details</h4> + <h4>${_('Pearson VUE Test Details')}</h4> % if exam_info is not None: <ul> <li> - <span class="label">Exam Name:</span> <span class="value">${exam_info.display_name_with_default}</span> + <span class="label">${_('Exam Name:')}</span> <span class="value">${exam_info.display_name_with_default}</span> </li> <li> - <span class="label">First Eligible Appointment Date:</span> <span class="value">${exam_info.first_eligible_appointment_date_text}</span> + <span class="label">${_('First Eligible Appointment Date:')}</span> <span class="value">${exam_info.first_eligible_appointment_date_text}</span> </li> <li> - <span class="label">Last Eligible Appointment Date:</span> <span class="value">${exam_info.last_eligible_appointment_date_text}</span> + <span class="label">${_('Last Eligible Appointment Date:')}</span> <span class="value">${exam_info.last_eligible_appointment_date_text}</span> </li> <li> - <span class="label">Registration Ends:</span> <span class="value">${exam_info.registration_end_date_text}</span> + <span class="label">${_('Registration Ends:')}</span> <span class="value">${exam_info.registration_end_date_text}</span> </li> </ul> % endif </div> <div class="details details-contact"> - <h4>Questions</h4> - <p>If you have a specific question pertaining to your registration, you may <a class="contact-link" href="${exam_help_href}">contact edX at exam-help@edx.org</a>.</p> + <h4>${_('Questions')}</h4> + <p>${_('If you have a specific question pertaining to your registration, you may {contact_link_start}contact edX at exam-help@edx.org{contact_link_end}.').format(contact_link_start='<a class="contact-link" href="{}"'.format(exam_help_href), contact_link_end='</a>')</p> </div> </aside> </section> diff --git a/lms/templates/tracking_log.html b/lms/templates/tracking_log.html index 24b249a5834005a0945fe4eddad3d984be24fd33..148750ccbe0d08ac3bfb999306b9c6e739bc5ed2 100644 --- a/lms/templates/tracking_log.html +++ b/lms/templates/tracking_log.html @@ -1,6 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> + <html> -<h1>Tracking Log</h1> -<table border="1"><tr><th>datetime</th><th>username</th><th>ipaddr</th><th>source</th><th>type</th></tr> +<h1>${_('Tracking Log')}</h1> +<table border="1"><tr><th>${_('datetime')}</th><th>${_('username')}</th><th>${_('ipaddr')}</th><th>${_('source')}</th><th>${_('type')}</th></tr> % for rec in records: <tr> <td>${rec.dtstr}</td> diff --git a/lms/templates/university_profile/anux.html b/lms/templates/university_profile/anux.html index c19310c70fd75e7eb7d4f10fcfbbb36b3b4790d4..1d4c719d1fd2802b841910da7d0d03c88b937f67 100644 --- a/lms/templates/university_profile/anux.html +++ b/lms/templates/university_profile/anux.html @@ -1,7 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="base.html" /> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>ANUx</title></%block> +<%block name="title"><title>${_("ANUx")}</title></%block> <%block name="university_header"> <header class="search" style="background: url('/static/images/university/anu/anu-cover.jpg')"> @@ -10,7 +11,7 @@ <div class="logo"> <img src="${static.url('images/university/anu/anu.png')}" /> </div> - <h1>ANUx</h1> + <h1>${_("ANUx")}</h1> </hgroup> </div> </header> @@ -18,7 +19,7 @@ </%block> <%block name="university_description"> - <p>The Australian National University (ANU) is a celebrated place of intensive research, education and policy engagement. Our research has always been central to everything we do, shaping a holistic learning experience that goes beyond the classroom, giving students access to researchers who are among the best in their fields and to opportunities for development around Australia and the world.</p> + <p>${_("The Australian National University (ANU) is a celebrated place of intensive research, education and policy engagement. Our research has always been central to everything we do, shaping a holistic learning experience that goes beyond the classroom, giving students access to researchers who are among the best in their fields and to opportunities for development around Australia and the world.")}</p> </%block> ${parent.body()} diff --git a/lms/templates/university_profile/berkeleyx.html b/lms/templates/university_profile/berkeleyx.html index 9f87454ec8c3b6257deb6923e0f9b2b10cd534d6..16b29d32822a819b34958c2b9fde001e8b005cf2 100644 --- a/lms/templates/university_profile/berkeleyx.html +++ b/lms/templates/university_profile/berkeleyx.html @@ -1,7 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="base.html" /> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>BerkeleyX</title></%block> +<%block name="title"><title>${_("BerkeleyX")}</title></%block> <%block name="university_header"> <header class="search" style="background: url('/static/images/university/berkeley/berkeley_fountain_2025x550.jpg')"> @@ -10,7 +11,7 @@ <div class="logo"> <img src="${static.url('images/university/berkeley/berkeley.png')}" /> </div> - <h1>BerkeleyX</h1> + <h1>${_("BerkeleyX")}</h1> </hgroup> </div> </header> @@ -18,7 +19,7 @@ </%block> <%block name="university_description"> - <p>The University of California, Berkeley was chartered in 1868 and its flagship campus — envisioned as a "City of Learning" — was established at Berkeley, on San Francisco Bay. Berkeley Faculty consists of 1,582 fulltime and 500 part-time faculty members dispersed among more than 130 academic departments and more than 80 interdisciplinary research units. 28 Nobel prizes have been awarded to Berkeley Alumni. There are eight Nobel Laureates, 32 MacArthur Fellows, and four Pulitzer Prize winners among the current faculty.</p> + <p>${_("The University of California, Berkeley was chartered in 1868 and its flagship campus - envisioned as a \"City of Learning\" - was established at Berkeley, on San Francisco Bay. Berkeley Faculty consists of 1,582 fulltime and 500 part-time faculty members dispersed among more than 130 academic departments and more than 80 interdisciplinary research units. 28 Nobel prizes have been awarded to Berkeley Alumni. There are eight Nobel Laureates, 32 MacArthur Fellows, and four Pulitzer Prize winners among the current faculty.")}</p> </%block> ${parent.body()} diff --git a/lms/templates/university_profile/delftx.html b/lms/templates/university_profile/delftx.html index feb3092dd96bb2c5dcc74f4f4441f669154952ce..c6d15dbb25d6e660ac3aef323443902b8df73ab4 100644 --- a/lms/templates/university_profile/delftx.html +++ b/lms/templates/university_profile/delftx.html @@ -1,7 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="base.html" /> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>DelftX</title></%block> +<%block name="title"><title>${_("DelftX")}</title></%block> <%block name="university_header"> <header class="search" style="background: url('/static/images/university/delft/delft-cover.jpg')"> @@ -10,7 +11,7 @@ <div class="logo"> <img src="${static.url('images/university/delft/delft.png')}" /> </div> - <h1>DelftX</h1> + <h1>${_("DelftX")}</h1> </hgroup> </div> </header> @@ -18,7 +19,7 @@ </%block> <%block name="university_description"> - <p>Delft University of Technology is the largest and oldest technological university in the Netherlands. Our research is inspired by the desire to increase fundamental understanding, as well as by societal challenges. We encourage our students to be independent thinkers so they will become engineers capable of solving complex problems. Our students have chosen Delft University of Technology because of our reputation for quality education and research.</p> +<p>${_("Delft University of Technology is the largest and oldest technological university in the Netherlands. Our research is inspired by the desire to increase fundamental understanding, as well as by societal challenges. We encourage our students to be independent thinkers so they will become engineers capable of solving complex problems. Our students have chosen Delft University of Technology because of our reputation for quality education and research.")}</p> </%block> ${parent.body()} diff --git a/lms/templates/university_profile/edge.html b/lms/templates/university_profile/edge.html index 9e6adfe3d8fb2e4f1758cb53697647b11e4c12ac..1cf6a848bcd006f9457962a06423cd05b90136e2 100644 --- a/lms/templates/university_profile/edge.html +++ b/lms/templates/university_profile/edge.html @@ -1,33 +1,34 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="../stripped-main.html" /> <%! from django.core.urlresolvers import reverse %> -<%block name="title"><title>edX edge</title></%block> +<%block name="title"><title>${_("edX edge")}</title></%block> <%block name="bodyclass">no-header edge-landing</%block> <%block name="content"> <div class="main-wrapper"> - <div class="edx-edge-logo-large">edX edge</div> + <div class="edx-edge-logo-large">${_("edX edge")}</div> <div class="content"> <div class="log-in-form"> - <h2>Log in to your courses</h2> + <h2>${_("Log in to your courses")}</h2> <form id="login_form" data-remote="true" method="post" action="/login_ajax"> <div class="row"> - <label>Email</label> + <label>${_("Email")}</label> <input name="email" type="email" class="email-field" tabindex="1"> </div> <div class="row"> - <label>Password</label> + <label>${_("Password")}</label> <input name="password" type="password" class="password-field" tabindex="2"> </div> <div class="row submit"> - <input name="submit" type="submit" value="Log In" class="log-in-submit-button" tabindex="3"> - <a href="#forgot-password-modal" rel="leanModal" class="pwd-reset forgot-button">Forgot password?</a> + <input name="submit" type="submit" value="${_("Log In")}" class="log-in-submit-button" tabindex="3"> + <a href="#forgot-password-modal" rel="leanModal" class="pwd-reset forgot-button">${_("Forgot password?")}</a> </div> </form> </div> <div class="sign-up"> - <h3>Register for classes</h3> - <p>Take free online courses from today's leading universities.</p> - <p><a href="#signup-modal" id="signup" rel="leanModal" class="register-button">Register</a></p> + <h3>${_("Register for classes")}</h3> + <p>${_("Take free online courses from today's leading universities.")}</p> + <p><a href="#signup-modal" id="signup" rel="leanModal" class="register-button">${_("Register")}</a></p> </div> </div> </div> @@ -62,4 +63,4 @@ </%block> <%include file="../signup_modal.html" /> -<%include file="../forgot_password_modal.html" /> \ No newline at end of file +<%include file="../forgot_password_modal.html" /> diff --git a/lms/templates/university_profile/epflx.html b/lms/templates/university_profile/epflx.html index 8153bd62b998dc51ddebb2455e524cfdd55b87c2..4e42c4f051d703f7591cbf1fbd53871c5301541b 100644 --- a/lms/templates/university_profile/epflx.html +++ b/lms/templates/university_profile/epflx.html @@ -1,7 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="base.html" /> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>EPFLx</title></%block> +<%block name="title"><title>${_("EPFLx")}</title></%block> <%block name="university_header"> <header class="search" style="background: url('/static/images/university/epfl/epfl-cover.jpg')"> @@ -10,7 +11,7 @@ <div class="logo"> <img src="${static.url('images/university/epfl/epfl.png')}" /> </div> - <h1>EPFLx</h1> + <h1>${_("EPFLx")}</h1> </hgroup> </div> </header> @@ -19,12 +20,12 @@ <%block name="university_description"> -<p>EPFL is the Swiss Federal Institute of Technology in Lausanne. The past decade has seen EPFL ascend to the very top of European institutions of science and technology: it is ranked #1 in Europe in the field of engineering by the Times Higher Education (based on publications and citations), Leiden Rankings, and the Academic Ranking of World Universities.</p> +<p>${_("EPFL is the Swiss Federal Institute of Technology in Lausanne. The past decade has seen EPFL ascend to the very top of European institutions of science and technology: it is ranked #1 in Europe in the field of engineering by the Times Higher Education (based on publications and citations), Leiden Rankings, and the Academic Ranking of World Universities.")}</p> -<p>EPFL's main campus brings together 12,600 students, faculty, researchers, and staff in a high-energy, dynamic learning and research environment. It directs the Human Brain Project, an undertaking to simulate the entire human brain using supercomputers, in order to gain new insights into how it operates and to better diagnose brain disorders. The university is building Solar Impulse, a long-range solar-powered plane that aims to be the first piloted fixed-wing aircraft to circumnavigate the Earth using only solar power. EPFL was part of the Alinghi project, developing advanced racing boats that won the America's Cup multiple times. The university operates, for education and research purposes, a Tokamak nuclear fusion reactor. EPFL also houses the Musée Bolo museum and hosts several music festivals, including Balelec, that draws over 15,000 guests every year.</p> +<p>${_("EPFL's main campus brings together 12,600 students, faculty, researchers, and staff in a high-energy, dynamic learning and research environment. It directs the Human Brain Project, an undertaking to simulate the entire human brain using supercomputers, in order to gain new insights into how it operates and to better diagnose brain disorders. The university is building Solar Impulse, a long-range solar-powered plane that aims to be the first piloted fixed-wing aircraft to circumnavigate the Earth using only solar power. EPFL was part of the Alinghi project, developing advanced racing boats that won the America's Cup multiple times. The university operates, for education and research purposes, a Tokamak nuclear fusion reactor. EPFL also houses the Musee Bolo museum and hosts several music festivals, including Balelec, that draws over 15,000 guests every year.")}</p> + +<p>${_("EPFL is a major force in entrepreneurship, with 2012 bringing in $100M in funding for ten EPFL startups. Both young spin-offs (like Typesafe and Pix4D) and companies that have long grown past the startup stage (like Logitech) actively transfer the results of EPFL's scientific innovation to industry.")}</p> -<p>EPFL is a major force in entrepreneurship, with 2012 bringing in $100M in funding for ten EPFL startups. Both young spin-offs (like Typesafe and Pix4D) and companies that have long grown past the startup stage (like Logitech) actively transfer the results of EPFL's scientific innovation to industry.</p> - </%block> ${parent.body()} diff --git a/lms/templates/university_profile/georgetownx.html b/lms/templates/university_profile/georgetownx.html index a519746c4c7ebc1f3dcb3c072387c87a373f8a7d..fb4a4bf5ca91813b7641a0ac9623deab591a123f 100644 --- a/lms/templates/university_profile/georgetownx.html +++ b/lms/templates/university_profile/georgetownx.html @@ -1,7 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="base.html" /> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>GeorgetownX</title></%block> +<%block name="title"><title>${_("GeorgetownX")}</title></%block> <%block name="university_header"> <header class="search" style="background: url('/static/images/university/georgetown/georgetown-cover_2025x550.jpg')"> @@ -10,7 +11,7 @@ <div class="logo"> <img src="${static.url('images/university/georgetown/georgetown.png')}" /> </div> - <h1>GeorgetownX</h1> + <h1>${_("GeorgetownX")}</h1> </hgroup> </div> </header> @@ -18,7 +19,7 @@ </%block> <%block name="university_description"> - <p>Georgetown University, the nation’s oldest Catholic and Jesuit university, is one of the world’s leading academic and research institutions, offering a unique educational experience that prepares the next generation of global citizens to lead and make a difference in the world.  Students receive a world-class learning experience focused on educating the whole person through exposure to different faiths, cultures and beliefs.</p> +<p>${_("Georgetown University, the nation's oldest Catholic and Jesuit university, is one of the world's leading academic and research institutions, offering a unique educational experience that prepares the next generation of global citizens to lead and make a difference in the world. Students receive a world-class learning experience focused on educating the whole person through exposure to different faiths, cultures and beliefs.")}</p> </%block> ${parent.body()} diff --git a/lms/templates/university_profile/harvardx.html b/lms/templates/university_profile/harvardx.html index 742cd76eaa6b6bf9f16daa3b9554528904ccc2e3..7e8c4cc42bcb7835829a80c7ce1fb96359f615e3 100644 --- a/lms/templates/university_profile/harvardx.html +++ b/lms/templates/university_profile/harvardx.html @@ -1,7 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="base.html" /> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>HarvardX</title></%block> +<%block name="title"><title>${_("HarvardX")}</title></%block> <%block name="university_header"> <header class="search" style="background: url('/static/images/university/harvard/about_harvard_page_2025x550.jpg')"> @@ -10,7 +11,7 @@ <div class="logo"> <img src="${static.url('images/university/harvard/harvard.png')}" /> </div> - <h1>HarvardX</h1> + <h1>${_("HarvardX")}</h1> </hgroup> </div> </header> @@ -18,8 +19,8 @@ </%block> <%block name="university_description"> - <p>Harvard University is devoted to excellence in teaching, learning, and research, and to developing leaders in many disciplines who make a difference globally. Harvard faculty are engaged with teaching and research to push the boundaries of human knowledge. The University has twelve degree-granting Schools in addition to the Radcliffe Institute for Advanced Study.</p> - <p>Established in 1636, Harvard is the oldest institution of higher education in the United States. The University, which is based in Cambridge and Boston, Massachusetts, has an enrollment of over 20,000 degree candidates, including undergraduate, graduate, and professional students. Harvard has more than 360,000 alumni around the world.</p> +<p>${_("Harvard University is devoted to excellence in teaching, learning, and research, and to developing leaders in many disciplines who make a difference globally. Harvard faculty are engaged with teaching and research to push the boundaries of human knowledge. The University has twelve degree-granting Schools in addition to the Radcliffe Institute for Advanced Study.")}</p> + <p>${_("Established in 1636, Harvard is the oldest institution of higher education in the United States. The University, which is based in Cambridge and Boston, Massachusetts, has an enrollment of over 20,000 degree candidates, including undergraduate, graduate, and professional students. Harvard has more than 360,000 alumni around the world.")}</p> </%block> ${parent.body()} diff --git a/lms/templates/university_profile/mcgillx.html b/lms/templates/university_profile/mcgillx.html index ca0801aa3b2a0be9a0c69991392c7945b7f4771c..7c037f5642df5c72bb9422940b7fd35f890ee664 100644 --- a/lms/templates/university_profile/mcgillx.html +++ b/lms/templates/university_profile/mcgillx.html @@ -1,7 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="base.html" /> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>McGillX</title></%block> +<%block name="title"><title>${_("McGillX")}</title></%block> <%block name="university_header"> <header class="search" style="background: url('/static/images/university/mcgill/mcgill-cover.jpg')"> @@ -10,7 +11,7 @@ <div class="logo"> <img src="${static.url('images/university/mcgill/mcgill.png')}" /> </div> - <h1>McGillX</h1> + <h1>${_("McGillX")}</h1> </hgroup> </div> </header> @@ -18,7 +19,7 @@ </%block> <%block name="university_description"> - <p>McGill University is one of Canada's best-known institutions of higher learning and one of the leading universities in the world. McGill is located in vibrant multicultural Montreal, in the province of Quebec. Our 11 faculties and 11 professional schools offer more than 300 programs to some 38,000 graduate, undergraduate and continuing studies students. McGill ranks 1st in Canada among medical-doctoral universities (Maclean’s) and 18th in the world (QS World University Rankings).</p> + <p>${_("McGill University is one of Canada's best-known institutions of higher learning and one of the leading universities in the world. McGill is located in vibrant multicultural Montreal, in the province of Quebec. Our 11 faculties and 11 professional schools offer more than 300 programs to some 38,000 graduate, undergraduate and continuing studies students. McGill ranks 1st in Canada among medical-doctoral universities (Maclean\'s) and 18th in the world (QS World University Rankings).")}</p> </%block> ${parent.body()} diff --git a/lms/templates/university_profile/mitx.html b/lms/templates/university_profile/mitx.html index 89d35a72929cc633ddd4392ca52916b4fe66733f..161c9aedbdf69e1734e3754db2ab0806465ed2de 100644 --- a/lms/templates/university_profile/mitx.html +++ b/lms/templates/university_profile/mitx.html @@ -1,7 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="base.html" /> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>MITx</title></%block> +<%block name="title"><title>${_("MITx")}</title></%block> <%block name="university_header"> <header class="search" style="background: url('/static/images/university/mit/shot-2-large.jpg')"> @@ -10,7 +11,7 @@ <div class="logo"> <img src="${static.url('images/university/mit/mit.png')}" /> </div> - <h1>MITx</h1> + <h1>${_("MITx")}</h1> </hgroup> </div> </header> @@ -18,9 +19,9 @@ </%block> <%block name="university_description"> - <p>The Massachusetts Institute of Technology — a coeducational, privately endowed research university founded in 1861 — is dedicated to advancing knowledge and educating students in science, technology, and other areas of scholarship that will best serve the nation and the world in the 21st century. The Institute has close to 1,000 faculty and 10,000 undergraduate and graduate students. It is organized into five Schools: Architecture and Urban Planning; Engineering; Humanities, Arts, and Social Sciences; Sloan School of Management; and Science.</p> - <p>MIT's commitment to innovation has led to a host of scientific breakthroughs and technological advances. Achievements of the Institute's faculty and graduates have included the first chemical synthesis of penicillin and vitamin A, the development of inertial guidance systems, modern technologies for artificial limbs, and the magnetic core memory that made possible the development of digital computers. 78 alumni, faculty, researchers and staff have won Nobel Prizes.</p> - <p>Current areas of research and education include neuroscience and the study of the brain and mind, bioengineering, cancer, energy, the environment and sustainable development, information sciences and technology, new media, financial technology, and entrepreneurship.</p> + <p>${_("The Massachusetts Institute of Technology — a coeducational, privately endowed research university founded in 1861 — is dedicated to advancing knowledge and educating students in science, technology, and other areas of scholarship that will best serve the nation and the world in the 21st century. The Institute has close to 1,000 faculty and 10,000 undergraduate and graduate students. It is organized into five Schools: Architecture and Urban Planning; Engineering; Humanities, Arts, and Social Sciences; Sloan School of Management; and Science.")}</p> + <p>${_("MIT's commitment to innovation has led to a host of scientific breakthroughs and technological advances. Achievements of the Institute's faculty and graduates have included the first chemical synthesis of penicillin and vitamin A, the development of inertial guidance systems, modern technologies for artificial limbs, and the magnetic core memory that made possible the development of digital computers. 78 alumni, faculty, researchers and staff have won Nobel Prizes.")}</p> + <p>${_("Current areas of research and education include neuroscience and the study of the brain and mind, bioengineering, cancer, energy, the environment and sustainable development, information sciences and technology, new media, financial technology, and entrepreneurship.")}</p> </%block> ${parent.body()} diff --git a/lms/templates/university_profile/ricex.html b/lms/templates/university_profile/ricex.html index 36acea2836351859fe9775f2f5e9b064006ca65f..0fe52063fcf5855cb13ecad1c400416fe885a3f6 100644 --- a/lms/templates/university_profile/ricex.html +++ b/lms/templates/university_profile/ricex.html @@ -1,7 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="base.html" /> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>RiceX</title></%block> +<%block name="title"><title>${_("RiceX")}</title></%block> <%block name="university_header"> <header class="search" style="background: url('/static/images/university/rice/rice-cover.jpg')"> @@ -10,7 +11,7 @@ <div class="logo"> <img src="${static.url('images/university/rice/rice.png')}" /> </div> - <h1>RiceX</h1> + <h1>${_("RiceX")}</h1> </hgroup> </div> </header> @@ -18,7 +19,7 @@ </%block> <%block name="university_description"> - <p>Located on a 300-acre forested campus in Houston, Rice University is consistently ranked among the nation's top 20 universities by U.S. News & World Report. Rice has highly respected schools of Architecture, Business, Continuing Studies, Engineering, Humanities, Music, Natural Sciences and Social Sciences and is home to the Baker Institute for Public Policy. With 3,708 undergraduates and 2,374 graduate students, Rice's undergraduate student-to-faculty ratio is 6-to-1. Its residential college system builds close-knit communities and lifelong friendships, just one reason why Rice has been ranked No. 1 for best quality of life multiple times by the Princeton Review and No. 2 for "best value" among private universities by Kiplinger's Personal Finance.</p> + <p>${_("Located on a 300-acre forested campus in Houston, Rice University is consistently ranked among the nation's top 20 universities by U.S. News & World Report. Rice has highly respected schools of Architecture, Business, Continuing Studies, Engineering, Humanities, Music, Natural Sciences and Social Sciences and is home to the Baker Institute for Public Policy. With 3,708 undergraduates and 2,374 graduate students, Rice's undergraduate student-to-faculty ratio is 6-to-1. Its residential college system builds close-knit communities and lifelong friendships, just one reason why Rice has been ranked No. 1 for best quality of life multiple times by the Princeton Review and No. 2 for \"best value\" among private universities by Kiplinger's Personal Finance.")}</p> </%block> ${parent.body()} diff --git a/lms/templates/university_profile/template.html b/lms/templates/university_profile/template.html index 44fc3f3ab404636279d64d9dffc5315148fb521d..8dd2cda28d1a63558e732bf52caf5e4805d46b00 100644 --- a/lms/templates/university_profile/template.html +++ b/lms/templates/university_profile/template.html @@ -1,7 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="base.html" /> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>SCHOOLX</title></%block> +<%block name="title"><title>${_("SCHOOLX")}</title></%block> <%block name="university_header"> <header class="search" style="background: url('/static/images/university/SCHOOL/IMAGE.jpg')"> @@ -10,7 +11,7 @@ <div class="logo"> <img src="${static.url('images/university/SCHOOL/IMAGE.png')}" /> </div> - <h1>SCHOOLX</h1> + <h1>${_("SCHOOLX")}</h1> </hgroup> </div> </header> @@ -18,7 +19,7 @@ </%block> <%block name="university_description"> - <p></p> +<p></p> </%block> ${parent.body()} diff --git a/lms/templates/university_profile/torontox.html b/lms/templates/university_profile/torontox.html index 6ae50d21b92a34ba713f546d7e2d84ee4db5f79c..9d17bb200a43d9183451276047ca235147b0d074 100644 --- a/lms/templates/university_profile/torontox.html +++ b/lms/templates/university_profile/torontox.html @@ -1,7 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="base.html" /> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>University of TorontoX</title></%block> +<%block name="title"><title>${_("University of TorontoX")}</title></%block> <%block name="university_header"> <header class="search" style="background: url('/static/images/university/toronto/toronto-cover.jpg')"> @@ -10,7 +11,7 @@ <div class="logo"> <img src="${static.url('images/university/toronto/toronto.png')}" /> </div> - <h1>University of TorontoX</h1> + <h1>${_("University of TorontoX")}</h1> </hgroup> </div> </header> @@ -18,7 +19,7 @@ </%block> <%block name="university_description"> - <p>Established in 1827, the University of Toronto is a vibrant and diverse academic community. It includes 80,000 students, 12,000 colleagues holding faculty appointments, 200 librarians, and 6,000 staff members across three distinctive campuses and at many partner sites, including world-renowned hospitals. With over 800 undergraduate programs, 150 graduate programs, and 40 professional programs, U of T attracts students of the highest calibre, from across Canada and from 160 countries around the world. The University is one of the most respected and influential institutions of higher education and advanced research in the world. Its strengths extend across the full range of disciplines: the 2012-13 Times Higher Education ranking groups the University of Toronto with Stanford, UC Berkeley, UCLA, Columbia, Cambridge, Oxford, the University of Melbourne, and the University of Michigan as the only institutions in the top 27 in all 6 broad disciplinary areas. The University is also consistently rated one of Canada’s Top 100 employers, and ranks with Harvard and Yale for the top university library resources in North America.</p> + <p>${_("Established in 1827, the University of Toronto is a vibrant and diverse academic community. It includes 80,000 students, 12,000 colleagues holding faculty appointments, 200 librarians, and 6,000 staff members across three distinctive campuses and at many partner sites, including world-renowned hospitals. With over 800 undergraduate programs, 150 graduate programs, and 40 professional programs, U of T attracts students of the highest calibre, from across Canada and from 160 countries around the world. The University is one of the most respected and influential institutions of higher education and advanced research in the world. Its strengths extend across the full range of disciplines: the 2012-13 Times Higher Education ranking groups the University of Toronto with Stanford, UC Berkeley, UCLA, Columbia, Cambridge, Oxford, the University of Melbourne, and the University of Michigan as the only institutions in the top 27 in all 6 broad disciplinary areas. The University is also consistently rated one of Canada\'s Top 100 employers, and ranks with Harvard and Yale for the top university library resources in North America.")}</p> </%block> ${parent.body()} diff --git a/lms/templates/university_profile/utaustinx.html b/lms/templates/university_profile/utaustinx.html index 048587b3342161c81b87f20ce3ce099c3a5bfbb6..c85cf7969b99f8a1a9257080f05eb908e53068f8 100644 --- a/lms/templates/university_profile/utaustinx.html +++ b/lms/templates/university_profile/utaustinx.html @@ -1,7 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="base.html" /> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>UTAustinX</title></%block> +<%block name="title"><title>${_("UTAustinX")}</title></%block> <%block name="university_header"> <header class="search" style="background: url('/static/images/university/utaustin/utaustin-cover_2025x550.jpg')"> @@ -10,14 +11,14 @@ <div class="logo"> <img src="${static.url('images/university/utaustin/utaustin-standalone_187x80.png')}" /> </div> - <h1>UTAustinx</h1> + <h1>${_("UTAustinx")}</h1> </hgroup> </div> </header> </%block> <%block name="university_description"> - <p>The University of Texas at Austin is the top-ranked public university in a nearly 1,000-mile radius, and is ranked in the top 25 universities in the world. Students have been finding their passion in life at UT Austin for more than 130 years, and it has been a member of the prestigious AAU since 1929. UT Austin combines the academic depth and breadth of a world research institute (regularly ranking within the top three producers of doctoral degrees in the country) with the fun and excitement of a big-time collegiate experience. It is currently the fifth-largest university in America, with more than 50,000 students and 3,000 professors across 17 colleges and schools. UT Austin will be opening the Dell Medical School in 2016.</p> + <p>${_("The University of Texas at Austin is the top-ranked public university in a nearly 1,000-mile radius, and is ranked in the top 25 universities in the world. Students have been finding their passion in life at UT Austin for more than 130 years, and it has been a member of the prestigious AAU since 1929. UT Austin combines the academic depth and breadth of a world research institute (regularly ranking within the top three producers of doctoral degrees in the country) with the fun and excitement of a big-time collegiate experience. It is currently the fifth-largest university in America, with more than 50,000 students and 3,000 professors across 17 colleges and schools. UT Austin will be opening the Dell Medical School in 2016.")}</p> </%block> ${parent.body()} diff --git a/lms/templates/university_profile/utx.html b/lms/templates/university_profile/utx.html index d25d8f09b815f261a22dc0d5e0a349e3da4f5e22..ac8ba868176e6853afd338074e2c0889ce49b304 100644 --- a/lms/templates/university_profile/utx.html +++ b/lms/templates/university_profile/utx.html @@ -1,10 +1,11 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="base.html" /> <%namespace name='static' file='../static_content.html'/> <%! from django.core.urlresolvers import reverse %> -<%block name="title"><title>UTx</title></%block> +<%block name="title"><title>${_("UTx")}</title></%block> <%block name="university_header"> <header class="search" style="background: url('/static/images/university/ut/ut-cover_2025x550.jpg')"> @@ -13,7 +14,7 @@ <div class="logo"> <img src="${static.url('images/university/ut/ut-standalone_187x80.png')}" /> </div> - <h1>UTx</h1> + <h1>${_("UTx")}</h1> </hgroup> </div> </header> @@ -21,8 +22,8 @@ </%block> <%block name="university_description"> - <p>Educating students, providing care for patients, conducting groundbreaking research and serving the needs of Texans and the nation for more than 130 years, The University of Texas System is one of the largest public university systems in the United States, with nine academic universities and six health science centers. Student enrollment exceeded 215,000 in the 2011 academic year. The UT System confers more than one-third of the state’s undergraduate degrees and educates nearly three-fourths of the state’s health care professionals annually. The UT System has an annual operating budget of $13.1 billion (FY 2012) including $2.3 billion in sponsored programs funded by federal, state, local and private sources. With roughly 87,000 employees, the UT System is one of the largest employers in the state.</p> - <p>Find out about <a href="${reverse('university_profile', args=['UTAustinX'])}">The University of Texas at Austin</a>.</p> + <p>${_("Educating students, providing care for patients, conducting groundbreaking research and serving the needs of Texans and the nation for more than 130 years, The University of Texas System is one of the largest public university systems in the United States, with nine academic universities and six health science centers. Student enrollment exceeded 215,000 in the 2011 academic year. The UT System confers more than one-third of the state\'s undergraduate degrees and educates nearly three-fourths of the state\'s health care professionals annually. The UT System has an annual operating budget of $13.1 billion (FY 2012) including $2.3 billion in sponsored programs funded by federal, state, local and private sources. With roughly 87,000 employees, the UT System is one of the largest employers in the state.")}</p> + <p>${_('Find out about <a href="%s">The University of Texas at Austin</a>.') % reverse('university_profile', args=['UTAustinX'])}</p> </%block> ${parent.body()} diff --git a/lms/templates/university_profile/wellesleyx.html b/lms/templates/university_profile/wellesleyx.html index 55264d90d0d49b0eb6b21b45f9bcfea796421fc5..fe3a82c57e6b21421ef13888b8bdee518b6f6d42 100644 --- a/lms/templates/university_profile/wellesleyx.html +++ b/lms/templates/university_profile/wellesleyx.html @@ -1,7 +1,8 @@ +<%! from django.utils.translation import ugettext as _ %> <%inherit file="base.html" /> <%namespace name='static' file='../static_content.html'/> -<%block name="title"><title>WellesleyX</title></%block> +<%block name="title"><title>${_("WellesleyX")}</title></%block> <%block name="university_header"> <header class="search" style="background: url('/static/images/university/wellesley/wellesley-cover_2025x550.jpg')"> @@ -10,7 +11,7 @@ <div class="logo"> <img src="${static.url('images/university/wellesley/wellesley.png')}" /> </div> - <h1>WellesleyX</h1> + <h1>${_("WellesleyX")}</h1> </hgroup> </div> </header> @@ -18,7 +19,7 @@ </%block> <%block name="university_description"> - <p>Since 1875, Wellesley College has been the preeminent liberal arts college for women. Known for its intellectual rigor and its remarkable track record for the cultivation of women leaders in every arena, Wellesley—only 12 miles from Boston—is home to some 2300 undergraduates from every state and 75 countries.</p> + <p>${_("Since 1875, Wellesley College has been the preeminent liberal arts college for women. Known for its intellectual rigor and its remarkable track record for the cultivation of women leaders in every arena, Wellesley-only 12 miles from Boston-is home to some 2300 undergraduates from every state and 75 countries.")}</p> </%block> ${parent.body()} diff --git a/lms/templates/using.html b/lms/templates/using.html index 6decbf98ad5752a821b4e2a8fc380a1d247be4ac..d5ec25a95d3534c6fb41bd5c42a0c31462b8d378 100644 --- a/lms/templates/using.html +++ b/lms/templates/using.html @@ -1,15 +1,17 @@ -<h1>Using the system</h1> +<%! from django.utils.translation import ugettext as _ %> + +<h1>${_('Using the system')}</h1> <ul> <li> - <p>During video playback, use the subtitles and the scroll bar to navigate. Clicking the subtitles is a fast way to skip forwards and backwards by small amounts.</p> + <p>${_('During video playback, use the subtitles and the scroll bar to navigate. Clicking the subtitles is a fast way to skip forwards and backwards by small amounts.')}</p> </li> <li> - <p>If you are on a low-resolution display, the left navigation bar can be hidden by clicking on the set of three left arrows next to it.</p> + <p>${_('If you are on a low-resolution display, the left navigation bar can be hidden by clicking on the set of three left arrows next to it.')}</p> </li> <li> - <p>If you need bigger or smaller fonts, use your browsers settings to scale them up or down. Under Google Chrome, this is done by pressing ctrl-plus, or ctrl-minus at the same time.</p> + <p>${_('If you need bigger or smaller fonts, use your browsers settings to scale them up or down. Under Google Chrome, this is done by pressing ctrl-plus, or ctrl-minus at the same time.')}</p> </li> </ul> diff --git a/lms/templates/video.html b/lms/templates/video.html index 77c8a5ee16b5224238d00f74d0f685e1ef1b54ca..4c9d17824262e848241cb8c6528ab14092b13b8f 100644 --- a/lms/templates/video.html +++ b/lms/templates/video.html @@ -1,3 +1,5 @@ +<%! from django.utils.translation import ugettext as _ %> + % if display_name is not UNDEFINED and display_name is not None: <h2> ${display_name} </h2> % endif @@ -10,7 +12,7 @@ % endif </param> <param name="allowScriptAccess" value="always"></param> - <embed + <embed % if not settings.MITX_FEATURES['STUB_VIDEO_FOR_TESTING']: src="https://www.youtube.com/v/${normal_speed_video_id}?version=3&autoplay=1&rel=0" % endif @@ -43,12 +45,12 @@ % if source: <div class="video-sources"> - <p>Download video <a href="${source}">here</a>.</p> + <p>${_('Download video <a href="%s">here</a>.') % source}</p> </div> % endif % if track: <div class="video-tracks"> - <p>Download subtitles <a href="${track}">here</a>.</p> + <p>${_('Download subtitles <a href="%s">here</a>.') % track}</p> </div> % endif diff --git a/lms/templates/videoalpha.html b/lms/templates/videoalpha.html index 2bb5d817a8704a024c659bd4a4383e762d2dcb5f..9bc492263424c664384a2e13aa17b67b29728cd4 100644 --- a/lms/templates/videoalpha.html +++ b/lms/templates/videoalpha.html @@ -1,3 +1,5 @@ +<%! from django.utils.translation import ugettext as _ %> + % if display_name is not UNDEFINED and display_name is not None: <h2> ${display_name} </h2> % endif @@ -37,12 +39,12 @@ % if sources.get('main'): <div class="video-sources"> - <p>Download video <a href="${sources.get('main')}">here</a>.</p> + <p>${_('Download video <a href="%s">here</a>.') % sources.get('main')}</p> </div> % endif % if track: <div class="video-tracks"> - <p>Download subtitles <a href="${track}">here</a>.</p> + <p>${_('Download subtitles <a href="%s">here</a>.') % track}</p> </div> % endif diff --git a/lms/templates/wiki/article.html b/lms/templates/wiki/article.html index 5b12942af53729f27bf7957fa2f41c178b186553..ba5458f039502126f11e7cf09c264dbe77bee37f 100644 --- a/lms/templates/wiki/article.html +++ b/lms/templates/wiki/article.html @@ -34,7 +34,7 @@ {% if urlpath %} <div class="see-children"> - <a href="{% url 'wiki:dir' path=urlpath.path %}">See all children</a> + <a href="{% url 'wiki:dir' path=urlpath.path %}">{% trans "See all children" %}</a> </div> {% endif %} </div> diff --git a/lms/templates/wiki/includes/article_menu.html b/lms/templates/wiki/includes/article_menu.html index dd46a3d7fd4ee5650c231a8624b94c29a523906f..9deb344e884ddbbf725105e2374a91b928a195ad 100644 --- a/lms/templates/wiki/includes/article_menu.html +++ b/lms/templates/wiki/includes/article_menu.html @@ -1,6 +1,7 @@ ## mako -<%! +<%! from django.core.urlresolvers import reverse + from django.utils.translation import ugettext as _ from wiki.core.permissions import can_change_permissions %> @@ -40,14 +41,14 @@ <%doc> -This should be enabled for all non-anonymous users once the notifications app has been integrated and styled. +${_("This should be enabled for all non-anonymous users once the notifications app has been integrated and styled.")} </%doc> %if can_change_permissions(article,user): <li class="${"active" if selected_tab == "settings" else ""}"> <a href="${reverse('wiki:settings', kwargs={'article_id' : article.id, 'path' : urlpath.path})}"> <span class="icon-settings icon"></span> - Settings + ${_("Settings")} </a> </li> %endif diff --git a/lms/templates/wiki/includes/cheatsheet.html b/lms/templates/wiki/includes/cheatsheet.html index 6f5170e601981db53c22398a4924a9979c2ff2c5..9351eba813ac4469237cf9142d264b09b24cec06 100644 --- a/lms/templates/wiki/includes/cheatsheet.html +++ b/lms/templates/wiki/includes/cheatsheet.html @@ -1,20 +1,21 @@ +<%! from django.utils.translation import ugettext as _ %> <div class="modal hide fade" id="cheatsheetModal"> - <a href="#" class="close-btn">×</a> + <a href="#" class="close-btn">${_("×")}</a> <div id="cheatsheet-body" class="modal-body"> <div class="left-column"> <section> - <h2>Wiki Syntax Help</h2> - <p>This wiki uses <strong>Markdown</strong> for styling. There are several useful guides online. See any of the links below for in-depth details:</p> + <h2>${_("Wiki Syntax Help")}</h2> + <p>${_("This wiki uses <strong>Markdown</strong> for styling. There are several useful guides online. See any of the links below for in-depth details:")}</p> <ul> - <li><a href="http://daringfireball.net/projects/markdown/basics" target="_blank">Markdown: Basics</a></li> - <li><a href="http://greg.vario.us/doc/markdown.txt" target="_blank">Quick Markdown Syntax Guide</a></li> - <li><a href="http://www.lowendtalk.com/discussion/6/miniature-markdown-guide" target="_blank">Miniature Markdown Guide</a></li> + <li>${_('<a href="http://daringfireball.net/projects/markdown/basics" target="_blank">Markdown: Basics</a>')}</li> + <li>${_('<a href="http://greg.vario.us/doc/markdown.txt" target="_blank">Quick Markdown Syntax Guide</a>')}</li> + <li>${_('<a href="http://www.lowendtalk.com/discussion/6/miniature-markdown-guide" target="_blank">Miniature Markdown Guide</a>')}</li> </ul> - <p>To create a new wiki article, create a link to it. Clicking the link gives you the creation page.</p> - <pre>[Article Name](wiki:ArticleName)</pre> + <p>${_("To create a new wiki article, create a link to it. Clicking the link gives you the creation page.")}</p> + <pre>${_("[Article Name](wiki:ArticleName)")}</pre> </section> <section> - <h3>edX Additions:</h3> + <h3>${_("edX Additions:")}</h3> <pre> circuit-schematic:</pre> <pre> @@ -24,30 +25,30 @@ $LaTeX Math Expression$</pre> <div class="right-column"> <section> - <h3>Useful examples:</h3> + <h3>${_("Useful examples:")}</h3> <pre> -http://wikipedia.org -[Wikipedia](http://wikipedia.org) -[edX Wiki](wiki:/edx/)</pre> +${_("http://wikipedia.org\ +[Wikipedia](http://wikipedia.org)\ +[edX Wiki](wiki:/edx/)")}</pre> <pre> -Huge Header +${_("Huge Header")} ===========</pre> <pre> -Smaller Header +${_("Smaller Header")} --------------</pre> <pre> -*emphasis* or _emphasis_</pre> +${_("*emphasis* or _emphasis_")}</pre> <pre> -**strong** or __strong__</pre> +${_("**strong** or __strong__")}</pre> <pre> -- Unordered List - - Sub Item 1 - - Sub Item 2</pre> +${_("- Unordered List\ + - Sub Item 1\ + - Sub Item 2")}</pre> <pre> -1. Ordered -2. List</pre> +${_("1. Ordered\ +2. List")}</pre> <pre> -> Quotes</pre> +${_("> Quotes")}</pre> </section> </div> diff --git a/lms/templates/wiki/includes/editor_widget.html b/lms/templates/wiki/includes/editor_widget.html index 2f5dd7ce68b587c4a2d27ee9ba2f4bdbc3b0eb79..264a8afbea3639a2d15b0eb6a04bec1a860b56f7 100644 --- a/lms/templates/wiki/includes/editor_widget.html +++ b/lms/templates/wiki/includes/editor_widget.html @@ -1,4 +1,5 @@ +<%! from django.utils.translation import ugettext as _ %> <textarea {{ attrs }}>{{ content }}</textarea> <p id="hint_id_content" class="help-block"> - Markdown syntax is allowed. See the <a id="cheatsheetLink" href="#">cheatsheet</a> for help. + ${_('Markdown syntax is allowed. See the <a id="cheatsheetLink" href="#">_{("cheatsheet")}</a> for help.')} </p> diff --git a/lms/templates/wiki/plugins/attachments/index.html b/lms/templates/wiki/plugins/attachments/index.html index 464a63e5fe55e7403d63661e14b4fc1e165a65e7..2af0d3e9fcd6d3bf9af6da4de66d1c710ee8ea07 100644 --- a/lms/templates/wiki/plugins/attachments/index.html +++ b/lms/templates/wiki/plugins/attachments/index.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> {% extends "wiki/article.html" %} {% load wiki_tags i18n humanize %} {% load url from future %} @@ -20,7 +21,7 @@ <div class="modal upload-modal hide fade" id="upload-modal"> <div class="modal-inner-wrapper"> - <h4>Upload File</h4> + <h4>${_("Upload File")}</h4> <form method="POST" class="form-vertical" id="attachment_form" enctype="multipart/form-data"> {% wiki_form form %} <button type="submit" name="save" value="1" class="btn btn-primary"> @@ -32,7 +33,7 @@ <div class="modal search-file-modal hide fade" id="search-file-modal"> <div class="modal-inner-wrapper"> - <h4>Search files and articles</h4> + <h4>${_("Search files and articles")}</h4> <p>{% trans "You can reuse files from other articles. These files are subject to updates on other articles which may or may not be a good thing." %}</p> <form method="GET" action="{% url 'wiki:attachments_search' path=urlpath.path article_id=article.id %}" class="form-search"> {{ search_form.query }} @@ -127,7 +128,7 @@ </div> </li> {% empty %} - <p style="margin-bottom: 20px;"><em>{% trans "There are no attachments for this article." %}</em></p> + <p style="margin-bottom: 20px;"><em>{% trans "There are no attachments for this article." %}</em></p> {% endfor %} </ul> </div> diff --git a/lms/templates/wiki/preview_inline.html b/lms/templates/wiki/preview_inline.html index 2f09d21bd35fafdb4b2a362cb449b8fa9ceaa219..faa230df863ffc0920f8f2c93ec6a03b0a3d5cf1 100644 --- a/lms/templates/wiki/preview_inline.html +++ b/lms/templates/wiki/preview_inline.html @@ -1,3 +1,4 @@ +<%! from django.utils.translation import ugettext as _ %> <!DOCTYPE html> {% load wiki_tags i18n %}{% load compressed %} <html> @@ -28,8 +29,8 @@ {% if revision and revision.deleted %} <div class="warning"> - <strong>This revision has been deleted.</strong> - <p>Restoring to this revision will mark the article as deleted.</p> + <strong>${_("This revision has been deleted.")}</strong> + <p>${_("Restoring to this revision will mark the article as deleted.")}</p> </div> {% else %} {% wiki_render article content %} diff --git a/lms/templates/word_cloud.html b/lms/templates/word_cloud.html index 7ff90ee6d688b25ad83859f78a7805d2c6f668ba..5ec83afcc7914a635a9934dea976de6efe6cbd51 100644 --- a/lms/templates/word_cloud.html +++ b/lms/templates/word_cloud.html @@ -20,8 +20,8 @@ </section> <section id="result_cloud_section_${element_id}" class="result_cloud_section"> - <h3>Your words: <span class="your_words"></span></h3> - <h3>Total number of words: <span class="total_num_words"></span></h3> + <h3>${_('Your words:')} <span class="your_words"></span></h3> + <h3>${_('Total number of words:')} <span class="total_num_words"></span></h3> <div class="word_cloud"></div> </section> diff --git a/lms/urls.py b/lms/urls.py index 5dbeafe63315c3ce27d2142b0e42096f8fead6a2..5948f65226c65afd1a6834c5cdf640806a10a35a 100644 --- a/lms/urls.py +++ b/lms/urls.py @@ -63,6 +63,18 @@ urlpatterns = ('', # nopep8 url(r'^user_api/', include('user_api.urls')), ) +js_info_dict = { + 'domain': 'djangojs', + 'packages': ('lms',), +} + +urlpatterns += ( + # Serve catalog of localized strings to be rendered by Javascript + url(r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict), +) + + + # University profiles only make sense in the default edX context if not settings.MITX_FEATURES["USE_CUSTOM_THEME"]: urlpatterns += (