From dbee08c72178b74736bba2b248e9b4819e09cce3 Mon Sep 17 00:00:00 2001 From: David Ormsbee Date: Tue, 9 Feb 2016 17:40:54 -0500 Subject: [PATCH 01/70] Make Capa problems do initial load without AJAX. Before this commit, calling the student_view on a capa problem would cause it to render an empty placeholder
, wait for the DOMContentLoaded event to be fired, and then make AJAX requests to the the problem_get handlers to retrieve the HTML it needed to render the actual problems. This can significantly increase the end user load times for pages, particularly when there are many problems in a vertical. This commit takes a very conservative approach and has the server side add the rendered HTML into a new data-content attribute on the
enclosing the problem. When Capa's JS initialization runs, it grabs from that data-content attribute rather than reaching over the network for an AJAX request. I had attempted to make it somewhat smarter and push the rendered problem straight into the document instead of relying on the data-content attribute. This was faster, and should be our long term goal. However, it caused odd bugs, particularly around MathJAX rendering, and I never quite tracked the issue down. I'm still going forward with these changes because it's significantly better than the current situation that students have to deal with, and we can make the JS more performant in a future iteration. [PERF-261] --- common/lib/xmodule/xmodule/capa_base.py | 1 + common/lib/xmodule/xmodule/js/src/capa/display.coffee | 3 ++- lms/templates/problem_ajax.html | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/common/lib/xmodule/xmodule/capa_base.py b/common/lib/xmodule/xmodule/capa_base.py index 64e9729c2a..0eb1241de9 100644 --- a/common/lib/xmodule/xmodule/capa_base.py +++ b/common/lib/xmodule/xmodule/capa_base.py @@ -399,6 +399,7 @@ class CapaMixin(CapaFields): 'ajax_url': self.runtime.ajax_url, 'progress_status': Progress.to_js_status_str(progress), 'progress_detail': Progress.to_js_detail_str(progress), + 'content': self.get_problem_html(encapsulate=False) }) def check_button_name(self): diff --git a/common/lib/xmodule/xmodule/js/src/capa/display.coffee b/common/lib/xmodule/xmodule/js/src/capa/display.coffee index 7ea9ac17a9..211cdf8967 100644 --- a/common/lib/xmodule/xmodule/js/src/capa/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/capa/display.coffee @@ -5,6 +5,7 @@ class @Problem @id = @el.data('problem-id') @element_id = @el.attr('id') @url = @el.data('url') + @content = @el.data('content') # has_timed_out and has_response are used to ensure that are used to # ensure that we wait a minimum of ~ 1s before transitioning the check @@ -12,7 +13,7 @@ class @Problem @has_timed_out = false @has_response = false - @render() + @render(@content) $: (selector) -> $(selector, @el) diff --git a/lms/templates/problem_ajax.html b/lms/templates/problem_ajax.html index 05c3c2ada8..664b7567c0 100644 --- a/lms/templates/problem_ajax.html +++ b/lms/templates/problem_ajax.html @@ -1 +1 @@ -
+
From 9ff39385c6a2493d9a145ff7f0d8f49c7dff1c95 Mon Sep 17 00:00:00 2001 From: Fred Smith Date: Thu, 7 Apr 2016 14:13:47 -0400 Subject: [PATCH 02/70] clear existing assets before copying new assets --- pavelib/assets.py | 2 +- pavelib/paver_tests/test_servers.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pavelib/assets.py b/pavelib/assets.py index 78c249b2df..330b43c9db 100644 --- a/pavelib/assets.py +++ b/pavelib/assets.py @@ -632,7 +632,7 @@ def collect_assets(systems, settings): `settings` is the Django settings module to use. """ for sys in systems: - sh(django_cmd(sys, settings, "collectstatic --noinput > /dev/null")) + sh(django_cmd(sys, settings, "collectstatic --clear --noinput")) print("\t\tFinished collecting {} assets.".format(sys)) diff --git a/pavelib/paver_tests/test_servers.py b/pavelib/paver_tests/test_servers.py index 812dd58d7a..c68cae7fc2 100644 --- a/pavelib/paver_tests/test_servers.py +++ b/pavelib/paver_tests/test_servers.py @@ -27,7 +27,7 @@ EXPECTED_PREPROCESS_ASSETS_COMMAND = ( u" {system}/static/sass/*.scss {system}/static/themed_sass" ) EXPECTED_COLLECT_STATIC_COMMAND = ( - u"python manage.py {system} --settings={asset_settings} collectstatic --noinput > /dev/null" + u"python manage.py {system} --settings={asset_settings} collectstatic --clear --noinput" ) EXPECTED_CELERY_COMMAND = ( u"python manage.py lms --settings={settings} celery worker --beat --loglevel=INFO --pythonpath=." From f20f89590366c7f96e3c3549e1ddbbcf4132064b Mon Sep 17 00:00:00 2001 From: Edward Zarecor Date: Tue, 29 Mar 2016 17:04:15 -0400 Subject: [PATCH 03/70] Updating cookies settings --- lms/envs/aws.py | 6 ++++++ lms/envs/common.py | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lms/envs/aws.py b/lms/envs/aws.py index 22e178740e..54d4339072 100644 --- a/lms/envs/aws.py +++ b/lms/envs/aws.py @@ -349,6 +349,12 @@ FOOTER_BROWSER_CACHE_MAX_AGE = ENV_TOKENS.get('FOOTER_BROWSER_CACHE_MAX_AGE', FO NOTIFICATION_EMAIL_CSS = ENV_TOKENS.get('NOTIFICATION_EMAIL_CSS', NOTIFICATION_EMAIL_CSS) NOTIFICATION_EMAIL_EDX_LOGO = ENV_TOKENS.get('NOTIFICATION_EMAIL_EDX_LOGO', NOTIFICATION_EMAIL_EDX_LOGO) +# Determines whether the CSRF toke can be transported on +# unencrypted channels. It is set to False here for backward compatibility, +# but it is highly recommended that this is True for enviroments accessed +# by end users. +CSRF_COOKIE_SECURE = ENV_TOKENS.get('CSRF_COOKIE_SECURE', False) + ############# CORS headers for cross-domain requests ################# if FEATURES.get('ENABLE_CORS_HEADERS') or FEATURES.get('ENABLE_CROSS_DOMAIN_CSRF_COOKIE'): diff --git a/lms/envs/common.py b/lms/envs/common.py index e5dd407e2d..061c950d3e 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -2022,7 +2022,9 @@ MIGRATION_MODULES = { # Forwards-compatibility with Django 1.7 CSRF_COOKIE_AGE = 60 * 60 * 24 * 7 * 52 - +# It is highly recommended that you override this any enviroment accessed by +# end users +CSRF_COOKIE_SECURE = False ######################### Django Rest Framework ######################## From ae202dd54a330890f74a841a4048d1c31a9b9033 Mon Sep 17 00:00:00 2001 From: e0d Date: Fri, 8 Apr 2016 06:08:41 -0400 Subject: [PATCH 04/70] fix CR nits --- lms/envs/aws.py | 2 +- lms/envs/common.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lms/envs/aws.py b/lms/envs/aws.py index 54d4339072..d52c41294b 100644 --- a/lms/envs/aws.py +++ b/lms/envs/aws.py @@ -349,7 +349,7 @@ FOOTER_BROWSER_CACHE_MAX_AGE = ENV_TOKENS.get('FOOTER_BROWSER_CACHE_MAX_AGE', FO NOTIFICATION_EMAIL_CSS = ENV_TOKENS.get('NOTIFICATION_EMAIL_CSS', NOTIFICATION_EMAIL_CSS) NOTIFICATION_EMAIL_EDX_LOGO = ENV_TOKENS.get('NOTIFICATION_EMAIL_EDX_LOGO', NOTIFICATION_EMAIL_EDX_LOGO) -# Determines whether the CSRF toke can be transported on +# Determines whether the CSRF token can be transported on # unencrypted channels. It is set to False here for backward compatibility, # but it is highly recommended that this is True for enviroments accessed # by end users. diff --git a/lms/envs/common.py b/lms/envs/common.py index 061c950d3e..f3757d29b3 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -2022,7 +2022,7 @@ MIGRATION_MODULES = { # Forwards-compatibility with Django 1.7 CSRF_COOKIE_AGE = 60 * 60 * 24 * 7 * 52 -# It is highly recommended that you override this any enviroment accessed by +# It is highly recommended that you override this in any environment accessed by # end users CSRF_COOKIE_SECURE = False From 2be2b52f632650360f5a930299fe27c1bcc71a4b Mon Sep 17 00:00:00 2001 From: e0d Date: Fri, 8 Apr 2016 06:09:03 -0400 Subject: [PATCH 05/70] apply the setting to the CMS too --- cms/envs/aws.py | 6 ++++++ cms/envs/common.py | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/cms/envs/aws.py b/cms/envs/aws.py index 0068221147..3bd110ff10 100644 --- a/cms/envs/aws.py +++ b/cms/envs/aws.py @@ -168,6 +168,12 @@ if ENV_TOKENS.get('SESSION_COOKIE_NAME', None): EDXMKTG_LOGGED_IN_COOKIE_NAME = ENV_TOKENS.get('EDXMKTG_LOGGED_IN_COOKIE_NAME', EDXMKTG_LOGGED_IN_COOKIE_NAME) EDXMKTG_USER_INFO_COOKIE_NAME = ENV_TOKENS.get('EDXMKTG_USER_INFO_COOKIE_NAME', EDXMKTG_USER_INFO_COOKIE_NAME) +# Determines whether the CSRF token can be transported on +# unencrypted channels. It is set to False here for backward compatibility, +# but it is highly recommended that this is True for environments accessed +# by end users. +CSRF_COOKIE_SECURE = ENV_TOKENS.get('CSRF_COOKIE_SECURE', False) + #Email overrides DEFAULT_FROM_EMAIL = ENV_TOKENS.get('DEFAULT_FROM_EMAIL', DEFAULT_FROM_EMAIL) DEFAULT_FEEDBACK_EMAIL = ENV_TOKENS.get('DEFAULT_FEEDBACK_EMAIL', DEFAULT_FEEDBACK_EMAIL) diff --git a/cms/envs/common.py b/cms/envs/common.py index d145920406..7bb4d9663f 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -298,7 +298,9 @@ from lms.envs.common import ( # Forwards-compatibility with Django 1.7 CSRF_COOKIE_AGE = 60 * 60 * 24 * 7 * 52 - +# It is highly recommended that you override this in any environment accessed by +# end users +CSRF_COOKIE_SECURE = False #################### CAPA External Code Evaluation ############################# XQUEUE_INTERFACE = { From a14718bb923283e43f1d5fba08546d2585e00261 Mon Sep 17 00:00:00 2001 From: Christine Lytwynec Date: Wed, 6 Apr 2016 13:37:12 -0400 Subject: [PATCH 06/70] Add pa11ycrawler command --- .gitignore | 1 + .../test/acceptance/.pa11ycrawlercoveragerc | 40 +++++++ package.json | 2 + pavelib/bok_choy.py | 57 ++++++--- .../paver_tests/test_paver_bok_choy_cmds.py | 73 +++++++++++- pavelib/utils/envs.py | 3 + pavelib/utils/test/suites/__init__.py | 2 +- pavelib/utils/test/suites/bokchoy_suite.py | 112 +++++++++++++++++- requirements/edx/github.txt | 1 + scripts/accessibility-crawler.sh | 11 ++ 10 files changed, 279 insertions(+), 23 deletions(-) create mode 100644 common/test/acceptance/.pa11ycrawlercoveragerc create mode 100644 scripts/accessibility-crawler.sh diff --git a/.gitignore b/.gitignore index 78cd1732dc..256ff5d698 100644 --- a/.gitignore +++ b/.gitignore @@ -58,6 +58,7 @@ jscover.log jscover.log.* .tddium* common/test/data/test_unicode/static/ +test_root/courses/ django-pyfs ### Installation artifacts diff --git a/common/test/acceptance/.pa11ycrawlercoveragerc b/common/test/acceptance/.pa11ycrawlercoveragerc new file mode 100644 index 0000000000..69dac65f25 --- /dev/null +++ b/common/test/acceptance/.pa11ycrawlercoveragerc @@ -0,0 +1,40 @@ +[run] +data_file = reports/pa11ycrawler/.coverage + +source = + lms + cms + common/djangoapps + common/lib + openedx/core/djangoapps + **/mako_lms/ + **/mako_cms/ + +omit = + lms/envs/* + cms/envs/* + common/djangoapps/terrain/* + common/djangoapps/*/migrations/* + openedx/core/djangoapps/*/migrations/* + */test* + */management/* + */urls* + */wsgi* + lms/djangoapps/*/migrations/* + cms/djangoapps/*/migrations/* + +parallel = True + +[report] +ignore_errors = True +include = + **/views/*.py + **/views.py + + +[html] +title = pa11ycrawler Coverage Report +directory = reports/pa11ycrawler/cover + +[xml] +output = reports/pa11ycrawler/coverage.xml diff --git a/package.json b/package.json index 5b9cffa68b..b12c949be0 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,8 @@ "devDependencies": { "jshint": "^2.7.0", "edx-custom-a11y-rules": "edx/edx-custom-a11y-rules", + "pa11y": "3.6.0", + "pa11y-reporter-1.0-json": "1.0.2", "plato": "1.2.2" } } diff --git a/pavelib/bok_choy.py b/pavelib/bok_choy.py index af76e7512a..823882a9b4 100644 --- a/pavelib/bok_choy.py +++ b/pavelib/bok_choy.py @@ -3,7 +3,7 @@ Run acceptance tests that use the bok-choy framework http://bok-choy.readthedocs.org/en/latest/ """ from paver.easy import task, needs, cmdopts, sh -from pavelib.utils.test.suites.bokchoy_suite import BokChoyTestSuite +from pavelib.utils.test.suites.bokchoy_suite import BokChoyTestSuite, A11yCrawler from pavelib.utils.envs import Env from pavelib.utils.test.utils import check_firefox_version from optparse import make_option @@ -115,30 +115,44 @@ def test_a11y(options): @task @needs('pavelib.prereqs.install_prereqs') -@cmdopts([ - ('test_spec=', 't', 'Specific test to run'), - ('fasttest', 'a', 'Skip some setup'), +@cmdopts(BOKCHOY_OPTS + [ ('imports_dir=', 'd', 'Directory containing (un-archived) courses to be imported'), - ('default_store=', 's', 'Default modulestore'), - make_option("--verbose", action="store_const", const=2, dest="verbosity"), - make_option("-q", "--quiet", action="store_const", const=0, dest="verbosity"), - make_option("-v", "--verbosity", action="count", dest="verbosity"), ]) def perf_report_bokchoy(options): """ Generates a har file for with page performance info. """ - opts = { - 'test_spec': getattr(options, 'test_spec', None), - 'fasttest': getattr(options, 'fasttest', False), - 'default_store': getattr(options, 'default_store', os.environ.get('DEFAULT_STORE', 'split')), - 'imports_dir': getattr(options, 'imports_dir', None), - 'verbosity': getattr(options, 'verbosity', 2), - 'test_dir': 'performance', - } + opts = parse_bokchoy_opts(options) + opts['imports_dir'] = getattr(options, 'imports_dir', None) + opts['test_dir'] = 'performance' + run_bokchoy(**opts) +@task +@needs('pavelib.prereqs.install_prereqs') +@cmdopts(BOKCHOY_OPTS + [ + ('with-html', 'w', 'Include html reports'), +]) +def pa11ycrawler(options): + """ + Runs pa11ycrawler against the demo-test-course to generates accessibility + reports. (See https://github.com/edx/demo-test-course) + + Note: Like the bok-choy tests, this can be used with the `serversonly` + flag to get an environment running. The setup for this is the same as + for bok-choy tests, only test course is imported as well. + """ + opts = parse_bokchoy_opts(options) + opts['report_dir'] = Env.PA11YCRAWLER_REPORT_DIR + opts['coveragerc'] = Env.PA11YCRAWLER_COVERAGERC + test_suite = A11yCrawler('a11y_crawler', **opts) + test_suite.run() + + if getattr(options, 'with_html', False): + test_suite.generate_html_reports() + + def run_bokchoy(**opts): """ Runs BokChoyTestSuite with the given options. @@ -197,3 +211,14 @@ def a11y_coverage(): Env.BOK_CHOY_A11Y_REPORT_DIR, Env.BOK_CHOY_A11Y_COVERAGERC ) + + +@task +def pa11ycrawler_coverage(): + """ + Generate coverage reports for bok-choy tests + """ + parse_coverage( + Env.PA11YCRAWLER_REPORT_DIR, + Env.PA11YCRAWLER_COVERAGERC + ) diff --git a/pavelib/paver_tests/test_paver_bok_choy_cmds.py b/pavelib/paver_tests/test_paver_bok_choy_cmds.py index 849133ccb2..88fd4d2040 100644 --- a/pavelib/paver_tests/test_paver_bok_choy_cmds.py +++ b/pavelib/paver_tests/test_paver_bok_choy_cmds.py @@ -4,9 +4,11 @@ Run just this test with: paver test_lib -t pavelib/paver_tests/test_paver_bok_ch """ import os import unittest + +from mock import patch, call from test.test_support import EnvironmentVarGuard from paver.easy import BuildFailure -from pavelib.utils.test.suites import BokChoyTestSuite +from pavelib.utils.test.suites import BokChoyTestSuite, A11yCrawler REPO_DIR = os.getcwd() @@ -167,3 +169,72 @@ class TestPaverBokChoyCmd(unittest.TestCase): suite = BokChoyTestSuite('', num_processes=2, verbosity=3) with self.assertRaises(BuildFailure): BokChoyTestSuite.verbosity_processes_string(suite) + + +class TestPaverPa11ycrawlerCmd(unittest.TestCase): + + """ + Paver pa11ycrawler command test cases. Most of the functionality is + inherited from BokChoyTestSuite, so those tests aren't duplicated. + """ + + def setUp(self): + super(TestPaverPa11ycrawlerCmd, self).setUp() + + # Mock shell commands + mock_sh = patch('pavelib.utils.test.suites.bokchoy_suite.sh') + self._mock_sh = mock_sh.start() + + # Cleanup mocks + self.addCleanup(mock_sh.stop) + + def _expected_command(self, report_dir): + """ + Returns the expected command to run pa11ycrawler. + """ + cms_start_url = ( + "http://localhost:8031/auto_auth?redirect=true&course_id=course-v1" + "%3AedX%2BTest101%2Bcourse&staff=true" + ) + + lms_start_url = ( + "http://localhost:8003/auto_auth?redirect=true&course_id=course-v1" + "%3AedX%2BTest101%2Bcourse&staff=true" + ) + + expected_statement = ( + 'pa11ycrawler run "{cms_start_url}" "{lms_start_url}" ' + '--pa11ycrawler-allowed-domains=localhost ' + '--pa11ycrawler-reports-dir={report_dir} ' + '--pa11ycrawler-deny-url-matcher=logout ' + '--pa11y-reporter="1.0-json" ' + '--depth-limit=6 ' + ).format( + cms_start_url=cms_start_url, + lms_start_url=lms_start_url, + report_dir=report_dir, + ) + return expected_statement + + def test_default(self): + suite = A11yCrawler('') + self.assertEqual( + suite.cmd, self._expected_command(suite.pa11y_report_dir)) + + def test_get_test_course(self): + suite = A11yCrawler('') + suite.get_test_course() + self._mock_sh.assert_has_calls([ + call( + 'wget {targz} -O {dir}demo_course.tar.gz'.format(targz=suite.tar_gz_file, dir=suite.imports_dir)), + call( + 'tar zxf {dir}demo_course.tar.gz -C {dir}'.format(dir=suite.imports_dir)), + ]) + + def test_generate_html_reports(self): + suite = A11yCrawler('') + suite.generate_html_reports() + self._mock_sh.assert_has_calls([ + call( + 'pa11ycrawler json-to-html --pa11ycrawler-reports-dir={}'.format(suite.pa11y_report_dir)), + ]) diff --git a/pavelib/utils/envs.py b/pavelib/utils/envs.py index 6dc2f6ad45..a47dca9321 100644 --- a/pavelib/utils/envs.py +++ b/pavelib/utils/envs.py @@ -37,6 +37,9 @@ class Env(object): "lib" / "custom_a11y_rules.js" ) + PA11YCRAWLER_REPORT_DIR = REPORT_DIR / "pa11ycrawler" + PA11YCRAWLER_COVERAGERC = BOK_CHOY_DIR / ".pa11ycrawlercoveragerc" + # If set, put reports for run in "unique" directories. # The main purpose of this is to ensure that the reports can be 'slurped' # in the main jenkins flow job without overwriting the reports from other diff --git a/pavelib/utils/test/suites/__init__.py b/pavelib/utils/test/suites/__init__.py index afc24bf7db..0900f994fd 100644 --- a/pavelib/utils/test/suites/__init__.py +++ b/pavelib/utils/test/suites/__init__.py @@ -6,4 +6,4 @@ from .nose_suite import NoseTestSuite, SystemTestSuite, LibTestSuite from .python_suite import PythonTestSuite from .js_suite import JsTestSuite from .acceptance_suite import AcceptanceTestSuite -from .bokchoy_suite import BokChoyTestSuite +from .bokchoy_suite import BokChoyTestSuite, A11yCrawler diff --git a/pavelib/utils/test/suites/bokchoy_suite.py b/pavelib/utils/test/suites/bokchoy_suite.py index 38461a311a..4ec353626e 100644 --- a/pavelib/utils/test/suites/bokchoy_suite.py +++ b/pavelib/utils/test/suites/bokchoy_suite.py @@ -2,9 +2,11 @@ Class used for defining and running Bok Choy acceptance test suite """ from time import sleep +from urllib import urlencode from common.test.acceptance.fixtures.course import CourseFixture, FixtureError +from path import Path as path from paver.easy import sh, BuildFailure from pavelib.utils.test.suites.suite import TestSuite from pavelib.utils.envs import Env @@ -162,6 +164,26 @@ class BokChoyTestSuite(TestSuite): # load data in db_fixtures self.load_data() + # load courses if self.imports_dir is set + self.load_courses() + + # Ensure the test servers are available + msg = colorize('green', "Confirming servers are running...") + print msg + bokchoy_utils.start_servers(self.default_store, self.coveragerc) + + def load_courses(self): + """ + Loads courses from self.imports_dir. + + Note: self.imports_dir is the directory that contains the directories + that have courses in them. For example, if the course is located in + `test_root/courses/test-example-course/`, self.imports_dir should be + `test_root/courses/`. + """ + msg = colorize('green', "Importing courses from {}...".format(self.imports_dir)) + print msg + if self.imports_dir: sh( "DEFAULT_STORE={default_store}" @@ -171,11 +193,6 @@ class BokChoyTestSuite(TestSuite): ) ) - # Ensure the test servers are available - msg = colorize('green', "Confirming servers are running...") - print msg - bokchoy_utils.start_servers(self.default_store, self.coveragerc) - def load_data(self): """ Loads data into database from db_fixtures @@ -241,3 +258,88 @@ class BokChoyTestSuite(TestSuite): cmd = (" ").join(cmd) return cmd + + +class A11yCrawler(BokChoyTestSuite): + """ + Sets up test environment with mega-course loaded, and runs pa11ycralwer + against it. + """ + + def __init__(self, *args, **kwargs): + super(A11yCrawler, self).__init__(*args, **kwargs) + + self.pa11y_report_dir = os.path.join(self.report_dir, 'pa11ycrawler_reports') + self.imports_dir = path('test_root/courses/') + self.tar_gz_file = "https://github.com/edx/demo-test-course/archive/master.tar.gz" + + def __enter__(self): + self.get_test_course() + super(A11yCrawler, self).__enter__() + + def get_test_course(self): + """ + Fetches the test course. + """ + self.imports_dir.makedirs_p() + zipped_course = self.imports_dir + 'demo_course.tar.gz' + + msg = colorize('green', "Fetching the test course from github...") + print msg + + sh( + 'wget {tar_gz_file} -O {zipped_course}'.format( + tar_gz_file=self.tar_gz_file, + zipped_course=zipped_course, + ) + ) + + msg = colorize('green', "Uncompressing the test course...") + print msg + + sh( + 'tar zxf {zipped_course} -C {courses_dir}'.format( + zipped_course=zipped_course, + courses_dir=self.imports_dir, + ) + ) + + def generate_html_reports(self): + """ + Runs pa11ycrawler json-to-html + """ + cmd_str = ( + 'pa11ycrawler json-to-html --pa11ycrawler-reports-dir={report_dir}' + ).format(report_dir=self.pa11y_report_dir) + + sh(cmd_str) + + @property + def cmd(self): + """ + Runs pa11ycrawler as staff user against the test course. + """ + params = urlencode({ + "redirect": 'true', + "staff": 'true', + "course_id": "course-v1:edX+Test101+course", + }) + cms_start_url = 'http://localhost:8031/auto_auth?{}'.format(params) + lms_start_url = 'http://localhost:8003/auto_auth?{}'.format(params) + cmd_str = ( + 'pa11ycrawler run "{cms_start_url}" "{lms_start_url}" ' + '--pa11ycrawler-allowed-domains={allowed_domains} ' + '--pa11ycrawler-reports-dir={report_dir} ' + '--pa11ycrawler-deny-url-matcher={dont_go_here} ' + '--pa11y-reporter="{reporter}" ' + '--depth-limit={depth} ' + ).format( + cms_start_url=cms_start_url, + lms_start_url=lms_start_url, + allowed_domains='localhost', + report_dir=self.pa11y_report_dir, + reporter="1.0-json", + dont_go_here="logout", + depth="6", + ) + return cmd_str diff --git a/requirements/edx/github.txt b/requirements/edx/github.txt index a24663f7aa..86980aea41 100644 --- a/requirements/edx/github.txt +++ b/requirements/edx/github.txt @@ -67,6 +67,7 @@ git+https://github.com/edx/rfc6266.git@v0.0.5-edx#egg=rfc6266==0.0.5-edx # Used for testing git+https://github.com/edx/lettuce.git@0.2.20.002#egg=lettuce==0.2.20.002 +git+https://github.com/edx/pa11ycrawler.git@0.0.1#egg=pa11ycrawler # Our libraries: git+https://github.com/edx/XBlock.git@xblock-0.4.7#egg=XBlock==0.4.7 diff --git a/scripts/accessibility-crawler.sh b/scripts/accessibility-crawler.sh new file mode 100644 index 0000000000..00b517938c --- /dev/null +++ b/scripts/accessibility-crawler.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -e + +echo "Setting up for accessibility tests..." +source scripts/jenkins-common.sh + +echo "Running pa11ycrawler against test course..." +paver pa11ycrawler + +echo "Generating coverage report..." +paver pa11ycrawler_coverage From d8464dbfb04d35980dc6216a5d710c18ede79fd4 Mon Sep 17 00:00:00 2001 From: Ayub-khan Date: Thu, 14 Apr 2016 15:57:39 +0500 Subject: [PATCH 07/70] -changed method name from "from_string_or_404" to "course_key_from_string_or_404". -Updated method "course_key_from_string_or_404" to raise message too. -Wrote tests for "course_key_from_string_or_404" when exception message is given. -Modified existing methods to use "ddt.data". -Used Splunk logs to find exectly where we were getting "Invalid Key Error" -Updated Views where we were getting "Invalid Key Error" in splunk logs. -Wrote tests for those View End points where we were getting "Invalid Key Error" --- cms/djangoapps/contentstore/views/tabs.py | 5 +- .../contentstore/views/tests/test_tabs.py | 8 +++ .../contentstore/views/tests/test_user.py | 10 ++++ cms/djangoapps/contentstore/views/user.py | 4 +- common/djangoapps/util/course_key_utils.py | 9 +-- .../util/tests/test_course_key_utils.py | 60 ++++++++++++------- .../django_comment_client/forum/tests.py | 8 +++ .../django_comment_client/forum/views.py | 4 +- 8 files changed, 75 insertions(+), 33 deletions(-) diff --git a/cms/djangoapps/contentstore/views/tabs.py b/cms/djangoapps/contentstore/views/tabs.py index f79d4d0721..38d1c6a228 100644 --- a/cms/djangoapps/contentstore/views/tabs.py +++ b/cms/djangoapps/contentstore/views/tabs.py @@ -14,7 +14,8 @@ from edxmako.shortcuts import render_to_response from xmodule.modulestore.django import modulestore from xmodule.modulestore import ModuleStoreEnum from xmodule.tabs import CourseTabList, CourseTab, InvalidTabsException, StaticTab -from opaque_keys.edx.keys import CourseKey, UsageKey +from opaque_keys.edx.keys import UsageKey +from util.course_key_utils import course_key_from_string_or_404 from ..utils import get_lms_link_for_item @@ -39,7 +40,7 @@ def tabs_handler(request, course_key_string): Creating a tab, deleting a tab, or changing its contents is not supported through this method. Instead use the general xblock URL (see item.xblock_handler). """ - course_key = CourseKey.from_string(course_key_string) + course_key = course_key_from_string_or_404(course_key_string) if not has_course_author_access(request.user, course_key): raise PermissionDenied() diff --git a/cms/djangoapps/contentstore/views/tests/test_tabs.py b/cms/djangoapps/contentstore/views/tests/test_tabs.py index fde68931a3..d79630b845 100644 --- a/cms/djangoapps/contentstore/views/tests/test_tabs.py +++ b/cms/djangoapps/contentstore/views/tests/test_tabs.py @@ -10,6 +10,7 @@ from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.tabs import CourseTabList from xmodule.modulestore.django import modulestore +from django.http import Http404 class TabsPageTests(CourseTestCase): @@ -191,6 +192,13 @@ class TabsPageTests(CourseTestCase): self.assertIn('Delete this component', html) self.assertIn('', html) + def test_invalid_course_id(self): + """ Asserts that Http404 is raised when the course id is not valid. """ + invalid_tab_url = reverse_course_url('tabs_handler', "/some.invalid.key/TTT/CS01/2015_T0") + with self.assertRaises(Http404): + self.client.get(invalid_tab_url) + + class PrimitiveTabEdit(ModuleStoreTestCase): """Tests for the primitive tab edit data manipulations""" diff --git a/cms/djangoapps/contentstore/views/tests/test_user.py b/cms/djangoapps/contentstore/views/tests/test_user.py index 725858e44d..8c26ff4515 100644 --- a/cms/djangoapps/contentstore/views/tests/test_user.py +++ b/cms/djangoapps/contentstore/views/tests/test_user.py @@ -9,6 +9,7 @@ from django.contrib.auth.models import User from student.models import CourseEnrollment from student.roles import CourseStaffRole, CourseInstructorRole from student import auth +from django.http import Http404 class UsersTestCase(CourseTestCase): @@ -315,3 +316,12 @@ class UsersTestCase(CourseTestCase): CourseEnrollment.is_enrolled(self.ext_user, self.course.id), 'User ext_user should have been enrolled in the course' ) + + def test_invalid_course_id(self): + """ Asserts that Http404 is raised when the course id is not valid. """ + wrong_url = reverse_course_url( + 'course_team_handler', "/some.invalid.key/TTT/CS01/2015_T0", + kwargs={'email': self.ext_user.email} + ) + with self.assertRaises(Http404): + self.client.get(wrong_url) diff --git a/cms/djangoapps/contentstore/views/user.py b/cms/djangoapps/contentstore/views/user.py index e5da0a8194..79208a535d 100644 --- a/cms/djangoapps/contentstore/views/user.py +++ b/cms/djangoapps/contentstore/views/user.py @@ -8,7 +8,7 @@ from django.views.decorators.csrf import ensure_csrf_cookie from edxmako.shortcuts import render_to_response from xmodule.modulestore.django import modulestore -from opaque_keys.edx.keys import CourseKey +from util.course_key_utils import course_key_from_string_or_404 from opaque_keys.edx.locator import LibraryLocator from util.json_request import JsonResponse, expect_json from student.roles import CourseInstructorRole, CourseStaffRole, LibraryUserRole @@ -49,7 +49,7 @@ def course_team_handler(request, course_key_string=None, email=None): DELETE: json: remove a particular course team member from the course team (email is required). """ - course_key = CourseKey.from_string(course_key_string) if course_key_string else None + course_key = course_key_from_string_or_404(course_key_string) if course_key_string else None # No permissions check here - each helper method does its own check. if 'application/json' in request.META.get('HTTP_ACCEPT', 'application/json'): diff --git a/common/djangoapps/util/course_key_utils.py b/common/djangoapps/util/course_key_utils.py index ab58a6558d..44328d7d78 100644 --- a/common/djangoapps/util/course_key_utils.py +++ b/common/djangoapps/util/course_key_utils.py @@ -6,14 +6,15 @@ from opaque_keys import InvalidKeyError from opaque_keys.edx.keys import CourseKey -def from_string_or_404(course_key_string): +def course_key_from_string_or_404(course_key_string, message=None): """ Gets CourseKey from the string passed as parameter. Parses course key from string(containing course key) or raises 404 if the string's format is invalid. Arguments: - course_key_string(str): It is string containing the course key + course_key_string(str): It contains the course key + message(str): It contains the exception message Returns: CourseKey: A key that uniquely identifies a course @@ -25,6 +26,6 @@ def from_string_or_404(course_key_string): try: course_key = CourseKey.from_string(course_key_string) except InvalidKeyError: - raise Http404 + raise Http404(message) - return course_key + return course_key \ No newline at end of file diff --git a/common/djangoapps/util/tests/test_course_key_utils.py b/common/djangoapps/util/tests/test_course_key_utils.py index efc88a09ee..709abac9a2 100644 --- a/common/djangoapps/util/tests/test_course_key_utils.py +++ b/common/djangoapps/util/tests/test_course_key_utils.py @@ -1,32 +1,46 @@ """ Tests for util.course_key_utils """ -from nose.tools import assert_equals, assert_raises # pylint: disable=no-name-in-module -from util.course_key_utils import from_string_or_404 +from util.course_key_utils import course_key_from_string_or_404 from opaque_keys.edx.keys import CourseKey from django.http import Http404 +import ddt +import unittest -def test_from_string_or_404(): +@ddt.ddt +class TestFromStringOr404(unittest.TestCase): + """ + Base Test class for course_key_from_string_or_404 utility tests + """ + @ddt.data( + ("/some.invalid.key/course-v1:TTT+CS01+2015_T0", "course-v1:TTT+CS01+2015_T0"), # split style course keys + ("/some.invalid.key/TTT/CS01/2015_T0", "TTT/CS01/2015_T0"), # mongo style course keys + ) + def test_from_string_or_404(self, (invalid_course_key, valid_course_key)): + """ + Tests course_key_from_string_or_404 for valid and invalid split style course keys and mongo style course keys. + """ + self.assertRaises( + Http404, + course_key_from_string_or_404, + invalid_course_key, + ) + self.assertEquals( + CourseKey.from_string(valid_course_key), + course_key_from_string_or_404(valid_course_key) + ) - #testing with split style course keys - assert_raises( - Http404, - from_string_or_404, - "/some.invalid.key/course-v1:TTT+CS01+2015_T0" - ) - assert_equals( - CourseKey.from_string("course-v1:TTT+CS01+2015_T0"), - from_string_or_404("course-v1:TTT+CS01+2015_T0") - ) - - #testing with mongo style course keys - assert_raises( - Http404, - from_string_or_404, - "/some.invalid.key/TTT/CS01/2015_T0" - ) - assert_equals( - CourseKey.from_string("TTT/CS01/2015_T0"), - from_string_or_404("TTT/CS01/2015_T0") + @ddt.data( + "/some.invalid.key/course-v1:TTT+CS01+2015_T0", # split style invalid course key + "/some.invalid.key/TTT/CS01/2015_T0" # mongo style invalid course key ) + def test_from_string_or_404_with_message(self, course_string): + """ + Tests course_key_from_string_or_404 with exception message for split style and monog style invalid course keys. + :return: + """ + try: + course_key_from_string_or_404(course_string, message="Invalid Keys") + except Http404 as exception: + self.assertEquals(str(exception), "Invalid Keys") \ No newline at end of file diff --git a/lms/djangoapps/django_comment_client/forum/tests.py b/lms/djangoapps/django_comment_client/forum/tests.py index 66323a1968..06399ea2c5 100644 --- a/lms/djangoapps/django_comment_client/forum/tests.py +++ b/lms/djangoapps/django_comment_client/forum/tests.py @@ -1312,6 +1312,14 @@ class InlineDiscussionUnicodeTestCase(SharedModuleStoreTestCase, UnicodeTestMixi self.assertEqual(response_data["discussion_data"][0]["title"], text) self.assertEqual(response_data["discussion_data"][0]["body"], text) + def _test_invalid_course_id(self): + """ Asserts that Http404 is raised when the course id is not valid. """ + request = RequestFactory().get("dummy_url") + request.user = self.student + with self.assertRaises(Http404): + views.inline_discussion( + request, self.course.id.to_deprecated_string(), self.course.discussion_topics['General']['id'] + ) class ForumFormDiscussionUnicodeTestCase(SharedModuleStoreTestCase, UnicodeTestMixin): @classmethod diff --git a/lms/djangoapps/django_comment_client/forum/views.py b/lms/djangoapps/django_comment_client/forum/views.py index 1459d4c39c..2e6efcc023 100644 --- a/lms/djangoapps/django_comment_client/forum/views.py +++ b/lms/djangoapps/django_comment_client/forum/views.py @@ -40,7 +40,7 @@ from django_comment_client.utils import ( import django_comment_client.utils as utils import lms.lib.comment_client as cc -from opaque_keys.edx.keys import CourseKey +from util.course_key_utils import course_key_from_string_or_404 THREADS_PER_PAGE = 20 INLINE_THREADS_PER_PAGE = 20 @@ -178,7 +178,7 @@ def use_bulk_ops(view_func): """ @wraps(view_func) def wrapped_view(request, course_id, *args, **kwargs): # pylint: disable=missing-docstring - course_key = CourseKey.from_string(course_id) + course_key = course_key_from_string_or_404(course_id) with modulestore().bulk_operations(course_key): return view_func(request, course_key, *args, **kwargs) return wrapped_view From e925171361a79beeb1e5c13dd4ee21da2b94a9d3 Mon Sep 17 00:00:00 2001 From: Muddasser Date: Thu, 14 Apr 2016 17:55:19 +0500 Subject: [PATCH 08/70] fixed button click issue while repacing subtitles. --- common/test/acceptance/pages/studio/video/video.py | 8 ++++++++ .../tests/video/test_studio_video_transcript.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/common/test/acceptance/pages/studio/video/video.py b/common/test/acceptance/pages/studio/video/video.py index 83c2df6eed..79d2aa9462 100644 --- a/common/test/acceptance/pages/studio/video/video.py +++ b/common/test/acceptance/pages/studio/video/video.py @@ -10,6 +10,7 @@ from ....tests.helpers import YouTubeStubConfig from ...lms.video.video import VideoPage from ...common.utils import wait_for_notification from selenium.webdriver.common.keys import Keys +from selenium.webdriver.common.action_chains import ActionChains CLASS_SELECTORS = { @@ -135,6 +136,13 @@ class VideoComponentPage(VideoPage): """ return self.q(css=CLASS_SELECTORS['video_controls']).visible + def click_button_subtitles(self): + """ + Click .setting-replace button after first hovering to it. + """ + element = self.q(css='.setting-replace')[0] + ActionChains(self.browser).move_to_element(element).click(element).perform() + def click_button(self, button_name, index=0, require_notification=False): """ Click on a button as specified by `button_name` diff --git a/common/test/acceptance/tests/video/test_studio_video_transcript.py b/common/test/acceptance/tests/video/test_studio_video_transcript.py index d25e70c49f..8499052e49 100644 --- a/common/test/acceptance/tests/video/test_studio_video_transcript.py +++ b/common/test/acceptance/tests/video/test_studio_video_transcript.py @@ -177,7 +177,7 @@ class VideoTranscriptTest(CMSVideoBaseTest): self.video.set_url_field('http://youtu.be/t_neq_exist', 1) self.assertEqual(self.video.message('status'), 'Timed Transcript Conflict') self.assertTrue(self.video.is_transcript_button_visible('replace')) - self.video.click_button('replace') + self.video.click_button_subtitles() self.assertEqual(self.video.message('status'), 'Timed Transcript Found') self.open_advanced_tab() self.assertTrue(self.video.verify_field_value('Default Timed Transcript', 't_neq_exist')) From ef70d017c80575b5d12f5c8839d741e7cacc8806 Mon Sep 17 00:00:00 2001 From: Ayub-khan Date: Fri, 15 Apr 2016 15:40:21 +0500 Subject: [PATCH 09/70] -fixed failing tests -Adressed all comments --- cms/djangoapps/contentstore/views/course.py | 4 +-- .../contentstore/views/tests/test_tabs.py | 1 - common/djangoapps/util/course_key_utils.py | 2 +- .../util/tests/test_course_key_utils.py | 31 ++++++++++++------- .../django_comment_client/forum/tests.py | 5 +-- 5 files changed, 26 insertions(+), 17 deletions(-) diff --git a/cms/djangoapps/contentstore/views/course.py b/cms/djangoapps/contentstore/views/course.py index aa60bcadca..530b2f9d6b 100644 --- a/cms/djangoapps/contentstore/views/course.py +++ b/cms/djangoapps/contentstore/views/course.py @@ -91,7 +91,7 @@ from util.organizations_helpers import ( organizations_enabled, ) from util.string_utils import _has_non_ascii_characters -from util.course_key_utils import from_string_or_404 +from util.course_key_utils import course_key_from_string_or_404 from xmodule.contentstore.content import StaticContent from xmodule.course_module import CourseFields from xmodule.course_module import DEFAULT_START_DATE @@ -875,7 +875,7 @@ def course_info_handler(request, course_key_string): GET html: return html for editing the course info handouts and updates. """ - course_key = from_string_or_404(course_key_string) + course_key = course_key_from_string_or_404(course_key_string) with modulestore().bulk_operations(course_key): course_module = get_course_and_check_access(course_key, request.user) diff --git a/cms/djangoapps/contentstore/views/tests/test_tabs.py b/cms/djangoapps/contentstore/views/tests/test_tabs.py index d79630b845..c6b60341c7 100644 --- a/cms/djangoapps/contentstore/views/tests/test_tabs.py +++ b/cms/djangoapps/contentstore/views/tests/test_tabs.py @@ -199,7 +199,6 @@ class TabsPageTests(CourseTestCase): self.client.get(invalid_tab_url) - class PrimitiveTabEdit(ModuleStoreTestCase): """Tests for the primitive tab edit data manipulations""" diff --git a/common/djangoapps/util/course_key_utils.py b/common/djangoapps/util/course_key_utils.py index 44328d7d78..d3768e300d 100644 --- a/common/djangoapps/util/course_key_utils.py +++ b/common/djangoapps/util/course_key_utils.py @@ -28,4 +28,4 @@ def course_key_from_string_or_404(course_key_string, message=None): except InvalidKeyError: raise Http404(message) - return course_key \ No newline at end of file + return course_key diff --git a/common/djangoapps/util/tests/test_course_key_utils.py b/common/djangoapps/util/tests/test_course_key_utils.py index 709abac9a2..fdebbef10c 100644 --- a/common/djangoapps/util/tests/test_course_key_utils.py +++ b/common/djangoapps/util/tests/test_course_key_utils.py @@ -14,22 +14,32 @@ class TestFromStringOr404(unittest.TestCase): Base Test class for course_key_from_string_or_404 utility tests """ @ddt.data( - ("/some.invalid.key/course-v1:TTT+CS01+2015_T0", "course-v1:TTT+CS01+2015_T0"), # split style course keys - ("/some.invalid.key/TTT/CS01/2015_T0", "TTT/CS01/2015_T0"), # mongo style course keys + "course-v1:TTT+CS01+2015_T0", # split style course keys + "TTT/CS01/2015_T0" # mongo style course keys ) - def test_from_string_or_404(self, (invalid_course_key, valid_course_key)): + def test_from_string_or_404_for_valid_course_key(self, valid_course_key): """ - Tests course_key_from_string_or_404 for valid and invalid split style course keys and mongo style course keys. + Tests course_key_from_string_or_404 for valid split style course keys and mongo style course keys. + """ + from nose.tools import set_trace ; set_trace() + self.assertEquals( + CourseKey.from_string(valid_course_key), + course_key_from_string_or_404(valid_course_key) + ) + + @ddt.data( + "/some.invalid.key/course-v1:TTT+CS01+2015_T0", # split style course keys + "/some.invalid.key/TTT/CS01/2015_T0" # mongo style course keys + ) + def test_from_string_or_404_for_invalid_course_key(self, invalid_course_key): + """ + Tests course_key_from_string_or_404 for valid split style course keys and mongo style course keys. """ self.assertRaises( Http404, course_key_from_string_or_404, invalid_course_key, ) - self.assertEquals( - CourseKey.from_string(valid_course_key), - course_key_from_string_or_404(valid_course_key) - ) @ddt.data( "/some.invalid.key/course-v1:TTT+CS01+2015_T0", # split style invalid course key @@ -40,7 +50,6 @@ class TestFromStringOr404(unittest.TestCase): Tests course_key_from_string_or_404 with exception message for split style and monog style invalid course keys. :return: """ - try: + with self.assertRaises(Http404) as context: course_key_from_string_or_404(course_string, message="Invalid Keys") - except Http404 as exception: - self.assertEquals(str(exception), "Invalid Keys") \ No newline at end of file + self.assertEquals(str(context.exception), "Invalid Keys") diff --git a/lms/djangoapps/django_comment_client/forum/tests.py b/lms/djangoapps/django_comment_client/forum/tests.py index 06399ea2c5..4df7a5ea21 100644 --- a/lms/djangoapps/django_comment_client/forum/tests.py +++ b/lms/djangoapps/django_comment_client/forum/tests.py @@ -1318,8 +1318,9 @@ class InlineDiscussionUnicodeTestCase(SharedModuleStoreTestCase, UnicodeTestMixi request.user = self.student with self.assertRaises(Http404): views.inline_discussion( - request, self.course.id.to_deprecated_string(), self.course.discussion_topics['General']['id'] - ) + request, unicode(self.course.id), self.course.discussion_topics['General']['id'] + ) + class ForumFormDiscussionUnicodeTestCase(SharedModuleStoreTestCase, UnicodeTestMixin): @classmethod From 28ab627a50bf0b3d4f6936ee51e9c591a25d461d Mon Sep 17 00:00:00 2001 From: "J. Clifford Dyer" Date: Wed, 13 Apr 2016 20:57:46 +0000 Subject: [PATCH 10/70] Fix authentication issues with django-oauth-toolkit MA-2271 Allow inactive users to authenticate. MA-2273 Provide custom authenticate method that allows users to provide email. --- .../oauth_dispatch/dot_overrides.py | 43 ++++++++++++ .../tests/test_dot_overrides.py | 66 +++++++++++++++++++ lms/envs/common.py | 6 ++ 3 files changed, 115 insertions(+) create mode 100644 lms/djangoapps/oauth_dispatch/dot_overrides.py create mode 100644 lms/djangoapps/oauth_dispatch/tests/test_dot_overrides.py diff --git a/lms/djangoapps/oauth_dispatch/dot_overrides.py b/lms/djangoapps/oauth_dispatch/dot_overrides.py new file mode 100644 index 0000000000..98203d6cde --- /dev/null +++ b/lms/djangoapps/oauth_dispatch/dot_overrides.py @@ -0,0 +1,43 @@ +""" +Classes that override default django-oauth-toolkit behavior +""" + +from django.contrib.auth import authenticate, get_user_model +from oauth2_provider.oauth2_validators import OAuth2Validator + + +class EdxOAuth2Validator(OAuth2Validator): + """ + Validator class that implements edX-specific custom behavior: + + * It allows users to log in with their email or username. + * It does not require users to be active before logging in. + """ + + def validate_user(self, username, password, client, request, *args, **kwargs): + """ + Authenticate users, but allow inactive users (with u.is_active == False) + to authenticate. + """ + user = self._authenticate(username=username, password=password) + if user is not None: + request.user = user + return True + return False + + def _authenticate(self, username, password): + """ + Authenticate the user, allowing the user to identify themself either by + username or email + """ + + authenticated_user = authenticate(username=username, password=password) + if authenticated_user is None: + UserModel = get_user_model() # pylint: disable=invalid-name + try: + email_user = UserModel.objects.get(email=username) + except UserModel.DoesNotExist: + authenticated_user = None + else: + authenticated_user = authenticate(username=email_user.username, password=password) + return authenticated_user diff --git a/lms/djangoapps/oauth_dispatch/tests/test_dot_overrides.py b/lms/djangoapps/oauth_dispatch/tests/test_dot_overrides.py new file mode 100644 index 0000000000..bca14f9471 --- /dev/null +++ b/lms/djangoapps/oauth_dispatch/tests/test_dot_overrides.py @@ -0,0 +1,66 @@ +""" +Test of custom django-oauth-toolkit behavior +""" + +# pylint: disable=protected-access + +from django.contrib.auth.models import User +from django.test import TestCase, RequestFactory +from ..dot_overrides import EdxOAuth2Validator + + +class AuthenticateTestCase(TestCase): + """ + Test that users can authenticate with either username or email + """ + + def setUp(self): + super(AuthenticateTestCase, self).setUp() + self.user = User.objects.create_user( + username='darkhelmet', + password='12345', + email='darkhelmet@spaceball_one.org', + ) + self.validator = EdxOAuth2Validator() + + def test_authenticate_with_username(self): + user = self.validator._authenticate(username='darkhelmet', password='12345') + self.assertEqual( + self.user, + user + ) + + def test_authenticate_with_email(self): + user = self.validator._authenticate(username='darkhelmet@spaceball_one.org', password='12345') + self.assertEqual( + self.user, + user + ) + + +class CustomValidationTestCase(TestCase): + """ + Test custom user validation works. + + In particular, inactive users should be able to validate. + """ + def setUp(self): + super(CustomValidationTestCase, self).setUp() + self.user = User.objects.create_user( + username='darkhelmet', + password='12345', + email='darkhelmet@spaceball_one.org', + ) + self.validator = EdxOAuth2Validator() + self.request_factory = RequestFactory() + + def test_active_user_validates(self): + self.assertTrue(self.user.is_active) + request = self.request_factory.get('/') + self.assertTrue(self.validator.validate_user('darkhelmet', '12345', client=None, request=request)) + + def test_inactive_user_validates(self): + self.user.is_active = False + self.user.save() + request = self.request_factory.get('/') + self.assertTrue(self.validator.validate_user('darkhelmet', '12345', client=None, request=request)) diff --git a/lms/envs/common.py b/lms/envs/common.py index 6ad37a6ca9..e3e92e9b7e 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -455,6 +455,12 @@ OAUTH_OIDC_USERINFO_HANDLERS = ( OAUTH_EXPIRE_CONFIDENTIAL_CLIENT_DAYS = 365 OAUTH_EXPIRE_PUBLIC_CLIENT_DAYS = 30 +################################## DJANGO OAUTH TOOLKIT ####################################### + +OAUTH2_PROVIDER = { + 'OAUTH2_VALIDATOR_CLASS': 'lms.djangoapps.oauth_dispatch.dot_overrides.EdxOAuth2Validator' +} + ################################## TEMPLATE CONFIGURATION ##################################### # Mako templating # TODO: Move the Mako templating into a different engine in TEMPLATES below. From 36648510172166fdc9476666d3b220765e42a936 Mon Sep 17 00:00:00 2001 From: Fred Smith Date: Fri, 15 Apr 2016 13:11:24 -0400 Subject: [PATCH 11/70] make tests pass by creating staticfiles directories --- test_root/.gitignore | 1 - test_root/staticfiles/cms/.gitkeep | 0 test_root/staticfiles/lms/.gitkeep | 0 3 files changed, 1 deletion(-) create mode 100644 test_root/staticfiles/cms/.gitkeep create mode 100644 test_root/staticfiles/lms/.gitkeep diff --git a/test_root/.gitignore b/test_root/.gitignore index a17bd47875..b3e5512f73 100644 --- a/test_root/.gitignore +++ b/test_root/.gitignore @@ -1,3 +1,2 @@ local_repo remote_repo -staticfiles diff --git a/test_root/staticfiles/cms/.gitkeep b/test_root/staticfiles/cms/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test_root/staticfiles/lms/.gitkeep b/test_root/staticfiles/lms/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 From 182e34f893481ba578276da0542f4d1db55d0990 Mon Sep 17 00:00:00 2001 From: Renzo Lucioni Date: Thu, 7 Apr 2016 15:40:26 -0400 Subject: [PATCH 12/70] Acceptance tests for program listing page Includes a11y coverage. ECOM-3980. --- common/test/acceptance/fixtures/__init__.py | 2 +- common/test/acceptance/fixtures/config.py | 8 +- common/test/acceptance/fixtures/programs.py | 82 +++++++++++--- common/test/acceptance/pages/lms/programs.py | 22 ++++ .../acceptance/tests/lms/test_programs.py | 102 ++++++++++++++++++ .../tests/studio/test_studio_home.py | 35 +++--- 6 files changed, 212 insertions(+), 39 deletions(-) create mode 100644 common/test/acceptance/pages/lms/programs.py create mode 100644 common/test/acceptance/tests/lms/test_programs.py diff --git a/common/test/acceptance/fixtures/__init__.py b/common/test/acceptance/fixtures/__init__.py index 2cccb14c63..bbe146b430 100644 --- a/common/test/acceptance/fixtures/__init__.py +++ b/common/test/acceptance/fixtures/__init__.py @@ -18,5 +18,5 @@ COMMENTS_STUB_URL = os.environ.get('comments_url', 'http://localhost:4567') # Get the URL of the EdxNotes service stub used in the test EDXNOTES_STUB_URL = os.environ.get('edxnotes_url', 'http://localhost:8042') -# Get the URL of the EdxNotes service stub used in the test +# Get the URL of the Programs service stub used in the test PROGRAMS_STUB_URL = os.environ.get('programs_url', 'http://localhost:8090') diff --git a/common/test/acceptance/fixtures/config.py b/common/test/acceptance/fixtures/config.py index 402ca030b1..1a030415a4 100644 --- a/common/test/acceptance/fixtures/config.py +++ b/common/test/acceptance/fixtures/config.py @@ -9,7 +9,7 @@ from lazy import lazy from . import LMS_BASE_URL -class ConfigModelFixureError(Exception): +class ConfigModelFixtureError(Exception): """ Error occurred while configuring the stub XQueue. """ @@ -41,7 +41,7 @@ class ConfigModelFixture(object): ) if not response.ok: - raise ConfigModelFixureError( + raise ConfigModelFixtureError( "Could not configure url '{}'. response: {} - {}".format( self._api_base, response, @@ -53,7 +53,7 @@ class ConfigModelFixture(object): def session_cookies(self): """ Log in as a staff user, then return the cookies for the session (as a dict) - Raises a `ConfigModelFixureError` if the login fails. + Raises a `ConfigModelFixtureError` if the login fails. """ return {key: val for key, val in self.session.cookies.items()} @@ -92,4 +92,4 @@ class ConfigModelFixture(object): else: msg = "Could not log in to use ConfigModel restful API. Status code: {0}".format(response.status_code) - raise ConfigModelFixureError(msg) + raise ConfigModelFixtureError(msg) diff --git a/common/test/acceptance/fixtures/programs.py b/common/test/acceptance/fixtures/programs.py index 485b691beb..72ac918248 100644 --- a/common/test/acceptance/fixtures/programs.py +++ b/common/test/acceptance/fixtures/programs.py @@ -1,12 +1,17 @@ """ Tools to create programs-related data for use in bok choy tests. """ - +from collections import namedtuple import json + import factory import requests from . import PROGRAMS_STUB_URL +from .config import ConfigModelFixture + + +FakeProgram = namedtuple('FakeProgram', ['name', 'status', 'org_key', 'course_id']) class Program(factory.Factory): @@ -17,12 +22,14 @@ class Program(factory.Factory): model = dict id = factory.Sequence(lambda n: n) # pylint: disable=invalid-name - name = "dummy-program-name" - subtitle = "dummy-program-subtitle" - category = "xseries" - status = "unpublished" + name = 'dummy-program-name' + subtitle = 'dummy-program-subtitle' + category = 'xseries' + status = 'unpublished' + marketing_slug = factory.Sequence(lambda n: 'slug-{}'.format(n)) # pylint: disable=unnecessary-lambda organizations = [] course_codes = [] + banner_image_urls = {} class Organization(factory.Factory): @@ -32,8 +39,30 @@ class Organization(factory.Factory): class Meta(object): model = dict - key = "dummyX" - display_name = "dummy-org-display-name" + key = 'dummyX' + display_name = 'dummy-org-display-name' + + +class CourseCode(factory.Factory): + """ + Factory for stubbing nested course code resources from the Programs API (v1). + """ + class Meta(object): + model = dict + + display_name = 'dummy-org-display-name' + run_modes = [] + + +class RunMode(factory.Factory): + """ + Factory for stubbing nested run mode resources from the Programs API (v1). + """ + class Meta(object): + model = dict + + course_key = 'org/course/run' + mode_slug = 'verified' class ProgramsFixture(object): @@ -41,16 +70,24 @@ class ProgramsFixture(object): Interface to set up mock responses from the Programs stub server. """ - def install_programs(self, program_values): + def install_programs(self, fake_programs): """ Sets the response data for the programs list endpoint. - At present, `program_values` needs to be a sequence of sequences of (program_name, org_key). + At present, `fake_programs` must be a iterable of FakeProgram named tuples. """ programs = [] - for program_name, org_key in program_values: - org = Organization(key=org_key) - program = Program(name=program_name, organizations=[org]) + for program in fake_programs: + run_mode = RunMode(course_key=program.course_id) + course_code = CourseCode(run_modes=[run_mode]) + org = Organization(key=program.org_key) + + program = Program( + name=program.name, + status=program.status, + organizations=[org], + course_codes=[course_code] + ) programs.append(program) api_result = {'results': programs} @@ -59,3 +96,24 @@ class ProgramsFixture(object): '{}/set_config'.format(PROGRAMS_STUB_URL), data={'programs': json.dumps(api_result)}, ) + + +class ProgramsConfigMixin(object): + """Mixin providing a method used to configure the programs feature.""" + def set_programs_api_configuration(self, is_enabled=False, api_version=1, api_url=PROGRAMS_STUB_URL, + js_path='/js', css_path='/css'): + """Dynamically adjusts the Programs config model during tests.""" + ConfigModelFixture('/config/programs', { + 'enabled': is_enabled, + 'api_version_number': api_version, + 'internal_service_url': api_url, + 'public_service_url': api_url, + 'authoring_app_js_path': js_path, + 'authoring_app_css_path': css_path, + 'cache_ttl': 0, + 'enable_student_dashboard': is_enabled, + 'enable_studio_tab': is_enabled, + 'enable_certification': is_enabled, + 'xseries_ad_enabled': is_enabled, + 'program_listing_enabled': is_enabled, + }).install() diff --git a/common/test/acceptance/pages/lms/programs.py b/common/test/acceptance/pages/lms/programs.py new file mode 100644 index 0000000000..08efd8558a --- /dev/null +++ b/common/test/acceptance/pages/lms/programs.py @@ -0,0 +1,22 @@ +"""LMS-hosted Programs pages""" +from bok_choy.page_object import PageObject + +from . import BASE_URL + + +class ProgramListingPage(PageObject): + """Program listing page.""" + url = BASE_URL + '/dashboard/programs/' + + def is_browser_on_page(self): + return self.q(css='.program-list-wrapper').present + + @property + def are_cards_present(self): + """Check whether program cards are present.""" + return self.q(css='.program-card').present + + @property + def is_sidebar_present(self): + """Check whether sidebar is present.""" + return self.q(css='.sidebar').present diff --git a/common/test/acceptance/tests/lms/test_programs.py b/common/test/acceptance/tests/lms/test_programs.py new file mode 100644 index 0000000000..2d69fbcc14 --- /dev/null +++ b/common/test/acceptance/tests/lms/test_programs.py @@ -0,0 +1,102 @@ +"""Acceptance tests for LMS-hosted Programs pages""" +from nose.plugins.attrib import attr + +from ...fixtures.programs import FakeProgram, ProgramsFixture, ProgramsConfigMixin +from ...fixtures.course import CourseFixture +from ..helpers import UniqueCourseTest +from ...pages.lms.auto_auth import AutoAuthPage +from ...pages.lms.programs import ProgramListingPage + + +class ProgramListingPageBase(ProgramsConfigMixin, UniqueCourseTest): + """Base class used for program listing page tests.""" + def setUp(self): + super(ProgramListingPageBase, self).setUp() + + self.set_programs_api_configuration(is_enabled=True) + self.listing_page = ProgramListingPage(self.browser) + + def stub_api(self, course_id=None): + """Stub out the programs API with fake data.""" + name = 'Fake Program' + status = 'active' + org_key = self.course_info['org'] + course_id = course_id if course_id else self.course_id + + ProgramsFixture().install_programs([ + FakeProgram(name=name, status=status, org_key=org_key, course_id=course_id), + ]) + + def auth(self, enroll=True): + """Authenticate, enrolling the user in the configured course if requested.""" + CourseFixture(**self.course_info).install() + + course_id = self.course_id if enroll else None + AutoAuthPage(self.browser, course_id=course_id).visit() + + +class ProgramListingPageTest(ProgramListingPageBase): + """Verify user-facing behavior of the program listing page.""" + def test_no_enrollments(self): + """Verify that no cards appear when the user has no enrollments.""" + self.stub_api() + self.auth(enroll=False) + self.listing_page.visit() + + self.assertTrue(self.listing_page.is_sidebar_present) + self.assertFalse(self.listing_page.are_cards_present) + + def test_no_programs(self): + """ + Verify that no cards appear when the user has enrollments + but none are included in an active program. + """ + course_id = self.course_id.replace( + self.course_info['run'], + 'other_run' + ) + self.stub_api(course_id=course_id) + self.auth() + self.listing_page.visit() + + self.assertTrue(self.listing_page.is_sidebar_present) + self.assertFalse(self.listing_page.are_cards_present) + + def test_enrollments_and_programs(self): + """ + Verify that cards appear when the user has enrollments + which are included in at least one active program. + """ + self.stub_api() + self.auth() + self.listing_page.visit() + + self.assertTrue(self.listing_page.is_sidebar_present) + self.assertTrue(self.listing_page.are_cards_present) + + +@attr('a11y') +class ProgramListingPageA11yTest(ProgramListingPageBase): + """Test program listing page accessibility.""" + + def test_empty_a11y(self): + """Test a11y of the page's empty state.""" + self.stub_api() + self.auth(enroll=False) + self.listing_page.visit() + + self.assertTrue(self.listing_page.is_sidebar_present) + self.assertFalse(self.listing_page.are_cards_present) + + self.listing_page.a11y_audit.check_for_accessibility_errors() + + def test_cards_a11y(self): + """Test a11y when program cards are present.""" + self.stub_api() + self.auth() + self.listing_page.visit() + + self.assertTrue(self.listing_page.is_sidebar_present) + self.assertTrue(self.listing_page.are_cards_present) + + self.listing_page.a11y_audit.check_for_accessibility_errors() diff --git a/common/test/acceptance/tests/studio/test_studio_home.py b/common/test/acceptance/tests/studio/test_studio_home.py index 8240135f89..ddd58d4aed 100644 --- a/common/test/acceptance/tests/studio/test_studio_home.py +++ b/common/test/acceptance/tests/studio/test_studio_home.py @@ -8,7 +8,7 @@ from uuid import uuid4 from ...fixtures import PROGRAMS_STUB_URL from ...fixtures.config import ConfigModelFixture -from ...fixtures.programs import ProgramsFixture +from ...fixtures.programs import FakeProgram, ProgramsFixture, ProgramsConfigMixin from ...pages.studio.auto_auth import AutoAuthPage from ...pages.studio.library import LibraryEditPage from ...pages.studio.index import DashboardPage, DashboardPageWithPrograms @@ -69,7 +69,7 @@ class CreateLibraryTest(WebAppTest): self.assertTrue(self.dashboard_page.has_library(name=name, org=org, number=number)) -class DashboardProgramsTabTest(WebAppTest): +class DashboardProgramsTabTest(ProgramsConfigMixin, WebAppTest): """ Test the programs tab on the studio home page. """ @@ -81,23 +81,6 @@ class DashboardProgramsTabTest(WebAppTest): self.dashboard_page = DashboardPageWithPrograms(self.browser) self.auth_page.visit() - def set_programs_api_configuration(self, is_enabled=False, api_version=1, api_url=PROGRAMS_STUB_URL, - js_path='/js', css_path='/css'): - """ - Dynamically adjusts the programs API config model during tests. - """ - ConfigModelFixture('/config/programs', { - 'enabled': is_enabled, - 'enable_studio_tab': is_enabled, - 'enable_student_dashboard': is_enabled, - 'api_version_number': api_version, - 'internal_service_url': api_url, - 'public_service_url': api_url, - 'authoring_app_js_path': js_path, - 'authoring_app_css_path': css_path, - 'cache_ttl': 0 - }).install() - def test_tab_is_disabled(self): """ The programs tab and "new program" button should not appear at all @@ -128,16 +111,24 @@ class DashboardProgramsTabTest(WebAppTest): via config, and the results of the program list should display when the list is nonempty. """ - test_program_values = [('first program', 'org1'), ('second program', 'org2')] + test_program_values = [ + FakeProgram(name='first program', status='unpublished', org_key='org1', course_id='foo/bar/baz'), + FakeProgram(name='second program', status='unpublished', org_key='org2', course_id='qux/quux/corge'), + ] ProgramsFixture().install_programs(test_program_values) + self.set_programs_api_configuration(True) + self.dashboard_page.visit() + self.assertTrue(self.dashboard_page.is_programs_tab_present()) self.assertTrue(self.dashboard_page.is_new_program_button_present()) - results = self.dashboard_page.get_program_list() - self.assertEqual(results, test_program_values) self.assertFalse(self.dashboard_page.is_empty_list_create_button_present()) + results = self.dashboard_page.get_program_list() + expected = [(p.name, p.org_key) for p in test_program_values] + self.assertEqual(results, expected) + def test_tab_requires_staff(self): """ The programs tab and "new program" button will not be available, even From 8304c96808e187f80624380c871b6c15585c8ab1 Mon Sep 17 00:00:00 2001 From: Renzo Lucioni Date: Fri, 15 Apr 2016 14:52:15 -0400 Subject: [PATCH 13/70] Upgrade edx-management-commands to 0.1.1 --- requirements/edx/base.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index 9f523ea145..6d9589e60f 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -38,7 +38,7 @@ djangorestframework-jwt==1.7.2 djangorestframework-oauth==1.1.0 edx-ccx-keys==0.1.2 edx-lint==0.4.3 -edx-management-commands==0.0.1 +edx-management-commands==0.1.1 edx-django-oauth2-provider==1.0.3 edx-oauth2-provider==1.0.1 edx-opaque-keys==0.2.1 From 1d57b498befe1e7c51f1dc68585bf26b74bad705 Mon Sep 17 00:00:00 2001 From: Ben Patterson Date: Fri, 15 Apr 2016 17:49:51 -0400 Subject: [PATCH 14/70] fix flaky condition in education dropdown. --- common/test/acceptance/tests/lms/test_account_settings.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/test/acceptance/tests/lms/test_account_settings.py b/common/test/acceptance/tests/lms/test_account_settings.py index 9c720f3d7c..c2756781f9 100644 --- a/common/test/acceptance/tests/lms/test_account_settings.py +++ b/common/test/acceptance/tests/lms/test_account_settings.py @@ -231,7 +231,8 @@ class AccountSettingsPageTest(AccountSettingsTestMixin, WebAppTest): for new_value in new_values: self.assertEqual(self.account_settings_page.value_for_dropdown_field(field_id, new_value), new_value) - self.account_settings_page.wait_for_message(field_id, success_message) + # An XHR request is made when changing the field + self.account_settings_page.wait_for_ajax() if reloads_on_save: self.account_settings_page.wait_for_loading_indicator() else: From 0151a149b030f21770b9311c92eb5416fc7c027a Mon Sep 17 00:00:00 2001 From: Dmitry Viskov Date: Mon, 14 Mar 2016 19:07:56 +0300 Subject: [PATCH 15/70] Asides can be exported with the rest of courseware through the Export function within CMS --- .../tests/test_mixed_modulestore.py | 204 ++++++++++++++++++ common/lib/xmodule/xmodule/xml_module.py | 7 + requirements/edx/github.txt | 2 +- 3 files changed, 212 insertions(+), 1 deletion(-) diff --git a/common/lib/xmodule/xmodule/modulestore/tests/test_mixed_modulestore.py b/common/lib/xmodule/xmodule/modulestore/tests/test_mixed_modulestore.py index dbe4a21f03..63cad4a892 100644 --- a/common/lib/xmodule/xmodule/modulestore/tests/test_mixed_modulestore.py +++ b/common/lib/xmodule/xmodule/modulestore/tests/test_mixed_modulestore.py @@ -3095,6 +3095,210 @@ class TestPublishOverExportImport(CommonMixedModuleStoreSetup): chapter_aside2 = new_chapter2.runtime.get_asides(new_chapter2)[0] self.assertEqual('another one value', chapter_aside2.data_field) + @ddt.data(ModuleStoreEnum.Type.mongo, ModuleStoreEnum.Type.split) + @XBlockAside.register_temp_plugin(AsideTestType, 'test_aside') + @patch('xmodule.modulestore.split_mongo.caching_descriptor_system.CachingDescriptorSystem.applicable_aside_types', + lambda self, block: ['test_aside']) + def test_export_course_with_asides(self, default_store): + if default_store == ModuleStoreEnum.Type.mongo: + raise SkipTest("asides not supported in old mongo") + with MongoContentstoreBuilder().build() as contentstore: + self.store = MixedModuleStore( + contentstore=contentstore, + create_modulestore_instance=create_modulestore_instance, + mappings={}, + **self.OPTIONS + ) + self.addCleanup(self.store.close_all_connections) + with self.store.default_store(default_store): + dest_course_key = self.store.make_course_key('edX', "aside_test", "2012_Fall") + dest_course_key2 = self.store.make_course_key('edX', "aside_test_2", "2012_Fall_2") + + courses = import_course_from_xml( + self.store, + self.user_id, + DATA_DIR, + ['aside'], + load_error_modules=False, + static_content_store=contentstore, + target_id=dest_course_key, + create_if_not_present=True, + ) + + def update_block_aside(block): + """ + Check whether block has the expected aside w/ its fields and then recurse to the block's children + """ + asides = block.runtime.get_asides(block) + asides[0].data_field = ''.join(['Exported data_field ', asides[0].data_field]) + asides[0].content = ''.join(['Exported content ', asides[0].content]) + + self.store.update_item(block, self.user_id, asides=[asides[0]]) + + for child in block.get_children(): + update_block_aside(child) + + update_block_aside(courses[0]) + + # export course to xml + top_level_export_dir = 'exported_source_course_with_asides' + export_course_to_xml( + self.store, + contentstore, + dest_course_key, + self.export_dir, + top_level_export_dir, + ) + + # and restore the new one from the exported xml + courses2 = import_course_from_xml( + self.store, + self.user_id, + self.export_dir, + source_dirs=[top_level_export_dir], + static_content_store=contentstore, + target_id=dest_course_key2, + create_if_not_present=True, + raise_on_failure=True, + ) + + self.assertEquals(1, len(courses2)) + + # check that the imported blocks have the right asides and values + def check_block(block): + """ + Check whether block has the expected aside w/ its fields and then recurse to the block's children + """ + asides = block.runtime.get_asides(block) + + self.assertEqual(len(asides), 1, "Found {} asides but expected only test_aside".format(asides)) + self.assertIsInstance(asides[0], AsideTestType) + category = block.scope_ids.block_type + self.assertEqual(asides[0].data_field, "Exported data_field {} aside data".format(category)) + self.assertEqual(asides[0].content, "Exported content {} Aside".format(category.capitalize())) + + for child in block.get_children(): + check_block(child) + + check_block(courses2[0]) + + @ddt.data(ModuleStoreEnum.Type.mongo, ModuleStoreEnum.Type.split) + @XBlockAside.register_temp_plugin(AsideTestType, 'test_aside') + @patch('xmodule.modulestore.split_mongo.caching_descriptor_system.CachingDescriptorSystem.applicable_aside_types', + lambda self, block: ['test_aside']) + def test_export_course_after_creating_new_items_with_asides(self, default_store): # pylint: disable=too-many-statements + if default_store == ModuleStoreEnum.Type.mongo: + raise SkipTest("asides not supported in old mongo") + with MongoContentstoreBuilder().build() as contentstore: + self.store = MixedModuleStore( + contentstore=contentstore, + create_modulestore_instance=create_modulestore_instance, + mappings={}, + **self.OPTIONS + ) + self.addCleanup(self.store.close_all_connections) + with self.store.default_store(default_store): + dest_course_key = self.store.make_course_key('edX', "aside_test", "2012_Fall") + dest_course_key2 = self.store.make_course_key('edX', "aside_test_2", "2012_Fall_2") + + courses = import_course_from_xml( + self.store, + self.user_id, + DATA_DIR, + ['aside'], + load_error_modules=False, + static_content_store=contentstore, + target_id=dest_course_key, + create_if_not_present=True, + ) + + # create new chapter and modify aside for it + new_chapter_display_name = 'New Chapter' + new_chapter = self.store.create_child(self.user_id, courses[0].location, 'chapter', 'new_chapter') + new_chapter.display_name = new_chapter_display_name + asides = new_chapter.runtime.get_asides(new_chapter) + + self.assertEqual(len(asides), 1, "Found {} asides but expected only test_aside".format(asides)) + chapter_aside = asides[0] + self.assertIsInstance(chapter_aside, AsideTestType) + chapter_aside.data_field = 'new value' + self.store.update_item(new_chapter, self.user_id, asides=[chapter_aside]) + + # create new problem and modify aside for it + sequence = courses[0].get_children()[0].get_children()[0] + new_problem_display_name = 'New Problem' + new_problem = self.store.create_child(self.user_id, sequence.location, 'problem', 'new_problem') + new_problem.display_name = new_problem_display_name + asides = new_problem.runtime.get_asides(new_problem) + + self.assertEqual(len(asides), 1, "Found {} asides but expected only test_aside".format(asides)) + problem_aside = asides[0] + self.assertIsInstance(problem_aside, AsideTestType) + problem_aside.data_field = 'new problem value' + problem_aside.content = 'new content value' + self.store.update_item(new_problem, self.user_id, asides=[problem_aside]) + + # export course to xml + top_level_export_dir = 'exported_source_course_with_asides' + export_course_to_xml( + self.store, + contentstore, + dest_course_key, + self.export_dir, + top_level_export_dir, + ) + + # and restore the new one from the exported xml + courses2 = import_course_from_xml( + self.store, + self.user_id, + self.export_dir, + source_dirs=[top_level_export_dir], + static_content_store=contentstore, + target_id=dest_course_key2, + create_if_not_present=True, + raise_on_failure=True, + ) + + self.assertEquals(1, len(courses2)) + + # check that aside for the new chapter was exported/imported properly + chapters = courses2[0].get_children() + self.assertEquals(2, len(chapters)) + self.assertIn(new_chapter_display_name, [item.display_name for item in chapters]) + + found = False + for child in chapters: + if new_chapter.display_name == child.display_name: + found = True + asides = child.runtime.get_asides(child) + self.assertEqual(len(asides), 1) + child_aside = asides[0] + self.assertIsInstance(child_aside, AsideTestType) + self.assertEquals(child_aside.data_field, 'new value') + break + + self.assertTrue(found, "new_chapter not found") + + # check that aside for the new problem was exported/imported properly + sequence_children = courses2[0].get_children()[0].get_children()[0].get_children() + self.assertEquals(2, len(sequence_children)) + self.assertIn(new_problem_display_name, [item.display_name for item in sequence_children]) + + found = False + for child in sequence_children: + if new_problem.display_name == child.display_name: + found = True + asides = child.runtime.get_asides(child) + self.assertEqual(len(asides), 1) + child_aside = asides[0] + self.assertIsInstance(child_aside, AsideTestType) + self.assertEquals(child_aside.data_field, 'new problem value') + self.assertEquals(child_aside.content, 'new content value') + break + + self.assertTrue(found, "new_chapter not found") + @ddt.ddt @attr('mongo') diff --git a/common/lib/xmodule/xmodule/xml_module.py b/common/lib/xmodule/xmodule/xml_module.py index 7e6d439a01..d7a7fe7cdb 100644 --- a/common/lib/xmodule/xmodule/xml_module.py +++ b/common/lib/xmodule/xmodule/xml_module.py @@ -5,6 +5,7 @@ import os import sys from lxml import etree +from xblock.core import XML_NAMESPACES from xblock.fields import Dict, Scope, ScopeIds from xblock.runtime import KvsFieldData from xmodule.x_module import XModuleDescriptor, DEPRECATION_VSCOMPAT_EVENT @@ -428,6 +429,12 @@ class XmlParserMixin(object): """ # Get the definition xml_object = self.definition_to_xml(self.runtime.export_fs) + for aside in self.runtime.get_asides(self): + if aside.needs_serialization(): + aside_node = etree.Element("unknown_root", nsmap=XML_NAMESPACES) + aside.add_xml_to_node(aside_node) + xml_object.append(aside_node) + self.clean_metadata_from_xml(xml_object) # Set the tag on both nodes so we get the file path right. diff --git a/requirements/edx/github.txt b/requirements/edx/github.txt index bf5b98c622..bd90fbec23 100644 --- a/requirements/edx/github.txt +++ b/requirements/edx/github.txt @@ -69,7 +69,7 @@ git+https://github.com/edx/rfc6266.git@v0.0.5-edx#egg=rfc6266==0.0.5-edx git+https://github.com/edx/lettuce.git@0.2.20.002#egg=lettuce==0.2.20.002 # Our libraries: -git+https://github.com/edx/XBlock.git@xblock-0.4.7#egg=XBlock==0.4.7 +git+https://github.com/edx/XBlock.git@xblock-0.4.8#egg=XBlock==0.4.8 -e git+https://github.com/edx/codejail.git@6b17c33a89bef0ac510926b1d7fea2748b73aadd#egg=codejail -e git+https://github.com/edx/js-test-tool.git@v0.1.6#egg=js_test_tool -e git+https://github.com/edx/event-tracking.git@0.2.1#egg=event-tracking==0.2.1 From 14abf32b4bf8f3d748db0e23c72d47935c93cc69 Mon Sep 17 00:00:00 2001 From: Robert Raposa Date: Tue, 12 Apr 2016 17:49:53 -0400 Subject: [PATCH 16/70] Add check for HTML entities --- scripts/safe_template_linter.py | 20 +++++++++++++++++--- scripts/tests/test_safe_template_linter.py | 8 ++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/scripts/safe_template_linter.py b/scripts/safe_template_linter.py index e543adb684..d85433baff 100755 --- a/scripts/safe_template_linter.py +++ b/scripts/safe_template_linter.py @@ -246,6 +246,10 @@ class Rules(Enum): 'mako-wrap-html', "String containing HTML should be wrapped with call to HTML()." ) + mako_html_entities = ( + 'mako-html-entities', + "HTML entities should be plain text or wrapped with HTML()." + ) underscore_not_escaped = ( 'underscore-not-escaped', 'Expressions should be escaped using <%- expression %>.' @@ -761,7 +765,7 @@ class MakoTemplateLinter(object): context = self._get_context(contexts, expression['start_index']) self._check_filters(mako_template, expression, context, has_page_default, results) self._check_deprecated_display_name(expression, results) - self._check_html_and_text(expression, results) + self._check_html_and_text(expression, has_page_default, results) def _check_deprecated_display_name(self, expression, results): """ @@ -779,13 +783,15 @@ class MakoTemplateLinter(object): Rules.mako_deprecated_display_name, expression )) - def _check_html_and_text(self, expression, results): + def _check_html_and_text(self, expression, has_page_default, results): """ Checks rules related to proper use of HTML() and Text(). Arguments: expression: A dict containing the start_index, end_index, and expression (text) of the expression. + has_page_default: True if the page is marked as default, False + otherwise. results: A list of results into which violations will be added. """ @@ -836,13 +842,21 @@ class MakoTemplateLinter(object): if html_inner_start_index <= string.start_index and string.end_index <= html_inner_end_index: unwrapped_html_strings.remove(string) - # check strings not wrapped in HTML() + # check strings not wrapped in HTML() for '<' for string in unwrapped_html_strings: if '<' in string.string_inner: results.violations.append(ExpressionRuleViolation( Rules.mako_wrap_html, expression )) break + # check strings not wrapped in HTML() for HTML entities + if has_page_default: + for string in unwrapped_html_strings: + if re.search(r"&[#]?[a-zA-Z0-9]+;", string.string_inner): + results.violations.append(ExpressionRuleViolation( + Rules.mako_html_entities, expression + )) + break def _check_filters(self, mako_template, expression, context, has_page_default, results): """ diff --git a/scripts/tests/test_safe_template_linter.py b/scripts/tests/test_safe_template_linter.py index da68230101..3a1b1dfd24 100644 --- a/scripts/tests/test_safe_template_linter.py +++ b/scripts/tests/test_safe_template_linter.py @@ -255,6 +255,14 @@ class TestMakoTemplateLinter(TestCase): 'expression': "${ HTML('') + 'some other text' }", 'rule': Rules.mako_html_alone }, + { + 'expression': "${'Rock & Roll'}", + 'rule': Rules.mako_html_entities + }, + { + 'expression': "${'Rock & Roll'}", + 'rule': Rules.mako_html_entities + }, ) def test_check_mako_with_text_and_html(self, data): """ From 0e7a837e11213c94f9ffdd26a7b3a16ce8da4765 Mon Sep 17 00:00:00 2001 From: Dmitry Viskov Date: Thu, 24 Mar 2016 21:14:09 +0300 Subject: [PATCH 17/70] The problem Grade Report (from the Data Downloads page) must show the problems in the order they occur within the course. --- .../instructor_task/tasks_helper.py | 2 +- .../instructor_task/tests/test_base.py | 10 +++ .../tests/test_tasks_helper.py | 72 +++++++++++++++++-- 3 files changed, 77 insertions(+), 7 deletions(-) diff --git a/lms/djangoapps/instructor_task/tasks_helper.py b/lms/djangoapps/instructor_task/tasks_helper.py index 8e54d77fec..8287432d70 100644 --- a/lms/djangoapps/instructor_task/tasks_helper.py +++ b/lms/djangoapps/instructor_task/tasks_helper.py @@ -836,7 +836,7 @@ def _order_problems(blocks): an OrderedDict that maps a problem id to its headers in the final report. """ problems = OrderedDict() - assignments = dict() + assignments = OrderedDict() # First, sort out all the blocks into their correct assignments and all the # assignments into their correct types. for block in blocks: diff --git a/lms/djangoapps/instructor_task/tests/test_base.py b/lms/djangoapps/instructor_task/tests/test_base.py index 6b9eb872f0..4561d3dcce 100644 --- a/lms/djangoapps/instructor_task/tests/test_base.py +++ b/lms/djangoapps/instructor_task/tests/test_base.py @@ -330,3 +330,13 @@ class TestReportMixin(object): self.assertEqual(csv_rows, expected_rows) else: self.assertItemsEqual(csv_rows, expected_rows) + + def get_csv_row_with_headers(self): + """ + Helper function to return list with the column names from the CSV file (the first row) + """ + report_store = ReportStore.from_config(config_name='GRADES_DOWNLOAD') + report_csv_filename = report_store.links_for(self.course.id)[0][0] + with open(report_store.path_to(self.course.id, report_csv_filename)) as csv_file: + rows = unicodecsv.reader(csv_file, encoding='utf-8') + return rows.next() diff --git a/lms/djangoapps/instructor_task/tests/test_tasks_helper.py b/lms/djangoapps/instructor_task/tests/test_tasks_helper.py index 1d05a83dec..4fa14d3215 100644 --- a/lms/djangoapps/instructor_task/tests/test_tasks_helper.py +++ b/lms/djangoapps/instructor_task/tests/test_tasks_helper.py @@ -17,7 +17,6 @@ import ddt from freezegun import freeze_time from mock import Mock, patch import tempfile -import json from openedx.core.djangoapps.course_groups import cohorts import unicodecsv from django.core.urlresolvers import reverse @@ -34,11 +33,7 @@ from django.conf import settings from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase from pytz import UTC -from xmodule.modulestore.tests.factories import CourseFactory -from student.tests.factories import UserFactory -from student.models import CourseEnrollment -from xmodule.partitions.partitions import Group, UserPartition - +from student.tests.factories import CourseEnrollmentFactory, UserFactory from openedx.core.djangoapps.course_groups.tests.helpers import CohortFactory import openedx.core.djangoapps.user_api.course_tag.api as course_tag_api from openedx.core.djangoapps.user_api.partition_schemes import RandomUserPartitionScheme @@ -734,6 +729,71 @@ class TestProblemReportSplitTestContent(TestReportMixin, TestConditionalContent, )) ]) + def test_problem_grade_report_valid_columns_order(self): + """ + Test that in the CSV grade report columns are placed in the proper order + """ + grader_num = 7 + + self.course = CourseFactory.create( + grading_policy={ + "GRADER": [{ + "type": "Homework %d" % i, + "min_count": 1, + "drop_count": 0, + "short_label": "HW %d" % i, + "weight": 1.0 + } for i in xrange(1, grader_num)] + } + ) + + # Create users + self.student_a = UserFactory.create(username='student_a', email='student_a@example.com') + CourseEnrollmentFactory.create(user=self.student_a, course_id=self.course.id) + self.student_b = UserFactory.create(username='student_b', email='student_b@example.com') + CourseEnrollmentFactory.create(user=self.student_b, course_id=self.course.id) + + problem_vertical_list = [] + + for i in xrange(1, grader_num): + chapter_name = 'Chapter %d' % i + problem_section_name = 'Problem section %d' % i + problem_section_format = 'Homework %d' % i + problem_vertical_name = 'Problem Unit %d' % i + + chapter = ItemFactory.create(parent_location=self.course.location, + display_name=chapter_name) + + # Add a sequence to the course to which the problems can be added + problem_section = ItemFactory.create(parent_location=chapter.location, + category='sequential', + metadata={'graded': True, + 'format': problem_section_format}, + display_name=problem_section_name) + + # Create a vertical + problem_vertical = ItemFactory.create( + parent_location=problem_section.location, + category='vertical', + display_name=problem_vertical_name + ) + problem_vertical_list.append(problem_vertical) + + problem_names = [] + for i in xrange(1, grader_num): + problem_url = 'test_problem_%d' % i + self.define_option_problem(problem_url, parent=problem_vertical_list[i - 1]) + title = 'Homework %d 1: Problem section %d - %s' % (i, i, problem_url) + problem_names.append(title) + + header_row = [u'Student ID', u'Email', u'Username', u'Final Grade'] + for problem in problem_names: + header_row += [problem + ' (Earned)', problem + ' (Possible)'] + + with patch('instructor_task.tasks_helper._get_current_task'): + upload_problem_grade_report(None, None, self.course.id, None, 'graded') + self.assertEquals(self.get_csv_row_with_headers(), header_row) + class TestProblemReportCohortedContent(TestReportMixin, ContentGroupTestCase, InstructorTaskModuleTestCase): """ From 4c15dd93baddd13a542f8f7aaeda8f833ee3bc5f Mon Sep 17 00:00:00 2001 From: attiyaishaque Date: Wed, 13 Apr 2016 17:58:30 +0500 Subject: [PATCH 18/70] Course export page will not be opened for course id that does not belong to any course. --- cms/djangoapps/contentstore/views/import_export.py | 4 +++- .../contentstore/views/tests/test_import_export.py | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/cms/djangoapps/contentstore/views/import_export.py b/cms/djangoapps/contentstore/views/import_export.py index 930a16d5a4..610279baff 100644 --- a/cms/djangoapps/contentstore/views/import_export.py +++ b/cms/djangoapps/contentstore/views/import_export.py @@ -16,7 +16,7 @@ from django.contrib.auth.decorators import login_required from django.core.exceptions import SuspiciousOperation, PermissionDenied from django.core.files.temp import NamedTemporaryFile from django.core.servers.basehttp import FileWrapper -from django.http import HttpResponse, HttpResponseNotFound +from django.http import HttpResponse, HttpResponseNotFound, Http404 from django.utils.translation import ugettext as _ from django.views.decorators.csrf import ensure_csrf_cookie from django.views.decorators.http import require_http_methods, require_GET @@ -489,6 +489,8 @@ def export_handler(request, course_key_string): } else: courselike_module = modulestore().get_course(course_key) + if courselike_module is None: + raise Http404 context = { 'context_course': courselike_module, 'courselike_home_url': reverse_course_url("course_handler", course_key), diff --git a/cms/djangoapps/contentstore/views/tests/test_import_export.py b/cms/djangoapps/contentstore/views/tests/test_import_export.py index f934efba62..34d0225bb1 100644 --- a/cms/djangoapps/contentstore/views/tests/test_import_export.py +++ b/cms/djangoapps/contentstore/views/tests/test_import_export.py @@ -510,6 +510,7 @@ class ImportTestCase(CourseTestCase): @override_settings(CONTENTSTORE=TEST_DATA_CONTENTSTORE) +@ddt.ddt class ExportTestCase(CourseTestCase): """ Tests for export_handler. @@ -630,6 +631,17 @@ class ExportTestCase(CourseTestCase): self.test_export_targz_urlparam() + @ddt.data( + '/export/non.1/existence_1/Run_1', # For mongo + '/export/course-v1:non1+existence1+Run1', # For split + ) + def test_export_course_doest_not_exist(self, url): + """ + Export failure if course is not exist + """ + resp = self.client.get_html(url) + self.assertEquals(resp.status_code, 404) + @override_settings(CONTENTSTORE=TEST_DATA_CONTENTSTORE) class TestLibraryImportExport(CourseTestCase): From e687f1e754efdef2262dd015ea002e87a3dc49a1 Mon Sep 17 00:00:00 2001 From: Ayub-khan Date: Mon, 18 Apr 2016 11:57:31 +0500 Subject: [PATCH 19/70] -Adressed all comments --- cms/djangoapps/contentstore/views/tests/test_tabs.py | 2 +- cms/djangoapps/contentstore/views/tests/test_user.py | 2 +- common/djangoapps/util/tests/test_course_key_utils.py | 5 ++--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/cms/djangoapps/contentstore/views/tests/test_tabs.py b/cms/djangoapps/contentstore/views/tests/test_tabs.py index c6b60341c7..358f146612 100644 --- a/cms/djangoapps/contentstore/views/tests/test_tabs.py +++ b/cms/djangoapps/contentstore/views/tests/test_tabs.py @@ -194,7 +194,7 @@ class TabsPageTests(CourseTestCase): def test_invalid_course_id(self): """ Asserts that Http404 is raised when the course id is not valid. """ - invalid_tab_url = reverse_course_url('tabs_handler', "/some.invalid.key/TTT/CS01/2015_T0") + invalid_tab_url = reverse_course_url('tabs_handler', "/some.invalid.key/course-v1:TTT+CS01+2015_T0") with self.assertRaises(Http404): self.client.get(invalid_tab_url) diff --git a/cms/djangoapps/contentstore/views/tests/test_user.py b/cms/djangoapps/contentstore/views/tests/test_user.py index 8c26ff4515..e6cafa6a54 100644 --- a/cms/djangoapps/contentstore/views/tests/test_user.py +++ b/cms/djangoapps/contentstore/views/tests/test_user.py @@ -320,7 +320,7 @@ class UsersTestCase(CourseTestCase): def test_invalid_course_id(self): """ Asserts that Http404 is raised when the course id is not valid. """ wrong_url = reverse_course_url( - 'course_team_handler', "/some.invalid.key/TTT/CS01/2015_T0", + 'course_team_handler', "/some.invalid.key/course-v1:TTT+CS01+2015_T0", kwargs={'email': self.ext_user.email} ) with self.assertRaises(Http404): diff --git a/common/djangoapps/util/tests/test_course_key_utils.py b/common/djangoapps/util/tests/test_course_key_utils.py index fdebbef10c..92025715e8 100644 --- a/common/djangoapps/util/tests/test_course_key_utils.py +++ b/common/djangoapps/util/tests/test_course_key_utils.py @@ -1,11 +1,11 @@ """ Tests for util.course_key_utils """ +import ddt +import unittest from util.course_key_utils import course_key_from_string_or_404 from opaque_keys.edx.keys import CourseKey from django.http import Http404 -import ddt -import unittest @ddt.ddt @@ -21,7 +21,6 @@ class TestFromStringOr404(unittest.TestCase): """ Tests course_key_from_string_or_404 for valid split style course keys and mongo style course keys. """ - from nose.tools import set_trace ; set_trace() self.assertEquals( CourseKey.from_string(valid_course_key), course_key_from_string_or_404(valid_course_key) From 9e3f68c0a0f67e76ddd5cb5bb3433a5e07a00d48 Mon Sep 17 00:00:00 2001 From: Ayub-khan Date: Mon, 18 Apr 2016 12:03:46 +0500 Subject: [PATCH 20/70] -Addressed wrong course id comment. --- lms/djangoapps/django_comment_client/forum/tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lms/djangoapps/django_comment_client/forum/tests.py b/lms/djangoapps/django_comment_client/forum/tests.py index 4df7a5ea21..790b78f858 100644 --- a/lms/djangoapps/django_comment_client/forum/tests.py +++ b/lms/djangoapps/django_comment_client/forum/tests.py @@ -1318,7 +1318,7 @@ class InlineDiscussionUnicodeTestCase(SharedModuleStoreTestCase, UnicodeTestMixi request.user = self.student with self.assertRaises(Http404): views.inline_discussion( - request, unicode(self.course.id), self.course.discussion_topics['General']['id'] + request, "/some.invalid.key/course-v1:TTT+CS01+2015_T0", self.course.discussion_topics['General']['id'] ) From 54058f6e585950d8bfb2d14eca878fb78865e1d4 Mon Sep 17 00:00:00 2001 From: Awais Date: Mon, 11 Apr 2016 16:51:28 +0500 Subject: [PATCH 21/70] Adding background image for xseries certificates on programs dashboard side bar panel. ECOM-3199 --- .../learner_dashboard/tests/test_programs.py | 61 +++++++++++++++- lms/djangoapps/learner_dashboard/views.py | 5 +- .../images/xseries-certificate-visual.png | Bin 0 -> 14323 bytes .../views/certificate_view.js | 31 +++++++++ .../learner_dashboard/views/sidebar_view.js | 6 ++ .../certificate_view_spec.js | 65 ++++++++++++++++++ .../learner_dashboard/sidebar_view_spec.js | 17 ++++- lms/static/js/spec/main.js | 3 +- lms/static/sass/_build-lms-v1.scss | 1 + lms/static/sass/_xseries_certificates.scss | 17 +++++ lms/static/sass/views/_program-list.scss | 5 ++ .../learner_dashboard/certificate.underscore | 7 ++ lms/templates/learner_dashboard/programs.html | 4 +- .../learner_dashboard/sidebar.underscore | 2 +- 14 files changed, 216 insertions(+), 8 deletions(-) create mode 100644 lms/static/images/xseries-certificate-visual.png create mode 100644 lms/static/js/learner_dashboard/views/certificate_view.js create mode 100644 lms/static/js/spec/learner_dashboard/certificate_view_spec.js create mode 100644 lms/static/sass/_xseries_certificates.scss create mode 100644 lms/templates/learner_dashboard/certificate.underscore diff --git a/lms/djangoapps/learner_dashboard/tests/test_programs.py b/lms/djangoapps/learner_dashboard/tests/test_programs.py index ae42b4a45e..42271d5f8e 100644 --- a/lms/djangoapps/learner_dashboard/tests/test_programs.py +++ b/lms/djangoapps/learner_dashboard/tests/test_programs.py @@ -14,6 +14,8 @@ from edx_oauth2_provider.tests.factories import ClientFactory from opaque_keys.edx import locator from provider.constants import CONFIDENTIAL +from openedx.core.djangoapps.credentials.models import CredentialsApiConfig +from openedx.core.djangoapps.credentials.tests.mixins import CredentialsDataMixin, CredentialsApiConfigMixin from openedx.core.djangoapps.programs.tests.mixins import ( ProgramsApiConfigMixin, ProgramsDataMixin) @@ -29,7 +31,9 @@ from xmodule.modulestore.tests.factories import CourseFactory class TestProgramListing( ModuleStoreTestCase, ProgramsApiConfigMixin, - ProgramsDataMixin): + ProgramsDataMixin, + CredentialsDataMixin, + CredentialsApiConfigMixin): """ Unit tests for getting the list of programs enrolled by a logged in user @@ -41,6 +45,7 @@ class TestProgramListing( Add a student """ super(TestProgramListing, self).setUp() + ClientFactory(name=CredentialsApiConfig.OAUTH2_CLIENT_NAME, client_type=CONFIDENTIAL) ClientFactory(name=ProgramsApiConfig.OAUTH2_CLIENT_NAME, client_type=CONFIDENTIAL) self.student = UserFactory() self.create_programs_config(xseries_ad_enabled=True, program_listing_enabled=True) @@ -139,3 +144,57 @@ class TestProgramListing( self.assertEqual(response.status_code, 302) self.assertIsInstance(response, HttpResponseRedirect) self.assertIn('login', response.url) # pylint: disable=no-member + + def _expected_credetials_data(self): + """ Dry method for getting expected credentials.""" + + return [ + { + "display_name": "Test Program A", + "credential_url": "http://credentials.edx.org/credentials/dummy-uuid-1/" + }, + { + "display_name": "Test Program B", + "credential_url": "http://credentials.edx.org/credentials/dummy-uuid-2/" + } + ] + + @httpretty.activate + def test_get_xseries_certificates_with_data(self): + + self.create_programs_config(program_listing_enabled=True) + self.create_credentials_config(is_learner_issuance_enabled=True) + + self.client.login(username=self.student.username, password=self.PASSWORD) + + # mock programs and credentials apis + self.mock_programs_api() + self.mock_credentials_api(self.student, data=self.CREDENTIALS_API_RESPONSE, reset_url=False) + + response = self.client.get(reverse("program_listing_view")) + self.assertEqual(response.status_code, 200) + + for certificate in self._expected_credetials_data(): + self.assertIn(certificate['display_name'], response.content) + self.assertIn(certificate['credential_url'], response.content) + + self.assertIn('images/xseries-certificate-visual.png', response.content) + + @httpretty.activate + def test_get_xseries_certificates_without_data(self): + + self.create_programs_config(program_listing_enabled=True) + self.create_credentials_config(is_learner_issuance_enabled=True) + + self.client.login(username=self.student.username, password=self.PASSWORD) + + # mock programs and credentials apis + self.mock_programs_api() + self.mock_credentials_api(self.student, data={"results": []}, reset_url=False) + + response = self.client.get(reverse("program_listing_view")) + self.assertEqual(response.status_code, 200) + + for certificate in self._expected_credetials_data(): + self.assertNotIn(certificate['display_name'], response.content) + self.assertNotIn(certificate['credential_url'], response.content) diff --git a/lms/djangoapps/learner_dashboard/views.py b/lms/djangoapps/learner_dashboard/views.py index 503d4bfcc3..427bfa6ed3 100644 --- a/lms/djangoapps/learner_dashboard/views.py +++ b/lms/djangoapps/learner_dashboard/views.py @@ -9,7 +9,7 @@ from django.http import Http404 from edxmako.shortcuts import render_to_response from openedx.core.djangoapps.programs.utils import get_engaged_programs from openedx.core.djangoapps.programs.models import ProgramsApiConfig -from student.views import get_course_enrollments +from student.views import get_course_enrollments, _get_xseries_credentials @login_required @@ -35,5 +35,6 @@ def view_programs(request): 'programs': programs, 'xseries_url': marketing_root if ProgramsApiConfig.current().show_xseries_ad else None, 'nav_hidden': True, - 'show_program_listing': show_program_listing + 'show_program_listing': show_program_listing, + 'credentials': _get_xseries_credentials(request.user) }) diff --git a/lms/static/images/xseries-certificate-visual.png b/lms/static/images/xseries-certificate-visual.png new file mode 100644 index 0000000000000000000000000000000000000000..122a485a5a28eaf3350ab7e1fca23912c9b860c8 GIT binary patch literal 14323 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 0) { + this.$el.html(this.tpl(this.context)); + } + } + }); + } + ); +}).call(this, define || RequireJS.define); diff --git a/lms/static/js/learner_dashboard/views/sidebar_view.js b/lms/static/js/learner_dashboard/views/sidebar_view.js index 3534eb3e02..e2c9502556 100644 --- a/lms/static/js/learner_dashboard/views/sidebar_view.js +++ b/lms/static/js/learner_dashboard/views/sidebar_view.js @@ -6,6 +6,7 @@ 'underscore', 'gettext', 'js/learner_dashboard/views/explore_new_programs_view', + 'js/learner_dashboard/views/certificate_view', 'text!../../../templates/learner_dashboard/sidebar.underscore' ], function( @@ -14,6 +15,7 @@ _, gettext, NewProgramsView, + CertificateView, sidebarTpl ) { return Backbone.View.extend({ @@ -34,6 +36,10 @@ this.newProgramsView = new NewProgramsView({ context: this.context }); + + this.newCertificateView = new CertificateView({ + context: this.context + }); } }); } diff --git a/lms/static/js/spec/learner_dashboard/certificate_view_spec.js b/lms/static/js/spec/learner_dashboard/certificate_view_spec.js new file mode 100644 index 0000000000..92e61daa07 --- /dev/null +++ b/lms/static/js/spec/learner_dashboard/certificate_view_spec.js @@ -0,0 +1,65 @@ +define([ + 'backbone', + 'jquery', + 'js/learner_dashboard/views/certificate_view' + ], function (Backbone, $, CertificateView) { + + 'use strict'; + describe('Certificate View', function () { + var view = null, + data = { + context: { + certificatesData: [ + { + "display_name": "Testing", + "credential_url": "https://credentials.stage.edx.org/credentials/dummy-uuid-1/" + }, + { + "display_name": "Testing2", + "credential_url": "https://credentials.stage.edx.org/credentials/dummy-uuid-2/" + } + ], + xseriesImage: "/images/testing.png" + } + }; + + beforeEach(function() { + setFixtures('
'); + view = new CertificateView(data); + view.render(); + }); + + afterEach(function() { + view.remove(); + }); + + it('should exist', function() { + expect(view).toBeDefined(); + }); + + it('should load the certificates based on passed in certificates list', function() { + var $certificates = view.$el.find('.certificate-box'); + expect($certificates.length).toBe(2); + + $certificates.each(function(index, el){ + expect($(el).html().trim()).toEqual(data.context.certificatesData[index].display_name); + expect($(el).attr('href')).toEqual(data.context.certificatesData[index].credential_url); + }); + expect(view.$el.find('.title').html().trim()).toEqual('XSeries Program Certificates:'); + expect(view.$el.find('img').attr('src')).toEqual('/images/testing.png'); + }); + + it('should display no certificate box if certificates list is empty', function() { + var $certificate; + view.remove(); + setFixtures('
'); + view = new CertificateView({ + context: {certificatesData: []} + }); + view.render(); + $certificate = view.$el.find('.certificate-box'); + expect($certificate.length).toBe(0); + }); + }); + } +); diff --git a/lms/static/js/spec/learner_dashboard/sidebar_view_spec.js b/lms/static/js/spec/learner_dashboard/sidebar_view_spec.js index 295d25c3be..14f57bd91f 100644 --- a/lms/static/js/spec/learner_dashboard/sidebar_view_spec.js +++ b/lms/static/js/spec/learner_dashboard/sidebar_view_spec.js @@ -10,7 +10,14 @@ define([ describe('Sidebar View', function () { var view = null, context = { - xseriesUrl: 'http://www.edx.org/xseries' + xseriesUrl: 'http://www.edx.org/xseries', + certificatesData: [ + { + "display_name": "Testing", + "credential_url": "https://credentials.stage.edx.org/credentials/dummy-uuid-1/" + } + ], + xseriesImage: '/image/test.png' }; beforeEach(function() { @@ -38,17 +45,23 @@ define([ expect($sidebar.find('.program-advertise .ad-link a').attr('href')).toEqual(context.xseriesUrl); }); + it('should load the certificates based on passed in certificates list', function() { + expect(view.$('.certificate-box').length).toBe(1); + }); + it('should not load the xseries advertising if no xseriesUrl passed in', function(){ var $ad; view.remove(); view = new SidebarView({ el: '.sidebar', - context: {} + context: {certificatesData: []} }); view.render(); $ad = view.$el.find('.program-advertise'); expect($ad.length).toBe(0); + expect(view.$('.certificate-box').length).toBe(0); }); + }); } ); diff --git a/lms/static/js/spec/main.js b/lms/static/js/spec/main.js index 0287a265e7..f25edd870b 100644 --- a/lms/static/js/spec/main.js +++ b/lms/static/js/spec/main.js @@ -754,7 +754,8 @@ 'lms/include/js/spec/markdown_editor_spec.js', 'lms/include/js/spec/learner_dashboard/collection_list_view_spec.js', 'lms/include/js/spec/learner_dashboard/sidebar_view_spec.js', - 'lms/include/js/spec/learner_dashboard/program_card_view_spec.js' + 'lms/include/js/spec/learner_dashboard/program_card_view_spec.js', + 'lms/include/js/spec/learner_dashboard/certificate_view_spec.js' ]); }).call(this, requirejs, define); diff --git a/lms/static/sass/_build-lms-v1.scss b/lms/static/sass/_build-lms-v1.scss index ae3dbb281f..bfa3ea5859 100644 --- a/lms/static/sass/_build-lms-v1.scss +++ b/lms/static/sass/_build-lms-v1.scss @@ -59,6 +59,7 @@ @import "views/financial-assistance"; @import 'views/bookmarks'; @import 'course/auto-cert'; +@import 'xseries_certificates'; @import 'views/program-list'; @import 'views/api-access'; diff --git a/lms/static/sass/_xseries_certificates.scss b/lms/static/sass/_xseries_certificates.scss new file mode 100644 index 0000000000..7cc9dab924 --- /dev/null +++ b/lms/static/sass/_xseries_certificates.scss @@ -0,0 +1,17 @@ +@mixin xseries-certificate-container { + border: 1px solid $gray-l3; + box-sizing: border-box; + padding: $baseline; + background: $gray-l6; + margin-top: $baseline; + .title{ + @extend %t-title6; + @extend %t-weight3; + margin-bottom:$baseline; + color: $gray; + } + .certificate-box{ + padding-top: $baseline; + display: block; + } +} diff --git a/lms/static/sass/views/_program-list.scss b/lms/static/sass/views/_program-list.scss index b555e13ca8..5dad878722 100644 --- a/lms/static/sass/views/_program-list.scss +++ b/lms/static/sass/views/_program-list.scss @@ -19,6 +19,11 @@ $pl-button-color: #0079bc; .sidebar{ @include outer-container; @include span-columns(12); + float: right !important; + margin-bottom: $baseline; + .certificate-container{ + @include xseries-certificate-container(); + } .program-advertise{ padding: $baseline; background-color: $body-bg; diff --git a/lms/templates/learner_dashboard/certificate.underscore b/lms/templates/learner_dashboard/certificate.underscore new file mode 100644 index 0000000000..b1b6a9c3fc --- /dev/null +++ b/lms/templates/learner_dashboard/certificate.underscore @@ -0,0 +1,7 @@ +
+

<%- gettext('XSeries Program Certificates') %>:

+ + <% _.each(certificatesData, function(certificate){ %> + <%- gettext(certificate.display_name) %> + <% }); %> +
diff --git a/lms/templates/learner_dashboard/programs.html b/lms/templates/learner_dashboard/programs.html index d563522aa2..3a7221e95d 100644 --- a/lms/templates/learner_dashboard/programs.html +++ b/lms/templates/learner_dashboard/programs.html @@ -12,7 +12,9 @@ from openedx.core.djangolib.js_utils import ( <%static:require_module module_name="js/learner_dashboard/program_list_factory" class_name="ProgramListFactory"> ProgramListFactory({ programsData: ${programs | n, dump_js_escaped_json}, - xseriesUrl: '${xseries_url | n, js_escaped_string}' + certificatesData: ${credentials | n, dump_js_escaped_json}, + xseriesUrl: '${xseries_url | n, js_escaped_string}', + xseriesImage: '${static.url('images/xseries-certificate-visual.png')}' }); diff --git a/lms/templates/learner_dashboard/sidebar.underscore b/lms/templates/learner_dashboard/sidebar.underscore index 6ddfcc18a5..c93b1b2f32 100644 --- a/lms/templates/learner_dashboard/sidebar.underscore +++ b/lms/templates/learner_dashboard/sidebar.underscore @@ -1,2 +1,2 @@
-
+
From b4e1e97185019f51204e994d954867a90765fd34 Mon Sep 17 00:00:00 2001 From: tasawernawaz Date: Thu, 14 Apr 2016 15:38:26 +0000 Subject: [PATCH 22/70] ECOM-3201 Updated dashboard UI for empty list of courses and programs --- common/djangoapps/student/tests/tests.py | 4 +- .../learner_dashboard/program_list_factory.js | 1 + .../views/collection_list_view.js | 38 +++++++--- .../collection_list_view_spec.js | 1 + lms/static/sass/multicourse/_dashboard.scss | 72 +++++++++---------- lms/static/sass/views/_program-list.scss | 64 +++++++++++++++++ lms/templates/dashboard.html | 5 +- .../empty_programs_list.underscore | 9 +++ lms/templates/navigation.html | 4 +- themes/edx.org/lms/templates/dashboard.html | 4 +- 10 files changed, 147 insertions(+), 55 deletions(-) create mode 100644 lms/templates/learner_dashboard/empty_programs_list.underscore diff --git a/common/djangoapps/student/tests/tests.py b/common/djangoapps/student/tests/tests.py index 25c9688ef6..f3c5232db9 100644 --- a/common/djangoapps/student/tests/tests.py +++ b/common/djangoapps/student/tests/tests.py @@ -501,8 +501,8 @@ class DashboardTest(ModuleStoreTestCase): self.client.login(username="jack", password="test") response = self.client.get(reverse("dashboard")) - # "Find courses" is shown in the side panel - self.assertContains(response, "Find courses") + # "Explore courses" is shown in the side panel + self.assertContains(response, "Explore courses") # But other links are hidden in the navigation self.assertNotContains(response, "How it Works") diff --git a/lms/static/js/learner_dashboard/program_list_factory.js b/lms/static/js/learner_dashboard/program_list_factory.js index 8384ed9a94..d204b7ff99 100644 --- a/lms/static/js/learner_dashboard/program_list_factory.js +++ b/lms/static/js/learner_dashboard/program_list_factory.js @@ -12,6 +12,7 @@ new CollectionListView({ el: '.program-cards-container', childView: ProgramCardView, + context: options, collection: new ProgramCollection(options.programsData) }).render(); diff --git a/lms/static/js/learner_dashboard/views/collection_list_view.js b/lms/static/js/learner_dashboard/views/collection_list_view.js index ab9fd18a5c..1f8e7a4438 100644 --- a/lms/static/js/learner_dashboard/views/collection_list_view.js +++ b/lms/static/js/learner_dashboard/views/collection_list_view.js @@ -1,22 +1,40 @@ ;(function (define) { 'use strict'; - define(['backbone'], - function( - Backbone - ) { + define(['backbone', + 'jquery', + 'underscore', + 'gettext', + 'text!../../../templates/learner_dashboard/empty_programs_list.underscore' + ], + function (Backbone, + $, + _, + gettext, + emptyProgramsListTpl) { return Backbone.View.extend({ initialize: function(data) { this.childView = data.childView; + this.context = data.context; }, render: function() { - var childList = []; - this.collection.each(function(program){ - var child = new this.childView({model:program}); - childList.push(child.el); - }, this); - this.$el.html(childList); + var childList, tpl; + + if (!this.collection.length) { + if (this.context.xseriesUrl) { + //Only show the xseries advertising panel if the link is passed in + tpl = _.template(emptyProgramsListTpl); + this.$el.html(tpl(this.context)); + } + } else { + childList = []; + this.collection.each(function (program) { + var child = new this.childView({model: program}); + childList.push(child.el); + }, this); + this.$el.html(childList); + } } }); } diff --git a/lms/static/js/spec/learner_dashboard/collection_list_view_spec.js b/lms/static/js/spec/learner_dashboard/collection_list_view_spec.js index 1499fce40b..fcfaf1ffbd 100644 --- a/lms/static/js/spec/learner_dashboard/collection_list_view_spec.js +++ b/lms/static/js/spec/learner_dashboard/collection_list_view_spec.js @@ -95,6 +95,7 @@ define([ view = new CollectionListView({ el: '.program-cards-container', childView: ProgramCardView, + context: {'xseriesUrl': '/programs'}, collection: programCollection }); view.render(); diff --git a/lms/static/sass/multicourse/_dashboard.scss b/lms/static/sass/multicourse/_dashboard.scss index d181151b44..b502bb3712 100644 --- a/lms/static/sass/multicourse/_dashboard.scss +++ b/lms/static/sass/multicourse/_dashboard.scss @@ -212,9 +212,44 @@ } } +// CASE: empty dashboard + .empty-dashboard-message { + border: 3px solid $gray-l4; + background: $gray-l6; + padding: ($baseline*2) 0; + text-align: center; + + p { + @include font-size(24); + color: $lighter-base-font-color; + margin-bottom: $baseline; + text-shadow: 0 1px rgba(255,255,255, 0.6); + } + + a { + background-color: $blue; + border: 1px solid $blue; + box-shadow: 0 1px 8px 0 $shadow-l1; + @include box-sizing(border-box); + color: $white; + font-family: $sans-serif; + display: inline-block; + letter-spacing: 1px; + margin-top: ($baseline/4); + margin-left: ($baseline/4); + padding: 15px 20px; + + &:hover, &:focus { + background: $blue-l2; + text-decoration: none; + } + } + } + // +Dashboard - Course Listing // ==================== .dashboard { + .my-courses { @include float(left); margin: 0; @@ -231,43 +266,6 @@ } } - // CASE: empty dashboard - .empty-dashboard-message { - padding: ($baseline*2) 0; - text-align: center; - - p { - color: $lighter-base-font-color; - font-style: italic; - margin-bottom: $baseline; - text-shadow: 0 1px rgba(255,255,255, 0.6); - } - - a { - background: rgb(240,240,240); - @include background-image($button-bg-image); - background-color: $button-bg-color; - border: 1px solid $border-color-2; - border-radius: 4px; - box-shadow: 0 1px 8px 0 $shadow-l1; - @include box-sizing(border-box); - color: $base-font-color; - font-family: $sans-serif; - display: inline-block; - letter-spacing: 1px; - @include margin-left($baseline/4); - padding: 5px 10px; - text-shadow: 0 1px rgba(255,255,255, 0.6); - - &:hover, &:focus { - color: $link-color; - text-decoration: none; - } - } - } - - // ==================== - // UI: course list .listing-courses { @extend %ui-no-list; diff --git a/lms/static/sass/views/_program-list.scss b/lms/static/sass/views/_program-list.scss index b555e13ca8..f20dee0a73 100644 --- a/lms/static/sass/views/_program-list.scss +++ b/lms/static/sass/views/_program-list.scss @@ -86,3 +86,67 @@ $pl-button-color: #0079bc; @include span-columns(3); } } + +// CASE: empty list of programs + .empty-programs-message { + border: 3px solid $gray-l4; + background: $gray-l6; + padding: ($baseline*2) 0; + text-align: center; + + p { + @include font-size(24); + color: $lighter-base-font-color; + margin-bottom: $baseline; + text-shadow: 0 1px rgba(255,255,255, 0.6); + } + + a { + @include box-sizing(border-box); + background-color: $blue; + border: 1px solid $blue; + box-shadow: 0 1px 8px 0 $shadow-l1; + color: $white; + font-family: $sans-serif; + display: inline-block; + letter-spacing: 1px; + margin-top: ($baseline/4); + margin-left: ($baseline/4); + padding: 15px 20px; + + &:hover, &:focus { + background: $blue-l2; + text-decoration: none; + } + } + + .find-xseries-programs { + @extend %btn-pl-black-base; + .action-xseries-icon { + @include float(left); + @include margin-right($baseline*0.4); + + display: inline; + background: url('#{$static-path}/images/icon-sm-xseries-white.png') no-repeat; + background-color: transparent; + + width: ($baseline*1.1); + height: ($baseline*1.1); + } + &:hover, + &:focus { + + .action-xseries-icon { + @include float(left); + @include margin-right($baseline*0.4); + + display: inline; + background: url('#{$static-path}/images/icon-sm-xseries-black.png') no-repeat; + background-color: transparent; + + width: ($baseline*1.1); + height: ($baseline*1.1); + } + } + } + } diff --git a/lms/templates/dashboard.html b/lms/templates/dashboard.html index fa54c3e540..be5a13baa9 100644 --- a/lms/templates/dashboard.html +++ b/lms/templates/dashboard.html @@ -104,12 +104,13 @@ from openedx.core.djangolib.markup import Text, HTML % else:
-

${_("Looks like you haven't enrolled in any courses yet.")}

+

${_("You are not enrolled in any courses yet.")}

% if settings.FEATURES.get('COURSES_ARE_BROWSABLE'): - ${_("Find courses now!")} + ${_("Explore courses")} + %endif
% endif diff --git a/lms/templates/learner_dashboard/empty_programs_list.underscore b/lms/templates/learner_dashboard/empty_programs_list.underscore new file mode 100644 index 0000000000..0fa80cf0f2 --- /dev/null +++ b/lms/templates/learner_dashboard/empty_programs_list.underscore @@ -0,0 +1,9 @@ + +
+

<%- gettext('You are not enrolled in any XSeries Programs yet.') %>

+ + + <%- gettext('Explore XSeries Programs') %> + +
+ diff --git a/lms/templates/navigation.html b/lms/templates/navigation.html index e2fafa9e94..d87aedd9e4 100644 --- a/lms/templates/navigation.html +++ b/lms/templates/navigation.html @@ -67,7 +67,7 @@ site_status_msg = get_site_status_msg(course_id) <%block name="navigation_global_links_authenticated"> % if settings.FEATURES.get('COURSES_ARE_BROWSABLE') and not show_program_listing: % endif % if show_program_listing: @@ -145,7 +145,7 @@ site_status_msg = get_site_status_msg(course_id) % if not settings.FEATURES['DISABLE_LOGIN_BUTTON']: % if settings.FEATURES.get('ENABLE_COURSE_DISCOVERY'): %endif % if course and settings.FEATURES.get('RESTRICT_ENROLL_BY_REG_METHOD') and course.enrollment_domain: diff --git a/themes/edx.org/lms/templates/dashboard.html b/themes/edx.org/lms/templates/dashboard.html index 5ea969d5a5..51476bc934 100644 --- a/themes/edx.org/lms/templates/dashboard.html +++ b/themes/edx.org/lms/templates/dashboard.html @@ -105,11 +105,11 @@ from openedx.core.djangolib.js_utils import dump_js_escaped_json, js_escaped_str % else:
-

${_("Looks like you haven't enrolled in any courses yet.")}

+

${_("You are not enrolled in any courses yet.")}

% if settings.FEATURES.get('COURSES_ARE_BROWSABLE'): - ${_("Find courses now!")} + ${_("Explore courses")} %endif
From 66f52ba6e9cddff23ac60969cbfa3174a3009f44 Mon Sep 17 00:00:00 2001 From: Ayub-khan Date: Tue, 19 Apr 2016 16:04:39 +0500 Subject: [PATCH 23/70] -fixed Tests. --- cms/djangoapps/contentstore/views/tests/test_tabs.py | 8 ++++++-- cms/djangoapps/contentstore/views/tests/test_user.py | 11 ++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/cms/djangoapps/contentstore/views/tests/test_tabs.py b/cms/djangoapps/contentstore/views/tests/test_tabs.py index 358f146612..bb8342cd7a 100644 --- a/cms/djangoapps/contentstore/views/tests/test_tabs.py +++ b/cms/djangoapps/contentstore/views/tests/test_tabs.py @@ -7,10 +7,12 @@ from contentstore.tests.utils import CourseTestCase from contentstore.utils import reverse_course_url from xmodule.x_module import STUDENT_VIEW from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory +from django.test.client import RequestFactory from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.tabs import CourseTabList from xmodule.modulestore.django import modulestore from django.http import Http404 +from contentstore.views.tabs import tabs_handler class TabsPageTests(CourseTestCase): @@ -194,9 +196,11 @@ class TabsPageTests(CourseTestCase): def test_invalid_course_id(self): """ Asserts that Http404 is raised when the course id is not valid. """ - invalid_tab_url = reverse_course_url('tabs_handler', "/some.invalid.key/course-v1:TTT+CS01+2015_T0") + request_factory = RequestFactory() + request = request_factory.get('/dummy-url') + request.user = self.user with self.assertRaises(Http404): - self.client.get(invalid_tab_url) + tabs_handler(request, "/some.invalid.key/course-v1:TTT+CS01+2015_T0") class PrimitiveTabEdit(ModuleStoreTestCase): diff --git a/cms/djangoapps/contentstore/views/tests/test_user.py b/cms/djangoapps/contentstore/views/tests/test_user.py index e6cafa6a54..da82bdd00e 100644 --- a/cms/djangoapps/contentstore/views/tests/test_user.py +++ b/cms/djangoapps/contentstore/views/tests/test_user.py @@ -10,6 +10,8 @@ from student.models import CourseEnrollment from student.roles import CourseStaffRole, CourseInstructorRole from student import auth from django.http import Http404 +from contentstore.views.user import course_team_handler +from django.test.client import RequestFactory class UsersTestCase(CourseTestCase): @@ -319,9 +321,8 @@ class UsersTestCase(CourseTestCase): def test_invalid_course_id(self): """ Asserts that Http404 is raised when the course id is not valid. """ - wrong_url = reverse_course_url( - 'course_team_handler', "/some.invalid.key/course-v1:TTT+CS01+2015_T0", - kwargs={'email': self.ext_user.email} - ) + request_factory = RequestFactory() + request = request_factory.get('/dummy-url') + request.user = self.user with self.assertRaises(Http404): - self.client.get(wrong_url) + course_team_handler(request, "/some.invalid.key/course-v1:TTT+CS01+2015_T0") From e896359846bf19d2e15a839dc3495e1d972750ad Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 19 Apr 2016 09:09:35 -0400 Subject: [PATCH 24/70] fix flaky oauth test (#12168) --- .../test/acceptance/tests/lms/test_oauth2.py | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/common/test/acceptance/tests/lms/test_oauth2.py b/common/test/acceptance/tests/lms/test_oauth2.py index 5dd9b17bcb..25628993e4 100644 --- a/common/test/acceptance/tests/lms/test_oauth2.py +++ b/common/test/acceptance/tests/lms/test_oauth2.py @@ -44,13 +44,27 @@ class OAuth2PermissionDelegationTests(WebAppTest): assert self.oauth_page.visit() self.oauth_page.cancel() + def check_redirect(): + """ + Checks that the page correctly redirects to a url with a + denied query param. + """ + query = self._qs(self.browser.current_url) + return 'access_denied' in query['error'] + + def check_redirect_chrome(): + """ + Similar to `check_redirect`, but, due to a bug in ChromeDriver, + we use `self.browser.title` here instead of `self.browser.current_url` + """ + query = self._qs(self.browser.title) + return 'access_denied' in query['error'] + # This redirects to an invalid URI. For chrome verify title, current_url otherwise if self.browser.name == 'chrome': - query = self._qs(self.browser.title) - self.assertIn('access_denied', query['error']) + self.oauth_page.wait_for(check_redirect_chrome, 'redirected to invalid URL (chrome)') else: - query = self._qs(self.browser.current_url) - self.assertIn('access_denied', query['error']) + self.oauth_page.wait_for(check_redirect, 'redirected to invalid URL') @flaky # TODO, fix this: TNL-4190 def test_accepting_redirects(self): From bbcec0cf400113b6a84712f05b9b9aef2f313382 Mon Sep 17 00:00:00 2001 From: Sanford Student Date: Tue, 5 Apr 2016 08:28:15 -0400 Subject: [PATCH 25/70] displaying title of sequence item in tooltip instead of children --- common/lib/xmodule/xmodule/seq_module.py | 9 +- .../lib/xmodule/xmodule/split_test_module.py | 6 + .../xmodule/xmodule/tests/test_sequence.py | 5 + common/lib/xmodule/xmodule/x_module.py | 7 + .../test/acceptance/pages/lms/course_nav.py | 8 +- .../tests/lms/test_certificate_web_view.py | 4 +- common/test/acceptance/tests/lms/test_lms.py | 10 +- .../tests/video/test_video_module.py | 58 +++--- .../courseware/tests/test_entrance_exam.py | 6 +- .../courseware/tests/test_split_module.py | 172 ++++++++++-------- lms/djangoapps/courseware/tests/test_views.py | 29 ++- lms/templates/seq_module.html | 2 +- 12 files changed, 176 insertions(+), 140 deletions(-) diff --git a/common/lib/xmodule/xmodule/seq_module.py b/common/lib/xmodule/xmodule/seq_module.py index 9548bfa57d..8b86215946 100644 --- a/common/lib/xmodule/xmodule/seq_module.py +++ b/common/lib/xmodule/xmodule/seq_module.py @@ -218,13 +218,9 @@ class SequenceModule(SequenceFields, ProctoringFields, XModule): rendered_child = child.render(STUDENT_VIEW, context) fragment.add_frag_resources(rendered_child) - # `titles` is a list of titles to inject into the sequential tooltip display. - # We omit any blank titles to avoid blank lines in the tooltip display. - titles = [title.strip() for title in child.get_content_titles() if title.strip()] childinfo = { 'content': rendered_child.content, - 'title': "\n".join(titles), - 'page_title': titles[0] if titles else '', + 'page_title': getattr(child, 'tooltip_title', ''), 'progress_status': Progress.to_js_status_str(progress), 'progress_detail': Progress.to_js_detail_str(progress), 'type': child.get_icon_class(), @@ -232,8 +228,7 @@ class SequenceModule(SequenceFields, ProctoringFields, XModule): 'bookmarked': is_bookmarked, 'path': " > ".join(display_names + [child.display_name_with_default]), } - if childinfo['title'] == '': - childinfo['title'] = child.display_name_with_default_escaped + contents.append(childinfo) params = { diff --git a/common/lib/xmodule/xmodule/split_test_module.py b/common/lib/xmodule/xmodule/split_test_module.py index 076a79265a..459a3f1ee6 100644 --- a/common/lib/xmodule/xmodule/split_test_module.py +++ b/common/lib/xmodule/xmodule/split_test_module.py @@ -356,6 +356,10 @@ class SplitTestModule(SplitTestFields, XModule, StudioEditableModule): return (group.name, group.id) return (None, None) + @property + def tooltip_title(self): + return getattr(self.child, 'tooltip_title', '') + def validate(self): """ Message for either error or warning validation message/s. @@ -695,3 +699,5 @@ class SplitTestDescriptor(SplitTestFields, SequenceDescriptor, StudioEditableDes ) self.children.append(dest_usage_key) # pylint: disable=no-member self.group_id_to_child[unicode(group.id)] = dest_usage_key + + tooltip_title = module_attr('tooltip_title') diff --git a/common/lib/xmodule/xmodule/tests/test_sequence.py b/common/lib/xmodule/xmodule/tests/test_sequence.py index 9e4e1aba36..5b7ed99ca2 100644 --- a/common/lib/xmodule/xmodule/tests/test_sequence.py +++ b/common/lib/xmodule/xmodule/tests/test_sequence.py @@ -161,3 +161,8 @@ class SequenceBlockTestCase(XModuleXmlImportTest): lambda course_key, block_location, child: block_location, ) self.assertEquals(actual_next_sequence_location, expected_prev_sequence_location) + + def test_tooltip(self): + html = self._get_rendered_student_view(self.sequence_3_1, requested_child=None) + for child in self.sequence_3_1.children: + self.assertIn("'page_title': '{}'".format(child.name), html) diff --git a/common/lib/xmodule/xmodule/x_module.py b/common/lib/xmodule/xmodule/x_module.py index d8a1fd8649..967f467b61 100644 --- a/common/lib/xmodule/xmodule/x_module.py +++ b/common/lib/xmodule/xmodule/x_module.py @@ -365,6 +365,13 @@ class XModuleMixin(XModuleFields, XBlock): """ return course_metadata_utils.display_name_with_default_escaped(self) + @property + def tooltip_title(self): + """ + Return the title for the sequence item containing this xmodule as its top level item. + """ + return self.display_name_with_default + @property def xblock_kvs(self): """ diff --git a/common/test/acceptance/pages/lms/course_nav.py b/common/test/acceptance/pages/lms/course_nav.py index 7892019698..154e1fb2f0 100644 --- a/common/test/acceptance/pages/lms/course_nav.py +++ b/common/test/acceptance/pages/lms/course_nav.py @@ -103,20 +103,20 @@ class CourseNavPage(PageObject): self.q(css=subsection_css).first.click() self._on_section_promise(section_title, subsection_title).fulfill() - def go_to_sequential(self, sequential_title): + def go_to_vertical(self, vertical_title): """ - Within a section/subsection, navigate to the sequential with `sequential_title`. + Within a section/subsection, navigate to the vertical with `vertical_title`. """ # Get the index of the item in the sequence all_items = self.sequence_items try: - seq_index = all_items.index(sequential_title) + seq_index = all_items.index(vertical_title) except ValueError: msg = "Could not find sequential '{0}'. Available sequentials: [{1}]".format( - sequential_title, ", ".join(all_items) + vertical_title, ", ".join(all_items) ) self.warning(msg) diff --git a/common/test/acceptance/tests/lms/test_certificate_web_view.py b/common/test/acceptance/tests/lms/test_certificate_web_view.py index b547a9d3a6..4cd964d890 100644 --- a/common/test/acceptance/tests/lms/test_certificate_web_view.py +++ b/common/test/acceptance/tests/lms/test_certificate_web_view.py @@ -212,7 +212,7 @@ class CertificateProgressPageTest(UniqueCourseTest): self.course_nav.go_to_section('Test Section', 'Test Subsection') # Navigate to Test Problem 1 - self.course_nav.go_to_sequential('Test Problem 1') + self.course_nav.go_to_vertical('Test Problem 1') # Select correct value for from select menu self.course_nav.q(css='select option[value="{}"]'.format('blue')).first.click() @@ -232,7 +232,7 @@ class CertificateProgressPageTest(UniqueCourseTest): self.course_nav.go_to_section('Test Section 2', 'Test Subsection 2') # Navigate to Test Problem 2 - self.course_nav.go_to_sequential('Test Problem 2') + self.course_nav.go_to_vertical('Test Problem 2') # Fill in the answer of the problem self.course_nav.q(css='input[id^=input_][id$=_2_1]').fill('A*x^2 + sqrt(y)') diff --git a/common/test/acceptance/tests/lms/test_lms.py b/common/test/acceptance/tests/lms/test_lms.py index 2ab32a4640..78aad740a4 100644 --- a/common/test/acceptance/tests/lms/test_lms.py +++ b/common/test/acceptance/tests/lms/test_lms.py @@ -824,13 +824,13 @@ class VisibleToStaffOnlyTest(UniqueCourseTest): self.assertEqual(3, len(self.course_nav.sections['Test Section'])) self.course_nav.go_to_section("Test Section", "Subsection With Locked Unit") - self.assertEqual(["Html Child in locked unit", "Html Child in unlocked unit"], self.course_nav.sequence_items) + self.assertEqual([u'Locked Unit', u'Unlocked Unit'], self.course_nav.sequence_items) self.course_nav.go_to_section("Test Section", "Unlocked Subsection") - self.assertEqual(["Html Child in visible unit"], self.course_nav.sequence_items) + self.assertEqual([u'Test Unit'], self.course_nav.sequence_items) self.course_nav.go_to_section("Test Section", "Locked Subsection") - self.assertEqual(["Html Child in locked subsection"], self.course_nav.sequence_items) + self.assertEqual([u'Test Unit'], self.course_nav.sequence_items) def test_visible_to_student(self): """ @@ -846,10 +846,10 @@ class VisibleToStaffOnlyTest(UniqueCourseTest): self.assertEqual(2, len(self.course_nav.sections['Test Section'])) self.course_nav.go_to_section("Test Section", "Subsection With Locked Unit") - self.assertEqual(["Html Child in unlocked unit"], self.course_nav.sequence_items) + self.assertEqual([u'Unlocked Unit'], self.course_nav.sequence_items) self.course_nav.go_to_section("Test Section", "Unlocked Subsection") - self.assertEqual(["Html Child in visible unit"], self.course_nav.sequence_items) + self.assertEqual([u'Test Unit'], self.course_nav.sequence_items) @attr('shard_1') diff --git a/common/test/acceptance/tests/video/test_video_module.py b/common/test/acceptance/tests/video/test_video_module.py index e3a7820b4c..c739ed65c1 100644 --- a/common/test/acceptance/tests/video/test_video_module.py +++ b/common/test/acceptance/tests/video/test_video_module.py @@ -61,7 +61,7 @@ class VideoBaseTest(UniqueCourseTest): self.metadata = None self.assets = [] - self.verticals = None + self.contents_of_verticals = None self.youtube_configuration = {} self.user_info = {} @@ -102,28 +102,28 @@ class VideoBaseTest(UniqueCourseTest): :return: a list of XBlockFixtureDesc """ xblock_verticals = [] - _verticals = self.verticals + _contents_of_verticals = self.contents_of_verticals # Video tests require at least one vertical with a single video. - if not _verticals: - _verticals = [[{'display_name': 'Video', 'metadata': self.metadata}]] + if not _contents_of_verticals: + _contents_of_verticals = [[{'display_name': 'Video', 'metadata': self.metadata}]] - for vertical_index, vertical in enumerate(_verticals): + for vertical_index, vertical in enumerate(_contents_of_verticals): xblock_verticals.append(self._create_single_vertical(vertical, vertical_index)) return xblock_verticals - def _create_single_vertical(self, vertical, vertical_index): + def _create_single_vertical(self, vertical_contents, vertical_index): """ Create a single course vertical of type XBlockFixtureDesc with category `vertical`. A single course vertical can contain single or multiple video modules. - :param vertical: vertical data list + :param vertical_contents: a list of items for the vertical to contain :param vertical_index: index for the vertical display name :return: XBlockFixtureDesc """ xblock_course_vertical = XBlockFixtureDesc('vertical', 'Test Vertical-{0}'.format(vertical_index)) - for video in vertical: + for video in vertical_contents: xblock_course_vertical.add_children( XBlockFixtureDesc('video', video['display_name'], metadata=video.get('metadata'))) @@ -512,13 +512,13 @@ class YouTubeVideoTest(VideoBaseTest): data_c = {'track': 'http://example.org/', 'download_track': True} html5_c_metadata = self.metadata_for_mode('html5', additional_data=data_c) - self.verticals = [ + self.contents_of_verticals = [ [{'display_name': 'A', 'metadata': youtube_a_metadata}], [{'display_name': 'B', 'metadata': youtube_b_metadata}], [{'display_name': 'C', 'metadata': html5_c_metadata}] ] - # open the section with videos (open video "A") + # open the section with videos (open vertical containing video "A") self.navigate_to_video() # check if we can download transcript in "srt" format that has text "00:00:00,260" @@ -530,14 +530,14 @@ class YouTubeVideoTest(VideoBaseTest): # check if we can download transcript in "txt" format that has text "Welcome to edX." self.assertTrue(self.video.downloaded_transcript_contains_text('txt', 'Welcome to edX.')) - # open video "B" - self.course_nav.go_to_sequential('B') + # open vertical containing video "B" + self.course_nav.go_to_vertical('Test Vertical-1') # check if we can download transcript in "txt" format that has text "Equal transcripts" self.assertTrue(self.video.downloaded_transcript_contains_text('txt', 'Equal transcripts')) - # open video "C" - self.course_nav.go_to_sequential('C') + # open vertical containing video "C" + self.course_nav.go_to_vertical('Test Vertical-2') # menu "download_transcript" doesn't exist self.assertFalse(self.video.is_menu_present('download_transcript')) @@ -635,7 +635,7 @@ class YouTubeVideoTest(VideoBaseTest): Given it has videos "A,B" in "Youtube" mode in position "1" of sequential And videos "C,D" in "Youtube" mode in position "2" of sequential """ - self.verticals = [ + self.contents_of_verticals = [ [{'display_name': 'A'}, {'display_name': 'B'}], [{'display_name': 'C'}, {'display_name': 'D'}] ] @@ -675,7 +675,9 @@ class YouTubeVideoTest(VideoBaseTest): And a video "B" in "Youtube" mode in position "2" of sequential And a video "C" in "HTML5" mode in position "3" of sequential """ - self.verticals = [ + # vertical titles are created in VideoBaseTest._create_single_vertical + # and are of the form Test Vertical-{_} where _ is the index in self.contents_of_verticals + self.contents_of_verticals = [ [{'display_name': 'A'}], [{'display_name': 'B'}], [{'display_name': 'C', 'metadata': self.metadata_for_mode('html5')}] ] @@ -683,17 +685,17 @@ class YouTubeVideoTest(VideoBaseTest): self.navigate_to_video() # select the "2.0" speed on video "A" - self.course_nav.go_to_sequential('A') + self.course_nav.go_to_vertical('Test Vertical-0') self.video.wait_for_video_player_render() self.video.speed = '2.0' # select the "0.50" speed on video "B" - self.course_nav.go_to_sequential('B') + self.course_nav.go_to_vertical('Test Vertical-1') self.video.wait_for_video_player_render() self.video.speed = '0.50' # open video "C" - self.course_nav.go_to_sequential('C') + self.course_nav.go_to_vertical('Test Vertical-2') self.video.wait_for_video_player_render() # Since the playback speed was set to .5 in "B", this video will also be impacted @@ -701,8 +703,8 @@ class YouTubeVideoTest(VideoBaseTest): # does not have a .5 playback option, so the closest possible (.75) should be selected. self.video.verify_speed_changed('0.75x') - # open video "A" - self.course_nav.go_to_sequential('A') + # go to the vertical containing video "A" + self.course_nav.go_to_vertical('Test Vertical-0') # Video "A" should still play at speed 2.0 because it was explicitly set to that. self.assertEqual(self.video.speed, '2.0x') @@ -710,8 +712,8 @@ class YouTubeVideoTest(VideoBaseTest): # reload the page self.video.reload_page() - # open video "A" - self.course_nav.go_to_sequential('A') + # go to the vertical containing video "A" + self.course_nav.go_to_vertical('Test Vertical-0') # check if video "A" should start playing at speed "2.0" self.assertEqual(self.video.speed, '2.0x') @@ -719,14 +721,14 @@ class YouTubeVideoTest(VideoBaseTest): # select the "1.0" speed on video "A" self.video.speed = '1.0' - # open video "B" - self.course_nav.go_to_sequential('B') + # go to the vertical containing "B" + self.course_nav.go_to_vertical('Test Vertical-1') # Video "B" should still play at speed .5 because it was explicitly set to that. self.assertEqual(self.video.speed, '0.50x') - # open video "C" - self.course_nav.go_to_sequential('C') + # go to the vertical containing video "C" + self.course_nav.go_to_vertical('Test Vertical-2') # The change of speed for Video "A" should impact Video "C" because it still has # not been explicitly set to a speed. @@ -882,7 +884,7 @@ class YouTubeVideoTest(VideoBaseTest): } } - self.verticals = [ + self.contents_of_verticals = [ [{'display_name': 'A'}, {'display_name': 'B', 'metadata': self.metadata_for_mode('html5')}], [{'display_name': 'C'}] ] diff --git a/lms/djangoapps/courseware/tests/test_entrance_exam.py b/lms/djangoapps/courseware/tests/test_entrance_exam.py index ab2ae5500c..fabe507aad 100644 --- a/lms/djangoapps/courseware/tests/test_entrance_exam.py +++ b/lms/djangoapps/courseware/tests/test_entrance_exam.py @@ -255,8 +255,7 @@ class EntranceExamTestCases(LoginEnrollmentTestCase, ModuleStoreTestCase, Milest resp = self.client.get(url) self.assertRedirects(resp, expected_url, status_code=302, target_status_code=200) resp = self.client.get(expected_url) - self.assertNotIn('Exam Problem - Problem 1', resp.content) - self.assertNotIn('Exam Problem - Problem 2', resp.content) + self.assertNotIn('Exam Vertical - Unit 1', resp.content) def test_entrance_exam_content_presence(self): """ @@ -273,8 +272,7 @@ class EntranceExamTestCases(LoginEnrollmentTestCase, ModuleStoreTestCase, Milest resp = self.client.get(url) self.assertRedirects(resp, expected_url, status_code=302, target_status_code=200) resp = self.client.get(expected_url) - self.assertIn('Exam Problem - Problem 1', resp.content) - self.assertIn('Exam Problem - Problem 2', resp.content) + self.assertIn('Exam Vertical - Unit 1', resp.content) def test_get_entrance_exam_content(self): """ diff --git a/lms/djangoapps/courseware/tests/test_split_module.py b/lms/djangoapps/courseware/tests/test_split_module.py index 61ed3816b6..843a247ffe 100644 --- a/lms/djangoapps/courseware/tests/test_split_module.py +++ b/lms/djangoapps/courseware/tests/test_split_module.py @@ -24,7 +24,6 @@ class SplitTestBase(SharedModuleStoreTestCase): COURSE_NUMBER = 'split-test-base' ICON_CLASSES = None TOOLTIPS = None - HIDDEN_CONTENT = None VISIBLE_CONTENT = None @classmethod @@ -63,6 +62,9 @@ class SplitTestBase(SharedModuleStoreTestCase): CourseEnrollmentFactory.create(user=self.student, course_id=self.course.id) self.client.login(username=self.student.username, password='test') + self.included_usage_keys = None + self.excluded_usage_keys = None + def _video(self, parent, group): """ Returns a video component with parent ``parent`` @@ -128,34 +130,102 @@ class SplitTestBase(SharedModuleStoreTestCase): for tooltip in self.TOOLTIPS[user_tag]: self.assertIn(tooltip, content) - for hidden in self.HIDDEN_CONTENT[user_tag]: - self.assertNotIn(hidden, content) + unicode_content = content.decode("utf-8") + for key in self.included_usage_keys[user_tag]: + self.assertIn(unicode(key), unicode_content) + + for key in self.excluded_usage_keys[user_tag]: + self.assertNotIn(unicode(key), unicode_content) # Assert that we can see the data from the appropriate test condition for visible in self.VISIBLE_CONTENT[user_tag]: self.assertIn(visible, content) -class TestVertSplitTestVert(SplitTestBase): +class TestSplitTestVert(SplitTestBase): """ - Tests related to xmodule/split_test_module + Tests a sequential whose top-level vertical is determined by a split test. """ __test__ = True - COURSE_NUMBER = 'vert-split-vert' + COURSE_NUMBER = 'test-split-test-vert-vert' ICON_CLASSES = [ 'seq_problem', 'seq_video', ] TOOLTIPS = [ - ['Group 0 Sees This Video', "Group 0 Sees This Problem"], - ['Group 1 Sees This Video', 'Group 1 Sees This HTML'], - ] - HIDDEN_CONTENT = [ ['Condition 0 vertical'], ['Condition 1 vertical'], ] + # Data is html encoded, because it's inactive inside the + # sequence until javascript is executed + VISIBLE_CONTENT = [ + ['class="problems-wrapper'], + ['Some HTML for group 1'] + ] + + def setUp(self): + # We define problem compenents that we need but don't explicitly call elsewhere. + # pylint: disable=unused-variable + super(TestSplitTestVert, self).setUp() + + c0_url = self.course.id.make_usage_key("vertical", "split_test_cond0") + c1_url = self.course.id.make_usage_key("vertical", "split_test_cond1") + + split_test = ItemFactory.create( + parent_location=self.sequential.location, + category="split_test", + display_name="Split test", + user_partition_id='0', + group_id_to_child={"0": c0_url, "1": c1_url}, + ) + + cond0vert = ItemFactory.create( + parent_location=split_test.location, + category="vertical", + display_name="Condition 0 vertical", + location=c0_url, + ) + video0 = self._video(cond0vert, 0) + problem0 = self._problem(cond0vert, 0) + + cond1vert = ItemFactory.create( + parent_location=split_test.location, + category="vertical", + display_name="Condition 1 vertical", + location=c1_url, + ) + video1 = self._video(cond1vert, 1) + html1 = self._html(cond1vert, 1) + + self.included_usage_keys = [ + [video0.location, problem0.location], + [video1.location, html1.location], + ] + + self.excluded_usage_keys = [ + [video1.location, html1.location], + [video0.location, problem0.location], + ] + + +class TestVertSplitTestVert(SplitTestBase): + """ + Tests a sequential whose top-level vertical contains a split test determining content within that vertical. + """ + __test__ = True + + COURSE_NUMBER = 'test-vert-split-test-vert' + + ICON_CLASSES = [ + 'seq_problem', + 'seq_video', + ] + TOOLTIPS = [ + ['Split test vertical'], + ['Split test vertical'], + ] # Data is html encoded, because it's inactive inside the # sequence until javascript is executed @@ -169,9 +239,6 @@ class TestVertSplitTestVert(SplitTestBase): # pylint: disable=unused-variable super(TestVertSplitTestVert, self).setUp() - # vert <- split_test - # split_test cond 0 = vert <- {video, problem} - # split_test cond 1 = vert <- {video, html} vert1 = ItemFactory.create( parent_location=self.sequential.location, category="vertical", @@ -191,8 +258,8 @@ class TestVertSplitTestVert(SplitTestBase): cond0vert = ItemFactory.create( parent_location=split_test.location, category="vertical", - display_name="Condition 0 vertical", - location=c0_url, + display_name="Condition 0 Vertical", + location=c0_url ) video0 = self._video(cond0vert, 0) problem0 = self._problem(cond0vert, 0) @@ -200,76 +267,21 @@ class TestVertSplitTestVert(SplitTestBase): cond1vert = ItemFactory.create( parent_location=split_test.location, category="vertical", - display_name="Condition 1 vertical", - location=c1_url, + display_name="Condition 1 Vertical", + location=c1_url ) video1 = self._video(cond1vert, 1) html1 = self._html(cond1vert, 1) + self.included_usage_keys = [ + [video0.location, problem0.location], + [video1.location, html1.location], + ] -class TestSplitTestVert(SplitTestBase): - """ - Tests related to xmodule/split_test_module - """ - __test__ = True - - COURSE_NUMBER = 'split-vert' - - ICON_CLASSES = [ - 'seq_problem', - 'seq_video', - ] - TOOLTIPS = [ - ['Group 0 Sees This Video', "Group 0 Sees This Problem"], - ['Group 1 Sees This Video', 'Group 1 Sees This HTML'], - ] - HIDDEN_CONTENT = [ - ['Condition 0 vertical'], - ['Condition 1 vertical'], - ] - - # Data is html encoded, because it's inactive inside the - # sequence until javascript is executed - VISIBLE_CONTENT = [ - ['class="problems-wrapper'], - ['Some HTML for group 1'] - ] - - def setUp(self): - # We define problem compenents that we need but don't explicitly call elsewhere. - # pylint: disable=unused-variable - super(TestSplitTestVert, self).setUp() - - # split_test cond 0 = vert <- {video, problem} - # split_test cond 1 = vert <- {video, html} - c0_url = self.course.id.make_usage_key("vertical", "split_test_cond0") - c1_url = self.course.id.make_usage_key("vertical", "split_test_cond1") - - split_test = ItemFactory.create( - parent_location=self.sequential.location, - category="split_test", - display_name="Split test", - user_partition_id='0', - group_id_to_child={"0": c0_url, "1": c1_url}, - ) - - cond0vert = ItemFactory.create( - parent_location=split_test.location, - category="vertical", - display_name="Condition 0 vertical", - location=c0_url, - ) - video0 = self._video(cond0vert, 0) - problem0 = self._problem(cond0vert, 0) - - cond1vert = ItemFactory.create( - parent_location=split_test.location, - category="vertical", - display_name="Condition 1 vertical", - location=c1_url, - ) - video1 = self._video(cond1vert, 1) - html1 = self._html(cond1vert, 1) + self.excluded_usage_keys = [ + [video1.location, html1.location], + [video0.location, problem0.location], + ] @attr('shard_1') diff --git a/lms/djangoapps/courseware/tests/test_views.py b/lms/djangoapps/courseware/tests/test_views.py index 3606a3be87..5f79e60bed 100644 --- a/lms/djangoapps/courseware/tests/test_views.py +++ b/lms/djangoapps/courseware/tests/test_views.py @@ -198,16 +198,27 @@ class ViewsTestCase(ModuleStoreTestCase): parent_location=self.chapter.location, due=datetime(2013, 9, 18, 11, 30, 00), ) - self.vertical = ItemFactory.create(category='vertical', parent_location=self.section.location) - self.component = ItemFactory.create( + self.vertical = ItemFactory.create( + category='vertical', + parent_location=self.section.location, + display_name='Vertical 1' + ) + self.problem = ItemFactory.create( category='problem', parent_location=self.vertical.location, display_name='Problem 1', ) - self.section2 = ItemFactory.create(category='sequential', parent_location=self.chapter.location) - self.vertical2 = ItemFactory.create(category='vertical', parent_location=self.section2.location) - ItemFactory.create( + self.section2 = ItemFactory.create( + category='sequential', + parent_location=self.chapter.location + ) + self.vertical2 = ItemFactory.create( + category='vertical', + parent_location=self.section2.location, + display_name='Vertical 2' + ) + self.problem2 = ItemFactory.create( category='problem', parent_location=self.vertical2.location, display_name='Problem 2', @@ -229,15 +240,15 @@ class ViewsTestCase(ModuleStoreTestCase): def test_index_success(self): response = self._verify_index_response() - self.assertIn('Problem 2', response.content) + self.assertIn(unicode(self.problem2.location), response.content.decode("utf-8")) # re-access to the main course page redirects to last accessed view. url = reverse('courseware', kwargs={'course_id': unicode(self.course_key)}) response = self.client.get(url) self.assertEqual(response.status_code, 302) response = self.client.get(response.url) # pylint: disable=no-member - self.assertNotIn('Problem 1', response.content) - self.assertIn('Problem 2', response.content) + self.assertNotIn(unicode(self.problem.location), response.content.decode("utf-8")) + self.assertIn(unicode(self.problem2.location), response.content.decode("utf-8")) def test_index_nonexistent_chapter(self): self._verify_index_response(expected_response_code=404, chapter_name='non-existent') @@ -540,7 +551,7 @@ class ViewsTestCase(ModuleStoreTestCase): url = reverse('submission_history', kwargs={ 'course_id': unicode(self.course_key), 'student_username': 'dummy', - 'location': unicode(self.component.location), + 'location': unicode(self.problem.location), }) response = self.client.get(url) # Tests that we do not get an "Invalid x" response when passing correct arguments to view diff --git a/lms/templates/seq_module.html b/lms/templates/seq_module.html index 2bce3a658b..9629c67859 100644 --- a/lms/templates/seq_module.html +++ b/lms/templates/seq_module.html @@ -23,7 +23,7 @@ id="tab_${idx}"> -
${item['type']} ${item['title']} ${_("Bookmarked") if item['bookmarked'] else ""}
+
${item['type']} ${item['page_title']} ${_("Bookmarked") if item['bookmarked'] else ""}
% endfor From 270814102f1746e2dffd2fac8dcdcc506d6e853d Mon Sep 17 00:00:00 2001 From: Jesse Zoldak Date: Tue, 19 Apr 2016 13:52:19 -0400 Subject: [PATCH 26/70] Revert "Adding background image for xseries certificates on dashboard side bar panel" --- .../learner_dashboard/tests/test_programs.py | 61 +--------------- lms/djangoapps/learner_dashboard/views.py | 5 +- .../images/xseries-certificate-visual.png | Bin 14323 -> 0 bytes .../views/certificate_view.js | 31 --------- .../learner_dashboard/views/sidebar_view.js | 6 -- .../certificate_view_spec.js | 65 ------------------ .../learner_dashboard/sidebar_view_spec.js | 17 +---- lms/static/js/spec/main.js | 3 +- lms/static/sass/_build-lms-v1.scss | 1 - lms/static/sass/_xseries_certificates.scss | 17 ----- lms/static/sass/views/_program-list.scss | 5 -- .../learner_dashboard/certificate.underscore | 7 -- lms/templates/learner_dashboard/programs.html | 4 +- .../learner_dashboard/sidebar.underscore | 2 +- 14 files changed, 8 insertions(+), 216 deletions(-) delete mode 100644 lms/static/images/xseries-certificate-visual.png delete mode 100644 lms/static/js/learner_dashboard/views/certificate_view.js delete mode 100644 lms/static/js/spec/learner_dashboard/certificate_view_spec.js delete mode 100644 lms/static/sass/_xseries_certificates.scss delete mode 100644 lms/templates/learner_dashboard/certificate.underscore diff --git a/lms/djangoapps/learner_dashboard/tests/test_programs.py b/lms/djangoapps/learner_dashboard/tests/test_programs.py index 42271d5f8e..ae42b4a45e 100644 --- a/lms/djangoapps/learner_dashboard/tests/test_programs.py +++ b/lms/djangoapps/learner_dashboard/tests/test_programs.py @@ -14,8 +14,6 @@ from edx_oauth2_provider.tests.factories import ClientFactory from opaque_keys.edx import locator from provider.constants import CONFIDENTIAL -from openedx.core.djangoapps.credentials.models import CredentialsApiConfig -from openedx.core.djangoapps.credentials.tests.mixins import CredentialsDataMixin, CredentialsApiConfigMixin from openedx.core.djangoapps.programs.tests.mixins import ( ProgramsApiConfigMixin, ProgramsDataMixin) @@ -31,9 +29,7 @@ from xmodule.modulestore.tests.factories import CourseFactory class TestProgramListing( ModuleStoreTestCase, ProgramsApiConfigMixin, - ProgramsDataMixin, - CredentialsDataMixin, - CredentialsApiConfigMixin): + ProgramsDataMixin): """ Unit tests for getting the list of programs enrolled by a logged in user @@ -45,7 +41,6 @@ class TestProgramListing( Add a student """ super(TestProgramListing, self).setUp() - ClientFactory(name=CredentialsApiConfig.OAUTH2_CLIENT_NAME, client_type=CONFIDENTIAL) ClientFactory(name=ProgramsApiConfig.OAUTH2_CLIENT_NAME, client_type=CONFIDENTIAL) self.student = UserFactory() self.create_programs_config(xseries_ad_enabled=True, program_listing_enabled=True) @@ -144,57 +139,3 @@ class TestProgramListing( self.assertEqual(response.status_code, 302) self.assertIsInstance(response, HttpResponseRedirect) self.assertIn('login', response.url) # pylint: disable=no-member - - def _expected_credetials_data(self): - """ Dry method for getting expected credentials.""" - - return [ - { - "display_name": "Test Program A", - "credential_url": "http://credentials.edx.org/credentials/dummy-uuid-1/" - }, - { - "display_name": "Test Program B", - "credential_url": "http://credentials.edx.org/credentials/dummy-uuid-2/" - } - ] - - @httpretty.activate - def test_get_xseries_certificates_with_data(self): - - self.create_programs_config(program_listing_enabled=True) - self.create_credentials_config(is_learner_issuance_enabled=True) - - self.client.login(username=self.student.username, password=self.PASSWORD) - - # mock programs and credentials apis - self.mock_programs_api() - self.mock_credentials_api(self.student, data=self.CREDENTIALS_API_RESPONSE, reset_url=False) - - response = self.client.get(reverse("program_listing_view")) - self.assertEqual(response.status_code, 200) - - for certificate in self._expected_credetials_data(): - self.assertIn(certificate['display_name'], response.content) - self.assertIn(certificate['credential_url'], response.content) - - self.assertIn('images/xseries-certificate-visual.png', response.content) - - @httpretty.activate - def test_get_xseries_certificates_without_data(self): - - self.create_programs_config(program_listing_enabled=True) - self.create_credentials_config(is_learner_issuance_enabled=True) - - self.client.login(username=self.student.username, password=self.PASSWORD) - - # mock programs and credentials apis - self.mock_programs_api() - self.mock_credentials_api(self.student, data={"results": []}, reset_url=False) - - response = self.client.get(reverse("program_listing_view")) - self.assertEqual(response.status_code, 200) - - for certificate in self._expected_credetials_data(): - self.assertNotIn(certificate['display_name'], response.content) - self.assertNotIn(certificate['credential_url'], response.content) diff --git a/lms/djangoapps/learner_dashboard/views.py b/lms/djangoapps/learner_dashboard/views.py index 427bfa6ed3..503d4bfcc3 100644 --- a/lms/djangoapps/learner_dashboard/views.py +++ b/lms/djangoapps/learner_dashboard/views.py @@ -9,7 +9,7 @@ from django.http import Http404 from edxmako.shortcuts import render_to_response from openedx.core.djangoapps.programs.utils import get_engaged_programs from openedx.core.djangoapps.programs.models import ProgramsApiConfig -from student.views import get_course_enrollments, _get_xseries_credentials +from student.views import get_course_enrollments @login_required @@ -35,6 +35,5 @@ def view_programs(request): 'programs': programs, 'xseries_url': marketing_root if ProgramsApiConfig.current().show_xseries_ad else None, 'nav_hidden': True, - 'show_program_listing': show_program_listing, - 'credentials': _get_xseries_credentials(request.user) + 'show_program_listing': show_program_listing }) diff --git a/lms/static/images/xseries-certificate-visual.png b/lms/static/images/xseries-certificate-visual.png deleted file mode 100644 index 122a485a5a28eaf3350ab7e1fca23912c9b860c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14323 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 0) { - this.$el.html(this.tpl(this.context)); - } - } - }); - } - ); -}).call(this, define || RequireJS.define); diff --git a/lms/static/js/learner_dashboard/views/sidebar_view.js b/lms/static/js/learner_dashboard/views/sidebar_view.js index e2c9502556..3534eb3e02 100644 --- a/lms/static/js/learner_dashboard/views/sidebar_view.js +++ b/lms/static/js/learner_dashboard/views/sidebar_view.js @@ -6,7 +6,6 @@ 'underscore', 'gettext', 'js/learner_dashboard/views/explore_new_programs_view', - 'js/learner_dashboard/views/certificate_view', 'text!../../../templates/learner_dashboard/sidebar.underscore' ], function( @@ -15,7 +14,6 @@ _, gettext, NewProgramsView, - CertificateView, sidebarTpl ) { return Backbone.View.extend({ @@ -36,10 +34,6 @@ this.newProgramsView = new NewProgramsView({ context: this.context }); - - this.newCertificateView = new CertificateView({ - context: this.context - }); } }); } diff --git a/lms/static/js/spec/learner_dashboard/certificate_view_spec.js b/lms/static/js/spec/learner_dashboard/certificate_view_spec.js deleted file mode 100644 index 92e61daa07..0000000000 --- a/lms/static/js/spec/learner_dashboard/certificate_view_spec.js +++ /dev/null @@ -1,65 +0,0 @@ -define([ - 'backbone', - 'jquery', - 'js/learner_dashboard/views/certificate_view' - ], function (Backbone, $, CertificateView) { - - 'use strict'; - describe('Certificate View', function () { - var view = null, - data = { - context: { - certificatesData: [ - { - "display_name": "Testing", - "credential_url": "https://credentials.stage.edx.org/credentials/dummy-uuid-1/" - }, - { - "display_name": "Testing2", - "credential_url": "https://credentials.stage.edx.org/credentials/dummy-uuid-2/" - } - ], - xseriesImage: "/images/testing.png" - } - }; - - beforeEach(function() { - setFixtures('
'); - view = new CertificateView(data); - view.render(); - }); - - afterEach(function() { - view.remove(); - }); - - it('should exist', function() { - expect(view).toBeDefined(); - }); - - it('should load the certificates based on passed in certificates list', function() { - var $certificates = view.$el.find('.certificate-box'); - expect($certificates.length).toBe(2); - - $certificates.each(function(index, el){ - expect($(el).html().trim()).toEqual(data.context.certificatesData[index].display_name); - expect($(el).attr('href')).toEqual(data.context.certificatesData[index].credential_url); - }); - expect(view.$el.find('.title').html().trim()).toEqual('XSeries Program Certificates:'); - expect(view.$el.find('img').attr('src')).toEqual('/images/testing.png'); - }); - - it('should display no certificate box if certificates list is empty', function() { - var $certificate; - view.remove(); - setFixtures('
'); - view = new CertificateView({ - context: {certificatesData: []} - }); - view.render(); - $certificate = view.$el.find('.certificate-box'); - expect($certificate.length).toBe(0); - }); - }); - } -); diff --git a/lms/static/js/spec/learner_dashboard/sidebar_view_spec.js b/lms/static/js/spec/learner_dashboard/sidebar_view_spec.js index 14f57bd91f..295d25c3be 100644 --- a/lms/static/js/spec/learner_dashboard/sidebar_view_spec.js +++ b/lms/static/js/spec/learner_dashboard/sidebar_view_spec.js @@ -10,14 +10,7 @@ define([ describe('Sidebar View', function () { var view = null, context = { - xseriesUrl: 'http://www.edx.org/xseries', - certificatesData: [ - { - "display_name": "Testing", - "credential_url": "https://credentials.stage.edx.org/credentials/dummy-uuid-1/" - } - ], - xseriesImage: '/image/test.png' + xseriesUrl: 'http://www.edx.org/xseries' }; beforeEach(function() { @@ -45,23 +38,17 @@ define([ expect($sidebar.find('.program-advertise .ad-link a').attr('href')).toEqual(context.xseriesUrl); }); - it('should load the certificates based on passed in certificates list', function() { - expect(view.$('.certificate-box').length).toBe(1); - }); - it('should not load the xseries advertising if no xseriesUrl passed in', function(){ var $ad; view.remove(); view = new SidebarView({ el: '.sidebar', - context: {certificatesData: []} + context: {} }); view.render(); $ad = view.$el.find('.program-advertise'); expect($ad.length).toBe(0); - expect(view.$('.certificate-box').length).toBe(0); }); - }); } ); diff --git a/lms/static/js/spec/main.js b/lms/static/js/spec/main.js index f25edd870b..0287a265e7 100644 --- a/lms/static/js/spec/main.js +++ b/lms/static/js/spec/main.js @@ -754,8 +754,7 @@ 'lms/include/js/spec/markdown_editor_spec.js', 'lms/include/js/spec/learner_dashboard/collection_list_view_spec.js', 'lms/include/js/spec/learner_dashboard/sidebar_view_spec.js', - 'lms/include/js/spec/learner_dashboard/program_card_view_spec.js', - 'lms/include/js/spec/learner_dashboard/certificate_view_spec.js' + 'lms/include/js/spec/learner_dashboard/program_card_view_spec.js' ]); }).call(this, requirejs, define); diff --git a/lms/static/sass/_build-lms-v1.scss b/lms/static/sass/_build-lms-v1.scss index bfa3ea5859..ae3dbb281f 100644 --- a/lms/static/sass/_build-lms-v1.scss +++ b/lms/static/sass/_build-lms-v1.scss @@ -59,7 +59,6 @@ @import "views/financial-assistance"; @import 'views/bookmarks'; @import 'course/auto-cert'; -@import 'xseries_certificates'; @import 'views/program-list'; @import 'views/api-access'; diff --git a/lms/static/sass/_xseries_certificates.scss b/lms/static/sass/_xseries_certificates.scss deleted file mode 100644 index 7cc9dab924..0000000000 --- a/lms/static/sass/_xseries_certificates.scss +++ /dev/null @@ -1,17 +0,0 @@ -@mixin xseries-certificate-container { - border: 1px solid $gray-l3; - box-sizing: border-box; - padding: $baseline; - background: $gray-l6; - margin-top: $baseline; - .title{ - @extend %t-title6; - @extend %t-weight3; - margin-bottom:$baseline; - color: $gray; - } - .certificate-box{ - padding-top: $baseline; - display: block; - } -} diff --git a/lms/static/sass/views/_program-list.scss b/lms/static/sass/views/_program-list.scss index 5373f38001..f20dee0a73 100644 --- a/lms/static/sass/views/_program-list.scss +++ b/lms/static/sass/views/_program-list.scss @@ -19,11 +19,6 @@ $pl-button-color: #0079bc; .sidebar{ @include outer-container; @include span-columns(12); - float: right !important; - margin-bottom: $baseline; - .certificate-container{ - @include xseries-certificate-container(); - } .program-advertise{ padding: $baseline; background-color: $body-bg; diff --git a/lms/templates/learner_dashboard/certificate.underscore b/lms/templates/learner_dashboard/certificate.underscore deleted file mode 100644 index b1b6a9c3fc..0000000000 --- a/lms/templates/learner_dashboard/certificate.underscore +++ /dev/null @@ -1,7 +0,0 @@ -
-

<%- gettext('XSeries Program Certificates') %>:

- - <% _.each(certificatesData, function(certificate){ %> - <%- gettext(certificate.display_name) %> - <% }); %> -
diff --git a/lms/templates/learner_dashboard/programs.html b/lms/templates/learner_dashboard/programs.html index 3a7221e95d..d563522aa2 100644 --- a/lms/templates/learner_dashboard/programs.html +++ b/lms/templates/learner_dashboard/programs.html @@ -12,9 +12,7 @@ from openedx.core.djangolib.js_utils import ( <%static:require_module module_name="js/learner_dashboard/program_list_factory" class_name="ProgramListFactory"> ProgramListFactory({ programsData: ${programs | n, dump_js_escaped_json}, - certificatesData: ${credentials | n, dump_js_escaped_json}, - xseriesUrl: '${xseries_url | n, js_escaped_string}', - xseriesImage: '${static.url('images/xseries-certificate-visual.png')}' + xseriesUrl: '${xseries_url | n, js_escaped_string}' }); diff --git a/lms/templates/learner_dashboard/sidebar.underscore b/lms/templates/learner_dashboard/sidebar.underscore index c93b1b2f32..6ddfcc18a5 100644 --- a/lms/templates/learner_dashboard/sidebar.underscore +++ b/lms/templates/learner_dashboard/sidebar.underscore @@ -1,2 +1,2 @@
-
+
From 95ae2557193c33fe6fcfc47d1d528f3c0ed07fd2 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 20 Apr 2016 08:39:06 -0400 Subject: [PATCH 27/70] fix flaky test for oauth redirects (TNL-4190) (#12187) --- .../test/acceptance/tests/lms/test_oauth2.py | 37 ++++++++++++++----- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/common/test/acceptance/tests/lms/test_oauth2.py b/common/test/acceptance/tests/lms/test_oauth2.py index 25628993e4..b3b3a25647 100644 --- a/common/test/acceptance/tests/lms/test_oauth2.py +++ b/common/test/acceptance/tests/lms/test_oauth2.py @@ -66,7 +66,6 @@ class OAuth2PermissionDelegationTests(WebAppTest): else: self.oauth_page.wait_for(check_redirect, 'redirected to invalid URL') - @flaky # TODO, fix this: TNL-4190 def test_accepting_redirects(self): """ If you accept the request, you're redirected to the redirect_url with @@ -77,14 +76,34 @@ class OAuth2PermissionDelegationTests(WebAppTest): # This redirects to an invalid URI. self.oauth_page.confirm() - self.oauth_page.wait_for_element_absence('input[name=authorize]', 'Authorization button is not present') + self.oauth_page.wait_for_element_absence( + 'input[name=authorize]', 'Authorization button is not present' + ) - # Due to a bug in ChromeDriver, when chrome is on invalid URI,self.browser.current_url outputs - # data:text/html,chromewebdata. When this happens in our case,query string is present in the title. - # So to get query string, we branch out based on selected browser. - if self.browser.name == 'chrome': - query = self._qs(self.browser.title) - else: + def check_query_string(): + """ + Checks that 'code' appears in the browser's current url. + """ query = self._qs(self.browser.current_url) + return 'code' in query - self.assertIn('code', query) + def check_query_string_chrome(): + """ + Similar to check_query_string, but, due to a bug in ChromeDriver, + when chrome is on an invalid URI, `self.browser.current_url` outputs + "data:text/html,chromewebdata" instead of the current URI. + + However, since the query string is present in the `title`, we use + that for chrome. + """ + query = self._qs(self.browser.title) + return 'code' in query + + if self.browser.name == 'chrome': + self.oauth_page.wait_for( + check_query_string_chrome, 'redirected with correct query parameters (chrome)' + ) + else: + self.oauth_page.wait_for( + check_query_string, 'redirected with correct query parameters' + ) From bb5874d5a1a4b3825be44efeef32a1e0ed668bb8 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 20 Apr 2016 08:43:26 -0400 Subject: [PATCH 28/70] truncate email from addresses if >320 chars when encoded (TNL-4264) (#12171) * truncate email from addresses if >320 chars when encoded (TNL-4264) * use exact lengths --- lms/djangoapps/bulk_email/tasks.py | 21 +++++++++++----- lms/djangoapps/bulk_email/tests/test_email.py | 25 +++++++++++++++---- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/lms/djangoapps/bulk_email/tasks.py b/lms/djangoapps/bulk_email/tasks.py index 1c894be49c..4ec53f3778 100644 --- a/lms/djangoapps/bulk_email/tasks.py +++ b/lms/djangoapps/bulk_email/tasks.py @@ -32,6 +32,7 @@ from celery.exceptions import RetryTaskError # pylint: disable=no-name-in-modul from django.conf import settings from django.contrib.auth.models import User from django.core.mail import EmailMultiAlternatives, get_connection +from django.core.mail.message import forbid_multi_line_headers from django.core.urlresolvers import reverse from bulk_email.models import ( @@ -384,13 +385,20 @@ def _filter_optouts_from_recipients(to_list, course_id): return to_list, num_optout -def _get_source_address(course_id, course_title): +def _get_source_address(course_id, course_title, truncate=True): """ Calculates an email address to be used as the 'from-address' for sent emails. Makes a unique from name and address for each course, e.g. - "COURSE_TITLE" Course Staff + "COURSE_TITLE" Course Staff + + If, when decoded to ascii, this from_addr is longer than 320 characters, + use the course_name rather than the course title, e.g. + + "course_name" Course Staff + + The "truncate" kwarg is only used for tests. """ course_title_no_quotes = re.sub(r'"', '', course_title) @@ -418,10 +426,11 @@ def _get_source_address(course_id, course_title): from_addr = format_address(course_title_no_quotes) - # If it's longer than 320 characters, reformat, but with the course name - # rather than course title. Amazon SES's from address field appears to have a maximum - # length of 320. - if len(from_addr) >= 320: + # If the encoded from_addr is longer than 320 characters, reformat, + # but with the course name rather than course title. + # Amazon SES's from address field appears to have a maximum length of 320. + __, encoded_from_addr = forbid_multi_line_headers('from', from_addr, 'utf-8') + if len(encoded_from_addr) >= 320 and truncate: from_addr = format_address(course_name) return from_addr diff --git a/lms/djangoapps/bulk_email/tests/test_email.py b/lms/djangoapps/bulk_email/tests/test_email.py index d1a32e641d..e772dccad2 100644 --- a/lms/djangoapps/bulk_email/tests/test_email.py +++ b/lms/djangoapps/bulk_email/tests/test_email.py @@ -10,11 +10,13 @@ from unittest import skipIf from django.conf import settings from django.core import mail +from django.core.mail.message import forbid_multi_line_headers from django.core.urlresolvers import reverse from django.core.management import call_command from django.test.utils import override_settings from bulk_email.models import Optout +from bulk_email.tasks import _get_source_address from courseware.tests.factories import StaffFactory, InstructorFactory from instructor_task.subtasks import update_subtask_status from student.roles import CourseStaffRole @@ -322,13 +324,24 @@ class TestEmailSendFromDashboardMockedHtmlToText(EmailSendFromDashboardTestCase) 'message': 'test message for self' } - # make very long display_name for course - long_name = u"x" * 321 + # make display_name that's longer than 320 characters when encoded + # to ascii, but shorter than 320 unicode characters + long_name = u"é" * 200 + course = CourseFactory.create( display_name=long_name, number="bulk_email_course_name" ) instructor = InstructorFactory(course_key=course.id) + unexpected_from_addr = _get_source_address( + course.id, course.display_name, truncate=False + ) + __, encoded_unexpected_from_addr = forbid_multi_line_headers( + "from", unexpected_from_addr, 'utf-8' + ) + self.assertEqual(len(encoded_unexpected_from_addr), 748) + self.assertEqual(len(unexpected_from_addr), 261) + self.login_as_user(instructor) send_mail_url = reverse('send_email', kwargs={'course_id': unicode(course.id)}) response = self.client.post(send_mail_url, test_email) @@ -337,11 +350,13 @@ class TestEmailSendFromDashboardMockedHtmlToText(EmailSendFromDashboardTestCase) self.assertEqual(len(mail.outbox), 1) from_email = mail.outbox[0].from_email + expected_from_addr = ( + u'"{course_name}" Course Staff <{course_name}-no-reply@example.com>' + ).format(course_name=course.id.course) + self.assertEqual( from_email, - u'"{course_name}" Course Staff <{course_name}-no-reply@example.com>'.format( - course_name=course.id.course - ) + expected_from_addr ) self.assertEqual(len(from_email), 83) From 665b3dcfdb4b5001c3640ab573ec6c9a8bc0c11c Mon Sep 17 00:00:00 2001 From: Chris Rodriguez Date: Wed, 20 Apr 2016 08:56:36 -0400 Subject: [PATCH 29/70] AC-383 language menu events only when menu opens --- .../js/spec/video/video_events_plugin_spec.js | 3 ++- .../xmodule/js/src/video/09_events_plugin.js | 7 ++++++- .../xmodule/js/src/video/09_video_caption.js | 21 ++++++++++++------- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/common/lib/xmodule/xmodule/js/spec/video/video_events_plugin_spec.js b/common/lib/xmodule/xmodule/js/spec/video/video_events_plugin_spec.js index b9688c01fe..b6896d19db 100644 --- a/common/lib/xmodule/xmodule/js/spec/video/video_events_plugin_spec.js +++ b/common/lib/xmodule/xmodule/js/spec/video/video_events_plugin_spec.js @@ -130,7 +130,8 @@ state.el.trigger('language_menu:hide'); expect(Logger.log).toHaveBeenCalledWith('video_hide_cc_menu', { id: 'id', - code: 'html5' + code: 'html5', + language: 'en' }); }); diff --git a/common/lib/xmodule/xmodule/js/src/video/09_events_plugin.js b/common/lib/xmodule/xmodule/js/src/video/09_events_plugin.js index fa6efcae22..7c5b080621 100644 --- a/common/lib/xmodule/xmodule/js/src/video/09_events_plugin.js +++ b/common/lib/xmodule/xmodule/js/src/video/09_events_plugin.js @@ -105,7 +105,7 @@ define('video/09_events_plugin.js', [], function() { }, onHideLanguageMenu: function () { - this.log('video_hide_cc_menu'); + this.log('video_hide_cc_menu', { language: this.getCurrentLanguage() }); }, onShowCaptions: function () { @@ -121,6 +121,11 @@ define('video/09_events_plugin.js', [], function() { return player ? player.currentTime : 0; }, + getCurrentLanguage: function() { + var language = this.state.lang; + return language; + }, + log: function (eventName, data) { var logInfo = _.extend({ id: this.state.id, diff --git a/common/lib/xmodule/xmodule/js/src/video/09_video_caption.js b/common/lib/xmodule/xmodule/js/src/video/09_video_caption.js index 8d315ad215..cace102c01 100644 --- a/common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +++ b/common/lib/xmodule/xmodule/js/src/video/09_video_caption.js @@ -325,9 +325,6 @@ var button = this.languageChooserEl, menu = button.parent().find('.menu'); - - this.state.el.trigger('language_menu:show'); - button .addClass('is-opened'); @@ -341,8 +338,6 @@ var button = this.languageChooserEl; - this.state.el.trigger('language_menu:hide'); - button .removeClass('is-opened') .find('.language-menu') @@ -381,7 +376,13 @@ onContainerMouseEnter: function (event) { event.preventDefault(); $(event.currentTarget).find('.lang').addClass('is-opened'); - this.state.el.trigger('language_menu:show'); + + // We only want to fire the analytics event if a menu is + // present instead of on the container hover, since it wraps + // the "CC" and "Transcript" buttons as well. + if ($(event.currentTarget).find('.lang').length) { + this.state.el.trigger('language_menu:show'); + } }, /** @@ -392,7 +393,13 @@ onContainerMouseLeave: function (event) { event.preventDefault(); $(event.currentTarget).find('.lang').removeClass('is-opened'); - this.state.el.trigger('language_menu:hide'); + + // We only want to fire the analytics event if a menu is + // present instead of on the container hover, since it wraps + // the "CC" and "Transcript" buttons as well. + if ($(event.currentTarget).find('.lang').length) { + this.state.el.trigger('language_menu:show'); + } }, /** From 9a4f80e5c0119038a4b9fa5e41a0d4b2bde0c2c1 Mon Sep 17 00:00:00 2001 From: Adam Palay Date: Wed, 13 Apr 2016 16:52:06 -0400 Subject: [PATCH 30/70] update query for whitelisted users who haven't yet had certs run for them remove CertificateStatuses.regenerating --- common/djangoapps/student/tests/tests.py | 16 --- common/djangoapps/student/views.py | 1 - lms/djangoapps/certificates/models.py | 3 +- .../tests/test_cert_management.py | 1 - lms/djangoapps/certificates/views/xqueue.py | 2 +- .../instructor_task/tasks_helper.py | 15 +-- .../tests/test_tasks_helper.py | 118 +++++++++++------- .../certificate-white-list.underscore | 2 +- 8 files changed, 77 insertions(+), 81 deletions(-) diff --git a/common/djangoapps/student/tests/tests.py b/common/djangoapps/student/tests/tests.py index f3c5232db9..ace9fe14bf 100644 --- a/common/djangoapps/student/tests/tests.py +++ b/common/djangoapps/student/tests/tests.py @@ -117,22 +117,6 @@ class CourseEndingTest(TestCase): } ) - cert_status = {'status': 'regenerating', 'grade': '67', 'mode': 'verified'} - self.assertEqual( - _cert_info(user, course, cert_status, course_mode), - { - 'status': 'generating', - 'show_disabled_download_button': True, - 'show_download_url': False, - 'show_survey_button': True, - 'survey_url': survey_url, - 'grade': '67', - 'mode': 'verified', - 'linked_in_url': None, - 'can_unenroll': False, - } - ) - download_url = 'http://s3.edx/cert' cert_status = { 'status': 'downloadable', 'grade': '67', diff --git a/common/djangoapps/student/views.py b/common/djangoapps/student/views.py index fb2424b127..611f8ecdda 100644 --- a/common/djangoapps/student/views.py +++ b/common/djangoapps/student/views.py @@ -312,7 +312,6 @@ def _cert_info(user, course_overview, cert_status, course_mode): # pylint: disa # simplify the status for the template using this lookup table template_state = { CertificateStatuses.generating: 'generating', - CertificateStatuses.regenerating: 'generating', CertificateStatuses.downloadable: 'ready', CertificateStatuses.notpassing: 'notpassing', CertificateStatuses.restricted: 'restricted', diff --git a/lms/djangoapps/certificates/models.py b/lms/djangoapps/certificates/models.py index b2a00e6543..17031810c9 100644 --- a/lms/djangoapps/certificates/models.py +++ b/lms/djangoapps/certificates/models.py @@ -83,7 +83,6 @@ class CertificateStatuses(object): error = 'error' generating = 'generating' notpassing = 'notpassing' - regenerating = 'regenerating' restricted = 'restricted' unavailable = 'unavailable' auditing = 'auditing' @@ -96,7 +95,7 @@ class CertificateStatuses(object): error: "error states" } - PASSED_STATUSES = (downloadable, generating, regenerating) + PASSED_STATUSES = (downloadable, generating) @classmethod def is_passing_status(cls, status): diff --git a/lms/djangoapps/certificates/tests/test_cert_management.py b/lms/djangoapps/certificates/tests/test_cert_management.py index 6f876cc340..2a7783cc4b 100644 --- a/lms/djangoapps/certificates/tests/test_cert_management.py +++ b/lms/djangoapps/certificates/tests/test_cert_management.py @@ -103,7 +103,6 @@ class ResubmitErrorCertificatesTest(CertificateManagementTest): CertificateStatuses.downloadable, CertificateStatuses.generating, CertificateStatuses.notpassing, - CertificateStatuses.regenerating, CertificateStatuses.restricted, CertificateStatuses.unavailable, ) diff --git a/lms/djangoapps/certificates/views/xqueue.py b/lms/djangoapps/certificates/views/xqueue.py index e09fd7997e..7bdeef6975 100644 --- a/lms/djangoapps/certificates/views/xqueue.py +++ b/lms/djangoapps/certificates/views/xqueue.py @@ -110,7 +110,7 @@ def update_certificate(request): cert.error_reason = xqueue_body['error_reason'] else: - if cert.status in [status.generating, status.regenerating]: + if cert.status == status.generating: cert.download_uuid = xqueue_body['download_uuid'] cert.verify_uuid = xqueue_body['verify_uuid'] cert.download_url = xqueue_body['url'] diff --git a/lms/djangoapps/instructor_task/tasks_helper.py b/lms/djangoapps/instructor_task/tasks_helper.py index 8287432d70..c276d6de90 100644 --- a/lms/djangoapps/instructor_task/tasks_helper.py +++ b/lms/djangoapps/instructor_task/tasks_helper.py @@ -1420,20 +1420,13 @@ def generate_students_certificates( ) elif student_set == 'whitelisted_not_generated': - # All Whitelisted students + # Whitelist students who did not get certificates already. students_to_generate_certs_for = students_to_generate_certs_for.filter( certificatewhitelist__course_id=course_id, certificatewhitelist__whitelist=True - ) - - # Whitelisted students which got certificates already. - certificate_generated_students = GeneratedCertificate.objects.filter( # pylint: disable=no-member - course_id=course_id, - ) - certificate_generated_students_ids = set(certificate_generated_students.values_list('user_id', flat=True)) - - students_to_generate_certs_for = students_to_generate_certs_for.exclude( - id__in=certificate_generated_students_ids + ).exclude( + generatedcertificate__course_id=course_id, + generatedcertificate__status__in=CertificateStatuses.PASSED_STATUSES ) elif student_set == "specific_student": diff --git a/lms/djangoapps/instructor_task/tests/test_tasks_helper.py b/lms/djangoapps/instructor_task/tests/test_tasks_helper.py index 4fa14d3215..bd63737ac2 100644 --- a/lms/djangoapps/instructor_task/tests/test_tasks_helper.py +++ b/lms/djangoapps/instructor_task/tests/test_tasks_helper.py @@ -1674,6 +1674,7 @@ class TestGradeReportEnrollmentAndCertificateInfo(TestReportMixin, InstructorTas self._verify_csv_data(user.username, expected_output) +@ddt.ddt @override_settings(CERT_QUEUE='test-queue') class TestCertificateGeneration(InstructorTaskModuleTestCase): """ @@ -1716,65 +1717,70 @@ class TestCertificateGeneration(InstructorTaskModuleTestCase): with self.assertNumQueries(214): self.assertCertificatesGenerated(task_input, expected_results) - def test_certificate_generation_all_whitelisted(self): + @ddt.data( + CertificateStatuses.downloadable, + CertificateStatuses.generating, + CertificateStatuses.notpassing, + CertificateStatuses.audit_passing, + ) + def test_certificate_generation_all_whitelisted(self, status): """ - Verify that certificates generated for all white-listed students when using semantic task_input as - `all_whitelisted`. + Verify that certificates are generated for all white-listed students, + whether or not they already had certs generated for them. """ - # create 5 students students = self._create_students(5) - # white-list 5 students - for student in students: - CertificateWhitelistFactory.create(user=student, course_id=self.course.id, whitelist=True) + # whitelist 3 + for student in students[:3]: + CertificateWhitelistFactory.create( + user=student, course_id=self.course.id, whitelist=True + ) - task_input = {'student_set': 'all_whitelisted'} - expected_results = { - 'action_name': 'certificates generated', - 'total': 5, - 'attempted': 5, - 'succeeded': 5, - 'failed': 0, - 'skipped': 0 - } - self.assertCertificatesGenerated(task_input, expected_results) - - def test_certificate_generation_whitelist_already_generated(self): - """ - Verify that certificates generated for all white-listed students having certifcates already when using - semantic task_input as `all_whitelisted`. - """ - # create 5 students - students = self._create_students(5) - - # white-list 5 students - for student in students: - CertificateWhitelistFactory.create(user=student, course_id=self.course.id, whitelist=True) - - # mark 5 students to have certificates generated already - for student in students: + # generate certs for 2 + for student in students[:2]: GeneratedCertificateFactory.create( user=student, course_id=self.course.id, - status=CertificateStatuses.downloadable, - mode='honor' + status=status, ) task_input = {'student_set': 'all_whitelisted'} + # only certificates for the 3 whitelisted students should have been run expected_results = { 'action_name': 'certificates generated', - 'total': 5, - 'attempted': 5, - 'succeeded': 5, + 'total': 3, + 'attempted': 3, + 'succeeded': 3, 'failed': 0, 'skipped': 0 } self.assertCertificatesGenerated(task_input, expected_results) - def test_certificate_generation_whitelisted_not_generated(self): + # the first 3 students (who were whitelisted) have passing + # certificate statuses + for student in students[:3]: + self.assertIn( + GeneratedCertificate.certificate_for_student(student, self.course.id).status, + CertificateStatuses.PASSED_STATUSES + ) + + # The last 2 students still don't have certs + for student in students[3:]: + self.assertIsNone( + GeneratedCertificate.certificate_for_student(student, self.course.id) + ) + + @ddt.data( + (CertificateStatuses.downloadable, 2), + (CertificateStatuses.generating, 2), + (CertificateStatuses.notpassing, 4), + (CertificateStatuses.audit_passing, 4), + ) + @ddt.unpack + def test_certificate_generation_whitelisted_not_generated(self, status, expected_certs): """ - Verify that certificates only generated for those students which does not have certificates yet when - using semantic task_input as `whitelisted_not_generated`. + Verify that certificates are generated only for those students + who do not have `downloadable` or `generating` certificates. """ # create 5 students students = self._create_students(5) @@ -1784,21 +1790,24 @@ class TestCertificateGeneration(InstructorTaskModuleTestCase): GeneratedCertificateFactory.create( user=student, course_id=self.course.id, - status=CertificateStatuses.downloadable, - mode='honor' + status=status, ) - # white-list 5 students - for student in students: - CertificateWhitelistFactory.create(user=student, course_id=self.course.id, whitelist=True) + # white-list 4 students + for student in students[:4]: + CertificateWhitelistFactory.create( + user=student, course_id=self.course.id, whitelist=True + ) task_input = {'student_set': 'whitelisted_not_generated'} + # certificates should only be generated for the whitelisted students + # who do not yet have passing certificates. expected_results = { 'action_name': 'certificates generated', - 'total': 3, - 'attempted': 3, - 'succeeded': 3, + 'total': expected_certs, + 'attempted': expected_certs, + 'succeeded': expected_certs, 'failed': 0, 'skipped': 0 } @@ -1807,6 +1816,19 @@ class TestCertificateGeneration(InstructorTaskModuleTestCase): expected_results ) + # the first 4 students have passing certificate statuses since + # they either were whitelisted or had one before + for student in students[:4]: + self.assertIn( + GeneratedCertificate.certificate_for_student(student, self.course.id).status, + CertificateStatuses.PASSED_STATUSES + ) + + # The last student still doesn't have a cert + self.assertIsNone( + GeneratedCertificate.certificate_for_student(students[4], self.course.id) + ) + def test_certificate_generation_specific_student(self): """ Tests generating a certificate for a specific student. diff --git a/lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore b/lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore index 0e97cc3af9..6c608b4908 100644 --- a/lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore +++ b/lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore @@ -2,7 +2,7 @@


From 1836065754e876dde314d5a3d7d21cdb7593fc06 Mon Sep 17 00:00:00 2001 From: Dmitry Viskov Date: Mon, 15 Feb 2016 22:38:09 +0300 Subject: [PATCH 31/70] Dynamic values for the selectboxes with tags (tags are stored in the database tables) --- cms/envs/common.py | 3 + cms/lib/xblock/tagging/__init__.py | 6 ++ .../xblock/tagging/migrations/0001_initial.py | 39 ++++++++ cms/lib/xblock/tagging/migrations/__init__.py | 0 cms/lib/xblock/tagging/models.py | 40 +++++++++ cms/lib/xblock/{ => tagging}/tagging.py | 90 ++++++------------- .../{test/test_tagging.py => tagging/test.py} | 72 ++++++++++++--- cms/templates/structured_tags_block.html | 16 ++-- 8 files changed, 185 insertions(+), 81 deletions(-) create mode 100644 cms/lib/xblock/tagging/__init__.py create mode 100644 cms/lib/xblock/tagging/migrations/0001_initial.py create mode 100644 cms/lib/xblock/tagging/migrations/__init__.py create mode 100644 cms/lib/xblock/tagging/models.py rename cms/lib/xblock/{ => tagging}/tagging.py (56%) rename cms/lib/xblock/{test/test_tagging.py => tagging/test.py} (66%) diff --git a/cms/envs/common.py b/cms/envs/common.py index a057dafd78..afa82c69a3 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -903,6 +903,9 @@ INSTALLED_APPS = ( # Management commands used for configuration automation 'edx_management_commands.management_commands', + + # Tagging + 'cms.lib.xblock.tagging', ) diff --git a/cms/lib/xblock/tagging/__init__.py b/cms/lib/xblock/tagging/__init__.py new file mode 100644 index 0000000000..98c9e4da77 --- /dev/null +++ b/cms/lib/xblock/tagging/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +""" +Structured Tagging based on XBlockAsides +""" + +from .tagging import StructuredTagsAside diff --git a/cms/lib/xblock/tagging/migrations/0001_initial.py b/cms/lib/xblock/tagging/migrations/0001_initial.py new file mode 100644 index 0000000000..a0d86d97ac --- /dev/null +++ b/cms/lib/xblock/tagging/migrations/0001_initial.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='TagAvailableValues', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('value', models.CharField(max_length=255)), + ], + options={ + 'ordering': ('id',), + }, + ), + migrations.CreateModel( + name='TagCategories', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(max_length=255, unique=True)), + ('title', models.CharField(max_length=255)), + ], + options={ + 'ordering': ('title',), + }, + ), + migrations.AddField( + model_name='tagavailablevalues', + name='category', + field=models.ForeignKey(to='tagging.TagCategories'), + ), + ] diff --git a/cms/lib/xblock/tagging/migrations/__init__.py b/cms/lib/xblock/tagging/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cms/lib/xblock/tagging/models.py b/cms/lib/xblock/tagging/models.py new file mode 100644 index 0000000000..4024197fcc --- /dev/null +++ b/cms/lib/xblock/tagging/models.py @@ -0,0 +1,40 @@ +""" +Django Model for tags +""" +from django.db import models + + +class TagCategories(models.Model): + """ + This model represents tag categories. + """ + name = models.CharField(max_length=255, unique=True) + title = models.CharField(max_length=255) + + class Meta(object): + app_label = "tagging" + ordering = ('title',) + + def __unicode__(self): + return "[TagCategories] {}: {}".format(self.name, self.title) + + def get_values(self): + """ + Return the list of available values for the particular category + """ + return [t.value for t in TagAvailableValues.objects.filter(category=self)] + + +class TagAvailableValues(models.Model): + """ + This model represents available values for tags. + """ + category = models.ForeignKey(TagCategories, db_index=True) + value = models.CharField(max_length=255) + + class Meta(object): + app_label = "tagging" + ordering = ('id',) + + def __unicode__(self): + return "[TagAvailableValues] {}: {}".format(self.category, self.value) diff --git a/cms/lib/xblock/tagging.py b/cms/lib/xblock/tagging/tagging.py similarity index 56% rename from cms/lib/xblock/tagging.py rename to cms/lib/xblock/tagging/tagging.py index 7a7710e187..15ac9c36bd 100644 --- a/cms/lib/xblock/tagging.py +++ b/cms/lib/xblock/tagging/tagging.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- """ Structured Tagging based on XBlockAsides """ @@ -7,64 +8,15 @@ from xblock.fragment import Fragment from xblock.fields import Scope, Dict from xmodule.x_module import STUDENT_VIEW from xmodule.capa_module import CapaModule -from abc import ABCMeta, abstractproperty from edxmako.shortcuts import render_to_string from django.conf import settings from webob import Response -from collections import OrderedDict +from .models import TagCategories _ = lambda text: text -class AbstractTag(object): - """ - Abstract class for tags - """ - __metaclass__ = ABCMeta - - @abstractproperty - def key(self): - """ - Subclasses must implement key - """ - raise NotImplementedError('Subclasses must implement key') - - @abstractproperty - def name(self): - """ - Subclasses must implement name - """ - raise NotImplementedError('Subclasses must implement name') - - @abstractproperty - def allowed_values(self): - """ - Subclasses must implement allowed_values - """ - raise NotImplementedError('Subclasses must implement allowed_values') - - -class DifficultyTag(AbstractTag): - """ - Particular implementation tags for difficulty - """ - @property - def key(self): - """ Identifier for the difficulty selector """ - return 'difficulty_tag' - - @property - def name(self): - """ Label for the difficulty selector """ - return _('Difficulty') - - @property - def allowed_values(self): - """ Allowed values for the difficulty selector """ - return OrderedDict([('easy', 'Easy'), ('medium', 'Medium'), ('hard', 'Hard')]) - - class StructuredTagsAside(XBlockAside): """ Aside that allows tagging blocks @@ -72,7 +24,12 @@ class StructuredTagsAside(XBlockAside): saved_tags = Dict(help=_("Dictionary with the available tags"), scope=Scope.content, default={},) - available_tags = [DifficultyTag()] + + def get_available_tags(self): + """ + Return available tags + """ + return TagCategories.objects.all() def _get_studio_resource_url(self, relative_url): """ @@ -88,14 +45,21 @@ class StructuredTagsAside(XBlockAside): """ if isinstance(block, CapaModule): tags = [] - for tag in self.available_tags: + for tag in self.get_available_tags(): + values = tag.get_values() + current_value = self.saved_tags.get(tag.name, None) + + if current_value is not None and current_value not in values: + values.insert(0, current_value) + tags.append({ - 'key': tag.key, - 'title': tag.name, - 'values': tag.allowed_values, - 'current_value': self.saved_tags.get(tag.key, None), + 'key': tag.name, + 'title': tag.title, + 'values': values, + 'current_value': current_value }) - fragment = Fragment(render_to_string('structured_tags_block.html', {'tags': tags})) + fragment = Fragment(render_to_string('structured_tags_block.html', {'tags': tags, + 'block_location': block.location})) fragment.add_javascript_url(self._get_studio_resource_url('/js/xblock_asides/structured_tags.js')) fragment.initialize_js('StructuredTagsInit') return fragment @@ -113,14 +77,14 @@ class StructuredTagsAside(XBlockAside): tag = request.params['tag'].split(':') - for av_tag in self.available_tags: - if av_tag.key == tag[0]: - if tag[1] in av_tag.allowed_values: - self.saved_tags[tag[0]] = tag[1] - found = True - elif tag[1] == '': + for av_tag in self.get_available_tags(): + if av_tag.name == tag[0]: + if tag[1] == '': self.saved_tags[tag[0]] = None found = True + elif tag[1] in av_tag.get_values(): + self.saved_tags[tag[0]] = tag[1] + found = True if not found: return Response("Invalid 'tag' parameter", status=400) diff --git a/cms/lib/xblock/test/test_tagging.py b/cms/lib/xblock/tagging/test.py similarity index 66% rename from cms/lib/xblock/test/test_tagging.py rename to cms/lib/xblock/tagging/test.py index 49907e1298..1b6227e90f 100644 --- a/cms/lib/xblock/test/test_tagging.py +++ b/cms/lib/xblock/tagging/test.py @@ -7,7 +7,11 @@ from xmodule.modulestore.django import modulestore from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase from xmodule.modulestore.tests.factories import CourseFactory, ItemFactory from xblock_config.models import StudioConfig +from xblock.fields import ScopeIds +from xblock.runtime import DictKeyValueStore, KvsFieldData +from xblock.test.tools import TestRuntime from cms.lib.xblock.tagging import StructuredTagsAside +from cms.lib.xblock.tagging.models import TagCategories, TagAvailableValues from contentstore.views.preview import get_preview_fragment from contentstore.utils import reverse_usage_url from contentstore.tests.utils import AjaxEnabledTestClient @@ -30,8 +34,9 @@ class StructuredTagsAsideTestCase(ModuleStoreTestCase): """ self.user_password = super(StructuredTagsAsideTestCase, self).setUp() self.aside_name = 'tagging_aside' - self.aside_tag = 'difficulty_tag' - self.aside_tag_value = 'hard' + self.aside_tag_dif = 'difficulty' + self.aside_tag_dif_value = 'Hard' + self.aside_tag_lo = 'learning_outcome' course = CourseFactory.create(default_store=ModuleStoreEnum.Type.split) self.course = ItemFactory.create( @@ -75,16 +80,47 @@ class StructuredTagsAsideTestCase(ModuleStoreTestCase): user_id=self.user.id ) + _init_data = [ + { + 'name': 'difficulty', + 'title': 'Difficulty', + 'values': ['Easy', 'Medium', 'Hard'], + }, + { + 'name': 'learning_outcome', + 'title': 'Learning outcome', + 'values': ['Learned nothing', 'Learned a few things', 'Learned everything'] + } + ] + + for tag in _init_data: + category = TagCategories.objects.create(name=tag['name'], title=tag['title']) + for val in tag['values']: + TagAvailableValues.objects.create(category=category, value=val) + config = StudioConfig.current() config.enabled = True config.save() + def tearDown(self): + TagAvailableValues.objects.all().delete() + TagCategories.objects.all().delete() + super(StructuredTagsAsideTestCase, self).tearDown() + def test_aside_contains_tags(self): """ Checks that available_tags list is not empty """ - self.assertGreater(len(StructuredTagsAside.available_tags), 0, - "StructuredTagsAside should contains at least one available tag") + sids = ScopeIds(user_id="bob", + block_type="bobs-type", + def_id="definition-id", + usage_id="usage-id") + key_store = DictKeyValueStore() + field_data = KvsFieldData(key_store) + runtime = TestRuntime(services={'field-data': field_data}) # pylint: disable=abstract-class-instantiated + xblock_aside = StructuredTagsAside(scope_ids=sids, runtime=runtime) + available_tags = xblock_aside.get_available_tags() + self.assertEquals(len(available_tags), 2, "StructuredTagsAside should contains two tag categories") def test_preview_html(self): """ @@ -115,10 +151,26 @@ class StructuredTagsAsideTestCase(ModuleStoreTestCase): self.assertIn('xblock_asides-v1', div_node.get('class')) select_nodes = div_node.xpath('div/select') - self.assertEquals(len(select_nodes), 1) + self.assertEquals(len(select_nodes), 2) - select_node = select_nodes[0] - self.assertEquals(select_node.get('name'), self.aside_tag) + select_node1 = select_nodes[0] + self.assertEquals(select_node1.get('name'), self.aside_tag_dif) + + option_nodes1 = select_node1.xpath('option') + self.assertEquals(len(option_nodes1), 4) + + option_values1 = [opt_elem.text for opt_elem in option_nodes1] + self.assertEquals(option_values1, ['Not selected', 'Easy', 'Medium', 'Hard']) + + select_node2 = select_nodes[1] + self.assertEquals(select_node2.get('name'), self.aside_tag_lo) + + option_nodes2 = select_node2.xpath('option') + self.assertEquals(len(option_nodes2), 4) + + option_values2 = [opt_elem.text for opt_elem in option_nodes2 if opt_elem.text] + self.assertEquals(option_values2, ['Not selected', 'Learned nothing', + 'Learned a few things', 'Learned everything']) # Now ensure the acid_aside is not in the result self.assertNotRegexpMatches(problem_html, r"data-block-type=[\"\']acid_aside[\"\']") @@ -146,11 +198,11 @@ class StructuredTagsAsideTestCase(ModuleStoreTestCase): response = client.post(path=handler_url, data={'tag': 'undefined_tag:undefined'}) self.assertEqual(response.status_code, 400) - val = '%s:undefined' % self.aside_tag + val = '%s:undefined' % self.aside_tag_dif response = client.post(path=handler_url, data={'tag': val}) self.assertEqual(response.status_code, 400) - val = '%s:%s' % (self.aside_tag, self.aside_tag_value) + val = '%s:%s' % (self.aside_tag_dif, self.aside_tag_dif_value) response = client.post(path=handler_url, data={'tag': val}) self.assertEqual(response.status_code, 200) @@ -163,4 +215,4 @@ class StructuredTagsAsideTestCase(ModuleStoreTestCase): break self.assertIsNotNone(tag_aside, "Necessary StructuredTagsAside object isn't found") - self.assertEqual(tag_aside.saved_tags[self.aside_tag], self.aside_tag_value) + self.assertEqual(tag_aside.saved_tags[self.aside_tag_dif], self.aside_tag_dif_value) diff --git a/cms/templates/structured_tags_block.html b/cms/templates/structured_tags_block.html index dedab140c1..ae68b781c5 100644 --- a/cms/templates/structured_tags_block.html +++ b/cms/templates/structured_tags_block.html @@ -1,16 +1,16 @@ -

+
% for tag in tags: - : - - % for k,v in tag['values'].iteritems(): + % for v in tag['values']: <% selected = '' - if k == tag['current_value']: + if v == tag['current_value']: selected = 'selected' %> - + % endfor - % endfor -
\ No newline at end of file + % endfor +
From 88192fd4448d1ee3eb35b57ccf838dca464a61a2 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 19 Apr 2016 16:17:26 -0400 Subject: [PATCH 32/70] Revert "Revert "Adding background image for xseries certificates on dashboard side bar panel"" --- .../learner_dashboard/tests/test_programs.py | 61 +++++++++++++++- lms/djangoapps/learner_dashboard/views.py | 5 +- .../images/xseries-certificate-visual.png | Bin 0 -> 14323 bytes .../views/certificate_view.js | 31 +++++++++ .../learner_dashboard/views/sidebar_view.js | 6 ++ .../certificate_view_spec.js | 65 ++++++++++++++++++ .../learner_dashboard/sidebar_view_spec.js | 17 ++++- lms/static/js/spec/main.js | 3 +- lms/static/sass/_build-lms-v1.scss | 1 + lms/static/sass/_xseries_certificates.scss | 17 +++++ lms/static/sass/views/_program-list.scss | 5 ++ .../learner_dashboard/certificate.underscore | 7 ++ lms/templates/learner_dashboard/programs.html | 4 +- .../learner_dashboard/sidebar.underscore | 2 +- 14 files changed, 216 insertions(+), 8 deletions(-) create mode 100644 lms/static/images/xseries-certificate-visual.png create mode 100644 lms/static/js/learner_dashboard/views/certificate_view.js create mode 100644 lms/static/js/spec/learner_dashboard/certificate_view_spec.js create mode 100644 lms/static/sass/_xseries_certificates.scss create mode 100644 lms/templates/learner_dashboard/certificate.underscore diff --git a/lms/djangoapps/learner_dashboard/tests/test_programs.py b/lms/djangoapps/learner_dashboard/tests/test_programs.py index ae42b4a45e..42271d5f8e 100644 --- a/lms/djangoapps/learner_dashboard/tests/test_programs.py +++ b/lms/djangoapps/learner_dashboard/tests/test_programs.py @@ -14,6 +14,8 @@ from edx_oauth2_provider.tests.factories import ClientFactory from opaque_keys.edx import locator from provider.constants import CONFIDENTIAL +from openedx.core.djangoapps.credentials.models import CredentialsApiConfig +from openedx.core.djangoapps.credentials.tests.mixins import CredentialsDataMixin, CredentialsApiConfigMixin from openedx.core.djangoapps.programs.tests.mixins import ( ProgramsApiConfigMixin, ProgramsDataMixin) @@ -29,7 +31,9 @@ from xmodule.modulestore.tests.factories import CourseFactory class TestProgramListing( ModuleStoreTestCase, ProgramsApiConfigMixin, - ProgramsDataMixin): + ProgramsDataMixin, + CredentialsDataMixin, + CredentialsApiConfigMixin): """ Unit tests for getting the list of programs enrolled by a logged in user @@ -41,6 +45,7 @@ class TestProgramListing( Add a student """ super(TestProgramListing, self).setUp() + ClientFactory(name=CredentialsApiConfig.OAUTH2_CLIENT_NAME, client_type=CONFIDENTIAL) ClientFactory(name=ProgramsApiConfig.OAUTH2_CLIENT_NAME, client_type=CONFIDENTIAL) self.student = UserFactory() self.create_programs_config(xseries_ad_enabled=True, program_listing_enabled=True) @@ -139,3 +144,57 @@ class TestProgramListing( self.assertEqual(response.status_code, 302) self.assertIsInstance(response, HttpResponseRedirect) self.assertIn('login', response.url) # pylint: disable=no-member + + def _expected_credetials_data(self): + """ Dry method for getting expected credentials.""" + + return [ + { + "display_name": "Test Program A", + "credential_url": "http://credentials.edx.org/credentials/dummy-uuid-1/" + }, + { + "display_name": "Test Program B", + "credential_url": "http://credentials.edx.org/credentials/dummy-uuid-2/" + } + ] + + @httpretty.activate + def test_get_xseries_certificates_with_data(self): + + self.create_programs_config(program_listing_enabled=True) + self.create_credentials_config(is_learner_issuance_enabled=True) + + self.client.login(username=self.student.username, password=self.PASSWORD) + + # mock programs and credentials apis + self.mock_programs_api() + self.mock_credentials_api(self.student, data=self.CREDENTIALS_API_RESPONSE, reset_url=False) + + response = self.client.get(reverse("program_listing_view")) + self.assertEqual(response.status_code, 200) + + for certificate in self._expected_credetials_data(): + self.assertIn(certificate['display_name'], response.content) + self.assertIn(certificate['credential_url'], response.content) + + self.assertIn('images/xseries-certificate-visual.png', response.content) + + @httpretty.activate + def test_get_xseries_certificates_without_data(self): + + self.create_programs_config(program_listing_enabled=True) + self.create_credentials_config(is_learner_issuance_enabled=True) + + self.client.login(username=self.student.username, password=self.PASSWORD) + + # mock programs and credentials apis + self.mock_programs_api() + self.mock_credentials_api(self.student, data={"results": []}, reset_url=False) + + response = self.client.get(reverse("program_listing_view")) + self.assertEqual(response.status_code, 200) + + for certificate in self._expected_credetials_data(): + self.assertNotIn(certificate['display_name'], response.content) + self.assertNotIn(certificate['credential_url'], response.content) diff --git a/lms/djangoapps/learner_dashboard/views.py b/lms/djangoapps/learner_dashboard/views.py index 503d4bfcc3..427bfa6ed3 100644 --- a/lms/djangoapps/learner_dashboard/views.py +++ b/lms/djangoapps/learner_dashboard/views.py @@ -9,7 +9,7 @@ from django.http import Http404 from edxmako.shortcuts import render_to_response from openedx.core.djangoapps.programs.utils import get_engaged_programs from openedx.core.djangoapps.programs.models import ProgramsApiConfig -from student.views import get_course_enrollments +from student.views import get_course_enrollments, _get_xseries_credentials @login_required @@ -35,5 +35,6 @@ def view_programs(request): 'programs': programs, 'xseries_url': marketing_root if ProgramsApiConfig.current().show_xseries_ad else None, 'nav_hidden': True, - 'show_program_listing': show_program_listing + 'show_program_listing': show_program_listing, + 'credentials': _get_xseries_credentials(request.user) }) diff --git a/lms/static/images/xseries-certificate-visual.png b/lms/static/images/xseries-certificate-visual.png new file mode 100644 index 0000000000000000000000000000000000000000..122a485a5a28eaf3350ab7e1fca23912c9b860c8 GIT binary patch literal 14323 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 0) { + this.$el.html(this.tpl(this.context)); + } + } + }); + } + ); +}).call(this, define || RequireJS.define); diff --git a/lms/static/js/learner_dashboard/views/sidebar_view.js b/lms/static/js/learner_dashboard/views/sidebar_view.js index 3534eb3e02..e2c9502556 100644 --- a/lms/static/js/learner_dashboard/views/sidebar_view.js +++ b/lms/static/js/learner_dashboard/views/sidebar_view.js @@ -6,6 +6,7 @@ 'underscore', 'gettext', 'js/learner_dashboard/views/explore_new_programs_view', + 'js/learner_dashboard/views/certificate_view', 'text!../../../templates/learner_dashboard/sidebar.underscore' ], function( @@ -14,6 +15,7 @@ _, gettext, NewProgramsView, + CertificateView, sidebarTpl ) { return Backbone.View.extend({ @@ -34,6 +36,10 @@ this.newProgramsView = new NewProgramsView({ context: this.context }); + + this.newCertificateView = new CertificateView({ + context: this.context + }); } }); } diff --git a/lms/static/js/spec/learner_dashboard/certificate_view_spec.js b/lms/static/js/spec/learner_dashboard/certificate_view_spec.js new file mode 100644 index 0000000000..92e61daa07 --- /dev/null +++ b/lms/static/js/spec/learner_dashboard/certificate_view_spec.js @@ -0,0 +1,65 @@ +define([ + 'backbone', + 'jquery', + 'js/learner_dashboard/views/certificate_view' + ], function (Backbone, $, CertificateView) { + + 'use strict'; + describe('Certificate View', function () { + var view = null, + data = { + context: { + certificatesData: [ + { + "display_name": "Testing", + "credential_url": "https://credentials.stage.edx.org/credentials/dummy-uuid-1/" + }, + { + "display_name": "Testing2", + "credential_url": "https://credentials.stage.edx.org/credentials/dummy-uuid-2/" + } + ], + xseriesImage: "/images/testing.png" + } + }; + + beforeEach(function() { + setFixtures('
'); + view = new CertificateView(data); + view.render(); + }); + + afterEach(function() { + view.remove(); + }); + + it('should exist', function() { + expect(view).toBeDefined(); + }); + + it('should load the certificates based on passed in certificates list', function() { + var $certificates = view.$el.find('.certificate-box'); + expect($certificates.length).toBe(2); + + $certificates.each(function(index, el){ + expect($(el).html().trim()).toEqual(data.context.certificatesData[index].display_name); + expect($(el).attr('href')).toEqual(data.context.certificatesData[index].credential_url); + }); + expect(view.$el.find('.title').html().trim()).toEqual('XSeries Program Certificates:'); + expect(view.$el.find('img').attr('src')).toEqual('/images/testing.png'); + }); + + it('should display no certificate box if certificates list is empty', function() { + var $certificate; + view.remove(); + setFixtures('
'); + view = new CertificateView({ + context: {certificatesData: []} + }); + view.render(); + $certificate = view.$el.find('.certificate-box'); + expect($certificate.length).toBe(0); + }); + }); + } +); diff --git a/lms/static/js/spec/learner_dashboard/sidebar_view_spec.js b/lms/static/js/spec/learner_dashboard/sidebar_view_spec.js index 295d25c3be..14f57bd91f 100644 --- a/lms/static/js/spec/learner_dashboard/sidebar_view_spec.js +++ b/lms/static/js/spec/learner_dashboard/sidebar_view_spec.js @@ -10,7 +10,14 @@ define([ describe('Sidebar View', function () { var view = null, context = { - xseriesUrl: 'http://www.edx.org/xseries' + xseriesUrl: 'http://www.edx.org/xseries', + certificatesData: [ + { + "display_name": "Testing", + "credential_url": "https://credentials.stage.edx.org/credentials/dummy-uuid-1/" + } + ], + xseriesImage: '/image/test.png' }; beforeEach(function() { @@ -38,17 +45,23 @@ define([ expect($sidebar.find('.program-advertise .ad-link a').attr('href')).toEqual(context.xseriesUrl); }); + it('should load the certificates based on passed in certificates list', function() { + expect(view.$('.certificate-box').length).toBe(1); + }); + it('should not load the xseries advertising if no xseriesUrl passed in', function(){ var $ad; view.remove(); view = new SidebarView({ el: '.sidebar', - context: {} + context: {certificatesData: []} }); view.render(); $ad = view.$el.find('.program-advertise'); expect($ad.length).toBe(0); + expect(view.$('.certificate-box').length).toBe(0); }); + }); } ); diff --git a/lms/static/js/spec/main.js b/lms/static/js/spec/main.js index 0287a265e7..f25edd870b 100644 --- a/lms/static/js/spec/main.js +++ b/lms/static/js/spec/main.js @@ -754,7 +754,8 @@ 'lms/include/js/spec/markdown_editor_spec.js', 'lms/include/js/spec/learner_dashboard/collection_list_view_spec.js', 'lms/include/js/spec/learner_dashboard/sidebar_view_spec.js', - 'lms/include/js/spec/learner_dashboard/program_card_view_spec.js' + 'lms/include/js/spec/learner_dashboard/program_card_view_spec.js', + 'lms/include/js/spec/learner_dashboard/certificate_view_spec.js' ]); }).call(this, requirejs, define); diff --git a/lms/static/sass/_build-lms-v1.scss b/lms/static/sass/_build-lms-v1.scss index ae3dbb281f..bfa3ea5859 100644 --- a/lms/static/sass/_build-lms-v1.scss +++ b/lms/static/sass/_build-lms-v1.scss @@ -59,6 +59,7 @@ @import "views/financial-assistance"; @import 'views/bookmarks'; @import 'course/auto-cert'; +@import 'xseries_certificates'; @import 'views/program-list'; @import 'views/api-access'; diff --git a/lms/static/sass/_xseries_certificates.scss b/lms/static/sass/_xseries_certificates.scss new file mode 100644 index 0000000000..7cc9dab924 --- /dev/null +++ b/lms/static/sass/_xseries_certificates.scss @@ -0,0 +1,17 @@ +@mixin xseries-certificate-container { + border: 1px solid $gray-l3; + box-sizing: border-box; + padding: $baseline; + background: $gray-l6; + margin-top: $baseline; + .title{ + @extend %t-title6; + @extend %t-weight3; + margin-bottom:$baseline; + color: $gray; + } + .certificate-box{ + padding-top: $baseline; + display: block; + } +} diff --git a/lms/static/sass/views/_program-list.scss b/lms/static/sass/views/_program-list.scss index f20dee0a73..f098e435bb 100644 --- a/lms/static/sass/views/_program-list.scss +++ b/lms/static/sass/views/_program-list.scss @@ -19,6 +19,11 @@ $pl-button-color: #0079bc; .sidebar{ @include outer-container; @include span-columns(12); + @include float(right); + margin-bottom: $baseline; + .certificate-container{ + @include xseries-certificate-container(); + } .program-advertise{ padding: $baseline; background-color: $body-bg; diff --git a/lms/templates/learner_dashboard/certificate.underscore b/lms/templates/learner_dashboard/certificate.underscore new file mode 100644 index 0000000000..b1b6a9c3fc --- /dev/null +++ b/lms/templates/learner_dashboard/certificate.underscore @@ -0,0 +1,7 @@ +
+

<%- gettext('XSeries Program Certificates') %>:

+ + <% _.each(certificatesData, function(certificate){ %> + <%- gettext(certificate.display_name) %> + <% }); %> +
diff --git a/lms/templates/learner_dashboard/programs.html b/lms/templates/learner_dashboard/programs.html index d563522aa2..3a7221e95d 100644 --- a/lms/templates/learner_dashboard/programs.html +++ b/lms/templates/learner_dashboard/programs.html @@ -12,7 +12,9 @@ from openedx.core.djangolib.js_utils import ( <%static:require_module module_name="js/learner_dashboard/program_list_factory" class_name="ProgramListFactory"> ProgramListFactory({ programsData: ${programs | n, dump_js_escaped_json}, - xseriesUrl: '${xseries_url | n, js_escaped_string}' + certificatesData: ${credentials | n, dump_js_escaped_json}, + xseriesUrl: '${xseries_url | n, js_escaped_string}', + xseriesImage: '${static.url('images/xseries-certificate-visual.png')}' }); diff --git a/lms/templates/learner_dashboard/sidebar.underscore b/lms/templates/learner_dashboard/sidebar.underscore index 6ddfcc18a5..c93b1b2f32 100644 --- a/lms/templates/learner_dashboard/sidebar.underscore +++ b/lms/templates/learner_dashboard/sidebar.underscore @@ -1,2 +1,2 @@
-
+
From 26377a5732f14fe7f32eb70be90ad10c75388beb Mon Sep 17 00:00:00 2001 From: Adam Palay Date: Wed, 20 Apr 2016 10:44:13 -0400 Subject: [PATCH 33/70] fix issue with pre-1900 course setting dates (TNL-4397) --- .../contentstore/tests/test_course_settings.py | 12 ++++++++++++ common/lib/xmodule/xmodule/fields.py | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/cms/djangoapps/contentstore/tests/test_course_settings.py b/cms/djangoapps/contentstore/tests/test_course_settings.py index 2d684a7a84..99dff6acd8 100644 --- a/cms/djangoapps/contentstore/tests/test_course_settings.py +++ b/cms/djangoapps/contentstore/tests/test_course_settings.py @@ -52,6 +52,18 @@ class CourseSettingsEncoderTest(CourseTestCase): self.assertIsNone(jsondetails['effort'], "effort somehow initialized") self.assertIsNone(jsondetails['language'], "language somehow initialized") + def test_pre_1900_date(self): + """ + Tests that the encoder can handle a pre-1900 date, since strftime + doesn't work for these dates. + """ + details = CourseDetails.fetch(self.course.id) + pre_1900 = datetime.datetime(1564, 4, 23, 1, 1, 1, tzinfo=UTC()) + details.enrollment_start = pre_1900 + dumped_jsondetails = json.dumps(details, cls=CourseSettingsEncoder) + loaded_jsondetails = json.loads(dumped_jsondetails) + self.assertEqual(loaded_jsondetails['enrollment_start'], pre_1900.isoformat()) + def test_ooc_encoder(self): """ Test the encoder out of its original constrained purpose to see if it functions for general use diff --git a/common/lib/xmodule/xmodule/fields.py b/common/lib/xmodule/xmodule/fields.py index a3c6aa19d7..2b73d5b63f 100644 --- a/common/lib/xmodule/xmodule/fields.py +++ b/common/lib/xmodule/xmodule/fields.py @@ -73,6 +73,10 @@ class Date(JSONField): return time.strftime('%Y-%m-%dT%H:%M:%SZ', value) elif isinstance(value, datetime.datetime): if value.tzinfo is None or value.utcoffset().total_seconds() == 0: + if value.year < 1900: + # strftime doesn't work for pre-1900 dates, so use + # isoformat instead + return value.isoformat() # isoformat adds +00:00 rather than Z return value.strftime('%Y-%m-%dT%H:%M:%SZ') else: From 5a7bc019864cf3887d23d952acdf3ab07e8fee84 Mon Sep 17 00:00:00 2001 From: Clinton Blackburn Date: Fri, 15 Apr 2016 01:21:23 -0400 Subject: [PATCH 34/70] JWT authentication updates - Using jwt_decode_handler from edx-drf-extensions - Updated djangorestframework-jwt - Removed feature flag around JWT auth ECOM-4221 --- lms/envs/common.py | 18 +++---- openedx/core/lib/api/jwt_decode_handler.py | 49 ------------------- .../core/lib/api/tests/test_authentication.py | 48 +++--------------- requirements/edx/base.txt | 3 +- 4 files changed, 14 insertions(+), 104 deletions(-) delete mode 100644 openedx/core/lib/api/jwt_decode_handler.py diff --git a/lms/envs/common.py b/lms/envs/common.py index be1befc6d9..f6cdb6ecf2 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -2118,14 +2118,16 @@ SOCIAL_MEDIA_FOOTER_NAMES = [ # JWT Settings JWT_AUTH = { - 'JWT_SECRET_KEY': None, + # TODO Set JWT_SECRET_KEY to a secure value. By default, SECRET_KEY will be used. + # 'JWT_SECRET_KEY': '', 'JWT_ALGORITHM': 'HS256', 'JWT_VERIFY_EXPIRATION': True, - 'JWT_ISSUER': None, - 'JWT_PAYLOAD_GET_USERNAME_HANDLER': lambda d: d.get('username'), + # TODO Set JWT_ISSUER and JWT_AUDIENCE to values specific to your service/organization. + 'JWT_ISSUER': 'change-me', 'JWT_AUDIENCE': None, + 'JWT_PAYLOAD_GET_USERNAME_HANDLER': lambda d: d.get('username'), 'JWT_LEEWAY': 1, - 'JWT_DECODE_HANDLER': 'openedx.core.lib.api.jwt_decode_handler.decode', + 'JWT_DECODE_HANDLER': 'edx_rest_framework_extensions.utils.jwt_decode_handler', } # The footer URLs dictionary maps social footer names @@ -2225,14 +2227,6 @@ if FEATURES.get('CLASS_DASHBOARD'): ENABLE_CREDIT_ELIGIBILITY = True FEATURES['ENABLE_CREDIT_ELIGIBILITY'] = ENABLE_CREDIT_ELIGIBILITY -################ Enable JWT auth #################### -# When this feature flag is set to False, API endpoints using -# JSONWebTokenAuthentication will reject requests using JWT to authenticate, -# even if those tokens are valid. Set this to True only if you need those -# endpoints, and have configured settings 'JWT_AUTH' to override its default -# values with secure values. -FEATURES['ENABLE_JWT_AUTH'] = False - ######################## CAS authentication ########################### if FEATURES.get('AUTH_USE_CAS'): diff --git a/openedx/core/lib/api/jwt_decode_handler.py b/openedx/core/lib/api/jwt_decode_handler.py deleted file mode 100644 index 88d85619f8..0000000000 --- a/openedx/core/lib/api/jwt_decode_handler.py +++ /dev/null @@ -1,49 +0,0 @@ -""" -Custom JWT decoding function for django_rest_framework jwt package. - -Adds logging to facilitate debugging of InvalidTokenErrors. Also -requires "exp" and "iat" claims to be present - the base package -doesn't expose settings to enforce this. -""" -import logging - -from django.conf import settings -import jwt -from rest_framework import exceptions -from rest_framework_jwt.settings import api_settings - - -log = logging.getLogger(__name__) - - -def decode(token): - """ - Ensure InvalidTokenErrors are logged for diagnostic purposes, before - failing authentication. - """ - if not settings.FEATURES.get('ENABLE_JWT_AUTH', False): - msg = 'JWT auth not supported.' - log.error(msg) - raise exceptions.AuthenticationFailed(msg) - - options = { - 'verify_exp': api_settings.JWT_VERIFY_EXPIRATION, - 'require_exp': True, - 'require_iat': True, - } - - try: - return jwt.decode( - token, - api_settings.JWT_SECRET_KEY, - api_settings.JWT_VERIFY, - options=options, - leeway=api_settings.JWT_LEEWAY, - audience=api_settings.JWT_AUDIENCE, - issuer=api_settings.JWT_ISSUER, - algorithms=[api_settings.JWT_ALGORITHM] - ) - except jwt.InvalidTokenError as exc: - exc_type = u'{}.{}'.format(exc.__class__.__module__, exc.__class__.__name__) - log.exception("raised_invalid_token: exc_type=%r, exc_detail=%r", exc_type, exc.message) - raise diff --git a/openedx/core/lib/api/tests/test_authentication.py b/openedx/core/lib/api/tests/test_authentication.py index ab3f077a27..0b29898a9a 100644 --- a/openedx/core/lib/api/tests/test_authentication.py +++ b/openedx/core/lib/api/tests/test_authentication.py @@ -4,40 +4,33 @@ Tests for OAuth2. This module is copied from django-rest-framework-oauth """ from __future__ import unicode_literals -from collections import namedtuple -from datetime import datetime, timedelta + import itertools import json +from collections import namedtuple import ddt -from django.conf import settings +from datetime import datetime, timedelta from django.conf.urls import patterns, url, include from django.contrib.auth.models import User from django.http import HttpResponse from django.test import TestCase from django.utils import unittest from django.utils.http import urlencode -from mock import patch from nose.plugins.attrib import attr from oauth2_provider import models as dot_models -from rest_framework import exceptions +from provider import constants, scope from rest_framework import status from rest_framework.permissions import IsAuthenticated -from rest_framework_oauth import permissions -from rest_framework_oauth.compat import oauth2_provider, oauth2_provider_scope from rest_framework.test import APIRequestFactory, APIClient from rest_framework.views import APIView -from rest_framework_jwt.settings import api_settings +from rest_framework_oauth import permissions +from rest_framework_oauth.compat import oauth2_provider, oauth2_provider_scope from lms.djangoapps.oauth_dispatch import adapters from openedx.core.lib.api import authentication -from openedx.core.lib.api.tests.mixins import JwtMixin -from provider import constants, scope -from student.tests.factories import UserFactory - factory = APIRequestFactory() # pylint: disable=invalid-name -jwt_decode_handler = api_settings.JWT_DECODE_HANDLER # pylint: disable=invalid-name class MockView(APIView): # pylint: disable=missing-docstring @@ -311,32 +304,3 @@ class OAuth2Tests(TestCase): self.assertEqual(response.status_code, scope_statuses.read_status) response = self.post_with_bearer_token('/oauth2-with-scope-test/', token=self.access_token.token) self.assertEqual(response.status_code, scope_statuses.write_status) - - -@attr('shard_2') -@ddt.ddt -@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') -class TestJWTAuthToggle(JwtMixin, TestCase): - """ Test JWT authentication toggling with feature flag 'ENABLE_JWT_AUTH'.""" - - USERNAME = 'test-username' - - def setUp(self): - self.user = UserFactory.create(username=self.USERNAME) - self.jwt_token = self.generate_id_token(user=self.user) - super(TestJWTAuthToggle, self).setUp() - - @patch.dict('django.conf.settings.FEATURES', {'ENABLE_JWT_AUTH': True}) - def test_enabled_jwt_auth(self): - """ Ensure that the JWT auth works fine when its feature flag - 'ENABLE_JWT_AUTH' is set. - """ - jwt_decode_handler(self.jwt_token) - - @patch.dict('django.conf.settings.FEATURES', {'ENABLE_JWT_AUTH': False}) - def test_disabled_jwt_auth(self): - """ Ensure that the JWT auth raises exception when its feature flag - 'ENABLE_JWT_AUTH' is not set. - """ - with self.assertRaises(exceptions.AuthenticationFailed): - jwt_decode_handler(self.jwt_token) diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index 6d9589e60f..871d04e725 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -34,9 +34,10 @@ django-method-override==0.1.0 #djangorestframework>=3.1,<3.2 git+https://github.com/edx/django-rest-framework.git@3c72cb5ee5baebc4328947371195eae2077197b0#egg=djangorestframework==3.2.3 django==1.8.12 -djangorestframework-jwt==1.7.2 +djangorestframework-jwt==1.8.0 djangorestframework-oauth==1.1.0 edx-ccx-keys==0.1.2 +edx-drf-extensions==0.5.0 edx-lint==0.4.3 edx-management-commands==0.1.1 edx-django-oauth2-provider==1.0.3 From 11982461aa4bbc007554514c3e01c919eb896420 Mon Sep 17 00:00:00 2001 From: Robert Raposa Date: Sat, 16 Apr 2016 14:13:39 -0400 Subject: [PATCH 35/70] Add JavaScript linting rules - check proper use of JQuery functions - check for concatenation with HTML strings - add sort for output - lint CoffeeScript --- scripts/safe_template_linter.py | 604 ++++++++++++++++++--- scripts/tests/templates/test.coffee | 2 + scripts/tests/templates/test.js | 6 + scripts/tests/templates/test.underscore | 1 + scripts/tests/test_safe_template_linter.py | 259 ++++++++- 5 files changed, 763 insertions(+), 109 deletions(-) create mode 100644 scripts/tests/templates/test.coffee create mode 100644 scripts/tests/templates/test.js create mode 100644 scripts/tests/templates/test.underscore diff --git a/scripts/safe_template_linter.py b/scripts/safe_template_linter.py index d85433baff..870c1a318e 100755 --- a/scripts/safe_template_linter.py +++ b/scripts/safe_template_linter.py @@ -56,6 +56,79 @@ def _load_file(self, file_full_path): return file_contents.decode(encoding='utf-8') +def _find_closing_char_index(start_delim, open_char, close_char, template, start_index, num_open_chars=0, strings=None): + """ + Finds the index of the closing char that matches the opening char. + + For example, this could be used to find the end of a Mako expression, + where the open and close characters would be '{' and '}'. + + Arguments: + start_delim: If provided (e.g. '${' for Mako expressions), the + closing character must be found before the next start_delim. + open_char: The opening character to be matched (e.g '{') + close_char: The closing character to be matched (e.g '}') + template: The template to be searched. + start_index: The start index of the last open char. + num_open_chars: The current number of open chars. + strings: A list of ParseStrings already parsed + + Returns: + A dict containing the following: + close_char_index: The index of the closing character, or -1 if + unparseable. + strings: a list of ParseStrings + + """ + strings = [] if strings is None else strings + unparseable_result = {'close_char_index': -1, 'strings': []} + close_char_index = template.find(close_char, start_index) + if close_char_index < 0: + # if we can't find an end_char, let's just quit + return unparseable_result + open_char_index = template.find(open_char, start_index, close_char_index) + parse_string = ParseString(template, start_index, close_char_index) + + valid_index_list = [close_char_index] + if 0 <= open_char_index: + valid_index_list.append(open_char_index) + if 0 <= parse_string.start_index: + valid_index_list.append(parse_string.start_index) + min_valid_index = min(valid_index_list) + + if parse_string.start_index == min_valid_index: + strings.append(parse_string) + if parse_string.end_index < 0: + return unparseable_result + else: + return _find_closing_char_index( + start_delim, open_char, close_char, template, start_index=parse_string.end_index, + num_open_chars=num_open_chars, strings=strings + ) + + if open_char_index == min_valid_index: + if start_delim is not None: + # if we find another starting delim, consider this unparseable + start_delim_index = template.find(start_delim, start_index, close_char_index) + if 0 <= start_delim_index < open_char_index: + return unparseable_result + return _find_closing_char_index( + start_delim, open_char, close_char, template, start_index=open_char_index + 1, + num_open_chars=num_open_chars + 1, strings=strings + ) + + if num_open_chars == 0: + return { + 'close_char_index': close_char_index, + 'strings': strings, + } + else: + return _find_closing_char_index( + start_delim, open_char, close_char, template, start_index=close_char_index + 1, + num_open_chars=num_open_chars - 1, strings=strings + ) + + class StringLines(object): """ StringLines provides utility methods to work with a string in terms of @@ -254,6 +327,38 @@ class Rules(Enum): 'underscore-not-escaped', 'Expressions should be escaped using <%- expression %>.' ) + javascript_jquery_append = ( + 'javascript-jquery-append', + 'Use HtmlUtils.append() or .append(HtmlUtils.xxx().toString()).' + ) + javascript_jquery_prepend = ( + 'javascript-jquery-prepend', + 'Use HtmlUtils.prepend() or .prepend(HtmlUtils.xxx().toString()).' + ) + javascript_jquery_insertion = ( + 'javascript-jquery-insertion', + 'JQuery DOM insertion calls that take content must use HtmlUtils (e.g. $el.after(HtmlUtils.xxx().toString()).' + ) + javascript_jquery_insert_into_target = ( + 'javascript-jquery-insert-into-target', + 'JQuery DOM insertion calls that take a target can only be called from elements (e.g. .$el.appendTo()).' + ) + javascript_jquery_html = ( + 'javascript-jquery-html', + "Use HtmlUtils.setHtml(), .html(HtmlUtils.xxx().toString()), or JQuery's text() function." + ) + javascript_concat_html = ( + 'javascript-concat-html', + 'Use HtmlUtils functions rather than concatenating strings with HTML.' + ) + javascript_escape = ( + 'javascript-escape', + "Avoid calls to escape(), especially in Backbone. Use templates, HtmlUtils, or JQuery's text() function." + ) + javascript_interpolate = ( + 'javascript-interpolate', + 'Use StringUtils.interpolate() or HtmlUtils.interpolateHtml() as appropriate.' + ) def __init__(self, rule_id, rule_summary): self.rule_id = rule_id @@ -312,6 +417,12 @@ class RuleViolation(object): self.is_disabled = True return + def sort_key(self): + """ + Returns a key that can be sorted on + """ + return 0 + def prepare_results(self, full_path, string_lines): """ Preps this instance for results reporting. @@ -400,6 +511,12 @@ class ExpressionRuleViolation(RuleViolation): line_to_check = string_lines.line_number_to_line(self.start_line) self._mark_disabled(line_to_check, scope_start_string=False) + def sort_key(self): + """ + Returns a key that can be sorted on + """ + return (self.start_line, self.start_column) + def prepare_results(self, full_path, string_lines): """ Preps this instance for results reporting. @@ -492,8 +609,10 @@ class FileResults(object): """ if options['is_quiet']: - print(self.full_path, file=out) + if self.violations is not None and 0 < len(self.violations): + print(self.full_path, file=out) else: + self.violations.sort(key=lambda violation: violation.sort_key()) for violation in self.violations: if not violation.is_disabled: violation.print_results(out) @@ -802,8 +921,8 @@ class MakoTemplateLinter(object): template_inner_start_index = expression['start_index'] + expression['expression'].find(expression_inner) if 'HTML(' in expression_inner: if expression_inner.startswith('HTML('): - close_paren_index = self._find_closing_char_index( - None, "(", ")", expression_inner, start_index=len('HTML('), num_open_chars=0, strings=[] + close_paren_index = _find_closing_char_index( + None, "(", ")", expression_inner, start_index=len('HTML(') )['close_char_index'] # check that the close paren is at the end of the stripped expression. if close_paren_index != len(expression_inner) - 1: @@ -823,9 +942,7 @@ class MakoTemplateLinter(object): # strings to be checked for HTML unwrapped_html_strings = expression['strings'] for match in re.finditer(r"(HTML\(|Text\()", expression_inner): - result = self._find_closing_char_index( - None, "(", ")", expression_inner, start_index=match.end(), num_open_chars=0, strings=[] - ) + result = _find_closing_char_index(None, "(", ")", expression_inner, start_index=match.end()) close_paren_index = result['close_char_index'] if 0 <= close_paren_index: # the argument sent to HTML() or Text() @@ -1008,9 +1125,8 @@ class MakoTemplateLinter(object): if start_index < 0: break - result = self._find_closing_char_index( - start_delim, '{', '}', mako_template, start_index=start_index + len(start_delim), - num_open_chars=0, strings=[] + result = _find_closing_char_index( + start_delim, '{', '}', mako_template, start_index=start_index + len(start_delim) ) close_char_index = result['close_char_index'] if close_char_index < 0: @@ -1031,79 +1147,6 @@ class MakoTemplateLinter(object): return expressions - def _find_closing_char_index( - self, start_delim, open_char, close_char, template, start_index, num_open_chars, strings - ): - """ - Finds the index of the closing char that matches the opening char. - - For example, this could be used to find the end of a Mako expression, - where the open and close characters would be '{' and '}'. - - Arguments: - start_delim: If provided (e.g. '${' for Mako expressions), the - closing character must be found before the next start_delim. - open_char: The opening character to be matched (e.g '{') - close_char: The closing character to be matched (e.g '}') - template: The template to be searched. - start_index: The start index of the last open char. - num_open_chars: The current number of open chars. - strings: A list of ParseStrings already parsed - - Returns: - A dict containing the following: - close_char_index: The index of the closing character, or -1 if - unparseable. - strings: a list of ParseStrings - - """ - unparseable_result = {'close_char_index': -1, 'strings': []} - close_char_index = template.find(close_char, start_index) - if close_char_index < 0: - # if we can't find an end_char, let's just quit - return unparseable_result - open_char_index = template.find(open_char, start_index, close_char_index) - parse_string = ParseString(template, start_index, close_char_index) - - valid_index_list = [close_char_index] - if 0 <= open_char_index: - valid_index_list.append(open_char_index) - if 0 <= parse_string.start_index: - valid_index_list.append(parse_string.start_index) - min_valid_index = min(valid_index_list) - - if parse_string.start_index == min_valid_index: - strings.append(parse_string) - if parse_string.end_index < 0: - return unparseable_result - else: - return self._find_closing_char_index( - start_delim, open_char, close_char, template, start_index=parse_string.end_index, - num_open_chars=num_open_chars, strings=strings - ) - - if open_char_index == min_valid_index: - if start_delim is not None: - # if we find another starting delim, consider this unparseable - start_delim_index = template.find(start_delim, start_index, close_char_index) - if 0 <= start_delim_index < open_char_index: - return unparseable_result - return self._find_closing_char_index( - start_delim, open_char, close_char, template, start_index=open_char_index + 1, - num_open_chars=num_open_chars + 1, strings=strings - ) - - if num_open_chars == 0: - return { - 'close_char_index': close_char_index, - 'strings': strings, - } - else: - return self._find_closing_char_index( - start_delim, open_char, close_char, template, start_index=close_char_index + 1, - num_open_chars=num_open_chars - 1, strings=strings - ) - class UnderscoreTemplateLinter(object): """ @@ -1165,10 +1208,10 @@ class UnderscoreTemplateLinter(object): """ underscore_template = _load_file(self, file_full_path) - self._check_underscore_file_is_safe(underscore_template, results) + self.check_underscore_file_is_safe(underscore_template, results) return results - def _check_underscore_file_is_safe(self, underscore_template, results): + def check_underscore_file_is_safe(self, underscore_template, results): """ Checks for violations in an Underscore.js template. @@ -1254,6 +1297,397 @@ class UnderscoreTemplateLinter(object): return expressions +class JavaScriptLinter(object): + """ + The linter for JavaScript and CoffeeScript files. + """ + + _skip_javascript_dirs = _skip_dirs + ('i18n', 'static/coffee') + _skip_coffeescript_dirs = _skip_dirs + underScoreLinter = UnderscoreTemplateLinter() + + def process_file(self, directory, file_name): + """ + Process file to determine if it is a JavaScript file and + if it is safe. + + Arguments: + directory (string): The directory of the file to be checked + file_name (string): A filename for a potential JavaScript file + + Returns: + The file results containing any violations. + + """ + file_full_path = os.path.normpath(directory + '/' + file_name) + results = FileResults(file_full_path) + + if not results.is_file: + return results + + if file_name.lower().endswith('.js') and not file_name.lower().endswith('.min.js'): + skip_dirs = self._skip_javascript_dirs + elif file_name.lower().endswith('.coffee'): + skip_dirs = self._skip_coffeescript_dirs + else: + return results + + if not self._is_valid_directory(skip_dirs, directory): + return results + + return self._load_and_check_javascript_file_is_safe(file_full_path, results) + + def _is_valid_directory(self, skip_dirs, directory): + """ + Determines if the provided directory is a directory that could contain + a JavaScript file that needs to be linted. + + Arguments: + skip_dirs: The directories to be skipped. + directory: The directory to be linted. + + Returns: + True if this directory should be linted for JavaScript violations + and False otherwise. + """ + if _is_skip_dir(skip_dirs, directory): + return False + + return True + + def _load_and_check_javascript_file_is_safe(self, file_full_path, results): + """ + Loads the JavaScript file and checks if it is in violation. + + Arguments: + file_full_path: The file to be loaded and linted. + + Returns: + The file results containing any violations. + + """ + file_contents = _load_file(self, file_full_path) + self._check_javascript_file_is_safe(file_contents, results) + return results + + def _check_javascript_file_is_safe(self, file_contents, results): + """ + Checks for violations in a JavaScript file. + + Arguments: + file_contents: The contents of the JavaScript file. + results: A file results objects to which violations will be added. + + """ + no_caller_check = None + no_argument_check = None + self._check_jquery_function( + file_contents, "append", Rules.javascript_jquery_append, no_caller_check, + self._is_jquery_argument_safe, results + ) + self._check_jquery_function( + file_contents, "prepend", Rules.javascript_jquery_prepend, no_caller_check, + self._is_jquery_argument_safe, results + ) + self._check_jquery_function( + file_contents, "unwrap|wrap|wrapAll|wrapInner|after|before|replaceAll|replaceWith", + Rules.javascript_jquery_insertion, no_caller_check, self._is_jquery_argument_safe, results + ) + self._check_jquery_function( + file_contents, "appendTo|prependTo|insertAfter|insertBefore", + Rules.javascript_jquery_insert_into_target, self._is_jquery_insert_caller_safe, no_argument_check, results + ) + self._check_jquery_function( + file_contents, "html", Rules.javascript_jquery_html, no_caller_check, + self._is_jquery_html_argument_safe, results + ) + self._check_javascript_interpolate(file_contents, results) + self._check_javascript_escape(file_contents, results) + self._check_concat_with_html(file_contents, results) + self.underScoreLinter.check_underscore_file_is_safe(file_contents, results) + results.prepare_results(file_contents) + + def _get_expression_for_function(self, file_contents, function_match): + """ + Returns an expression that best matches the function call. + + Arguments: + file_contents: The contents of the JavaScript file. + function_match: A regex match representing the start of the function + call. + + """ + start_index = function_match.start() + inner_start_index = function_match.end() + close_paren_index = _find_closing_char_index( + None, "(", ")", file_contents, start_index=inner_start_index + )['close_char_index'] + if 0 <= close_paren_index: + end_index = close_paren_index + 1 + expression_text = file_contents[function_match.start():close_paren_index + 1] + expression = { + 'start_index': start_index, + 'end_index': end_index, + 'expression': expression_text, + 'expression_inner': expression_text, + } + else: + expression = { + 'start_index': start_index, + 'end_index': -1, + 'expression': None, + 'expression_inner': None, + } + return expression + + def _check_javascript_interpolate(self, file_contents, results): + """ + Checks that interpolate() calls are safe. + + Only use of StringUtils.interpolate() or HtmlUtils.interpolateText() + are safe. + + Arguments: + file_contents: The contents of the JavaScript file. + results: A file results objects to which violations will be added. + + """ + # Ignores calls starting with "StringUtils.", because those are safe + regex = re.compile(r"(?'))" + or ".append($('
'))". + - the argument can be a call to HtmlUtils.xxx(html).toString() + + Arguments: + argument: The argument sent to the jQuery function (e.g. + append(argument)). + + Returns: + True if the argument is safe, and False otherwise. + + """ + match_variable_name = re.search("[_$a-zA-Z]+[_$a-zA-Z0-9]*", argument) + if match_variable_name is not None and match_variable_name.group() == argument: + if argument.endswith('El') or argument.startswith('$'): + return True + elif argument.startswith('"') or argument.startswith("'"): + # a single literal string with no HTML is ok + # 1. it gets rid of false negatives for non-jquery calls (e.g. graph.append("g")) + # 2. JQuery will treat this as a plain text string and will escape any & if needed. + string = ParseString(argument, 0, len(argument)) + if string.string == argument and "<" not in argument: + return True + elif argument.startswith('$('): + # match on JQuery calls with single string and single HTML tag + # Examples: + # $("") + # $("
") + # $("
", {...}) + match = re.search(r"""\$\(\s*['"]<[a-zA-Z0-9]+\s*[/]?>['"]\s*[,)]""", argument) + if match is not None: + return True + elif self._is_jquery_argument_safe_html_utils_call(argument): + return True + # check rules that shouldn't use concatenation + elif "+" not in argument: + if argument.endswith('.el') or argument.endswith('.$el'): + return True + return False + + def _is_jquery_html_argument_safe(self, argument): + """ + Check the argument sent to the jQuery html() function to check if it is + safe. + + Safe arguments to html(): + - no argument (i.e. getter rather than setter) + - empty string is safe + - the argument can be a call to HtmlUtils.xxx(html).toString() + + Arguments: + argument: The argument sent to html() in code (i.e. html(argument)). + + Returns: + True if the argument is safe, and False otherwise. + + """ + if argument == "" or argument == "''" or argument == '""': + return True + elif self._is_jquery_argument_safe_html_utils_call(argument): + return True + return False + + def _is_jquery_insert_caller_safe(self, caller_line_start): + """ + Check that the caller of a jQuery DOM insertion function that takes a + target is safe (e.g. thisEl.appendTo(target)). + + If original line was:: + + draggableObj.iconEl.appendTo(draggableObj.containerEl); + + Parameter caller_line_start would be: + + draggableObj.iconEl + + Safe callers include: + - the caller can be ".el", ".$el" + - the caller can be a single variable ending in "El" or starting with + "$". For example, "testEl" or "$test". + + Arguments: + caller_line_start: The line leading up to the jQuery function call. + + Returns: + True if the caller is safe, and False otherwise. + + """ + # matches end of line for caller, which can't itself be a function + caller_match = re.search(r"(?:\s*|[.])([_$a-zA-Z]+[_$a-zA-Z0-9])*$", caller_line_start) + if caller_match is None: + return False + caller = caller_match.group(1) + if caller is None: + return False + elif caller.endswith('El') or caller.startswith('$'): + return True + elif caller == 'el' or caller == 'parentNode': + return True + return False + + def _check_concat_with_html(self, file_contents, results): + """ + Checks that strings with HTML are not concatenated + + Arguments: + file_contents: The contents of the JavaScript file. + results: A file results objects to which violations will be added. + + """ + lines = StringLines(file_contents) + last_expression = None + # attempt to match a string that starts with '<' or ends with '>' + regex_string_with_html = r"""["'](?:\s*<.*|.*>\s*)["']""" + regex_concat_with_html = r"(\+\s*{}|{}\s*\+)".format(regex_string_with_html, regex_string_with_html) + for match in re.finditer(regex_concat_with_html, file_contents): + found_new_violation = False + if last_expression is not None: + last_line = lines.index_to_line_number(last_expression['start_index']) + # check if violation should be expanded to more of the same line + if last_line == lines.index_to_line_number(match.start()): + last_expression['end_index'] = match.end() + else: + results.violations.append(ExpressionRuleViolation( + Rules.javascript_concat_html, last_expression + )) + found_new_violation = True + else: + found_new_violation = True + if found_new_violation: + last_expression = { + 'start_index': match.start(), + 'end_index': match.end(), + } + + # add final expression + if last_expression is not None: + results.violations.append(ExpressionRuleViolation( + Rules.javascript_concat_html, last_expression + )) + + def _process_file(full_path, template_linters, options, out): """ For each linter, lints the provided file. This means finding and printing @@ -1352,7 +1786,7 @@ def main(): 'is_quiet': args.quiet, } - template_linters = [MakoTemplateLinter(), UnderscoreTemplateLinter()] + template_linters = [MakoTemplateLinter(), UnderscoreTemplateLinter(), JavaScriptLinter()] if args.file is not None: if os.path.isfile(args.file[0]) is False: raise ValueError("File [{}] is not a valid file.".format(args.file[0])) diff --git a/scripts/tests/templates/test.coffee b/scripts/tests/templates/test.coffee new file mode 100644 index 0000000000..53c25c9340 --- /dev/null +++ b/scripts/tests/templates/test.coffee @@ -0,0 +1,2 @@ +var x = "" + message + "" +var template = "<%= invalid %>" diff --git a/scripts/tests/templates/test.js b/scripts/tests/templates/test.js new file mode 100644 index 0000000000..71c425e0af --- /dev/null +++ b/scripts/tests/templates/test.js @@ -0,0 +1,6 @@ +var message = "Rock & Roll"; +var x = "" + message + ""; +var template = "<%= invalid %>"; +// quiet the linter +alert(x); +alert(template); diff --git a/scripts/tests/templates/test.underscore b/scripts/tests/templates/test.underscore new file mode 100644 index 0000000000..57fedb860a --- /dev/null +++ b/scripts/tests/templates/test.underscore @@ -0,0 +1 @@ +<%= invalid %> diff --git a/scripts/tests/test_safe_template_linter.py b/scripts/tests/test_safe_template_linter.py index 3a1b1dfd24..7b888826f1 100644 --- a/scripts/tests/test_safe_template_linter.py +++ b/scripts/tests/test_safe_template_linter.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- """ Tests for safe_template_linter.py """ @@ -9,10 +10,22 @@ import textwrap from unittest import TestCase from ..safe_template_linter import ( - _process_os_walk, FileResults, MakoTemplateLinter, ParseString, UnderscoreTemplateLinter, Rules + _process_os_walk, FileResults, JavaScriptLinter, MakoTemplateLinter, ParseString, UnderscoreTemplateLinter, Rules ) +class TestLinter(TestCase): + """ + Test Linter base class + """ + def _validate_data_rule(self, data, results): + if data['rule'] is None: + self.assertEqual(len(results.violations), 0) + else: + self.assertEqual(len(results.violations), 1) + self.assertEqual(results.violations[0].rule, data['rule']) + + class TestSafeTemplateLinter(TestCase): """ Test some top-level linter functions @@ -29,17 +42,24 @@ class TestSafeTemplateLinter(TestCase): 'is_quiet': False, } - template_linters = [MakoTemplateLinter(), UnderscoreTemplateLinter()] + template_linters = [MakoTemplateLinter(), JavaScriptLinter(), UnderscoreTemplateLinter()] - with mock.patch.object(MakoTemplateLinter, '_is_valid_directory', return_value=True) as mock_is_valid_directory: - _process_os_walk('scripts/tests/templates', template_linters, options, out) + with mock.patch.object(MakoTemplateLinter, '_is_valid_directory', return_value=True): + with mock.patch.object(JavaScriptLinter, '_is_valid_directory', return_value=True): + with mock.patch.object(UnderscoreTemplateLinter, '_is_valid_directory', return_value=True): + _process_os_walk('scripts/tests/templates', template_linters, options, out) output = out.getvalue() - self.assertIsNotNone(re.search('test\.html.*mako-missing-default', out.getvalue())) + self.assertIsNotNone(re.search('test\.html.*mako-missing-default', output)) + self.assertIsNotNone(re.search('test\.coffee.*javascript-concat-html', output)) + self.assertIsNotNone(re.search('test\.coffee.*underscore-not-escaped', output)) + self.assertIsNotNone(re.search('test\.js.*javascript-concat-html', output)) + self.assertIsNotNone(re.search('test\.js.*underscore-not-escaped', output)) + self.assertIsNotNone(re.search('test\.underscore.*underscore-not-escaped', output)) @ddt -class TestMakoTemplateLinter(TestCase): +class TestMakoTemplateLinter(TestLinter): """ Test MakoTemplateLinter """ @@ -577,23 +597,16 @@ class TestMakoTemplateLinter(TestCase): end_index = parse_string.end_index - parse_string.quote_length self.assertEqual(data['template'][start_index:end_index], parse_string.string_inner) - def _validate_data_rule(self, data, results): - if data['rule'] is None: - self.assertEqual(len(results.violations), 0) - else: - self.assertEqual(len(results.violations), 1) - self.assertEqual(results.violations[0].rule, data['rule']) - @ddt -class TestUnderscoreTemplateLinter(TestCase): +class TestUnderscoreTemplateLinter(TestLinter): """ Test UnderscoreTemplateLinter """ def test_check_underscore_file_is_safe(self): """ - Test _check_underscore_file_is_safe with safe template + Test check_underscore_file_is_safe with safe template """ linter = UnderscoreTemplateLinter() results = FileResults('') @@ -606,13 +619,13 @@ class TestUnderscoreTemplateLinter(TestCase): %> """) - linter._check_underscore_file_is_safe(template, results) + linter.check_underscore_file_is_safe(template, results) self.assertEqual(len(results.violations), 0) def test_check_underscore_file_is_not_safe(self): """ - Test _check_underscore_file_is_safe with unsafe template + Test check_underscore_file_is_safe with unsafe template """ linter = UnderscoreTemplateLinter() results = FileResults('') @@ -625,7 +638,7 @@ class TestUnderscoreTemplateLinter(TestCase): %> """) - linter._check_underscore_file_is_safe(template, results) + linter.check_underscore_file_is_safe(template, results) self.assertEqual(len(results.violations), 2) self.assertEqual(results.violations[0].rule, Rules.underscore_not_escaped) @@ -683,12 +696,12 @@ class TestUnderscoreTemplateLinter(TestCase): ) def test_check_underscore_file_disable_rule(self, data): """ - Test _check_underscore_file_is_safe with various disabled pragmas + Test check_underscore_file_is_safe with various disabled pragmas """ linter = UnderscoreTemplateLinter() results = FileResults('') - linter._check_underscore_file_is_safe(data['template'], results) + linter.check_underscore_file_is_safe(data['template'], results) violation_count = len(data['is_disabled']) self.assertEqual(len(results.violations), violation_count) @@ -697,7 +710,7 @@ class TestUnderscoreTemplateLinter(TestCase): def test_check_underscore_file_disables_one_violation(self): """ - Test _check_underscore_file_is_safe with disabled before a line only + Test check_underscore_file_is_safe with disabled before a line only disables for the violation following """ linter = UnderscoreTemplateLinter() @@ -709,7 +722,7 @@ class TestUnderscoreTemplateLinter(TestCase): <%= message %> """) - linter._check_underscore_file_is_safe(template, results) + linter.check_underscore_file_is_safe(template, results) self.assertEqual(len(results.violations), 2) self.assertEqual(results.violations[0].is_disabled, True) @@ -721,12 +734,210 @@ class TestUnderscoreTemplateLinter(TestCase): ) def test_check_underscore_no_escape_allowed(self, data): """ - Test _check_underscore_file_is_safe with expressions that are allowed + Test check_underscore_file_is_safe with expressions that are allowed without escaping because the internal calls properly escape. """ linter = UnderscoreTemplateLinter() results = FileResults('') - linter._check_underscore_file_is_safe(data['template'], results) + linter.check_underscore_file_is_safe(data['template'], results) self.assertEqual(len(results.violations), 0) + + +@ddt +class TestJavaScriptLinter(TestLinter): + """ + Test JavaScriptLinter + """ + + @data( + {'template': 'var m = "Plain text " + message + "plain text"', 'rule': None}, + {'template': 'var m = "檌檒濦 " + message + "plain text"', 'rule': None}, + {'template': 'var m = "

" + message + "

"', 'rule': Rules.javascript_concat_html}, + {'template': 'var m = "

" + message + "

"', 'rule': Rules.javascript_concat_html}, + ) + def test_concat_with_html(self, data): + """ + Test _check_javascript_file_is_safe with concatenating strings and HTML + """ + linter = JavaScriptLinter() + results = FileResults('') + + linter._check_javascript_file_is_safe(data['template'], results) + self._validate_data_rule(data, results) + + @data( + {'template': 'test.append( test.render().el )', 'rule': None}, + {'template': 'test.append(test.render().el)', 'rule': None}, + {'template': 'test.append(test.render().$el)', 'rule': None}, + {'template': 'test.append(testEl)', 'rule': None}, + {'template': 'test.append($test)', 'rule': None}, + # plain text is ok because any & will be escaped, and it stops false + # negatives on some other objects with an append() method + {'template': 'test.append("plain text")', 'rule': None}, + {'template': 'test.append("
")', 'rule': Rules.javascript_jquery_append}, + {'template': 'graph.svg.append("g")', 'rule': None}, + {'template': 'test.append( $( "
" ) )', 'rule': None}, + {'template': 'test.append($("
"))', 'rule': None}, + {'template': 'test.append($("
"))', 'rule': None}, + {'template': 'test.append(HtmlUtils.ensureHtml(htmlSnippet).toString())', 'rule': None}, + {'template': 'HtmlUtils.append($el, someHtml)', 'rule': None}, + {'template': 'test.append("fail on concat" + test.render().el)', 'rule': Rules.javascript_jquery_append}, + {'template': 'test.append("fail on concat" + testEl)', 'rule': Rules.javascript_jquery_append}, + {'template': 'test.append(message)', 'rule': Rules.javascript_jquery_append}, + ) + def test_jquery_append(self, data): + """ + Test _check_javascript_file_is_safe with JQuery append() + """ + linter = JavaScriptLinter() + results = FileResults('') + + linter._check_javascript_file_is_safe(data['template'], results) + + self._validate_data_rule(data, results) + + @data( + {'template': 'test.prepend( test.render().el )', 'rule': None}, + {'template': 'test.prepend(test.render().el)', 'rule': None}, + {'template': 'test.prepend(test.render().$el)', 'rule': None}, + {'template': 'test.prepend(testEl)', 'rule': None}, + {'template': 'test.prepend($test)', 'rule': None}, + {'template': 'test.prepend("text")', 'rule': None}, + {'template': 'test.prepend( $( "
" ) )', 'rule': None}, + {'template': 'test.prepend($("
"))', 'rule': None}, + {'template': 'test.prepend($("
"))', 'rule': None}, + {'template': 'test.prepend(HtmlUtils.ensureHtml(htmlSnippet).toString())', 'rule': None}, + {'template': 'HtmlUtils.prepend($el, someHtml)', 'rule': None}, + {'template': 'test.prepend("fail on concat" + test.render().el)', 'rule': Rules.javascript_jquery_prepend}, + {'template': 'test.prepend("fail on concat" + testEl)', 'rule': Rules.javascript_jquery_prepend}, + {'template': 'test.prepend(message)', 'rule': Rules.javascript_jquery_prepend}, + ) + def test_jquery_prepend(self, data): + """ + Test _check_javascript_file_is_safe with JQuery prepend() + """ + linter = JavaScriptLinter() + results = FileResults('') + + linter._check_javascript_file_is_safe(data['template'], results) + + self._validate_data_rule(data, results) + + @data( + {'template': 'test.unwrap(HtmlUtils.ensureHtml(htmlSnippet).toString())', 'rule': None}, + {'template': 'test.wrap(HtmlUtils.ensureHtml(htmlSnippet).toString())', 'rule': None}, + {'template': 'test.wrapAll(HtmlUtils.ensureHtml(htmlSnippet).toString())', 'rule': None}, + {'template': 'test.wrapInner(HtmlUtils.ensureHtml(htmlSnippet).toString())', 'rule': None}, + {'template': 'test.after(HtmlUtils.ensureHtml(htmlSnippet).toString())', 'rule': None}, + {'template': 'test.before(HtmlUtils.ensureHtml(htmlSnippet).toString())', 'rule': None}, + {'template': 'test.replaceAll(HtmlUtils.ensureHtml(htmlSnippet).toString())', 'rule': None}, + {'template': 'test.replaceWith(HtmlUtils.ensureHtml(htmlSnippet).toString())', 'rule': None}, + {'template': 'test.replaceWith(edx.HtmlUtils.HTML(htmlString).toString())', 'rule': None}, + {'template': 'test.unwrap(anything)', 'rule': Rules.javascript_jquery_insertion}, + {'template': 'test.wrap(anything)', 'rule': Rules.javascript_jquery_insertion}, + {'template': 'test.wrapAll(anything)', 'rule': Rules.javascript_jquery_insertion}, + {'template': 'test.wrapInner(anything)', 'rule': Rules.javascript_jquery_insertion}, + {'template': 'test.after(anything)', 'rule': Rules.javascript_jquery_insertion}, + {'template': 'test.before(anything)', 'rule': Rules.javascript_jquery_insertion}, + {'template': 'test.replaceAll(anything)', 'rule': Rules.javascript_jquery_insertion}, + {'template': 'test.replaceWith(anything)', 'rule': Rules.javascript_jquery_insertion}, + ) + def test_jquery_insertion(self, data): + """ + Test _check_javascript_file_is_safe with JQuery insertion functions + other than append(), prepend() and html() that take content as an + argument (e.g. before(), after()). + """ + linter = JavaScriptLinter() + results = FileResults('') + + linter._check_javascript_file_is_safe(data['template'], results) + + self._validate_data_rule(data, results) + + @data( + {'template': ' element.parentNode.appendTo(target);', 'rule': None}, + {'template': ' test.render().el.appendTo(target);', 'rule': None}, + {'template': ' test.render().$el.appendTo(target);', 'rule': None}, + {'template': ' test.$element.appendTo(target);', 'rule': None}, + {'template': ' test.testEl.appendTo(target);', 'rule': None}, + {'template': '$element.appendTo(target);', 'rule': None}, + {'template': 'el.appendTo(target);', 'rule': None}, + {'template': 'testEl.appendTo(target);', 'rule': None}, + {'template': 'testEl.prependTo(target);', 'rule': None}, + {'template': 'testEl.insertAfter(target);', 'rule': None}, + {'template': 'testEl.insertBefore(target);', 'rule': None}, + {'template': 'anycall().appendTo(target)', 'rule': Rules.javascript_jquery_insert_into_target}, + {'template': 'anything.appendTo(target)', 'rule': Rules.javascript_jquery_insert_into_target}, + {'template': 'anything.prependTo(target)', 'rule': Rules.javascript_jquery_insert_into_target}, + {'template': 'anything.insertAfter(target)', 'rule': Rules.javascript_jquery_insert_into_target}, + {'template': 'anything.insertBefore(target)', 'rule': Rules.javascript_jquery_insert_into_target}, + ) + def test_jquery_insert_to_target(self, data): + """ + Test _check_javascript_file_is_safe with JQuery insert to target + functions that take a target as an argument, like appendTo() and + prependTo(). + """ + linter = JavaScriptLinter() + results = FileResults('') + + linter._check_javascript_file_is_safe(data['template'], results) + + self._validate_data_rule(data, results) + + @data( + {'template': 'test.html()', 'rule': None}, + {'template': 'test.html( )', 'rule': None}, + {'template': "test.html( '' )", 'rule': None}, + {'template': "test.html('')", 'rule': None}, + {'template': 'test.html("")', 'rule': None}, + {'template': 'test.html(HtmlUtils.ensureHtml(htmlSnippet).toString())', 'rule': None}, + {'template': 'HtmlUtils.setHtml($el, someHtml)', 'rule': None}, + {'template': 'test.html("any string")', 'rule': Rules.javascript_jquery_html}, + {'template': 'test.html("檌檒濦")', 'rule': Rules.javascript_jquery_html}, + {'template': 'test.html(anything)', 'rule': Rules.javascript_jquery_html}, + ) + def test_jquery_html(self, data): + """ + Test _check_javascript_file_is_safe with JQuery html() + """ + linter = JavaScriptLinter() + results = FileResults('') + + linter._check_javascript_file_is_safe(data['template'], results) + + self._validate_data_rule(data, results) + + @data( + {'template': 'StringUtils.interpolate()', 'rule': None}, + {'template': 'HtmlUtils.interpolateHtml()', 'rule': None}, + {'template': 'interpolate(anything)', 'rule': Rules.javascript_interpolate}, + ) + def test_javascript_interpolate(self, data): + """ + Test _check_javascript_file_is_safe with interpolate() + """ + linter = JavaScriptLinter() + results = FileResults('') + + linter._check_javascript_file_is_safe(data['template'], results) + + self._validate_data_rule(data, results) + + @data( + {'template': '_.escape()', 'rule': None}, + {'template': 'anything.escape()', 'rule': Rules.javascript_escape}, + ) + def test_javascript_interpolate(self, data): + """ + Test _check_javascript_file_is_safe with interpolate() + """ + linter = JavaScriptLinter() + results = FileResults('') + + linter._check_javascript_file_is_safe(data['template'], results) + + self._validate_data_rule(data, results) From 61127b613b71b00a2380ea8b1bf546a9a226e92d Mon Sep 17 00:00:00 2001 From: Dmitry Viskov Date: Wed, 23 Dec 2015 14:58:15 +0300 Subject: [PATCH 36/70] Make it impossible to click "final check" without selecting a choice --- .../xmodule/js/spec/capa/display_spec.coffee | 89 +++++++++++++++++++ .../xmodule/js/src/capa/display.coffee | 54 +++++++++++ .../tests/lms/test_problem_types.py | 35 +++++++- .../courseware/features/problems.feature | 40 +++------ .../courseware/features/problems.py | 9 ++ 5 files changed, 200 insertions(+), 27 deletions(-) diff --git a/common/lib/xmodule/xmodule/js/spec/capa/display_spec.coffee b/common/lib/xmodule/xmodule/js/spec/capa/display_spec.coffee index 2edb056bd9..09f9408c84 100644 --- a/common/lib/xmodule/xmodule/js/spec/capa/display_spec.coffee +++ b/common/lib/xmodule/xmodule/js/spec/capa/display_spec.coffee @@ -247,6 +247,95 @@ describe 'Problem', -> runs -> expect(@problem.checkButtonLabel.text).toHaveBeenCalledWith 'Check' + describe 'check button on problems', -> + beforeEach -> + @problem = new Problem($('.xblock-student_view')) + @checkDisabled = (v) -> expect(@problem.checkButton.hasClass('is-disabled')).toBe(v) + + describe 'some basic tests for check button', -> + it 'should become enabled after a value is entered into the text box', -> + $('#input_example_1').val('test').trigger('input') + @checkDisabled false + $('#input_example_1').val('').trigger('input') + @checkDisabled true + + describe 'some advanced tests for check button', -> + it 'should become enabled after a checkbox is checked', -> + html = ''' +
+ + + +
+ ''' + $('#input_example_1').replaceWith(html) + @problem.checkAnswersAndCheckButton true + @checkDisabled true + $('#input_1_1_1').attr('checked', true).trigger('click') + @checkDisabled false + $('#input_1_1_1').attr('checked', false).trigger('click') + @checkDisabled true + + it 'should become enabled after a radiobutton is checked', -> + html = ''' +
+ + + +
+ ''' + $('#input_example_1').replaceWith(html) + @problem.checkAnswersAndCheckButton true + @checkDisabled true + $('#input_1_1_1').attr('checked', true).trigger('click') + @checkDisabled false + $('#input_1_1_1').attr('checked', false).trigger('click') + @checkDisabled true + + it 'should become enabled after a value is selected in a selector', -> + html = ''' +
+ +
+ ''' + $('#input_example_1').replaceWith(html) + @problem.checkAnswersAndCheckButton true + @checkDisabled true + $("#problem_sel select").val("val2").trigger('change') + @checkDisabled false + $("#problem_sel select").val("val0").trigger('change') + @checkDisabled true + + it 'should become enabled after a radiobutton is checked and a value is entered into the text box', -> + html = ''' +
+ + + +
+ ''' + $(html).insertAfter('#input_example_1') + @problem.checkAnswersAndCheckButton true + @checkDisabled true + $('#input_1_1_1').attr('checked', true).trigger('click') + @checkDisabled true + $('#input_example_1').val('111').trigger('input') + @checkDisabled false + $('#input_1_1_1').attr('checked', false).trigger('click') + @checkDisabled true + + it 'should become enabled if there are only hidden input fields', -> + html = ''' + + ''' + $('#input_example_1').replaceWith(html) + @problem.checkAnswersAndCheckButton true + @checkDisabled false + describe 'reset', -> beforeEach -> @problem = new Problem($('.xblock-student_view')) diff --git a/common/lib/xmodule/xmodule/js/src/capa/display.coffee b/common/lib/xmodule/xmodule/js/src/capa/display.coffee index d9d1b89c77..a8e67a26fa 100644 --- a/common/lib/xmodule/xmodule/js/src/capa/display.coffee +++ b/common/lib/xmodule/xmodule/js/src/capa/display.coffee @@ -49,6 +49,8 @@ class @Problem window.globalTooltipManager.hide() @bindResetCorrectness() + if @checkButton.length + @checkAnswersAndCheckButton true # Collapsibles Collapsible.setCollapsibles(@el) @@ -452,6 +454,58 @@ class @Problem element.CodeMirror.save() if element.CodeMirror.save @answers = @inputs.serialize() + checkAnswersAndCheckButton: (bind=false) => + # Used to check available answers and if something is checked (or the answer is set in some textbox) + # "Check"/"Final check" button becomes enabled. Otherwise it is disabled by default. + # params: + # 'bind' used on the first check to attach event handlers to input fields + # to change "Check"/"Final check" enable status in case of some manipulations with answers + answered = true + + at_least_one_text_input_found = false + one_text_input_filled = false + @el.find("input:text").each (i, text_field) => + if $(text_field).is(':visible') + at_least_one_text_input_found = true + if $(text_field).val() isnt '' + one_text_input_filled = true + if bind + $(text_field).on 'input', (e) => + @checkAnswersAndCheckButton() + return + return + if at_least_one_text_input_found and not one_text_input_filled + answered = false + + @el.find(".choicegroup").each (i, choicegroup_block) => + checked = false + $(choicegroup_block).find("input[type=checkbox], input[type=radio]").each (j, checkbox_or_radio) => + if $(checkbox_or_radio).is(':checked') + checked = true + if bind + $(checkbox_or_radio).on 'click', (e) => + @checkAnswersAndCheckButton() + return + return + if not checked + answered = false + return + + @el.find("select").each (i, select_field) => + selected_option = $(select_field).find("option:selected").text().trim() + if selected_option is '' + answered = false + if bind + $(select_field).on 'change', (e) => + @checkAnswersAndCheckButton() + return + return + + if answered + @enableCheckButton true + else + @enableCheckButton false, false + bindResetCorrectness: -> # Loop through all input types # Bind the reset functions at that scope. diff --git a/common/test/acceptance/tests/lms/test_problem_types.py b/common/test/acceptance/tests/lms/test_problem_types.py index 4ff0d401a5..358c0146f3 100644 --- a/common/test/acceptance/tests/lms/test_problem_types.py +++ b/common/test/acceptance/tests/lms/test_problem_types.py @@ -6,6 +6,7 @@ See also lettuce tests in lms/djangoapps/courseware/features/problems.feature import random import textwrap +from nose import SkipTest from abc import ABCMeta, abstractmethod from nose.plugins.attrib import attr from selenium.webdriver import ActionChains @@ -135,6 +136,8 @@ class ProblemTypeTestMixin(object): """ Test cases shared amongst problem types. """ + can_submit_blank = False + @attr('shard_7') def test_answer_correctly(self): """ @@ -200,15 +203,34 @@ class ProblemTypeTestMixin(object): Then my "" answer is marked "incorrect" And The "" problem displays a "blank" answer """ + if not self.can_submit_blank: + raise SkipTest("Test incompatible with the current problem type") + self.problem_page.wait_for( lambda: self.problem_page.problem_name == self.problem_name, "Make sure the correct problem is on the page" ) - # Leave the problem unchanged and click check. + self.assertNotIn('is-disabled', self.problem_page.q(css='div.problem button.check').attrs('class')[0]) self.problem_page.click_check() self.wait_for_status('incorrect') + @attr('shard_7') + def test_cant_submit_blank_answer(self): + """ + Scenario: I can't submit a blank answer + When I try to submit blank answer + Then I can't check a problem + """ + if self.can_submit_blank: + raise SkipTest("Test incompatible with the current problem type") + + self.problem_page.wait_for( + lambda: self.problem_page.problem_name == self.problem_name, + "Make sure the correct problem is on the page" + ) + self.assertIn('is-disabled', self.problem_page.q(css='div.problem button.check').attrs('class')[0]) + @attr('a11y') def test_problem_type_a11y(self): """ @@ -236,6 +258,8 @@ class AnnotationProblemTypeTest(ProblemTypeTestBase, ProblemTypeTestMixin): factory = AnnotationResponseXMLFactory() + can_submit_blank = True + factory_kwargs = { 'title': 'Annotation Problem', 'text': 'The text being annotated', @@ -686,6 +710,13 @@ class CodeProblemTypeTest(ProblemTypeTestBase, ProblemTypeTestMixin): """ pass + def test_cant_submit_blank_answer(self): + """ + Overridden for script test because the testing grader always responds + with "correct" + """ + pass + class ChoiceTextProbelmTypeTestBase(ProblemTypeTestBase): """ @@ -801,6 +832,8 @@ class ImageProblemTypeTest(ProblemTypeTestBase, ProblemTypeTestMixin): factory = ImageResponseXMLFactory() + can_submit_blank = True + factory_kwargs = { 'src': '/static/images/placeholder-image.png', 'rectangle': '(0,0)-(50,50)', diff --git a/lms/djangoapps/courseware/features/problems.feature b/lms/djangoapps/courseware/features/problems.feature index 153b20aa7b..5994fcc464 100644 --- a/lms/djangoapps/courseware/features/problems.feature +++ b/lms/djangoapps/courseware/features/problems.feature @@ -180,16 +180,22 @@ Feature: LMS.Answer problems Examples: | ProblemType | Points Possible | - | drop down | 1 point possible | - | multiple choice | 1 point possible | - | checkbox | 1 point possible | - | radio | 1 point possible | - #| string | 1 point possible | - | numerical | 1 point possible | - | formula | 1 point possible | - | script | 2 points possible | | image | 1 point possible | + Scenario: I can't submit a blank answer + Given I am viewing a "" problem + Then I can't check a problem + + Examples: + | ProblemType | + | drop down | + | multiple choice | + | checkbox | + | radio | + | string | + | numerical | + | formula | + | script | Scenario: I can reset the correctness of a problem after changing my answer Given I am viewing a "" problem @@ -234,21 +240,3 @@ Feature: LMS.Answer problems | multiple choice | incorrect | correct | | radio | correct | incorrect | | radio | incorrect | correct | - - - Scenario: I can reset the correctness of a problem after submitting a blank answer - Given I am viewing a "" problem - When I check a problem - And I input an answer on a "" problem "correctly" - Then my "" answer is marked "unanswered" - - Examples: - | ProblemType | - | drop down | - | multiple choice | - | checkbox | - | radio | - #| string | - | numerical | - | formula | - | script | diff --git a/lms/djangoapps/courseware/features/problems.py b/lms/djangoapps/courseware/features/problems.py index 730997b0a1..559a90e0af 100644 --- a/lms/djangoapps/courseware/features/problems.py +++ b/lms/djangoapps/courseware/features/problems.py @@ -92,12 +92,21 @@ def check_problem(step): # first scroll down so the loading mathjax button does not # cover up the Check button world.browser.execute_script("window.scrollTo(0,1024)") + assert world.is_css_not_present("button.check.is-disabled") world.css_click("button.check") # Wait for the problem to finish re-rendering world.wait_for_ajax_complete() +@step(u"I can't check a problem") +def assert_cant_check_problem(step): # pylint: disable=unused-argument + # first scroll down so the loading mathjax button does not + # cover up the Check button + world.browser.execute_script("window.scrollTo(0,1024)") + assert world.is_css_present("button.check.is-disabled") + + @step(u'The "([^"]*)" problem displays a "([^"]*)" answer') def assert_problem_has_answer(step, problem_type, answer_class): ''' From d1bda204e418fe7ca7616771e37234fec66b95b3 Mon Sep 17 00:00:00 2001 From: Robert Raposa Date: Sun, 17 Apr 2016 21:17:18 -0400 Subject: [PATCH 37/70] Enhance Mako linting - Lint JavaScript context for JavaScript violations - Lint for Mako specific JavaScript rules - Skip commented lines - Change unicode to decode.utf8 - Count lint violations --- scripts/safe_template_linter.py | 1351 ++++++++++++-------- scripts/tests/test_safe_template_linter.py | 197 ++- 2 files changed, 963 insertions(+), 585 deletions(-) diff --git a/scripts/safe_template_linter.py b/scripts/safe_template_linter.py index 870c1a318e..23cf001a1d 100755 --- a/scripts/safe_template_linter.py +++ b/scripts/safe_template_linter.py @@ -40,7 +40,7 @@ def _is_skip_dir(skip_dirs, directory): return False -def _load_file(self, file_full_path): +def _load_file(file_full_path): """ Loads a file into a string. @@ -74,32 +74,30 @@ def _find_closing_char_index(start_delim, open_char, close_char, template, start strings: A list of ParseStrings already parsed Returns: - A dict containing the following: - close_char_index: The index of the closing character, or -1 if - unparseable. + A dict containing the following, or None if unparseable: + close_char_index: The index of the closing character strings: a list of ParseStrings """ strings = [] if strings is None else strings - unparseable_result = {'close_char_index': -1, 'strings': []} close_char_index = template.find(close_char, start_index) if close_char_index < 0: # if we can't find an end_char, let's just quit - return unparseable_result + return None open_char_index = template.find(open_char, start_index, close_char_index) parse_string = ParseString(template, start_index, close_char_index) valid_index_list = [close_char_index] if 0 <= open_char_index: valid_index_list.append(open_char_index) - if 0 <= parse_string.start_index: + if parse_string.start_index is not None: valid_index_list.append(parse_string.start_index) min_valid_index = min(valid_index_list) if parse_string.start_index == min_valid_index: strings.append(parse_string) - if parse_string.end_index < 0: - return unparseable_result + if parse_string.end_index is None: + return None else: return _find_closing_char_index( start_delim, open_char, close_char, template, start_index=parse_string.end_index, @@ -111,7 +109,7 @@ def _find_closing_char_index(start_delim, open_char, close_char, template, start # if we find another starting delim, consider this unparseable start_delim_index = template.find(start_delim, start_index, close_char_index) if 0 <= start_delim_index < open_char_index: - return unparseable_result + return None return _find_closing_char_index( start_delim, open_char, close_char, template, start_index=open_char_index + 1, num_open_chars=num_open_chars + 1, strings=strings @@ -145,7 +143,10 @@ class StringLines(object): """ self._string = string - self._line_breaks = self._process_line_breaks(string) + self._line_start_indexes = self._process_line_breaks(string) + # this is an exclusive index used in the case that the template doesn't + # end with a new line + self.eof_index = len(string) def _process_line_breaks(self, string): """ @@ -156,19 +157,18 @@ class StringLines(object): string: The string in which to find line breaks. Returns: - A list of indices into the string at which each line break can be - found. + A list of indices into the string at which each line begins. """ - line_breaks = [0] + line_start_indexes = [0] index = 0 while True: index = string.find('\n', index) if index < 0: break index += 1 - line_breaks.append(index) - return line_breaks + line_start_indexes.append(index) + return line_start_indexes def get_string(self): """ @@ -189,7 +189,7 @@ class StringLines(object): """ current_line_number = 0 - for line_break_index in self._line_breaks: + for line_break_index in self._line_start_indexes: if line_break_index <= index: current_line_number += 1 else: @@ -227,6 +227,20 @@ class StringLines(object): line_number = self.index_to_line_number(index) return self.line_number_to_start_index(line_number) + def index_to_line_end_index(self, index): + """ + Gets the index of the end of the line of the given index. + + Arguments: + index: The index into the original string. + + Returns: + The index of the end of the line of the given index. + + """ + line_number = self.index_to_line_number(index) + return self.line_number_to_end_index(line_number) + def line_number_to_start_index(self, line_number): """ Gets the starting index for the provided line number. @@ -239,7 +253,26 @@ class StringLines(object): The starting index for the provided line number. """ - return self._line_breaks[line_number - 1] + return self._line_start_indexes[line_number - 1] + + def line_number_to_end_index(self, line_number): + """ + Gets the ending index for the provided line number. + + Arguments: + line_number: The line number of the line for which we want to find + the end index. + + Returns: + The ending index for the provided line number. + + """ + if line_number < len(self._line_start_indexes): + return self._line_start_indexes[line_number] + else: + # an exclusive index in the case that the file didn't end with a + # newline. + return self.eof_index def line_number_to_line(self, line_number): """ @@ -252,11 +285,11 @@ class StringLines(object): The line of text designated by the provided line number. """ - start_index = self._line_breaks[line_number - 1] - if len(self._line_breaks) == line_number: + start_index = self._line_start_indexes[line_number - 1] + if len(self._line_start_indexes) == line_number: line = self._string[start_index:] else: - end_index = self._line_breaks[line_number] + end_index = self._line_start_indexes[line_number] line = self._string[start_index:end_index - 1] return line @@ -264,7 +297,7 @@ class StringLines(object): """ Gets the number of lines in the string. """ - return len(self._line_breaks) + return len(self._line_start_indexes) class Rules(Enum): @@ -295,6 +328,14 @@ class Rules(Enum): 'mako-invalid-js-filter', 'The expression is using an invalid filter in a JavaScript context.' ) + mako_js_missing_quotes = ( + 'mako-js-missing-quotes', + 'An expression using js_escaped_string must be wrapped in quotes.' + ) + mako_js_html_string = ( + 'mako-js-html-string', + 'A JavaScript string containing HTML should not have an embedded Mako expression.' + ) mako_deprecated_display_name = ( 'mako-deprecated-display-name', 'Replace deprecated display_name_with_default_escaped with display_name_with_default.' @@ -365,6 +406,57 @@ class Rules(Enum): self.rule_summary = rule_summary +class Expression(object): + """ + Represents an arbitrary expression. + + An expression can be any type of code snippet. It will sometimes have a + starting and ending delimiter, but not always. + + Here are some example expressions:: + + ${x | n, decode.utf8} + <%= x %> + function(x) + "

" + message + "

" + + Other details of note: + - Only a start_index is required for a valid expression. + - If end_index is None, it means we couldn't parse the rest of the + expression. + - All other details of the expression are optional, and are only added if + and when supplied and needed for additional checks. They are not necessary + for the final results output. + + """ + + def __init__(self, start_index, end_index=None, template=None, start_delim="", end_delim="", strings=None): + """ + Init method. + + Arguments: + start_index: the starting index of the expression + end_index: the index immediately following the expression, or None + if the expression was unparseable + template: optional template code in which the expression was found + start_delim: optional starting delimiter of the expression + end_delim: optional ending delimeter of the expression + strings: optional list of ParseStrings + + """ + self.start_index = start_index + self.end_index = end_index + self.start_delim = start_delim + self.end_delim = end_delim + self.strings = strings + if template is not None and self.end_index is not None: + self.expression = template[start_index:end_index] + self.expression_inner = self.expression[len(start_delim):-len(end_delim)].strip() + else: + self.expression = None + self.expression_inner = None + + class RuleViolation(object): """ Base class representing a rule violation which can be used for reporting. @@ -423,6 +515,12 @@ class RuleViolation(object): """ return 0 + def first_line(self): + """ + Since a file level rule has no first line, returns empty string. + """ + return '' + def prepare_results(self, full_path, string_lines): """ Preps this instance for results reporting. @@ -460,7 +558,7 @@ class ExpressionRuleViolation(RuleViolation): Arguments: rule: The Rule which was violated. - expression: The expression that was in violation. + expression: The Expression that was in violation. """ super(ExpressionRuleViolation, self).__init__(rule) @@ -517,6 +615,12 @@ class ExpressionRuleViolation(RuleViolation): """ return (self.start_line, self.start_column) + def first_line(self): + """ + Returns the initial line of code of the violation. + """ + return self.lines[0] + def prepare_results(self, full_path, string_lines): """ Preps this instance for results reporting. @@ -528,11 +632,11 @@ class ExpressionRuleViolation(RuleViolation): """ self.full_path = full_path - start_index = self.expression['start_index'] + start_index = self.expression.start_index self.start_line = string_lines.index_to_line_number(start_index) self.start_column = string_lines.index_to_column_number(start_index) - end_index = self.expression['end_index'] - if end_index > 0: + end_index = self.expression.end_index + if end_index is not None: self.end_line = string_lines.index_to_line_number(end_index) self.end_column = string_lines.index_to_column_number(end_index) else: @@ -584,17 +688,21 @@ class FileResults(object): self.is_file = os.path.isfile(full_path) self.violations = [] - def prepare_results(self, file_string): + def prepare_results(self, file_string, line_comment_delim=None): """ Prepares the results for output for this file. Arguments: file_string: The string of content for this file. + line_comment_delim: A string representing the start of a line + comment. For example "##" for Mako and "//" for JavaScript. """ string_lines = StringLines(file_string) for violation in self.violations: violation.prepare_results(self.full_path, string_lines) + if line_comment_delim is not None: + self._filter_commented_code(line_comment_delim) def print_results(self, options, out): """ @@ -606,16 +714,49 @@ class FileResults(object): all violations. out: output file + Returns: + The number of violations. When using --quiet, returns number of + files with violations. """ + num_violations = 0 if options['is_quiet']: if self.violations is not None and 0 < len(self.violations): + num_violations += 1 print(self.full_path, file=out) else: self.violations.sort(key=lambda violation: violation.sort_key()) for violation in self.violations: if not violation.is_disabled: + num_violations += 1 violation.print_results(out) + return num_violations + + def _filter_commented_code(self, line_comment_delim): + """ + Remove any violations that were found in commented out code. + + Arguments: + line_comment_delim: A string representing the start of a line + comment. For example "##" for Mako and "//" for JavaScript. + + """ + self.violations = [v for v in self.violations if not self._is_commented(v, line_comment_delim)] + + def _is_commented(self, violation, line_comment_delim): + """ + Checks if violation line is commented out. + + Arguments: + violation: The violation to check + line_comment_delim: A string representing the start of a line + comment. For example "##" for Mako and "//" for JavaScript. + + Returns: + True if the first line of the violation is actually commented out, + False otherwise. + """ + return violation.first_line().lstrip().startswith(line_comment_delim) class ParseString(object): @@ -623,8 +764,8 @@ class ParseString(object): ParseString is the result of parsing a string out of a template. A ParseString has the following attributes: - start_index: The index of the first quote, or -1 if none found - end_index: The index following the closing quote, or -1 if + start_index: The index of the first quote, or None if none found + end_index: The index following the closing quote, or None if unparseable quote_length: The length of the quote. Could be 3 for a Python triple quote. Or None if none found. @@ -644,12 +785,12 @@ class ParseString(object): end_index: The end index to search before. """ - self.end_index = -1 + self.end_index = None self.quote_length = None self.string = None self.string_inner = None self.start_index = self._find_string_start(template, start_index, end_index) - if 0 <= self.start_index: + if self.start_index is not None: result = self._parse_string(template, self.start_index) if result is not None: self.end_index = result['end_index'] @@ -668,13 +809,13 @@ class ParseString(object): end_index: The end index to search before. Returns: - The start index of the first single or double quote, or -1 if - no quote was found. + The start index of the first single or double quote, or None if no + quote was found. """ quote_regex = re.compile(r"""['"]""") start_match = quote_regex.search(template, start_index, end_index) if start_match is None: - return -1 + return None else: return start_match.start() @@ -722,432 +863,6 @@ class ParseString(object): } -class MakoTemplateLinter(object): - """ - The linter for Mako template files. - """ - - _skip_mako_dirs = _skip_dirs - - def process_file(self, directory, file_name): - """ - Process file to determine if it is a Mako template file and - if it is safe. - - Arguments: - directory (string): The directory of the file to be checked - file_name (string): A filename for a potential Mako file - - Returns: - The file results containing any violations. - - """ - mako_file_full_path = os.path.normpath(directory + '/' + file_name) - results = FileResults(mako_file_full_path) - - if not results.is_file: - return results - - if not self._is_valid_directory(directory): - return results - - # TODO: When safe-by-default is turned on at the platform level, will we: - # 1. Turn it on for .html only, or - # 2. Turn it on for all files, and have different rulesets that have - # different rules of .xml, .html, .js, .txt Mako templates (e.g. use - # the n filter to turn off h for some of these)? - # For now, we only check .html and .xml files - if not (file_name.lower().endswith('.html') or file_name.lower().endswith('.xml')): - return results - - return self._load_and_check_mako_file_is_safe(mako_file_full_path, results) - - def _is_valid_directory(self, directory): - """ - Determines if the provided directory is a directory that could contain - Mako template files that need to be linted. - - Arguments: - directory: The directory to be linted. - - Returns: - True if this directory should be linted for Mako template violations - and False otherwise. - """ - if _is_skip_dir(self._skip_mako_dirs, directory): - return False - - # TODO: This is an imperfect guess concerning the Mako template - # directories. This needs to be reviewed before turning on safe by - # default at the platform level. - if ('/templates/' in directory) or directory.endswith('/templates'): - return True - - return False - - def _load_and_check_mako_file_is_safe(self, mako_file_full_path, results): - """ - Loads the Mako template file and checks if it is in violation. - - Arguments: - mako_file_full_path: The file to be loaded and linted. - - Returns: - The file results containing any violations. - - """ - mako_template = _load_file(self, mako_file_full_path) - self._check_mako_file_is_safe(mako_template, results) - return results - - def _check_mako_file_is_safe(self, mako_template, results): - """ - Checks for violations in a Mako template. - - Arguments: - mako_template: The contents of the Mako template. - results: A file results objects to which violations will be added. - - """ - if self._is_django_template(mako_template): - return - has_page_default = False - if self._has_multiple_page_tags(mako_template): - results.violations.append(RuleViolation(Rules.mako_multiple_page_tags)) - else: - has_page_default = self._has_page_default(mako_template) - if not has_page_default: - results.violations.append(RuleViolation(Rules.mako_missing_default)) - self._check_mako_expressions(mako_template, has_page_default, results) - results.prepare_results(mako_template) - - def _is_django_template(self, mako_template): - """ - Determines if the template is actually a Django template. - - Arguments: - mako_template: The template code. - - Returns: - True if this is really a Django template, and False otherwise. - - """ - if re.search('({%.*%})|({{.*}})', mako_template) is not None: - return True - return False - - def _has_multiple_page_tags(self, mako_template): - """ - Checks if the Mako template contains more than one page expression. - - Arguments: - mako_template: The contents of the Mako template. - - """ - count = len(re.findall('<%page ', mako_template, re.IGNORECASE)) - return count > 1 - - def _has_page_default(self, mako_template): - """ - Checks if the Mako template contains the page expression marking it as - safe by default. - - Arguments: - mako_template: The contents of the Mako template. - - """ - page_h_filter_regex = re.compile('<%page[^>]*expression_filter=(?:"h"|\'h\')[^>]*/>') - page_match = page_h_filter_regex.search(mako_template) - return page_match - - def _check_mako_expressions(self, mako_template, has_page_default, results): - """ - Searches for Mako expressions and then checks if they contain - violations. - - Arguments: - mako_template: The contents of the Mako template. - has_page_default: True if the page is marked as default, False - otherwise. - results: A list of results into which violations will be added. - - """ - expressions = self._find_mako_expressions(mako_template) - contexts = self._get_contexts(mako_template) - for expression in expressions: - if expression['expression'] is None: - results.violations.append(ExpressionRuleViolation( - Rules.mako_unparseable_expression, expression - )) - continue - - context = self._get_context(contexts, expression['start_index']) - self._check_filters(mako_template, expression, context, has_page_default, results) - self._check_deprecated_display_name(expression, results) - self._check_html_and_text(expression, has_page_default, results) - - def _check_deprecated_display_name(self, expression, results): - """ - Checks that the deprecated display_name_with_default_escaped is not - used. Adds violation to results if there is a problem. - - Arguments: - expression: A dict containing the start_index, end_index, and - expression (text) of the expression. - results: A list of results into which violations will be added. - - """ - if '.display_name_with_default_escaped' in expression['expression']: - results.violations.append(ExpressionRuleViolation( - Rules.mako_deprecated_display_name, expression - )) - - def _check_html_and_text(self, expression, has_page_default, results): - """ - Checks rules related to proper use of HTML() and Text(). - - Arguments: - expression: A dict containing the start_index, end_index, and - expression (text) of the expression. - has_page_default: True if the page is marked as default, False - otherwise. - results: A list of results into which violations will be added. - - """ - # strip '${' and '}' and whitespace from ends - expression_inner = expression['expression'][2:-1].strip() - # find the template relative inner expression start index - # - find used to take into account above strip() - template_inner_start_index = expression['start_index'] + expression['expression'].find(expression_inner) - if 'HTML(' in expression_inner: - if expression_inner.startswith('HTML('): - close_paren_index = _find_closing_char_index( - None, "(", ")", expression_inner, start_index=len('HTML(') - )['close_char_index'] - # check that the close paren is at the end of the stripped expression. - if close_paren_index != len(expression_inner) - 1: - results.violations.append(ExpressionRuleViolation( - Rules.mako_html_alone, expression - )) - elif expression_inner.startswith('Text(') is False: - results.violations.append(ExpressionRuleViolation( - Rules.mako_html_requires_text, expression - )) - else: - if 'Text(' in expression_inner: - results.violations.append(ExpressionRuleViolation( - Rules.mako_text_redundant, expression - )) - - # strings to be checked for HTML - unwrapped_html_strings = expression['strings'] - for match in re.finditer(r"(HTML\(|Text\()", expression_inner): - result = _find_closing_char_index(None, "(", ")", expression_inner, start_index=match.end()) - close_paren_index = result['close_char_index'] - if 0 <= close_paren_index: - # the argument sent to HTML() or Text() - argument = expression_inner[match.end():close_paren_index] - if ".format(" in argument: - results.violations.append(ExpressionRuleViolation( - Rules.mako_close_before_format, expression - )) - if match.group() == "HTML(": - # remove expression strings wrapped in HTML() - for string in list(unwrapped_html_strings): - html_inner_start_index = template_inner_start_index + match.end() - html_inner_end_index = template_inner_start_index + close_paren_index - if html_inner_start_index <= string.start_index and string.end_index <= html_inner_end_index: - unwrapped_html_strings.remove(string) - - # check strings not wrapped in HTML() for '<' - for string in unwrapped_html_strings: - if '<' in string.string_inner: - results.violations.append(ExpressionRuleViolation( - Rules.mako_wrap_html, expression - )) - break - # check strings not wrapped in HTML() for HTML entities - if has_page_default: - for string in unwrapped_html_strings: - if re.search(r"&[#]?[a-zA-Z0-9]+;", string.string_inner): - results.violations.append(ExpressionRuleViolation( - Rules.mako_html_entities, expression - )) - break - - def _check_filters(self, mako_template, expression, context, has_page_default, results): - """ - Checks that the filters used in the given Mako expression are valid - for the given context. Adds violation to results if there is a problem. - - Arguments: - mako_template: The contents of the Mako template. - expression: A dict containing the start_index, end_index, and - expression (text) of the expression. - context: The context of the page in which the expression was found - (e.g. javascript, html). - has_page_default: True if the page is marked as default, False - otherwise. - results: A list of results into which violations will be added. - - """ - # finds "| n, h}" when given "${x | n, h}" - filters_regex = re.compile('\|[a-zA-Z_,\s]*\}') - filters_match = filters_regex.search(expression['expression']) - if filters_match is None: - if context == 'javascript': - results.violations.append(ExpressionRuleViolation( - Rules.mako_invalid_js_filter, expression - )) - return - - filters = filters_match.group()[1:-1].replace(" ", "").split(",") - if (len(filters) == 2) and (filters[0] == 'n') and (filters[1] == 'unicode'): - # {x | n, unicode} is valid in any context - pass - elif context == 'html': - if (len(filters) == 1) and (filters[0] == 'h'): - if has_page_default: - # suppress this violation if the page default hasn't been set, - # otherwise the template might get less safe - results.violations.append(ExpressionRuleViolation( - Rules.mako_unwanted_html_filter, expression - )) - else: - results.violations.append(ExpressionRuleViolation( - Rules.mako_invalid_html_filter, expression - )) - - else: - if (len(filters) == 2) and (filters[0] == 'n') and (filters[1] == 'dump_js_escaped_json'): - # {x | n, dump_js_escaped_json} is valid - pass - elif (len(filters) == 2) and (filters[0] == 'n') and (filters[1] == 'js_escaped_string'): - # {x | n, js_escaped_string} is valid, if surrounded by quotes - pass - else: - results.violations.append(ExpressionRuleViolation( - Rules.mako_invalid_js_filter, expression - )) - - def _get_contexts(self, mako_template): - """ - Returns a data structure that represents the indices at which the - template changes from HTML context to JavaScript and back. - - Return: - A list of dicts where each dict contains the 'index' of the context - and the context 'type' (e.g. 'html' or 'javascript'). - """ - contexts_re = re.compile(r""" - | # script tag start - | # script tag end - <%static:require_module.*?>| # require js script tag start - # require js script tag end""", re.VERBOSE | re.IGNORECASE) - media_type_re = re.compile(r"""type=['"].*?['"]""", re.IGNORECASE) - - contexts = [{'index': 0, 'type': 'html'}] - for context in contexts_re.finditer(mako_template): - match_string = context.group().lower() - if match_string.startswith(" Arguments: - expression: The expression being checked. + expression: The Expression being checked. Returns: - True if the expression has been safely escaped, and False otherwise. + True if the Expression has been safely escaped, and False otherwise. """ - if expression['expression_inner'].startswith('HtmlUtils.'): + if expression.expression_inner.startswith('HtmlUtils.'): return True - if expression['expression_inner'].startswith('_.escape('): + if expression.expression_inner.startswith('_.escape('): return True return False @@ -1275,25 +990,16 @@ class UnderscoreTemplateLinter(object): underscore_template: The contents of the Underscore.js template. Returns: - A list of dicts for each expression, where the dict contains the - following: - - start_index: The index of the start of the expression. - end_index: The index of the end of the expression. - expression: The text of the expression. + A list of Expressions. """ - unescaped_expression_regex = re.compile("<%=(.*?)%>", re.DOTALL) + unescaped_expression_regex = re.compile("<%=.*?%>", re.DOTALL) expressions = [] for match in unescaped_expression_regex.finditer(underscore_template): - expression = { - 'start_index': match.start(), - 'end_index': match.end(), - 'expression': match.group(), - 'expression_inner': match.group(1).strip() - } + expression = Expression( + match.start(), match.end(), template=underscore_template, start_delim="<%=", end_delim="%>" + ) expressions.append(expression) - return expressions @@ -1366,11 +1072,11 @@ class JavaScriptLinter(object): The file results containing any violations. """ - file_contents = _load_file(self, file_full_path) - self._check_javascript_file_is_safe(file_contents, results) + file_contents = _load_file(file_full_path) + self.check_javascript_file_is_safe(file_contents, results) return results - def _check_javascript_file_is_safe(self, file_contents, results): + def check_javascript_file_is_safe(self, file_contents, results): """ Checks for violations in a JavaScript file. @@ -1405,39 +1111,34 @@ class JavaScriptLinter(object): self._check_javascript_escape(file_contents, results) self._check_concat_with_html(file_contents, results) self.underScoreLinter.check_underscore_file_is_safe(file_contents, results) - results.prepare_results(file_contents) + results.prepare_results(file_contents, line_comment_delim='//') - def _get_expression_for_function(self, file_contents, function_match): + def _get_expression_for_function(self, file_contents, function_start_match): """ - Returns an expression that best matches the function call. + Returns an expression that matches the function call opened with + function_start_match. Arguments: file_contents: The contents of the JavaScript file. - function_match: A regex match representing the start of the function - call. + function_start_match: A regex match representing the start of the function + call (e.g. ".escape("). + + Returns: + An Expression that best matches the function. """ - start_index = function_match.start() - inner_start_index = function_match.end() - close_paren_index = _find_closing_char_index( + start_index = function_start_match.start() + inner_start_index = function_start_match.end() + result = _find_closing_char_index( None, "(", ")", file_contents, start_index=inner_start_index - )['close_char_index'] - if 0 <= close_paren_index: - end_index = close_paren_index + 1 - expression_text = file_contents[function_match.start():close_paren_index + 1] - expression = { - 'start_index': start_index, - 'end_index': end_index, - 'expression': expression_text, - 'expression_inner': expression_text, - } + ) + if result is not None: + end_index = result['close_char_index'] + 1 + expression = Expression( + start_index, end_index, template=file_contents, start_delim=function_start_match.group(), end_delim=")" + ) else: - expression = { - 'start_index': start_index, - 'end_index': -1, - 'expression': None, - 'expression_inner': None, - } + expression = Expression(start_index) return expression def _check_javascript_interpolate(self, file_contents, results): @@ -1498,10 +1199,10 @@ class JavaScriptLinter(object): for function_match in regex.finditer(file_contents): is_violation = True expression = self._get_expression_for_function(file_contents, function_match) - if 0 < expression['end_index']: - start_index = expression['start_index'] + if expression.end_index is not None: + start_index = expression.start_index inner_start_index = function_match.end() - close_paren_index = expression['end_index'] - 1 + close_paren_index = expression.end_index - 1 function_argument = file_contents[inner_start_index:close_paren_index].strip() if is_argument_safe is not None and is_caller_safe is None: is_violation = is_argument_safe(function_argument) is False @@ -1664,10 +1365,12 @@ class JavaScriptLinter(object): for match in re.finditer(regex_concat_with_html, file_contents): found_new_violation = False if last_expression is not None: - last_line = lines.index_to_line_number(last_expression['start_index']) + last_line = lines.index_to_line_number(last_expression.start_index) # check if violation should be expanded to more of the same line if last_line == lines.index_to_line_number(match.start()): - last_expression['end_index'] = match.end() + last_expression = Expression( + last_expression.start_index, match.end(), template=file_contents + ) else: results.violations.append(ExpressionRuleViolation( Rules.javascript_concat_html, last_expression @@ -1676,10 +1379,9 @@ class JavaScriptLinter(object): else: found_new_violation = True if found_new_violation: - last_expression = { - 'start_index': match.start(), - 'end_index': match.end(), - } + last_expression = Expression( + match.start(), match.end(), template=file_contents + ) # add final expression if last_expression is not None: @@ -1688,6 +1390,571 @@ class JavaScriptLinter(object): )) +class MakoTemplateLinter(object): + """ + The linter for Mako template files. + """ + + _skip_mako_dirs = _skip_dirs + javaScriptLinter = JavaScriptLinter() + + def process_file(self, directory, file_name): + """ + Process file to determine if it is a Mako template file and + if it is safe. + + Arguments: + directory (string): The directory of the file to be checked + file_name (string): A filename for a potential Mako file + + Returns: + The file results containing any violations. + + """ + mako_file_full_path = os.path.normpath(directory + '/' + file_name) + results = FileResults(mako_file_full_path) + + if not results.is_file: + return results + + if not self._is_valid_directory(directory): + return results + + # TODO: When safe-by-default is turned on at the platform level, will we: + # 1. Turn it on for .html only, or + # 2. Turn it on for all files, and have different rulesets that have + # different rules of .xml, .html, .js, .txt Mako templates (e.g. use + # the n filter to turn off h for some of these)? + # For now, we only check .html and .xml files + if not (file_name.lower().endswith('.html') or file_name.lower().endswith('.xml')): + return results + + return self._load_and_check_mako_file_is_safe(mako_file_full_path, results) + + def _is_valid_directory(self, directory): + """ + Determines if the provided directory is a directory that could contain + Mako template files that need to be linted. + + Arguments: + directory: The directory to be linted. + + Returns: + True if this directory should be linted for Mako template violations + and False otherwise. + """ + if _is_skip_dir(self._skip_mako_dirs, directory): + return False + + # TODO: This is an imperfect guess concerning the Mako template + # directories. This needs to be reviewed before turning on safe by + # default at the platform level. + if ('/templates/' in directory) or directory.endswith('/templates'): + return True + + return False + + def _load_and_check_mako_file_is_safe(self, mako_file_full_path, results): + """ + Loads the Mako template file and checks if it is in violation. + + Arguments: + mako_file_full_path: The file to be loaded and linted. + + Returns: + The file results containing any violations. + + """ + mako_template = _load_file(mako_file_full_path) + self._check_mako_file_is_safe(mako_template, results) + return results + + def _check_mako_file_is_safe(self, mako_template, results): + """ + Checks for violations in a Mako template. + + Arguments: + mako_template: The contents of the Mako template. + results: A file results objects to which violations will be added. + + """ + if self._is_django_template(mako_template): + return + has_page_default = self._has_page_default(mako_template, results) + self._check_mako_expressions(mako_template, has_page_default, results) + results.prepare_results(mako_template, line_comment_delim='##') + + def _is_django_template(self, mako_template): + """ + Determines if the template is actually a Django template. + + Arguments: + mako_template: The template code. + + Returns: + True if this is really a Django template, and False otherwise. + + """ + if re.search('({%.*%})|({{.*}})', mako_template) is not None: + return True + return False + + def _get_page_tag_count(self, mako_template): + """ + Determines the number of page expressions in the Mako template. Ignores + page expressions that are commented out. + + Arguments: + mako_template: The contents of the Mako template. + + Returns: + The number of page expressions + """ + count = len(re.findall('<%page ', mako_template, re.IGNORECASE)) + count_commented = len(re.findall(r'##\s+<%page ', mako_template, re.IGNORECASE)) + return max(0, count - count_commented) + + def _has_page_default(self, mako_template, results): + """ + Checks if the Mako template contains the page expression marking it as + safe by default. + + Arguments: + mako_template: The contents of the Mako template. + results: A list of results into which violations will be added. + + Side effect: + Adds violations regarding page default if necessary + + Returns: + True if the template has the page default, and False otherwise. + + """ + page_tag_count = self._get_page_tag_count(mako_template) + # check if there are too many page expressions + if 2 <= page_tag_count: + results.violations.append(RuleViolation(Rules.mako_multiple_page_tags)) + return False + # make sure there is exactly 1 page expression, excluding commented out + # page expressions, before proceeding + elif page_tag_count != 1: + results.violations.append(RuleViolation(Rules.mako_missing_default)) + return False + # check that safe by default (h filter) is turned on + page_h_filter_regex = re.compile('<%page[^>]*expression_filter=(?:"h"|\'h\')[^>]*/>') + page_match = page_h_filter_regex.search(mako_template) + if not page_match: + results.violations.append(RuleViolation(Rules.mako_missing_default)) + return page_match + + def _check_mako_expressions(self, mako_template, has_page_default, results): + """ + Searches for Mako expressions and then checks if they contain + violations, including checking JavaScript contexts for JavaScript + violations. + + Arguments: + mako_template: The contents of the Mako template. + has_page_default: True if the page is marked as default, False + otherwise. + results: A list of results into which violations will be added. + + """ + expressions = self._find_mako_expressions(mako_template) + contexts = self._get_contexts(mako_template) + self._check_javascript_contexts(mako_template, contexts, results) + for expression in expressions: + if expression.end_index is None: + results.violations.append(ExpressionRuleViolation( + Rules.mako_unparseable_expression, expression + )) + continue + + context = self._get_context(contexts, expression.start_index) + self._check_filters(mako_template, expression, context, has_page_default, results) + self._check_deprecated_display_name(expression, results) + self._check_html_and_text(expression, has_page_default, results) + + def _check_javascript_contexts(self, mako_template, contexts, results): + """ + Lint the JavaScript contexts for JavaScript violations inside a Mako + template. + + Arguments: + mako_template: The contents of the Mako template. + contexts: A list of context dicts with 'type' and 'index'. + results: A list of results into which violations will be added. + + Side effect: + Adds JavaScript violations to results. + """ + javascript_start_index = None + for context in contexts: + if context['type'] == 'javascript': + if javascript_start_index < 0: + javascript_start_index = context['index'] + else: + if javascript_start_index is not None: + javascript_end_index = context['index'] + javascript_code = mako_template[javascript_start_index:javascript_end_index] + self._check_javascript_context(javascript_code, javascript_start_index, results) + javascript_start_index = None + if javascript_start_index is not None: + javascript_code = mako_template[javascript_start_index:] + self._check_javascript_context(javascript_code, javascript_start_index, results) + + def _check_javascript_context(self, javascript_code, start_offset, results): + """ + Lint a single JavaScript context for JavaScript violations inside a Mako + template. + + Arguments: + javascript_code: The template contents of the JavaScript context. + start_offset: The offset of the JavaScript context inside the + original Mako template. + results: A list of results into which violations will be added. + + Side effect: + Adds JavaScript violations to results. + + """ + javascript_results = FileResults("") + self.javaScriptLinter.check_javascript_file_is_safe(javascript_code, javascript_results) + # translate the violations into the location within the original + # Mako template + for violation in javascript_results.violations: + expression = violation.expression + expression.start_index += start_offset + if expression.end_index is not None: + expression.end_index += start_offset + results.violations.append(ExpressionRuleViolation(violation.rule, expression)) + + def _check_deprecated_display_name(self, expression, results): + """ + Checks that the deprecated display_name_with_default_escaped is not + used. Adds violation to results if there is a problem. + + Arguments: + expression: An Expression + results: A list of results into which violations will be added. + + """ + if '.display_name_with_default_escaped' in expression.expression: + results.violations.append(ExpressionRuleViolation( + Rules.mako_deprecated_display_name, expression + )) + + def _check_html_and_text(self, expression, has_page_default, results): + """ + Checks rules related to proper use of HTML() and Text(). + + Arguments: + expression: A Mako Expression. + has_page_default: True if the page is marked as default, False + otherwise. + results: A list of results into which violations will be added. + + """ + expression_inner = expression.expression_inner + # use find to get the template relative inner expression start index + # due to possible skipped white space + template_inner_start_index = expression.start_index + template_inner_start_index += expression.expression.find(expression_inner) + if 'HTML(' in expression_inner: + if expression_inner.startswith('HTML('): + close_paren_index = _find_closing_char_index( + None, "(", ")", expression_inner, start_index=len('HTML(') + )['close_char_index'] + # check that the close paren is at the end of the stripped expression. + if close_paren_index != len(expression_inner) - 1: + results.violations.append(ExpressionRuleViolation( + Rules.mako_html_alone, expression + )) + elif expression_inner.startswith('Text(') is False: + results.violations.append(ExpressionRuleViolation( + Rules.mako_html_requires_text, expression + )) + else: + if 'Text(' in expression_inner: + results.violations.append(ExpressionRuleViolation( + Rules.mako_text_redundant, expression + )) + + # strings to be checked for HTML + unwrapped_html_strings = expression.strings + for match in re.finditer(r"(HTML\(|Text\()", expression_inner): + result = _find_closing_char_index(None, "(", ")", expression_inner, start_index=match.end()) + if result is not None: + close_paren_index = result['close_char_index'] + # the argument sent to HTML() or Text() + argument = expression_inner[match.end():close_paren_index] + if ".format(" in argument: + results.violations.append(ExpressionRuleViolation( + Rules.mako_close_before_format, expression + )) + if match.group() == "HTML(": + # remove expression strings wrapped in HTML() + for string in list(unwrapped_html_strings): + html_inner_start_index = template_inner_start_index + match.end() + html_inner_end_index = template_inner_start_index + close_paren_index + if html_inner_start_index <= string.start_index and string.end_index <= html_inner_end_index: + unwrapped_html_strings.remove(string) + + # check strings not wrapped in HTML() for '<' + for string in unwrapped_html_strings: + if '<' in string.string_inner: + results.violations.append(ExpressionRuleViolation( + Rules.mako_wrap_html, expression + )) + break + # check strings not wrapped in HTML() for HTML entities + if has_page_default: + for string in unwrapped_html_strings: + if re.search(r"&[#]?[a-zA-Z0-9]+;", string.string_inner): + results.violations.append(ExpressionRuleViolation( + Rules.mako_html_entities, expression + )) + break + + def _check_filters(self, mako_template, expression, context, has_page_default, results): + """ + Checks that the filters used in the given Mako expression are valid + for the given context. Adds violation to results if there is a problem. + + Arguments: + mako_template: The contents of the Mako template. + expression: A Mako Expression. + context: The context of the page in which the expression was found + (e.g. javascript, html). + has_page_default: True if the page is marked as default, False + otherwise. + results: A list of results into which violations will be added. + + """ + # Example: finds "| n, h}" when given "${x | n, h}" + filters_regex = re.compile(r'\|([.,\w\s]*)\}') + filters_match = filters_regex.search(expression.expression) + if filters_match is None: + if context == 'javascript': + results.violations.append(ExpressionRuleViolation( + Rules.mako_invalid_js_filter, expression + )) + return + + filters = filters_match.group(1).replace(" ", "").split(",") + if filters == ['n', 'decode.utf8']: + # {x | n, decode.utf8} is valid in any context + pass + elif context == 'html': + if filters == ['h']: + if has_page_default: + # suppress this violation if the page default hasn't been set, + # otherwise the template might get less safe + results.violations.append(ExpressionRuleViolation( + Rules.mako_unwanted_html_filter, expression + )) + else: + results.violations.append(ExpressionRuleViolation( + Rules.mako_invalid_html_filter, expression + )) + elif context == 'javascript': + self._check_js_expression_not_with_html(mako_template, expression, results) + if filters == ['n', 'dump_js_escaped_json']: + # {x | n, dump_js_escaped_json} is valid + pass + elif filters == ['n', 'js_escaped_string']: + # {x | n, js_escaped_string} is valid, if surrounded by quotes + self._check_js_string_expression_in_quotes(mako_template, expression, results) + else: + results.violations.append(ExpressionRuleViolation( + Rules.mako_invalid_js_filter, expression + )) + + def _check_js_string_expression_in_quotes(self, mako_template, expression, results): + """ + Checks that a Mako expression using js_escaped_string is surrounded by + quotes. + + Arguments: + mako_template: The contents of the Mako template. + expression: A Mako Expression. + results: A list of results into which violations will be added. + """ + parse_string = self._find_string_wrapping_expression(mako_template, expression) + if parse_string is None: + results.violations.append(ExpressionRuleViolation( + Rules.mako_js_missing_quotes, expression + )) + + def _check_js_expression_not_with_html(self, mako_template, expression, results): + """ + Checks that a Mako expression in a JavaScript context does not appear in + a string that also contains HTML. + + Arguments: + mako_template: The contents of the Mako template. + expression: A Mako Expression. + results: A list of results into which violations will be added. + """ + parse_string = self._find_string_wrapping_expression(mako_template, expression) + if parse_string is not None and re.search('[<>]', parse_string.string) is not None: + results.violations.append(ExpressionRuleViolation( + Rules.mako_js_html_string, expression + )) + + def _find_string_wrapping_expression(self, mako_template, expression): + """ + Finds the string wrapping the Mako expression if there is one. + + Arguments: + mako_template: The contents of the Mako template. + expression: A Mako Expression. + + Returns: + ParseString representing a scrubbed version of the wrapped string, + where the Mako expression was replaced with "${...}", if a wrapped + string was found. Otherwise, returns None if none found. + """ + lines = StringLines(mako_template) + start_index = lines.index_to_line_start_index(expression.start_index) + if expression.end_index is not None: + end_index = lines.index_to_line_end_index(expression.end_index) + else: + return None + # scrub out the actual expression so any code inside the expression + # doesn't interfere with rules applied to the surrounding code (i.e. + # checking JavaScript). + scrubbed_lines = "".join(( + mako_template[start_index:expression.start_index], + "${...}", + mako_template[expression.end_index:end_index] + )) + adjusted_start_index = expression.start_index - start_index + start_index = 0 + while True: + parse_string = ParseString(scrubbed_lines, start_index, len(scrubbed_lines)) + # check for validly parsed string + if 0 <= parse_string.start_index < parse_string.end_index: + # check if expression is contained in the given string + if parse_string.start_index < adjusted_start_index < parse_string.end_index: + return parse_string + else: + # move to check next string + start_index = parse_string.end_index + else: + break + return None + + def _get_contexts(self, mako_template): + """ + Returns a data structure that represents the indices at which the + template changes from HTML context to JavaScript and back. + + Return: + A list of dicts where each dict contains: + - index: the index of the context. + - type: the context type (e.g. 'html' or 'javascript'). + """ + contexts_re = re.compile(r""" + | # script tag start + | # script tag end + <%static:require_module.*?>| # require js script tag start + # require js script tag end""", re.VERBOSE | re.IGNORECASE) + media_type_re = re.compile(r"""type=['"].*?['"]""", re.IGNORECASE) + + contexts = [{'index': 0, 'type': 'html'}] + javascript_types = ['text/javascript', 'text/ecmascript', 'application/ecmascript', 'application/javascript'] + for context in contexts_re.finditer(mako_template): + match_string = context.group().lower() + if match_string.startswith("', - 'violations': 0, 'rule': None }, { 'template': '\n <%page args="section_data" expression_filter="h" /> ', - 'violations': 0, 'rule': None }, + { + 'template': '\n ## <%page expression_filter="h"/>', + 'rule': Rules.mako_missing_default + }, { 'template': '\n <%page expression_filter="h" /> ' '\n <%page args="section_data"/>', - 'violations': 1, 'rule': Rules.mako_multiple_page_tags }, + { + 'template': + '\n <%page expression_filter="h" /> ' + '\n ## <%page args="section_data"/>', + 'rule': None + }, { 'template': '\n <%page args="section_data" /> ', - 'violations': 1, 'rule': Rules.mako_missing_default }, { 'template': '\n <%page args="section_data"/> ', - 'violations': 1, 'rule': Rules.mako_missing_default }, { 'template': '\n', - 'violations': 1, 'rule': Rules.mako_missing_default }, ) @@ -125,16 +170,18 @@ class TestMakoTemplateLinter(TestLinter): linter._check_mako_file_is_safe(data['template'], results) - self.assertEqual(len(results.violations), data['violations']) - if data['violations'] > 0: + num_violations = 0 if data['rule'] is None else 1 + self.assertEqual(len(results.violations), num_violations) + if num_violations > 0: self.assertEqual(results.violations[0].rule, data['rule']) @data( {'expression': '${x}', 'rule': None}, {'expression': '${{unbalanced}', 'rule': Rules.mako_unparseable_expression}, {'expression': '${x | n}', 'rule': Rules.mako_invalid_html_filter}, - {'expression': '${x | n, unicode}', 'rule': None}, + {'expression': '${x | n, decode.utf8}', 'rule': None}, {'expression': '${x | h}', 'rule': Rules.mako_unwanted_html_filter}, + {'expression': ' ## ${commented_out | h}', 'rule': None}, {'expression': '${x | n, dump_js_escaped_json}', 'rule': Rules.mako_invalid_html_filter}, ) def test_check_mako_expressions_in_html(self, data): @@ -378,7 +425,7 @@ class TestMakoTemplateLinter(TestLinter): {'expression': '${x | n}', 'rule': Rules.mako_invalid_js_filter}, {'expression': '${x | h}', 'rule': Rules.mako_invalid_js_filter}, {'expression': '${x | n, dump_js_escaped_json}', 'rule': None}, - {'expression': '${x | n, unicode}', 'rule': None}, + {'expression': '${x | n, decode.utf8}', 'rule': None}, ) def test_check_mako_expressions_in_javascript(self, data): """ @@ -401,7 +448,7 @@ class TestMakoTemplateLinter(TestLinter): @data( {'expression': '${x}', 'rule': Rules.mako_invalid_js_filter}, - {'expression': '${x | n, js_escaped_string}', 'rule': None}, + {'expression': '"${x | n, js_escaped_string}"', 'rule': None}, ) def test_check_mako_expressions_in_require_js(self, data): """ @@ -478,6 +525,63 @@ class TestMakoTemplateLinter(TestLinter): self.assertEqual(results.violations[3].rule, Rules.mako_invalid_js_filter) self.assertEqual(results.violations[4].rule, Rules.mako_unwanted_html_filter) + def test_check_mako_expressions_javascript_strings(self): + """ + Test _check_mako_file_is_safe javascript string specific rules. + - mako_js_missing_quotes + - mako_js_html_string + """ + linter = MakoTemplateLinter() + results = FileResults('') + + mako_template = textwrap.dedent(""" + <%page expression_filter="h"/> + + """) + + linter._check_mako_file_is_safe(mako_template, results) + + self.assertEqual(len(results.violations), 3) + self.assertEqual(results.violations[0].rule, Rules.mako_js_missing_quotes) + self.assertEqual(results.violations[1].rule, Rules.mako_js_html_string) + self.assertEqual(results.violations[2].rule, Rules.mako_js_html_string) + + def test_check_javascript_in_mako_javascript_context(self): + """ + Test _check_mako_file_is_safe with JavaScript error in JavaScript + context. + """ + linter = MakoTemplateLinter() + results = FileResults('') + + mako_template = textwrap.dedent(""" + <%page expression_filter="h"/> + + """) + + linter._check_mako_file_is_safe(mako_template, results) + + self.assertEqual(len(results.violations), 1) + self.assertEqual(results.violations[0].rule, Rules.javascript_concat_html) + self.assertEqual(results.violations[0].start_line, 4) + @data( {'template': "\n${x | n}", 'parseable': True}, { @@ -536,10 +640,10 @@ class TestMakoTemplateLinter(TestLinter): expressions = linter._find_mako_expressions(data['template']) self.assertEqual(len(expressions), 1) - start_index = expressions[0]['start_index'] - end_index = expressions[0]['end_index'] + start_index = expressions[0].start_index + end_index = expressions[0].end_index self.assertEqual(data['template'][start_index:end_index], data['template'].strip()) - self.assertEqual(expressions[0]['expression'], data['template'].strip()) + self.assertEqual(expressions[0].expression, data['template'].strip()) @data( {'template': " ${{unparseable} ${}", 'start_index': 1}, @@ -553,8 +657,8 @@ class TestMakoTemplateLinter(TestLinter): expressions = linter._find_mako_expressions(data['template']) self.assertTrue(2 <= len(expressions)) - self.assertEqual(expressions[0]['start_index'], data['start_index']) - self.assertIsNone(expressions[0]['expression']) + self.assertEqual(expressions[0].start_index, data['start_index']) + self.assertIsNone(expressions[0].expression) @data( { @@ -577,6 +681,10 @@ class TestMakoTemplateLinter(TestLinter): 'template': r""" ${" \" \\"} """, 'result': {'start_index': 3, 'end_index': 11, 'quote_length': 1} }, + { + 'template': "${'broken string}", + 'result': {'start_index': 2, 'end_index': None, 'quote_length': None} + }, ) def test_parse_string(self, data): """ @@ -592,10 +700,11 @@ class TestMakoTemplateLinter(TestLinter): } self.assertDictEqual(string_dict, data['result']) - self.assertEqual(data['template'][parse_string.start_index:parse_string.end_index], parse_string.string) - start_index = parse_string.start_index + parse_string.quote_length - end_index = parse_string.end_index - parse_string.quote_length - self.assertEqual(data['template'][start_index:end_index], parse_string.string_inner) + if parse_string.end_index is not None: + self.assertEqual(data['template'][parse_string.start_index:parse_string.end_index], parse_string.string) + start_inner_index = parse_string.start_index + parse_string.quote_length + end_inner_index = parse_string.end_index - parse_string.quote_length + self.assertEqual(data['template'][start_inner_index:end_inner_index], parse_string.string_inner) @ddt @@ -750,21 +859,22 @@ class TestJavaScriptLinter(TestLinter): """ Test JavaScriptLinter """ - @data( {'template': 'var m = "Plain text " + message + "plain text"', 'rule': None}, {'template': 'var m = "檌檒濦 " + message + "plain text"', 'rule': None}, {'template': 'var m = "

" + message + "

"', 'rule': Rules.javascript_concat_html}, + {'template': ' // var m = "

" + commentedOutMessage + "

"', 'rule': None}, {'template': 'var m = "

" + message + "

"', 'rule': Rules.javascript_concat_html}, + {'template': 'var m = "

" + message + " broken string', 'rule': Rules.javascript_concat_html}, ) def test_concat_with_html(self, data): """ - Test _check_javascript_file_is_safe with concatenating strings and HTML + Test check_javascript_file_is_safe with concatenating strings and HTML """ linter = JavaScriptLinter() results = FileResults('') - linter._check_javascript_file_is_safe(data['template'], results) + linter.check_javascript_file_is_safe(data['template'], results) self._validate_data_rule(data, results) @data( @@ -789,12 +899,12 @@ class TestJavaScriptLinter(TestLinter): ) def test_jquery_append(self, data): """ - Test _check_javascript_file_is_safe with JQuery append() + Test check_javascript_file_is_safe with JQuery append() """ linter = JavaScriptLinter() results = FileResults('') - linter._check_javascript_file_is_safe(data['template'], results) + linter.check_javascript_file_is_safe(data['template'], results) self._validate_data_rule(data, results) @@ -810,18 +920,19 @@ class TestJavaScriptLinter(TestLinter): {'template': 'test.prepend($("

"))', 'rule': None}, {'template': 'test.prepend(HtmlUtils.ensureHtml(htmlSnippet).toString())', 'rule': None}, {'template': 'HtmlUtils.prepend($el, someHtml)', 'rule': None}, + {'template': 'test.prepend("broken string)', 'rule': Rules.javascript_jquery_prepend}, {'template': 'test.prepend("fail on concat" + test.render().el)', 'rule': Rules.javascript_jquery_prepend}, {'template': 'test.prepend("fail on concat" + testEl)', 'rule': Rules.javascript_jquery_prepend}, {'template': 'test.prepend(message)', 'rule': Rules.javascript_jquery_prepend}, ) def test_jquery_prepend(self, data): """ - Test _check_javascript_file_is_safe with JQuery prepend() + Test check_javascript_file_is_safe with JQuery prepend() """ linter = JavaScriptLinter() results = FileResults('') - linter._check_javascript_file_is_safe(data['template'], results) + linter.check_javascript_file_is_safe(data['template'], results) self._validate_data_rule(data, results) @@ -846,14 +957,14 @@ class TestJavaScriptLinter(TestLinter): ) def test_jquery_insertion(self, data): """ - Test _check_javascript_file_is_safe with JQuery insertion functions + Test check_javascript_file_is_safe with JQuery insertion functions other than append(), prepend() and html() that take content as an argument (e.g. before(), after()). """ linter = JavaScriptLinter() results = FileResults('') - linter._check_javascript_file_is_safe(data['template'], results) + linter.check_javascript_file_is_safe(data['template'], results) self._validate_data_rule(data, results) @@ -877,14 +988,14 @@ class TestJavaScriptLinter(TestLinter): ) def test_jquery_insert_to_target(self, data): """ - Test _check_javascript_file_is_safe with JQuery insert to target + Test check_javascript_file_is_safe with JQuery insert to target functions that take a target as an argument, like appendTo() and prependTo(). """ linter = JavaScriptLinter() results = FileResults('') - linter._check_javascript_file_is_safe(data['template'], results) + linter.check_javascript_file_is_safe(data['template'], results) self._validate_data_rule(data, results) @@ -897,18 +1008,18 @@ class TestJavaScriptLinter(TestLinter): {'template': 'test.html(HtmlUtils.ensureHtml(htmlSnippet).toString())', 'rule': None}, {'template': 'HtmlUtils.setHtml($el, someHtml)', 'rule': None}, {'template': 'test.html("any string")', 'rule': Rules.javascript_jquery_html}, + {'template': 'test.html("broken string)', 'rule': Rules.javascript_jquery_html}, {'template': 'test.html("檌檒濦")', 'rule': Rules.javascript_jquery_html}, {'template': 'test.html(anything)', 'rule': Rules.javascript_jquery_html}, ) def test_jquery_html(self, data): """ - Test _check_javascript_file_is_safe with JQuery html() + Test check_javascript_file_is_safe with JQuery html() """ linter = JavaScriptLinter() results = FileResults('') - linter._check_javascript_file_is_safe(data['template'], results) - + linter.check_javascript_file_is_safe(data['template'], results) self._validate_data_rule(data, results) @data( @@ -918,26 +1029,26 @@ class TestJavaScriptLinter(TestLinter): ) def test_javascript_interpolate(self, data): """ - Test _check_javascript_file_is_safe with interpolate() + Test check_javascript_file_is_safe with interpolate() """ linter = JavaScriptLinter() results = FileResults('') - linter._check_javascript_file_is_safe(data['template'], results) + linter.check_javascript_file_is_safe(data['template'], results) self._validate_data_rule(data, results) @data( - {'template': '_.escape()', 'rule': None}, - {'template': 'anything.escape()', 'rule': Rules.javascript_escape}, + {'template': '_.escape(message)', 'rule': None}, + {'template': 'anything.escape(message)', 'rule': Rules.javascript_escape}, ) def test_javascript_interpolate(self, data): """ - Test _check_javascript_file_is_safe with interpolate() + Test check_javascript_file_is_safe with interpolate() """ linter = JavaScriptLinter() results = FileResults('') - linter._check_javascript_file_is_safe(data['template'], results) + linter.check_javascript_file_is_safe(data['template'], results) self._validate_data_rule(data, results) From 8e93c69e6d88b05f0587d41afcb4d4fe8d4605e7 Mon Sep 17 00:00:00 2001 From: Mushtaq Ali Date: Thu, 21 Apr 2016 11:29:58 +0500 Subject: [PATCH 38/70] edx-ora2 release version 1.1.4 update --- requirements/edx/github.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/edx/github.txt b/requirements/edx/github.txt index bd90fbec23..f3e3147bbf 100644 --- a/requirements/edx/github.txt +++ b/requirements/edx/github.txt @@ -75,7 +75,7 @@ git+https://github.com/edx/XBlock.git@xblock-0.4.8#egg=XBlock==0.4.8 -e git+https://github.com/edx/event-tracking.git@0.2.1#egg=event-tracking==0.2.1 -e git+https://github.com/edx/django-splash.git@v0.2#egg=django-splash==0.2 -e git+https://github.com/edx/acid-block.git@e46f9cda8a03e121a00c7e347084d142d22ebfb7#egg=acid-xblock -git+https://github.com/edx/edx-ora2.git@1.1.3#egg=ora2==1.1.3 +git+https://github.com/edx/edx-ora2.git@1.1.4#egg=ora2==1.1.4 -e git+https://github.com/edx/edx-submissions.git@1.1.0#egg=edx-submissions==1.1.0 git+https://github.com/edx/ease.git@release-2015-07-14#egg=ease==0.1.3 git+https://github.com/edx/i18n-tools.git@v0.2#egg=i18n-tools==v0.2 From 2248bc6c9c0a6625f7feea57d02b4cb2edf463e5 Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Thu, 21 Apr 2016 10:30:10 +0000 Subject: [PATCH 39/70] Update translations (autogenerated message) --- cms/static/js/i18n/ar/djangojs.js | 25 - cms/static/js/i18n/es-419/djangojs.js | 25 - cms/static/js/i18n/fake2/djangojs.js | 21 + cms/static/js/i18n/fr/djangojs.js | 7 - cms/static/js/i18n/ko-kr/djangojs.js | 1 - cms/static/js/i18n/pt-br/djangojs.js | 25 - cms/static/js/i18n/ru/djangojs.js | 25 - cms/static/js/i18n/zh-cn/djangojs.js | 7 - conf/locale/ar/LC_MESSAGES/django.mo | Bin 653660 -> 650095 bytes conf/locale/ar/LC_MESSAGES/django.po | 818 ++++++++++++++++---- conf/locale/ar/LC_MESSAGES/djangojs.mo | Bin 220348 -> 216157 bytes conf/locale/ar/LC_MESSAGES/djangojs.po | 289 ++++--- conf/locale/eo/LC_MESSAGES/django.mo | Bin 1044385 -> 1044272 bytes conf/locale/eo/LC_MESSAGES/django.po | 72 +- conf/locale/es_419/LC_MESSAGES/django.mo | Bin 534137 -> 532014 bytes conf/locale/es_419/LC_MESSAGES/django.po | 834 +++++++++++++++++---- conf/locale/es_419/LC_MESSAGES/djangojs.mo | Bin 177452 -> 174106 bytes conf/locale/es_419/LC_MESSAGES/djangojs.po | 289 ++++--- conf/locale/fr/LC_MESSAGES/django.mo | Bin 211749 -> 209584 bytes conf/locale/fr/LC_MESSAGES/django.po | 797 +++++++++++++++++--- conf/locale/fr/LC_MESSAGES/djangojs.mo | Bin 110672 -> 109717 bytes conf/locale/fr/LC_MESSAGES/djangojs.po | 265 ++++--- conf/locale/he/LC_MESSAGES/django.mo | Bin 4286 -> 4286 bytes conf/locale/he/LC_MESSAGES/django.po | 765 ++++++++++++++++--- conf/locale/he/LC_MESSAGES/djangojs.mo | Bin 1511 -> 1511 bytes conf/locale/he/LC_MESSAGES/djangojs.po | 251 +++++-- conf/locale/hi/LC_MESSAGES/django.mo | Bin 116659 -> 114339 bytes conf/locale/hi/LC_MESSAGES/django.po | 788 ++++++++++++++++--- conf/locale/hi/LC_MESSAGES/djangojs.mo | Bin 33190 -> 33190 bytes conf/locale/hi/LC_MESSAGES/djangojs.po | 250 ++++-- conf/locale/ko_KR/LC_MESSAGES/django.mo | Bin 258830 -> 256707 bytes conf/locale/ko_KR/LC_MESSAGES/django.po | 787 ++++++++++++++++--- conf/locale/ko_KR/LC_MESSAGES/djangojs.mo | Bin 64526 -> 64225 bytes conf/locale/ko_KR/LC_MESSAGES/djangojs.po | 252 +++++-- conf/locale/pt_BR/LC_MESSAGES/django.mo | Bin 506671 -> 503665 bytes conf/locale/pt_BR/LC_MESSAGES/django.po | 820 ++++++++++++++++---- conf/locale/pt_BR/LC_MESSAGES/djangojs.mo | Bin 168242 -> 164712 bytes conf/locale/pt_BR/LC_MESSAGES/djangojs.po | 286 ++++--- conf/locale/rtl/LC_MESSAGES/django.mo | Bin 710570 -> 710487 bytes conf/locale/rtl/LC_MESSAGES/django.po | 62 +- conf/locale/ru/LC_MESSAGES/django.mo | Bin 683168 -> 679414 bytes conf/locale/ru/LC_MESSAGES/django.po | 821 ++++++++++++++++---- conf/locale/ru/LC_MESSAGES/djangojs.mo | Bin 232741 -> 228245 bytes conf/locale/ru/LC_MESSAGES/djangojs.po | 292 +++++--- conf/locale/zh_CN/LC_MESSAGES/django.mo | Bin 178858 -> 177450 bytes conf/locale/zh_CN/LC_MESSAGES/django.po | 782 ++++++++++++++++--- conf/locale/zh_CN/LC_MESSAGES/djangojs.mo | Bin 80453 -> 79501 bytes conf/locale/zh_CN/LC_MESSAGES/djangojs.po | 264 ++++--- lms/static/js/i18n/ar/djangojs.js | 25 - lms/static/js/i18n/es-419/djangojs.js | 25 - lms/static/js/i18n/fake2/djangojs.js | 21 + lms/static/js/i18n/fr/djangojs.js | 7 - lms/static/js/i18n/ko-kr/djangojs.js | 1 - lms/static/js/i18n/pt-br/djangojs.js | 25 - lms/static/js/i18n/ru/djangojs.js | 25 - lms/static/js/i18n/zh-cn/djangojs.js | 7 - 56 files changed, 7831 insertions(+), 2225 deletions(-) diff --git a/cms/static/js/i18n/ar/djangojs.js b/cms/static/js/i18n/ar/djangojs.js index aa8da85114..a367edc0c4 100644 --- a/cms/static/js/i18n/ar/djangojs.js +++ b/cms/static/js/i18n/ar/djangojs.js @@ -219,7 +219,6 @@ "<%= user %> has been successfully added to the exception list. Click Generate Exception Certificate below to send the certificate.": "\u0623\u064f\u064f\u0636\u064a\u0641 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 <%= user %> \u0628\u0646\u062c\u0627\u062d \u0625\u0644\u0649 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0633\u062a\u062b\u0646\u0627\u0621. \u0627\u0646\u0642\u0631 \u0639\u0644\u0649 \u2019\u0625\u0646\u0634\u0627\u0621 \u0634\u0647\u0627\u062f\u0629 \u0627\u0633\u062a\u062b\u0646\u0627\u0621\u2018 \u0623\u062f\u0646\u0627\u0647 \u0644\u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0634\u0647\u0627\u062f\u0629.", "": "", "%s": "%s", - "
  • Transcript will be displayed when ": "
  • \u0633\u064a\u064f\u0639\u0631\u0636 \u0646\u0635 \u0627\u0644\u0639\u0646\u0627\u0648\u064a\u0646 \u0627\u0644\u0641\u0631\u0639\u064a\u0651\u0629 \u0639\u0646\u062f\u0645\u0627", "A driver's license, passport, or government-issued ID with your name and photo.": "\u0631\u062e\u0635\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629\u060c \u0623\u0648 \u062c\u0648\u0627\u0632 \u0627\u0644\u0633\u0641\u0631\u060c \u0623\u0648 \u0628\u0637\u0627\u0642\u0629 \u0634\u062e\u0635\u064a\u0629 \u0635\u0627\u062f\u0631\u0629 \u0639\u0646 \u0627\u0644\u062d\u0643\u0648\u0645\u0629\u060c \u0628\u062d\u064a\u062b \u062a\u062d\u0645\u0644 \u0623\u064a \u0648\u0627\u062d\u062f\u0629 \u0645\u0646 \u0647\u0630\u0647 \u0627\u0644\u0648\u062b\u0627\u0626\u0642 \u0627\u0633\u0645\u0643 \u0648\u0635\u0648\u0631\u062a\u0643 ", "A driver's license, passport, or other government-issued ID with your name and photo": "\u0631\u062e\u0635\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629\u060c \u0623\u0648 \u062c\u0648\u0627\u0632 \u0627\u0644\u0633\u0641\u0631\u060c \u0623\u0648 \u0628\u0637\u0627\u0642\u0629 \u0634\u062e\u0635\u064a\u0629 \u0635\u0627\u062f\u0631\u0629 \u0639\u0646 \u0627\u0644\u062d\u0643\u0648\u0645\u0629\u060c \u0628\u062d\u064a\u062b \u062a\u062d\u0645\u0644 \u0623\u064a \u0648\u0627\u062d\u062f\u0629 \u0645\u0646 \u0647\u0630\u0647 \u0627\u0644\u0648\u062b\u0627\u0626\u0642 \u0627\u0633\u0645\u0643 \u0648\u0635\u0648\u0631\u062a\u0643 ", "A list of courses you have just enrolled in as a verified student": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0633\u0627\u0642\u0627\u062a \u0627\u0644\u062a\u064a \u0633\u062c\u0651\u0644\u062a \u0641\u064a\u0647\u0627 \u0644\u062a\u0648\u0651\u0643 \u0643\u0637\u0627\u0644\u0628 \u0645\u0648\u062b\u0651\u064e\u0642 ", @@ -238,7 +237,6 @@ "Actions": "\u0627\u0644\u0625\u062c\u0631\u0627\u0621\u0627\u062a", "Activate": "\u062a\u0641\u0639\u064a\u0644", "Activate Your Account": "\u0642\u0645 \u0628\u062a\u0641\u0639\u064a\u0644 \u062d\u0633\u0627\u0628\u0643 ", - "Activating an item in this group will spool the video to the corresponding time point. To skip transcript, go to previous item.": "\u0633\u064a\u0624\u062f\u0651\u064a \u062a\u0641\u0639\u064a\u0644 \u0623\u062d\u062f \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0641\u064a \u0647\u0630\u0647 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0625\u0644\u0649 \u062a\u062d\u0631\u064a\u0643 \u0627\u0644\u0641\u064a\u062f\u064a\u0648 \u0646\u062d\u0648 \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0632\u0645\u0646\u064a\u0629 \u0627\u0644\u0645\u0648\u0627\u0641\u0642\u0629. \u0648\u0644\u062a\u062e\u0637\u0651\u064a \u0627\u0644\u0646\u0635\u060c \u064a\u064f\u0631\u062c\u0649 \u0627\u0644\u0630\u0647\u0627\u0628 \u0625\u0644\u0649 \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u0633\u0627\u0628\u0642.", "Active Threads": "\u0627\u0644\u0645\u0648\u0627\u0636\u064a\u0639 \u0627\u0644\u0646\u0634\u0637\u0629", "Active Uploads": "\u0627\u0644\u062a\u062d\u0645\u064a\u0644\u0627\u062a \u0627\u0644\u0646\u0634\u0637\u0629", "Add": "\u0625\u0636\u0627\u0641\u0629", @@ -406,7 +404,6 @@ "Change My Email Address": "\u062a\u063a\u064a\u064a\u0631 \u0639\u0646\u0648\u0627\u0646 \u0628\u0631\u064a\u062f\u064a \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a", "Change image": "\u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u0635\u0648\u0631\u0629", "Change the settings for %(display_name)s": "\u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0640 %(display_name)s ", - "Chapter %s": "\u0627\u0644\u0641\u0635\u0644 %s", "Chapter Asset": "\u0645\u0627\u062f\u0629 \u0645\u0644\u062d\u0642\u0629 \u0628\u0641\u0635\u0644", "Chapter Name": "\u0627\u0633\u0645 \u0627\u0644\u0641\u0635\u0644", "Chapter information": "\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0639\u0646 \u0627\u0644\u0641\u0635\u0644", @@ -775,7 +772,6 @@ "General": "\u0639\u0627\u0645", "Generate": "\u0625\u0646\u0634\u0627\u0621", "Generate Exception Certificates": "\u0625\u0646\u0634\u0627\u0621 \u0634\u0647\u0627\u062f\u0627\u062a \u0627\u0633\u062a\u062b\u0646\u0627\u0626\u064a\u0629", - "Generate a Certificate for all ": "\u0625\u0646\u0634\u0627\u0621 \u0634\u0647\u0627\u062f\u0629 \u0644\u0644\u062c\u0645\u064a\u0639", "Generate a Certificate for all users on the Exception list": "\u0625\u0646\u0634\u0627\u0621 \u0634\u0647\u0627\u062f\u0629 \u0644\u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646 \u0627\u0644\u0645\u062f\u0631\u062c\u0629 \u0627\u0633\u0645\u0627\u0624\u0647\u0645 \u0639\u0644\u0649 \u0644\u0627\u0626\u062d\u0629 \u0627\u0644\u0627\u0633\u062a\u062b\u0646\u0627\u0621\u0627\u062a", "Generate the user's certificate": "\u0625\u0646\u0634\u0627\u0621 \u0634\u0647\u0627\u062f\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645", "Get Credit": "\u0627\u062d\u0635\u0644 \u0639\u0644\u0649 \u0645\u0627\u062f\u0651\u0629 \u062f\u0631\u0627\u0633\u064a\u0629", @@ -898,7 +894,6 @@ "Keywords": "\u0643\u0644\u0645\u0627\u062a \u0645\u0641\u062a\u0627\u062d\u064a\u0629", "LEARN MORE": "\u0627\u0639\u0631\u0641 \u0627\u0644\u0645\u0632\u064a\u062f", "Language": "\u0627\u0644\u0644\u063a\u0629", - "Language: Press the UP arrow key to enter the language menu, then use UP and DOWN arrow keys to navigate language options. Press ENTER to change to the selected language.": "\u0627\u0644\u0644\u063a\u0629: \u0627\u0644\u0636\u063a\u0637 \u0639\u0644\u0649 \u0632\u0631 \u0627\u0644\u0633\u0647\u0645 \"\u0623\u0639\u0644\u0649\" \u0644\u0644\u062f\u062e\u0648\u0644 \u0625\u0644\u0649 \u0642\u0627\u0626\u0645\u0629 \u0636\u0628\u0637 \u0627\u0644\u0644\u063a\u0629 \u0648\u0645\u0646 \u062b\u0645 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0632\u0631\u064a\u0651 \u0627\u0644\u0623\u0633\u0647\u0645 \"\u0623\u0639\u0644\u0649\" \u0648\"\u0623\u0633\u0641\u0644\" \u0644\u0644\u0627\u0646\u062a\u0642\u0627\u0644 \u0628\u064a\u0646 \u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u0644\u063a\u0627\u062a \u0627\u0644\u0645\u062e\u062a\u0644\u0641\u0629 \u0648\u0645\u0646 \u062b\u0645 \u0627\u0644\u0636\u063a\u0637 \u0639\u0644\u0649 \u0632\u0631 \"Enter\" \u0644\u0627\u0639\u062a\u0645\u0627\u062f \u0627\u0644\u0644\u063a\u0629 \u0627\u0644\u0645\u062e\u062a\u0627\u0631\u0629.", "Large": "\u0643\u0628\u064a\u0631 ", "Last Activity %(date)s": "\u0627\u0644\u0646\u0634\u0627\u0637 \u0627\u0644\u0623\u062e\u064a\u0631 \u0628\u062a\u0627\u0631\u064a\u062e %(date)s", "Last Edited:": "\u0622\u062e\u0631 \u0645\u0631\u0627\u062c\u0639\u0629 \u0641\u064a:", @@ -994,7 +989,6 @@ "Name of the signatory": "\u0627\u0633\u0645 \u0627\u0644\u0645\u0648\u0642\u0651\u0650\u0639", "Name or short description of the configuration": "\u0627\u0633\u0645 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0623\u0648 \u0648\u0635\u0641 \u0645\u0648\u062c\u064e\u0632 \u0639\u0646\u0647\u0627", "Never published": "\u0644\u0645 \u062a\u064f\u0646\u0634\u064e\u0631 \u0642\u0637\u0651", - "New": "\u062c\u062f\u064a\u062f", "New %(component_type)s": "\u0625\u0636\u0627\u0641\u0629 %(component_type)s", "New %(item_type)s": "%(item_type)s \u062c\u062f\u064a\u062f", "New Address": "\u0639\u0646\u0648\u0627\u0646 \u062c\u062f\u064a\u062f", @@ -1045,13 +1039,10 @@ "Numbered list": "\u0644\u0627\u0626\u062d\u0629 \u0645\u0631\u0642\u0651\u0645\u0629", "OK": "\u0645\u0648\u0627\u0641\u0642", "Ok": "\u0645\u0648\u0627\u0641\u0642", - "Once in position, use the camera button %(icon)s to capture your ID": "\u062d\u0627\u0644\u0645\u0627 \u062a\u0636\u0628\u0637 \u0648\u0636\u0639\u064a\u0629 \u0628\u0637\u0627\u0642\u062a\u0643 \u0627\u0644\u0634\u062e\u0635\u064a\u0629\u060c \u0627\u0633\u062a\u062e\u062f\u0645 \u0632\u0631 \u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0627 %(icon)s \u0644\u0627\u0644\u062a\u0642\u0627\u0637 \u0635\u0648\u0631\u0629 \u0644\u0647\u0627. ", - "Once in position, use the camera button %(icon)s to capture your photo": "\u062d\u0627\u0644\u0645\u0627 \u062a\u062a\u0651\u062e\u0630 \u0648\u0636\u0639\u064a\u0629 \u0627\u0644\u062c\u0644\u0648\u0633 \u0627\u0644\u0645\u0646\u0627\u0633\u0628\u0629\u060c \u064a\u064f\u0631\u062c\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0632\u0631 \u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0627 %(icon)s \u0644\u062a\u0644\u062a\u0642\u0637 \u0635\u0648\u0631\u0643. ", "Only <%= fileTypes %> files can be uploaded. Please select a file ending in <%= fileExtensions %> to upload.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u062d\u0645\u064a\u0644 \u0633\u0648\u0649 \u0627\u0644\u0645\u0644\u0641\u0651\u0627\u062a <%= fileTypes %>. \u0644\u0630\u0627 \u064a\u064f\u0631\u062c\u0649 \u0627\u062e\u062a\u064a\u0627\u0631 \u0645\u0644\u0641 \u064a\u0646\u062a\u0647\u064a \u0628\u0640 <%= fileExtensions %> \u0644\u062a\u062d\u0645\u064a\u0644\u0647. ", "Only properly formatted .csv files will be accepted.": "\u0644\u0646 \u062a\u064f\u0642\u0628\u0644 \u0633\u0648\u0649 \u0645\u0644\u0641\u0651\u0627\u062a .csv \u0627\u0644\u0645\u0646\u0633\u0651\u0642\u0629 \u062a\u0646\u0633\u064a\u0642\u064b\u0627 \u0635\u062d\u064a\u062d\u064b\u0627. ", "Open": "\u0641\u062a\u062d", "Open Calculator": "\u0641\u062a\u062d \u0627\u0644\u0622\u0644\u0629 \u0627\u0644\u062d\u0627\u0633\u0628\u0629 ", - "Open language menu": "\u0641\u062a\u062d \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0644\u063a\u0627\u062a \u0627\u0644\u0645\u062a\u0648\u0641\u0631\u0629", "Open/download this file": "\u0641\u062a\u062d/\u062a\u0646\u0632\u064a\u0644 \u0647\u0630\u0627 \u0627\u0644\u0645\u0644\u0641\u0651", "OpenAssessment Save Error": "\u0646\u0623\u0633\u0641 \u0644\u062d\u062f\u0648\u062b \u062e\u0637\u0623 \u0641\u064a \u062d\u0641\u0638 \u0627\u0644\u062a\u0642\u064a\u064a\u0645 \u0627\u0644\u0645\u0641\u062a\u0648\u062d.", "Optional Characteristics": "\u0627\u0644\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0627\u062e\u062a\u064a\u0627\u0631\u064a\u0629", @@ -1063,7 +1054,6 @@ "Organization of the signatory": "\u0645\u0624\u0633\u0651\u0633\u0629 \u0627\u0644\u0645\u0648\u0642\u0651\u0650\u0639", "Other": "\u063a\u064a\u0631 \u0630\u0644\u0643", "Page break": "\u0641\u0627\u0635\u0644 \u0627\u0644\u0635\u0641\u062d\u0629", - "Page number": "\u0631\u0642\u0645 \u0627\u0644\u0635\u0641\u062d\u0629", "Paragraph": "\u0641\u0642\u0631\u0629", "Password": "\u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631", "Password Reset Email Sent": "\u0644\u0642\u062f \u0623\u0631\u0633\u0644\u0646\u0627 \u0628\u0631\u064a\u062f\u0627\u064b \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a\u0627\u064b \u0644\u0643 \u0644\u062a\u063a\u064a\u064a\u0631 \u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631.", @@ -1146,7 +1136,6 @@ "Proctored": "\u0645\u064f\u0631\u0627\u0642\u0628", "Proctored Exam": "\u0627\u0645\u062a\u062d\u0627\u0646 \u0645\u0631\u0627\u0642\u064e\u0628", "Proctored exams are timed and they record video of each learner taking the exam. The videos are then reviewed to ensure that learners follow all examination rules.": "\u0627\u0644\u0627\u0645\u062a\u062d\u0627\u0646\u0627\u062a \u0627\u0644\u0645\u0631\u0627\u0642\u0628\u0629 \u0645\u062d\u062f\u0651\u062f\u0629 \u0627\u0644\u062a\u0648\u0642\u064a\u062a\u060c \u0648\u0633\u064a\u064f\u0633\u062c\u0651\u0644 \u0645\u0642\u0637\u0639 \u0641\u064a\u062f\u064a\u0648 \u0644\u0643\u0644 \u0645\u062a\u0639\u0644\u0651\u0645 \u064a\u064f\u062c\u0631\u064a \u0627\u0645\u062a\u062d\u0627\u0646\u064b\u0627 \u0644\u062a\u064f\u0631\u0627\u062c\u0639 \u0645\u0642\u0627\u0637\u0639 \u0627\u0644\u0641\u064a\u062f\u064a\u0648 \u0647\u0630\u0647 \u0628\u0639\u062f \u0630\u0644\u0643 \u0628\u0647\u062f\u0641 \u0636\u0645\u0627\u0646 \u0627\u0644\u062a\u0632\u0627\u0645 \u0627\u0644\u0645\u062a\u0639\u0644\u0651\u0645\u064a\u0646 \u0628\u062c\u0645\u064a\u0639 \u0627\u0644\u0642\u0648\u0627\u0639\u062f \u0627\u0644\u0627\u0645\u062a\u062d\u0627\u0646\u064a\u0629.", - "Professional Certificate for %(courseName)s": "\u0634\u0647\u0627\u062f\u0629 \u0645\u0647\u0646\u064a\u0651\u0629 \u0644\u0644\u0645\u0633\u0627\u0642 %(courseName)s", "Professional Education": "\u0627\u0644\u062a\u0639\u0644\u064a\u0645 \u0627\u0644\u0645\u0647\u0646\u064a", "Professional Education Verified Certificate": "\u0634\u0647\u0627\u062f\u0629 \u0645\u0648\u062b\u0651\u0642\u0629 \u0644\u0644\u062a\u0639\u0644\u064a\u0645 \u0627\u0644\u0645\u0647\u0646\u064a", "Profile Image": "\u0635\u0648\u0631\u0629 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0634\u062e\u0635\u064a", @@ -1413,9 +1402,7 @@ "Textbook name is required": "\u0627\u0633\u0645 \u0627\u0644\u0643\u062a\u0627\u0628 \u0645\u0637\u0644\u0648\u0628", "Thank you for submitting your financial assistance application for {course_name}! You can expect a response in 2-4 business days.": "\u0646\u0634\u0643\u0631\u0643 \u0644\u062a\u0642\u062f\u064a\u0645\u0643 \u0637\u0644\u0628 \u062f\u0639\u0645 \u0645\u0627\u0644\u064a \u0644\u0644\u0645\u0633\u0627\u0642 {course_name}! \u064a\u0645\u0643\u0646\u0643 \u0623\u0646 \u062a\u062a\u0648\u0642\u0639 \u0627\u0633\u062a\u0644\u0627\u0645 \u0627\u0644\u0631\u062f\u0651 \u062e\u0644\u0627\u0644 2-4 \u0623\u064a\u0627\u0645 \u0639\u0645\u0644.", "Thank you for submitting your photos. We will review them shortly. You can now sign up for any %(platformName)s course that offers verified certificates. Verification is good for one year. After one year, you must submit photos for verification again.": "\u0634\u0643\u0631\u064b\u0627 \u0644\u0643 \u0639\u0644\u0649 \u062a\u0642\u062f\u064a\u0645 \u0635\u0648\u0631\u0643. \u0633\u0646\u0631\u0627\u062c\u0639\u0647\u0627 \u0642\u0631\u064a\u0628\u064b\u0627. \u0648\u064a\u0645\u0643\u0646\u0643 \u0627\u0644\u0622\u0646 \u062a\u0633\u062c\u064a\u0644 \u0639\u0636\u0648\u064a\u062a\u0643 \u0641\u064a \u0623\u064a\u064b \u0645\u0646 \u0645\u0633\u0627\u0642\u0627\u062a %(platformName)s \u0627\u0644\u062a\u064a \u062a\u0645\u0646\u062d \u0634\u0647\u0627\u062f\u0627\u062a \u0645\u0648\u062b\u0651\u0651\u064e\u0642\u0629. \u0648\u0628\u064a\u0646\u0645\u0627 \u064a\u0633\u0631\u064a \u0645\u0641\u0639\u0648\u0644 \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u062a\u062d\u0642\u0651\u0642 \u0644\u0645\u062f\u0651\u0629 \u0639\u0627\u0645\u060c \u064a\u062c\u0628 \u0623\u0646 \u062a\u0642\u062f\u0651\u0645 \u0627\u0644\u0635\u0648\u0631 \u0644\u0644\u062a\u062d\u0642\u0651\u0642 \u0645\u0646\u0647\u0627 \u0645\u062c\u062f\u0651\u062f\u064b\u0627 \u0628\u0639\u062f \u0627\u0646\u0642\u0636\u0627\u0621 \u0627\u0644\u0639\u0627\u0645. ", - "Thank you! We have received your payment for %(courseName)s.": "\u0634\u0643\u0631\u064b\u0627 \u062c\u0632\u064a\u0644\u064b\u0627! \u0644\u0642\u062f \u062a\u0644\u0642\u0651\u064a\u0646\u0627 \u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0630\u064a \u0633\u0627\u0647\u0645\u062a \u0628\u0647 \u0641\u064a %(courseName)s", "Thank you! We have received your payment for %(course_name)s.": "\u0634\u0643\u0631\u064b\u0627 \u062c\u0632\u064a\u0644\u064b\u0627! \u0644\u0642\u062f \u0627\u0633\u062a\u0644\u0645\u0646\u0627 \u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0630\u064a \u0633\u062f\u062f\u062a\u0647 \u0644\u0642\u0627\u0621 \u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0629 \u0641\u064a %(course_name)s", - "Thanks for returning to verify your ID in: %(courseName)s": "\u0634\u0643\u0631\u064b\u0627 \u0644\u0643 \u0639\u0644\u0649 \u0627\u0644\u0639\u0648\u062f\u0629 \u0644\u062a\u0623\u0643\u064a\u062f \u0647\u0648\u064a\u0651\u062a\u0643 \u0641\u064a: %(courseName)s", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u064a\u0628\u062f\u0648 \u0623\u0646\u0651 \u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0630\u064a \u0623\u062f\u062e\u0644\u062a\u0647 \u0639\u0628\u0627\u0631\u0629 \u0639\u0646 \u0639\u0646\u0648\u0627\u0646 \u0628\u0631\u064a\u062f \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a\u060c \u0647\u0644 \u062a\u0631\u064a\u062f \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0628\u0627\u062f\u0626\u0629 \u2019\u0625\u0631\u0633\u0627\u0644 \u0625\u0644\u0649:\u2018 \u0627\u0644\u0644\u0627\u0632\u0645\u0629\u061f", "The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "\u064a\u0628\u062f\u0648 \u0623\u0646 \u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0630\u064a \u0623\u062f\u062e\u0644\u062a\u0647 \u0639\u0628\u0627\u0631\u0629 \u0639\u0646 \u0631\u0627\u0628\u0637 \u062e\u0627\u0631\u062c\u064a\u060c \u0647\u0644 \u062a\u0631\u064a\u062f \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0628\u0627\u062f\u0626\u0629 http:// \u0627\u0644\u0644\u0627\u0632\u0645\u0629\u061f", "The certificate for this learner has been re-validated and the system is re-running the grade for this learner.": "\u062c\u0631\u062a \u0625\u0639\u0627\u062f\u0629 \u062a\u0648\u062b\u064a\u0642 \u0634\u0647\u0627\u062f\u0629 \u0647\u0630\u0627 \u0627\u0644\u0645\u062a\u0639\u0644\u0651\u0645 \u0648\u064a\u0639\u0645\u0644 \u0627\u0644\u0646\u0638\u0627\u0645 \u0639\u0644\u0649 \u0625\u0639\u0627\u062f\u0629 \u0639\u0631\u0636 \u0639\u0644\u0627\u0645\u062a\u0647 \u0627\u0644\u0645\u0645\u0646\u0648\u062d\u0629.", @@ -1520,7 +1507,6 @@ "This content group is not in use. Add a content group to any unit from the {linkStart}Course Outline{linkEnd}.": "\u0625\u0646\u0651 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u062d\u062a\u0648\u0649 \u0647\u0630\u0647 \u0644\u064a\u0633\u062a \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645. \u064a\u064f\u0631\u062c\u0649 \u0625\u0636\u0627\u0641\u0629 \u0645\u062c\u0645\u0648\u0639\u0629 \u0645\u062d\u062a\u0648\u0649 \u0625\u0644\u0649 \u0623\u064a \u0648\u062d\u062f\u0629 \u0645\u0646 \u062e\u0644\u0627\u0644 {linkStart}\u0646\u0628\u0630\u0629 \u0639\u0646 \u0627\u0644\u0645\u0633\u0627\u0642{linkEnd}.", "This content group is used in one or more units.": "\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u062d\u062a\u0648\u0649 \u0647\u0630\u0647 \u0645\u0633\u062a\u062e\u062f\u0645\u0629 \u0641\u064a \u0648\u062d\u062f\u0629 \u0648\u0627\u062d\u062f\u0629 \u0623\u0648 \u0623\u0643\u062b\u0631.", "This content group is used in:": "\u062a\u064f\u0633\u062a\u062e\u062f\u064e\u0645 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u062d\u062a\u0648\u0649 \u0647\u0630\u0647 \u0641\u064a:", - "This edX learner is currently sharing a limited profile.": "\u064a\u064f\u0634\u0627\u0631\u0643 \u062d\u0627\u0644\u064a\u064b\u0651\u0627 \u0647\u0630\u0627 \u0627\u0644\u0637\u0627\u0644\u0628 \u0644\u062f\u0649 edX \u0645\u0644\u0641\u0651\u064b\u0627 \u0634\u062e\u0635\u064a\u0651\u064b\u0627 \u0645\u062d\u062f\u0648\u062f\u064b\u0627.", "This image is for decorative purposes only and does not require a description.": "\u0627\u0633\u062a\u064f\u062e\u062f\u0645\u062a \u0647\u0630\u0647 \u0627\u0644\u0635\u0648\u0631\u0629 \u0644\u0623\u0647\u062f\u0627\u0641 \u062a\u0632\u064a\u0646\u064a\u0629 \u0641\u0642\u0637 \u0648\u0644\u0627 \u062a\u062a\u0637\u0644\u0651\u0628 \u062a\u0648\u0635\u064a\u0641\u064b\u0627.", "This is the Description of the Group Configuration": "\u0625\u0646\u0647 \u0648\u0635\u0641 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629", "This is the Name of the Group Configuration": "\u0625\u0646\u0647 \u0627\u0633\u0645 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629", @@ -1558,7 +1544,6 @@ "To receive credit on a problem, you must click \"Check\" or \"Final Check\" on it before you select \"End My Exam\".": "\u064a\u062c\u0628 \u0627\u0644\u0646\u0642\u0631 \u0639\u0644\u0649 \u2019\u0645\u0631\u0627\u062c\u0639\u0629\u2018 \u0623\u0648 \u2019\u0645\u0631\u0627\u062c\u0639\u0629 \u0646\u0647\u0627\u0626\u064a\u0629\u2018 \u0639\u0644\u0649 \u0627\u0644\u0645\u0627\u062f\u0629 \u0627\u0644\u062f\u0631\u0627\u0633\u064a\u0629 \u0642\u0628\u0644 \u0627\u062e\u062a\u064a\u0627\u0631 \u2019\u0623\u0646\u0647\u064a \u0627\u0645\u062a\u062d\u0627\u0646\u064a\u2018 \u0644\u062a\u0644\u0642\u064a \u0645\u0627\u062f\u0629 \u062f\u0631\u0627\u0633\u064a\u0629 \u0644\u0628\u0631\u0646\u0627\u0645\u062c \u0645\u0639\u064a\u0651\u0646.", "To review student cohort assignments or see the results of uploading a CSV file, download course profile information or cohort results on {link_start} the Data Download page. {link_end}": "\u0644\u0645\u0631\u0627\u062c\u0639\u0629 \u0627\u0644\u0648\u0627\u062c\u0628\u0627\u062a \u0627\u0644\u0645\u0633\u0646\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0637\u0644\u0651\u0627\u0628 \u0641\u064a \u0643\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0623\u0648 \u0631\u0624\u064a\u0629 \u0646\u062a\u0627\u0626\u062c \u062a\u062d\u0645\u064a\u0644 \u0645\u0644\u0641 \u2019CSV\u2018\u060c \u064a\u064f\u0631\u062c\u0649 \u062a\u0646\u0632\u064a\u0644 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0645\u0644\u0641\u0651 \u0627\u0644\u0645\u0633\u0627\u0642 \u0623\u0648 \u0646\u062a\u0627\u0626\u062c \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0639\u0646 \u0637\u0631\u064a\u0642 {link_start} \u0635\u0641\u062d\u0629 \u062a\u0646\u0632\u064a\u0644 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a. {link_end}", "To take a successful photo, make sure that:": "\u0644\u0627\u0644\u062a\u0642\u0627\u0637 \u0635\u0648\u0631\u0629 \u0646\u0627\u062c\u062d\u0629\u060c \u064a\u064f\u0631\u062c\u0649 \u0627\u0644\u062a\u0623\u0643\u0651\u062f \u0645\u0645\u0651\u0627 \u064a\u0644\u064a:", - "To use the current photo, select the camera button %(icon)s. To take another photo, select the retake button %(icon)s.": "\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629\u060c \u064a\u064f\u0631\u062c\u0649 \u0627\u062e\u062a\u064a\u0627\u0631 \u0632\u0631\u0651 \u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0627 %(icon)s. \u0648\u0644\u0627\u0644\u062a\u0642\u0627\u0637 \u0635\u0648\u0631\u0629 \u0623\u062e\u0631\u0649\u060c \u064a\u064f\u0631\u062c\u0649 \u0627\u062e\u062a\u064a\u0627\u0631 \u0632\u0631\u0651 \u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u062a\u0635\u0648\u064a\u0631 %(icon)s.", "To verify your identity, you need a webcam and a government-issued photo ID.": "\u0644\u062a\u0623\u0643\u064a\u062f \u0635\u062d\u0651\u0629 \u0647\u0648\u064a\u0651\u062a\u0643\u060c \u0623\u0646\u062a \u0628\u062d\u0627\u062c\u0629 \u0644\u0643\u0627\u0645\u064a\u0631\u0627 \u0648\u0628\u0637\u0627\u0642\u0629 \u0647\u0648\u064a\u0651\u0629 \u062d\u0643\u0648\u0645\u064a\u0629 \u062a\u062d\u0645\u0644 \u0635\u0648\u0631\u0629 \u0634\u062e\u0635\u064a\u0651\u0629.", "Toggle Notifications Setting": "\u062a\u0628\u062f\u064a\u0644 \u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0625\u0634\u0639\u0627\u0631\u0627\u062a ", "Tools": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a", @@ -1570,7 +1555,6 @@ "Total Number": "\u0627\u0644\u0639\u062f\u062f \u0627\u0644\u0625\u062c\u0645\u0627\u0644\u064a", "Try the transaction again in a few minutes.": "\u0627\u0644\u0631\u062c\u0627\u0621 \u0645\u0639\u0627\u0648\u062f\u0629 \u0637\u0644\u0628 \u0627\u0644\u0639\u0645\u0644\u064a\u0629 \u0645\u062c\u062f\u0651\u062f\u064b\u0627 \u0628\u0639\u062f \u0628\u0636\u0639 \u062f\u0642\u0627\u0626\u0642.", "Try using a different browser, such as Google Chrome.": "\u064a\u064f\u0631\u062c\u0649 \u0645\u062d\u0627\u0648\u0644\u0629 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0645\u062a\u0635\u0641\u0651\u062d \u0622\u062e\u0631\u060c \u0645\u062b\u0644 \u063a\u0648\u063a\u0644 \u0643\u0631\u0648\u0645.", - "Turn off transcript": "\u0625\u062e\u0641\u0627\u0621 \u0646\u0635 \u0627\u0644\u0643\u0644\u0627\u0645 \u0627\u0644\u0645\u062f\u0648\u0651\u0646", "Turn off transcripts": "\u0625\u062e\u0641\u0627\u0621 \u0627\u0644\u0646\u0635", "Turn on closed captioning": "\u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u0639\u0646\u0627\u0648\u064a\u0646 \u0627\u0644\u0641\u0631\u0639\u064a\u0629 \u0627\u0644\u0645\u063a\u0644\u0642\u0629", "Turn on transcripts": "\u0639\u0631\u0636 \u0646\u0635 \u0627\u0644\u0643\u0644\u0627\u0645 \u0627\u0644\u0645\u062f\u0648\u0651\u0646", @@ -1608,7 +1592,6 @@ "Updating Tags": "\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0634\u064e\u0627\u0631\u0627\u062a", "Updating with latest library content": "\u062c\u0627\u0631\u064a \u0627\u0644\u062a\u062d\u062f\u064a\u062b \u0645\u0639 \u0645\u0633\u062a\u062c\u062f\u0651\u0627\u062a \u0645\u062d\u062a\u0648\u0649 \u0627\u0644\u0645\u0643\u062a\u0628\u0629", "Upgrade Deadline": "\u0627\u0644\u0645\u0648\u0639\u062f \u0627\u0644\u0646\u0647\u0627\u0626\u064a \u0644\u0644\u062a\u062d\u062f\u064a\u062b ", - "Upgrade to a Verified Certificate for %(courseName)s": "\u0642\u0645 \u0628\u0627\u0644\u062a\u0631\u0642\u064a\u0629 \u0644\u062a\u062d\u0635\u0644 \u0639\u0644\u0649 \u0634\u0647\u0627\u062f\u0629 \u0645\u0648\u062b\u0651\u0642\u0629 \u0644\u0644\u0645\u0633\u0627\u0642 %(courseName)s", "Upload": "\u062a\u062d\u0645\u064a\u0644", "Upload File": "\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0644\u0641", "Upload File and Assign Students": "\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0644\u0641 \u0648\u0625\u0633\u0646\u0627\u062f \u0627\u0644\u0648\u0627\u062c\u0628\u0627\u062a \u0625\u0644\u0649 \u0627\u0644\u0637\u0644\u0651\u0627\u0628", @@ -1667,7 +1650,6 @@ "Verification Deadline": "\u0627\u0644\u0645\u0648\u0639\u062f \u0627\u0644\u0646\u0647\u0627\u0626\u064a \u0644\u0644\u062a\u062d\u0642\u0651\u0642", "Verification checkpoint to be completed": "\u064a\u062a\u0648\u062c\u0651\u0628 \u0625\u062a\u0645\u0627\u0645 \u0646\u0642\u0637\u0629 \u0627\u0644\u0627\u062e\u062a\u0628\u0627\u0631 \u0627\u0644\u062e\u0627\u0635\u0651\u0629 \u0628\u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u062a\u062d\u0642\u0651\u0642", "Verified Certificate": "\u0627\u0644\u0634\u0647\u0627\u062f\u0629 \u0627\u0644\u0645\u0648\u062b\u0651\u0642\u0629", - "Verified Certificate for %(courseName)s": "\u0634\u0647\u0627\u062f\u0629 \u0645\u0648\u062b\u0642\u0629 \u0644\u0644\u0645\u0633\u0627\u0642 %(courseName)s", "Verified Certificate upgrade": "\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0634\u0647\u0627\u062f\u0629 \u0627\u0644\u0645\u0648\u062b\u0642\u0629", "Verified Status": "\u062d\u0627\u0644\u0629 \u062c\u0631\u0649 \u0627\u0644\u062a\u062d\u0642\u0651\u0642 \u0645\u0646\u0647\u0627", "Verified mode price": "\u0633\u0639\u0631 \u0648\u0636\u0639 \u2019\u0634\u0647\u0627\u062f\u0629 \u0645\u0648\u062b\u0651\u0642\u0629\u2018", @@ -1748,7 +1730,6 @@ "What does %(platformName)s do with this photo?": "\u0645\u0627 \u0627\u0644\u0630\u064a \u062a\u0641\u0639\u0644\u0647 %(platformName)s \u0628\u0647\u0630\u0647 \u0627\u0644\u0635\u0648\u0631\u0629\u061f", "What does this mean?": "\u0645\u0627\u0630\u0627 \u064a\u0639\u0646\u064a \u0647\u0630\u0627\u061f", "When you click \"Reset Password\", a message will be sent to your email address. Click the link in the message to reset your password.": "\u0639\u0646\u062f\u0645\u0627 \u062a\u0646\u0642\u0631 \u0639\u0644\u0649 \"\u0625\u0639\u0627\u062f\u0629 \u0636\u0628\u0637 \u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631\"\u060c \u0633\u062a\u0635\u0644 \u0631\u0633\u0627\u0644\u0629 \u0644\u0628\u0631\u064a\u062f\u0643 \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a. \u064a\u064f\u0631\u062c\u0649 \u0639\u0646\u062f\u0647\u0627 \u0627\u0644\u0646\u0642\u0631 \u0639\u0644\u0649 \u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0645\u0648\u062c\u0648\u062f \u0641\u064a \u0627\u0644\u0631\u0633\u0627\u0644\u0629 \u0644\u062a\u063a\u064a\u0651\u0631\u0647\u0627.", - "When your face is in position, use the camera button %(icon)s below to take your photo.": "\u062d\u0627\u0644\u0645\u0627 \u062a\u0636\u0628\u0637 \u0648\u0636\u0639\u064a\u0629 \u062c\u0644\u0648\u0633\u0643 \u0648\u0648\u062c\u0647\u0643\u060c \u064a\u064f\u0631\u062c\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0632\u0631\u0651 \u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0627 %(icon)s \u0623\u062f\u0646\u0627\u0647 \u0644\u0627\u0644\u062a\u0642\u0627\u0637 \u0635\u0648\u0631\u062a\u0643. ", "Which timed transcript would you like to use?": "\u0645\u0627 \u0647\u0648 \u0627\u0644\u0646\u0635 \u0645\u062d\u062f\u0651\u064e\u062f \u0627\u0644\u062a\u0648\u0642\u064a\u062a \u0627\u0644\u0630\u064a \u062a\u0631\u063a\u0628 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u061f", "Whole words": "\u0643\u0644\u0645\u0627\u062a \u0643\u0627\u0645\u0644\u0629 ", "Why does %(platformName)s need my photo?": "\u0644\u0645\u0627\u0630\u0627 \u062a\u062d\u062a\u0627\u062c %(platformName)s \u0625\u0644\u0649 \u0635\u0648\u0631\u062a\u064a\u061f", @@ -1766,11 +1747,8 @@ "You are about to send an email titled '<%= subject %>' to everyone who is staff or instructor on this course. Is this OK?": "\u0623\u0646\u062a \u0639\u0644\u0649 \u0648\u0634\u0643 \u0625\u0631\u0633\u0627\u0644 \u0631\u0633\u0627\u0644\u0629 \u0628\u0631\u064a\u062f \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0628\u0639\u0646\u0648\u0627\u0646 \u2019<%= subject %>\u2018 \u0625\u0644\u0649 \u0643\u0644\u0651 \u0645\u0646 \u0647\u0648 \u0623\u0633\u062a\u0627\u0630 \u0641\u064a \u0647\u0630\u0627 \u0627\u0644\u0645\u0633\u0627\u0642 \u0623\u0648 \u0641\u0631\u062f \u0641\u064a \u0641\u0631\u064a\u0642 \u0639\u0645\u0644\u0647. \u0647\u0644 \u0623\u0646\u062a \u0648\u0627\u062b\u0642 \u0645\u0646 \u0647\u0630\u0627\u061f", "You are about to send an email titled '<%= subject %>' to yourself. Is this OK?": "\u0623\u0646\u062a \u0639\u0644\u0649 \u0648\u0634\u0643 \u0625\u0631\u0633\u0627\u0644 \u0631\u0633\u0627\u0644\u0629 \u0628\u0631\u064a\u062f \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0628\u0639\u0646\u0648\u0627\u0646 \u2019<%= subject %>\u2018 \u0625\u0644\u0649 \u0646\u0641\u0633\u0643. \u0647\u0644 \u0623\u0646\u062a \u0648\u0627\u062b\u0642 \u0645\u0646 \u0647\u0630\u0627\u061f", "You are currently sharing a limited profile.": "\u0625\u0646\u0651\u0643 \u062d\u0627\u0644\u064a\u064b\u0651\u0627 \u062a\u0634\u0627\u0631\u0643 \u0645\u0644\u0641\u0651\u064b\u0627 \u0634\u062e\u0635\u064a\u0651\u064b\u0627 \u0645\u062d\u062f\u0648\u062f\u064b\u0627.", - "You are enrolling in %(courseName)s": "\u0623\u0646\u062a \u062a\u0633\u062c\u0651\u0644 \u0641\u064a %(courseName)s", - "You are enrolling in: %(courseName)s": "\u0625\u0646\u0651\u0643 \u062a\u0633\u062c\u0651\u0644 \u0641\u064a: %(courseName)s", "You are not currently a member of any team.": "\u062d\u0627\u0644\u064a\u064b\u0627\u060c \u0623\u0646\u062a \u0644\u0633\u062a \u0639\u0636\u0648\u064b\u0627 \u0641\u064a \u0623\u064a \u0641\u0631\u064a\u0642.", "You are now enrolled as a verified student for:": "\u0623\u0646\u062a \u0627\u0644\u0622\u0646 \u0645\u0633\u062c\u0651\u0650\u0644 \u0643\u0637\u0627\u0644\u0628 \u0645\u0648\u062b\u0651\u064e\u0642 \u0644\u062f\u0649: ", - "You are upgrading your enrollment for: %(courseName)s": "\u0625\u0646\u0651\u0643 \u062a\u062c\u062f\u0651\u062f \u062a\u0633\u062c\u064a\u0644\u0643 \u0641\u064a: %(courseName)s", "You can now enter your payment information and complete your enrollment.": "\u064a\u0645\u0643\u0646\u0643 \u0627\u0644\u0622\u0646 \u0625\u062f\u062e\u0627\u0644 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u0644\u062f\u0641\u0639 \u0648\u0627\u0633\u062a\u0643\u0645\u0627\u0644 \u062a\u0633\u062c\u064a\u0644\u0643. ", "You can pay now even if you don't have the following items available, but you will need to have these by %(date)s to qualify to earn a Verified Certificate.": "\u064a\u0645\u0643\u0646\u0643 \u0623\u0646 \u062a\u062f\u0641\u0639 \u0627\u0644\u0622\u0646 \u062d\u062a\u0649 \u0644\u0645 \u0644\u0645 \u062a\u062a\u0648\u0641\u0651\u0631 \u0644\u062f\u064a\u0643 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u062a\u0627\u0644\u064a\u0629\u060c \u0644\u0643\u0646 \u064a\u062c\u0628 \u0639\u0644\u064a\u0643 \u062a\u0648\u0641\u064a\u0631\u0647\u0627 \u0628\u062d\u0644\u0648\u0644 %(date)s \u0645\u0646 \u0623\u062c\u0644 \u0627\u0644\u062a\u0623\u0647\u0651\u0644 \u0644\u0646\u064a\u0644 \"\u0634\u0647\u0627\u062f\u0629 \u0645\u0648\u062b\u0651\u0642\u0629\". ", "You can pay now even if you don't have the following items available, but you will need to have these to qualify to earn a Verified Certificate.": "\u064a\u0645\u0643\u0646\u0643 \u0623\u0646 \u062a\u062f\u0641\u0639 \u0627\u0644\u0622\u0646 \u062d\u062a\u0649 \u0644\u0645 \u0644\u0645 \u062a\u062a\u0648\u0641\u0651\u0631 \u0644\u062f\u064a\u0643 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u062a\u0627\u0644\u064a\u0629\u060c \u0644\u0643\u0646 \u064a\u062c\u0628 \u0639\u0644\u064a\u0643 \u062a\u0648\u0641\u064a\u0631\u0647\u0627 \u0645\u0646 \u0623\u062c\u0644 \u0627\u0644\u062a\u0623\u0647\u0651\u0644 \u0644\u0646\u064a\u0644 \"\u0634\u0647\u0627\u062f\u0629 \u0645\u0648\u062b\u0651\u0642\u0629\". ", @@ -1842,7 +1820,6 @@ "Your team could not be updated.": "\u0639\u0630\u0631\u064b\u0627\u060c \u0644\u0645 \u0646\u062a\u0645\u0643\u0651\u0646 \u0645\u0646 \u062a\u062d\u062f\u064a\u062b \u0641\u0631\u064a\u0642\u0643.", "Your upload of '{file}' failed.": "\u0639\u0630\u0631\u064b\u0627\u060c \u0641\u0634\u0644 \u062a\u062d\u0645\u064a\u0644\u0643 \u0644\u0645\u0644\u0641 '{file}'. ", "Your upload of '{file}' succeeded.": "\u0646\u062c\u062d \u062a\u062d\u0645\u064a\u0644\u0643 \u0644\u0645\u0644\u0641 '{file}'. ", - "Your verification status is good until %(verificationGoodUntil)s.": "\u064a\u0633\u0631\u064a \u0645\u0641\u0639\u0648\u0644 \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u062a\u062d\u0642\u0651\u0642 \u0645\u0646 \u0647\u0648\u064a\u0651\u062a\u0643 \u062d\u062a\u0649 \u062a\u0627\u0631\u064a\u062e %(verificationGoodUntil)s.", "Your video uploads are not complete.": "\u0639\u0645\u0644\u064a\u0627\u062a \u062a\u062d\u0645\u064a\u0644 \u0645\u0644\u0641 \u0627\u0644\u0641\u064a\u062f\u064a\u0648 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643 \u063a\u064a\u0631 \u0645\u0643\u062a\u0645\u0644\u0629.", "Zoom In": "\u062a\u0643\u0628\u064a\u0631", "Zoom Out": "\u062a\u0635\u063a\u064a\u0631", @@ -1860,7 +1837,6 @@ "about a month": "\u062d\u0648\u0627\u0644\u064a \u0634\u0647\u0631", "about a year": "\u062d\u0648\u0627\u0644\u064a \u0633\u0646\u0629", "about an hour": "\u062d\u0648\u0627\u0644\u064a \u0633\u0627\u0639\u0629", - "additions to the Exception list": "\u0625\u0636\u0627\u0641\u0627\u062a \u0625\u0644\u0649 \u0644\u0627\u0626\u062d\u0629 \u0627\u0644\u0627\u0633\u062a\u062b\u0646\u0627\u0621\u0627\u062a", "and others": "\u0648\u0622\u062e\u0631\u064a\u0646", "anonymous": "\u0645\u062c\u0647\u0648\u0644", "answer": "\u0627\u0644\u0625\u062c\u0627\u0628\u0629", @@ -1910,7 +1886,6 @@ "or": "\u0623\u0648", "or create a new one here": "\u0623\u0648 \u0623\u0646\u0634\u0626 \u062d\u0633\u0627\u0628\u0627\u064b \u062c\u062f\u064a\u062f\u0627\u064b \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645", "or sign in with": "\u0623\u0648 \u0633\u062c\u0651\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645", - "path/to/introductionToCookieBaking-CH%d.pdf": "path/to/introductionToCookieBaking-CH%d.pdf", "post anonymously": "\u0627\u0646\u0634\u064f\u0631 \u0645\u0646 \u062f\u0648\u0646 \u0627\u0644\u0643\u0634\u0641 \u0639\u0646 \u0627\u0644\u0647\u0648\u064a\u0629 ", "post anonymously to classmates": "\u0627\u0646\u0634\u0631 \u0623\u0645\u0627\u0645 \u0627\u0644\u0632\u0645\u0644\u0627\u0621 \u0645\u0646 \u062f\u0648\u0646 \u0627\u0644\u0643\u0634\u0641 \u0639\u0646 \u0627\u0644\u0647\u0648\u064a\u0629 ", "posted %(time_ago)s by %(author)s": "\u0646\u064f\u0634\u0650\u0631 %(time_ago)s \u0645\u0646 \u0642\u0650\u0628\u0644 %(author)s", diff --git a/cms/static/js/i18n/es-419/djangojs.js b/cms/static/js/i18n/es-419/djangojs.js index e7a8949848..bb3b6636df 100644 --- a/cms/static/js/i18n/es-419/djangojs.js +++ b/cms/static/js/i18n/es-419/djangojs.js @@ -135,7 +135,6 @@ "<%= user %> has been successfully added to the exception list. Click Generate Exception Certificate below to send the certificate.": "<%= user %> ha sido a\u00f1adido a la lista de excepciones. Haga clic en Generar cerfificado de excepci\u00f3n para enviar este certificado.", "": "", "%s": "%s", - "
  • Transcript will be displayed when ": "
  • La transcripci\u00f3n se mostrar\u00e1 cuando", "A driver's license, passport, or government-issued ID with your name and photo.": "Una licencia de conducir, pasaporte, c\u00e9dula o otra identificaci\u00f3n oficial con su nombre y foto", "A driver's license, passport, or other government-issued ID with your name and photo": "Una licencia de conducir, pasaporte, c\u00e9dula o otra identificaci\u00f3n oficial con su nombre y foto", "A list of courses you have just enrolled in as a verified student": "Lista de cursos que te has inscrito como estudiante verificado", @@ -154,7 +153,6 @@ "Actions": "Acciones", "Activate": "Activar", "Activate Your Account": "Activar su cuenta", - "Activating an item in this group will spool the video to the corresponding time point. To skip transcript, go to previous item.": "Activar un \u00edtem en este grupo llevar\u00e1 el v\u00eddeo al momento correspondiente. Para saltar la transcripci\u00f3n, vaya al item anterior.", "Active Threads": "Hilos Activos", "Active Uploads": "Cargas activas", "Add": "A\u00f1adir", @@ -322,7 +320,6 @@ "Change My Email Address": "Cambiar mi direcci\u00f3n de correo electr\u00f3nico", "Change image": "Cambiar imagen", "Change the settings for %(display_name)s": "Cambiar la configuraci\u00f3n para %(display_name)s", - "Chapter %s": "Cap\u00edtulo %s", "Chapter Asset": "Recursos del cap\u00edtulo", "Chapter Name": "Nombre del cap\u00edtulo", "Chapter information": "Informaci\u00f3n del cap\u00edtulo", @@ -675,7 +672,6 @@ "General": "General", "Generate": "Generar", "Generate Exception Certificates": "Generar excepciones de certificados", - "Generate a Certificate for all ": "Generar certificado para todos", "Generate a Certificate for all users on the Exception list": "Generar un certificado para cada usuario en la lista de excepciones", "Generate the user's certificate": "Generar el certificado del usuario", "Get Credit": "Obtenga cr\u00e9ditos", @@ -798,7 +794,6 @@ "Keywords": "Palabras clave", "LEARN MORE": "APRENDER MAS", "Language": "Idioma", - "Language: Press the UP arrow key to enter the language menu, then use UP and DOWN arrow keys to navigate language options. Press ENTER to change to the selected language.": "Idioma: Presione la flecha ARRIBA para entrar al men\u00fa de idioma, luego use las flechas ARRIBA y ABAJO para navegar las opciones. Presione ENTRAR para cambiar al idioma seleccionado.", "Large": "Largo", "Last Activity %(date)s": "\u00daltima Actividad %(date)s", "Last Edited:": "\u00daltima modificaci\u00f3n:", @@ -890,7 +885,6 @@ "Name of the signatory": "Nombre del signatario", "Name or short description of the configuration": "Nombre o descripci\u00f3n corta de la configuraci\u00f3n", "Never published": "Nunca publicad", - "New": "Nuevo", "New %(component_type)s": "Nuevo %(component_type)s", "New %(item_type)s": "Nueva %(item_type)s", "New Address": "Nueva direcci\u00f3n ", @@ -940,13 +934,10 @@ "Numbered list": "Lista numerada", "OK": "Aceptar", "Ok": "Bien", - "Once in position, use the camera button %(icon)s to capture your ID": "Una vez en posici\u00f3n, usa el bot\u00f3n de la c\u00e1mara %(icon)s para capturar tu ID", - "Once in position, use the camera button %(icon)s to capture your photo": "Una vez en posici\u00f3n, use el bot\u00f3n de la c\u00e1mara %(icon)s para capturar su foto", "Only <%= fileTypes %> files can be uploaded. Please select a file ending in <%= fileExtensions %> to upload.": "S\u00f3lo pueden cargarse archivos de tipo <%= fileTypes %>. Por favor seleccione un archivo que termine en <%= fileExtensions %> para ser cargado.", "Only properly formatted .csv files will be accepted.": "Solo archivos .csv correctamente formateados pueden ser utilizados.", "Open": "Abrir", "Open Calculator": "Abrir Calculadora", - "Open language menu": "Abrir men\u00fa de lenguaje", "Open/download this file": "Abrir / descargar este archivo", "OpenAssessment Save Error": "Error al guardar en el servidor OpenAssessment", "Optional Characteristics": "Caracter\u00edsiticas Opcionales", @@ -958,7 +949,6 @@ "Organization of the signatory": "Organizaci\u00f3n del signatario", "Other": "Otro", "Page break": "Salto de p\u00e1gina", - "Page number": "N\u00famero de p\u00e1gina", "Paragraph": "P\u00e1rrafo", "Password": "Contrase\u00f1a", "Password Reset Email Sent": "El correo para restablecer contrase\u00f1a ha sido enviado.", @@ -1041,7 +1031,6 @@ "Proctored": "Supervisado", "Proctored Exam": "Examen supervisado", "Proctored exams are timed and they record video of each learner taking the exam. The videos are then reviewed to ensure that learners follow all examination rules.": "Los ex\u00e1menes supervisados son cronometrados y un software graba a cada estudiante que toma el examen. Los videos luego son revisados para garantizar que el estudiante cumpli\u00f3 con todas las reglas del examen.", - "Professional Certificate for %(courseName)s": "Certificado Verificado para %(courseName)s", "Professional Education": "Educaci\u00f3n profesional", "Professional Education Verified Certificate": "Certificado verificado", "Profile Image": "Foto de perfil", @@ -1300,9 +1289,7 @@ "Textbook name is required": "Se requiere el nombre del texto", "Thank you for submitting your financial assistance application for {course_name}! You can expect a response in 2-4 business days.": "Gracias por enviar tu aplicaci\u00f3n de financiamiento para {course_name}!. Espera una respuesta de 2-4 dias h\u00e1biles.", "Thank you for submitting your photos. We will review them shortly. You can now sign up for any %(platformName)s course that offers verified certificates. Verification is good for one year. After one year, you must submit photos for verification again.": "Gracias por enviar sus fotos. Las revisaremos pronto. Ahora puede registrarse para cualquier curso de %(platformName)s que ofrezca Certficados Verificados. La verificaci\u00f3n es v\u00e1lida por un a\u00f1o. Despu\u00e9s de este periodo, deber\u00e1 volver a enviar fotograf\u00edas para una nueva verificaci\u00f3n.", - "Thank you! We have received your payment for %(courseName)s.": "Gracias! Hemos recibido su pago para %(courseName)s.", "Thank you! We have received your payment for %(course_name)s.": "Gracias! Hemos recibido su pago para el curso %(course_name)s.", - "Thanks for returning to verify your ID in: %(courseName)s": "Gracias por volver a verificar su identificaci\u00f3n en: %(courseName)s", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "La URL que introdujo parece ser una direcci\u00f3n de correo electr\u00f3nico. \u00bfDesea agregarle el prefijo requerido mailto:?", "The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "La URL que introdujo parece ser un v\u00ednculo externo. \u00bfDesea agregarle el prefijo requerido http://?", "The certificate for this learner has been re-validated and the system is re-running the grade for this learner.": "El certificado para este estudiante ha sido revalidado y el sistema est\u00e1 computando nuevamente la calificaci\u00f3n.", @@ -1397,7 +1384,6 @@ "This content group is not in use. Add a content group to any unit from the {linkStart}Course Outline{linkEnd}.": "Este grupo de contenidos no est\u00e1 en uso. A\u00f1ada un grupo de contenidos a cualquier unidad de la {linkStart}Estructura del curso{linkEnd}.", "This content group is used in one or more units.": "Este contenido de grupo es usado en uno o mas unidades.", "This content group is used in:": "Este contenido de grupo es usado en:", - "This edX learner is currently sharing a limited profile.": "Este usuario est\u00e1 compartiendo un perfil limitado.", "This image is for decorative purposes only and does not require a description.": "Esta imagen es decorativa solamente y no requiere descripci\u00f3n.", "This is the Description of the Group Configuration": "Esta es la descripci\u00f3n de configuraci\u00f3n del grupo", "This is the Name of the Group Configuration": "Este es el nombre de la Configuraci\u00f3n del Grupo", @@ -1434,7 +1420,6 @@ "To receive a certificate, you must also verify your identity.": "Para recibir un certificado, tambi\u00e9n debe verificar su identidad.", "To receive credit on a problem, you must click \"Check\" or \"Final Check\" on it before you select \"End My Exam\".": "Para recibir cr\u00e9ditos para un problema, debe hacer clic en el bot\u00f3n de \"Revisar\" o \"Env\u00edo Final\" de dicho problema antes de seleccionar \"Terminar el examen\".", "To take a successful photo, make sure that:": "Para tomar la foto correctamente, aseg\u00farese de: ", - "To use the current photo, select the camera button %(icon)s. To take another photo, select the retake button %(icon)s.": "Para usar la foto actual, seleccione el bot\u00f3n con la camara %(icon)s. Para tomar una nueva foto, seleccione el bot\u00f3n de nueva toma %(icon)s.", "To verify your identity, you need a webcam and a government-issued photo ID.": "Para verificar su identidad, necesitar\u00e1 una c\u00e1mara web, y un documento de identificaci\u00f3n oficial con foto.", "Toggle Notifications Setting": "Cambiar las opciones de notificaci\u00f3n", "Tools": "Herramientas", @@ -1446,7 +1431,6 @@ "Total Number": "N\u00famero total", "Try the transaction again in a few minutes.": "Intente la transacci\u00f3n nuevamente en algunos minutos.", "Try using a different browser, such as Google Chrome.": "Intente usar otro navegador. Por ejemplo Google Chrome.", - "Turn off transcript": "Desactivar transcripci\u00f3n", "Turn off transcripts": "Desactivar transcripci\u00f3n", "Turn on closed captioning": "Activar subt\u00edtulos", "Turn on transcripts": "Activar transcripci\u00f3n", @@ -1484,7 +1468,6 @@ "Updating Tags": "Actualizando Etiquetas", "Updating with latest library content": "Actualizando con el m\u00e1s reciente contenido de la librer\u00eda", "Upgrade Deadline": "Actualizar la fecha l\u00edmite", - "Upgrade to a Verified Certificate for %(courseName)s": "Cambiar a Certificado Verificado para %(courseName)s", "Upload": "Subir", "Upload File": "Subir archivo", "Upload File and Assign Students": "Cargar archivo y asignar estudiantes", @@ -1535,7 +1518,6 @@ "Verification Deadline": "Fecha l\u00edmite de verificaci\u00f3n", "Verification checkpoint to be completed": "El punto de verificaci\u00f3n debe ser completado", "Verified Certificate": "Certificado verificado", - "Verified Certificate for %(courseName)s": "Certificado Verificado para %(courseName)s", "Verified Certificate upgrade": "Ascender a un Certificado verificado", "Verified Status": "Verificaci\u00f3n", "Verified mode price": "Precio del modo verificado", @@ -1612,7 +1594,6 @@ "What does %(platformName)s do with this photo?": "\u00bfQu\u00e9 hace %(platformName)s con esta imagen?", "What does this mean?": "\u00bfQu\u00e9 significa esto?", "When you click \"Reset Password\", a message will be sent to your email address. Click the link in the message to reset your password.": "Cuando realice clic en \"Restablecer Contrase\u00f1a\", se enviar\u00e1 un mensaje a su direcci\u00f3n de correo. Haga clic en el v\u00ednculo que encontrar\u00e1 en el mensaje para restablecer su contrase\u00f1a.", - "When your face is in position, use the camera button %(icon)s below to take your photo.": "Luego de colocar su rostro en posici\u00f3n, haga clic en el siguiente icono %(icon)s para tomar la foto.", "Which timed transcript would you like to use?": "\u00bfCu\u00e1l de las transcripciones desea utilizar?", "Whole words": "Palabras completas", "Why does %(platformName)s need my photo?": "Por qu\u00e9 %(platformName)s necesita mi foto ?", @@ -1630,11 +1611,8 @@ "You are about to send an email titled '<%= subject %>' to everyone who is staff or instructor on this course. Is this OK?": "Est\u00e1 a punto de enviarse un correo electr\u00f3nico con asunto '<%= subject %>' a todos los instructores y funcionarios del curso. \u00bfEst\u00e1 seguro de proceder?", "You are about to send an email titled '<%= subject %>' to yourself. Is this OK?": "Est\u00e1 a punto de enviarse un correo electr\u00f3nico con asunto '<%= subject %>' a usted mismo. \u00bfEst\u00e1 seguro de proceder?", "You are currently sharing a limited profile.": "Actualmente est\u00e1 compartiendo un perfil limitado.", - "You are enrolling in %(courseName)s": "Usted est\u00e1 inscribiendose a %(courseName)s", - "You are enrolling in: %(courseName)s": "Estas inscrito en: %(courseName)s", "You are not currently a member of any team.": "Usted no es actualmente miembro de ning\u00fan equipo.", "You are now enrolled as a verified student for:": "Ahora estas inscrito como estudiante verificado para:", - "You are upgrading your enrollment for: %(courseName)s": "Estas actualizando tu inscripci\u00f3n para: %(courseName)s", "You can now enter your payment information and complete your enrollment.": "Ahora puede agregar su informaci\u00f3n de pago, y completar su inscripci\u00f3n", "You can pay now even if you don't have the following items available, but you will need to have these by %(date)s to qualify to earn a Verified Certificate.": "Puede pagar ahora, incluso si no tiene los siguientes items disponibles, pero deber\u00e1 tenerlos antes del %(date)s para calificar para un Certificado Verificado.", "You can pay now even if you don't have the following items available, but you will need to have these to qualify to earn a Verified Certificate.": "Puede pagar ahora, incluso si no tiene los siguientes items disponibles, pero deber\u00e1 tenerlos para calificar para un Certificado Verificado.", @@ -1706,7 +1684,6 @@ "Your team could not be updated.": "Su equipo no pudo ser actualizado.", "Your upload of '{file}' failed.": "No se ha podido cargar el archivo '{file}'.", "Your upload of '{file}' succeeded.": "Se ha cargado el archivo '{file}' exitosamente.", - "Your verification status is good until %(verificationGoodUntil)s.": "Su estado de verificaci\u00f3n es v\u00e1lido hasta %(verificationGoodUntil)s.", "Your video uploads are not complete.": "Los archivos de v\u00eddeo no han terminado de cargar.", "Zoom In": "Acercar", "Zoom Out": "Alejar", @@ -1720,7 +1697,6 @@ "about a month": "cerca de un mes", "about a year": "cerca de un a\u00f1o", "about an hour": "cerca de una hora", - "additions to the Exception list": "adiciones a la lista de excepciones", "and others": "y otros", "anonymous": "an\u00f3nimo", "answer": "pregunta", @@ -1770,7 +1746,6 @@ "or": "o", "or create a new one here": "o crear una nueva aqu\u00ed", "or sign in with": "o inicie sesi\u00f3n con", - "path/to/introductionToCookieBaking-CH%d.pdf": "ruta/al/capitulo%d.pdf", "post anonymously": "escribir an\u00f3nimamente", "post anonymously to classmates": "publicar an\u00f3nimamente a mis compa\u00f1eros de curso", "posted %(time_ago)s by %(author)s": "publicado %(time_ago)s por %(author)s", diff --git a/cms/static/js/i18n/fake2/djangojs.js b/cms/static/js/i18n/fake2/djangojs.js index 0cd7c6fdc7..7535569bf1 100644 --- a/cms/static/js/i18n/fake2/djangojs.js +++ b/cms/static/js/i18n/fake2/djangojs.js @@ -163,6 +163,7 @@ "Active Uploads": "\u023a\u0254\u0287\u1d09\u028c\u01dd \u0244dl\u00f8\u0250ds", "Add": "\u023add", "Add Additional Signatory": "\u023add \u023add\u1d09\u0287\u1d09\u00f8n\u0250l S\u1d09\u0183n\u0250\u0287\u00f8\u0279\u028e", + "Add Allowance": "\u023add \u023all\u00f8\u028d\u0250n\u0254\u01dd", "Add Cohort": "\u023add \u023b\u00f8\u0265\u00f8\u0279\u0287", "Add Component:": "\u023add \u023b\u00f8\u026fd\u00f8n\u01ddn\u0287:", "Add Country": "\u023add \u023b\u00f8nn\u0287\u0279\u028e", @@ -171,6 +172,7 @@ "Add Students": "\u023add S\u0287nd\u01ddn\u0287s", "Add URLs for additional versions": "\u023add \u0244\u024c\u0141s \u025f\u00f8\u0279 \u0250dd\u1d09\u0287\u1d09\u00f8n\u0250l \u028c\u01dd\u0279s\u1d09\u00f8ns", "Add a Chapter": "\u023add \u0250 \u023b\u0265\u0250d\u0287\u01dd\u0279", + "Add a New Allowance": "\u023add \u0250 N\u01dd\u028d \u023all\u00f8\u028d\u0250n\u0254\u01dd", "Add a New Cohort": "\u023add \u0250 N\u01dd\u028d \u023b\u00f8\u0265\u00f8\u0279\u0287", "Add a Response": "\u023add \u0250 \u024c\u01ddsd\u00f8ns\u01dd", "Add a clear and descriptive title to encourage participation.": "\u023add \u0250 \u0254l\u01dd\u0250\u0279 \u0250nd d\u01dds\u0254\u0279\u1d09d\u0287\u1d09\u028c\u01dd \u0287\u1d09\u0287l\u01dd \u0287\u00f8 \u01ddn\u0254\u00f8n\u0279\u0250\u0183\u01dd d\u0250\u0279\u0287\u1d09\u0254\u1d09d\u0250\u0287\u1d09\u00f8n.", @@ -189,6 +191,7 @@ "Adding": "\u023add\u1d09n\u0183", "Adding the selected course to your cart": "\u023add\u1d09n\u0183 \u0287\u0265\u01dd s\u01ddl\u01dd\u0254\u0287\u01ddd \u0254\u00f8n\u0279s\u01dd \u0287\u00f8 \u028e\u00f8n\u0279 \u0254\u0250\u0279\u0287", "Additional Information (optional)": "\u023add\u1d09\u0287\u1d09\u00f8n\u0250l \u0197n\u025f\u00f8\u0279\u026f\u0250\u0287\u1d09\u00f8n (\u00f8d\u0287\u1d09\u00f8n\u0250l)", + "Additional Time (minutes)": "\u023add\u1d09\u0287\u1d09\u00f8n\u0250l \u0166\u1d09\u026f\u01dd (\u026f\u1d09nn\u0287\u01dds)", "Admin": "\u023ad\u026f\u1d09n", "Advanced": "\u023ad\u028c\u0250n\u0254\u01ddd", "Align center": "\u023al\u1d09\u0183n \u0254\u01ddn\u0287\u01dd\u0279", @@ -214,6 +217,9 @@ "Allow others to copy, distribute, display and perform your work - and derivative works based upon it - but for noncommercial purposes only.": "\u023all\u00f8\u028d \u00f8\u0287\u0265\u01dd\u0279s \u0287\u00f8 \u0254\u00f8d\u028e, d\u1d09s\u0287\u0279\u1d09bn\u0287\u01dd, d\u1d09sdl\u0250\u028e \u0250nd d\u01dd\u0279\u025f\u00f8\u0279\u026f \u028e\u00f8n\u0279 \u028d\u00f8\u0279\u029e - \u0250nd d\u01dd\u0279\u1d09\u028c\u0250\u0287\u1d09\u028c\u01dd \u028d\u00f8\u0279\u029es b\u0250s\u01ddd nd\u00f8n \u1d09\u0287 - bn\u0287 \u025f\u00f8\u0279 n\u00f8n\u0254\u00f8\u026f\u026f\u01dd\u0279\u0254\u1d09\u0250l dn\u0279d\u00f8s\u01dds \u00f8nl\u028e.", "Allow others to distribute derivative works only under a license identical to the license that governs your work. This option is incompatible with \"No Derivatives\".": "\u023all\u00f8\u028d \u00f8\u0287\u0265\u01dd\u0279s \u0287\u00f8 d\u1d09s\u0287\u0279\u1d09bn\u0287\u01dd d\u01dd\u0279\u1d09\u028c\u0250\u0287\u1d09\u028c\u01dd \u028d\u00f8\u0279\u029es \u00f8nl\u028e nnd\u01dd\u0279 \u0250 l\u1d09\u0254\u01ddns\u01dd \u1d09d\u01ddn\u0287\u1d09\u0254\u0250l \u0287\u00f8 \u0287\u0265\u01dd l\u1d09\u0254\u01ddns\u01dd \u0287\u0265\u0250\u0287 \u0183\u00f8\u028c\u01dd\u0279ns \u028e\u00f8n\u0279 \u028d\u00f8\u0279\u029e. \u0166\u0265\u1d09s \u00f8d\u0287\u1d09\u00f8n \u1d09s \u1d09n\u0254\u00f8\u026fd\u0250\u0287\u1d09bl\u01dd \u028d\u1d09\u0287\u0265 \"N\u00f8 \u0110\u01dd\u0279\u1d09\u028c\u0250\u0287\u1d09\u028c\u01dds\".", "Allow students to generate certificates for this course?": "\u023all\u00f8\u028d s\u0287nd\u01ddn\u0287s \u0287\u00f8 \u0183\u01ddn\u01dd\u0279\u0250\u0287\u01dd \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds \u025f\u00f8\u0279 \u0287\u0265\u1d09s \u0254\u00f8n\u0279s\u01dd?", + "Allowance Type": "\u023all\u00f8\u028d\u0250n\u0254\u01dd \u0166\u028ed\u01dd", + "Allowance Value": "\u023all\u00f8\u028d\u0250n\u0254\u01dd V\u0250ln\u01dd", + "Allowances": "\u023all\u00f8\u028d\u0250n\u0254\u01dds", "Already a course team member": "\u023al\u0279\u01dd\u0250d\u028e \u0250 \u0254\u00f8n\u0279s\u01dd \u0287\u01dd\u0250\u026f \u026f\u01dd\u026fb\u01dd\u0279", "Already a library team member": "\u023al\u0279\u01dd\u0250d\u028e \u0250 l\u1d09b\u0279\u0250\u0279\u028e \u0287\u01dd\u0250\u026f \u026f\u01dd\u026fb\u01dd\u0279", "Already a member": "\u023al\u0279\u01dd\u0250d\u028e \u0250 \u026f\u01dd\u026fb\u01dd\u0279", @@ -398,6 +404,7 @@ "Commentary": "\u023b\u00f8\u026f\u026f\u01ddn\u0287\u0250\u0279\u028e", "Common Problem Types": "\u023b\u00f8\u026f\u026f\u00f8n \u2c63\u0279\u00f8bl\u01dd\u026f \u0166\u028ed\u01dds", "Community TA": "\u023b\u00f8\u026f\u026fnn\u1d09\u0287\u028e \u0166\u023a", + "Completed At": "\u023b\u00f8\u026fdl\u01dd\u0287\u01ddd \u023a\u0287", "Component": "\u023b\u00f8\u026fd\u00f8n\u01ddn\u0287", "Configure": "\u023b\u00f8n\u025f\u1d09\u0183n\u0279\u01dd", "Confirm": "\u023b\u00f8n\u025f\u1d09\u0279\u026f", @@ -640,6 +647,8 @@ "Error: User '<%= username %>' has not yet activated their account. Users must create and activate their accounts before they can be assigned a role.": "\u0246\u0279\u0279\u00f8\u0279: \u0244s\u01dd\u0279 '<%= username %>' \u0265\u0250s n\u00f8\u0287 \u028e\u01dd\u0287 \u0250\u0254\u0287\u1d09\u028c\u0250\u0287\u01ddd \u0287\u0265\u01dd\u1d09\u0279 \u0250\u0254\u0254\u00f8nn\u0287. \u0244s\u01dd\u0279s \u026fns\u0287 \u0254\u0279\u01dd\u0250\u0287\u01dd \u0250nd \u0250\u0254\u0287\u1d09\u028c\u0250\u0287\u01dd \u0287\u0265\u01dd\u1d09\u0279 \u0250\u0254\u0254\u00f8nn\u0287s b\u01dd\u025f\u00f8\u0279\u01dd \u0287\u0265\u01dd\u028e \u0254\u0250n b\u01dd \u0250ss\u1d09\u0183n\u01ddd \u0250 \u0279\u00f8l\u01dd.", "Error: You cannot remove yourself from the Instructor group!": "\u0246\u0279\u0279\u00f8\u0279: \u024e\u00f8n \u0254\u0250nn\u00f8\u0287 \u0279\u01dd\u026f\u00f8\u028c\u01dd \u028e\u00f8n\u0279s\u01ddl\u025f \u025f\u0279\u00f8\u026f \u0287\u0265\u01dd \u0197ns\u0287\u0279n\u0254\u0287\u00f8\u0279 \u0183\u0279\u00f8nd!", "Errors": "\u0246\u0279\u0279\u00f8\u0279s", + "Exam Name": "\u0246x\u0250\u026f N\u0250\u026f\u01dd", + "Exam Type": "\u0246x\u0250\u026f \u0166\u028ed\u01dd", "Exception Granted": "\u0246x\u0254\u01ddd\u0287\u1d09\u00f8n \u01e4\u0279\u0250n\u0287\u01ddd", "Exit full browser": "\u0246x\u1d09\u0287 \u025fnll b\u0279\u00f8\u028ds\u01dd\u0279", "Expand All": "\u0246xd\u0250nd \u023all", @@ -649,6 +658,7 @@ "Explanation": "\u0246xdl\u0250n\u0250\u0287\u1d09\u00f8n", "Explicitly Hiding from Students": "\u0246xdl\u1d09\u0254\u1d09\u0287l\u028e \u0126\u1d09d\u1d09n\u0183 \u025f\u0279\u00f8\u026f S\u0287nd\u01ddn\u0287s", "Explore New XSeries": "\u0246xdl\u00f8\u0279\u01dd N\u01dd\u028d XS\u01dd\u0279\u1d09\u01dds", + "Explore XSeries Programs": "\u0246xdl\u00f8\u0279\u01dd XS\u01dd\u0279\u1d09\u01dds \u2c63\u0279\u00f8\u0183\u0279\u0250\u026fs", "Explore your course!": "\u0246xdl\u00f8\u0279\u01dd \u028e\u00f8n\u0279 \u0254\u00f8n\u0279s\u01dd!", "Failed to delete student state.": "F\u0250\u1d09l\u01ddd \u0287\u00f8 d\u01ddl\u01dd\u0287\u01dd s\u0287nd\u01ddn\u0287 s\u0287\u0250\u0287\u01dd.", "Failed to rescore problem.": "F\u0250\u1d09l\u01ddd \u0287\u00f8 \u0279\u01dds\u0254\u00f8\u0279\u01dd d\u0279\u00f8bl\u01dd\u026f.", @@ -691,6 +701,7 @@ "Generate Exception Certificates": "\u01e4\u01ddn\u01dd\u0279\u0250\u0287\u01dd \u0246x\u0254\u01ddd\u0287\u1d09\u00f8n \u023b\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds", "Generate a Certificate for all users on the Exception list": "\u01e4\u01ddn\u01dd\u0279\u0250\u0287\u01dd \u0250 \u023b\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd \u025f\u00f8\u0279 \u0250ll ns\u01dd\u0279s \u00f8n \u0287\u0265\u01dd \u0246x\u0254\u01ddd\u0287\u1d09\u00f8n l\u1d09s\u0287", "Generate certificates for all users on the Exception list for whom certificates have not yet been run": "\u01e4\u01ddn\u01dd\u0279\u0250\u0287\u01dd \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds \u025f\u00f8\u0279 \u0250ll ns\u01dd\u0279s \u00f8n \u0287\u0265\u01dd \u0246x\u0254\u01ddd\u0287\u1d09\u00f8n l\u1d09s\u0287 \u025f\u00f8\u0279 \u028d\u0265\u00f8\u026f \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds \u0265\u0250\u028c\u01dd n\u00f8\u0287 \u028e\u01dd\u0287 b\u01dd\u01ddn \u0279nn", + "Generate certificates for all users on the Exception list who do not yet have a certificate": "\u01e4\u01ddn\u01dd\u0279\u0250\u0287\u01dd \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds \u025f\u00f8\u0279 \u0250ll ns\u01dd\u0279s \u00f8n \u0287\u0265\u01dd \u0246x\u0254\u01ddd\u0287\u1d09\u00f8n l\u1d09s\u0287 \u028d\u0265\u00f8 d\u00f8 n\u00f8\u0287 \u028e\u01dd\u0287 \u0265\u0250\u028c\u01dd \u0250 \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd", "Generate the user's certificate": "\u01e4\u01ddn\u01dd\u0279\u0250\u0287\u01dd \u0287\u0265\u01dd ns\u01dd\u0279's \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd", "Get Credit": "\u01e4\u01dd\u0287 \u023b\u0279\u01ddd\u1d09\u0287", "Go to Dashboard": "\u01e4\u00f8 \u0287\u00f8 \u0110\u0250s\u0265b\u00f8\u0250\u0279d", @@ -1227,6 +1238,7 @@ "Sorted by": "S\u00f8\u0279\u0287\u01ddd b\u028e", "Source": "S\u00f8n\u0279\u0254\u01dd", "Source code": "S\u00f8n\u0279\u0254\u01dd \u0254\u00f8d\u01dd", + "Special Exam": "Sd\u01dd\u0254\u1d09\u0250l \u0246x\u0250\u026f", "Special character": "Sd\u01dd\u0254\u1d09\u0250l \u0254\u0265\u0250\u0279\u0250\u0254\u0287\u01dd\u0279", "Specify an alternative to the official course title to display on certificates. Leave blank to use the official course title.": "Sd\u01dd\u0254\u1d09\u025f\u028e \u0250n \u0250l\u0287\u01dd\u0279n\u0250\u0287\u1d09\u028c\u01dd \u0287\u00f8 \u0287\u0265\u01dd \u00f8\u025f\u025f\u1d09\u0254\u1d09\u0250l \u0254\u00f8n\u0279s\u01dd \u0287\u1d09\u0287l\u01dd \u0287\u00f8 d\u1d09sdl\u0250\u028e \u00f8n \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds. \u0141\u01dd\u0250\u028c\u01dd bl\u0250n\u029e \u0287\u00f8 ns\u01dd \u0287\u0265\u01dd \u00f8\u025f\u025f\u1d09\u0254\u1d09\u0250l \u0254\u00f8n\u0279s\u01dd \u0287\u1d09\u0287l\u01dd.", "Specify any additional rules or rule exceptions that the proctoring review team should enforce when reviewing the videos. For example, you could specify that calculators are allowed.": "Sd\u01dd\u0254\u1d09\u025f\u028e \u0250n\u028e \u0250dd\u1d09\u0287\u1d09\u00f8n\u0250l \u0279nl\u01dds \u00f8\u0279 \u0279nl\u01dd \u01ddx\u0254\u01ddd\u0287\u1d09\u00f8ns \u0287\u0265\u0250\u0287 \u0287\u0265\u01dd d\u0279\u00f8\u0254\u0287\u00f8\u0279\u1d09n\u0183 \u0279\u01dd\u028c\u1d09\u01dd\u028d \u0287\u01dd\u0250\u026f s\u0265\u00f8nld \u01ddn\u025f\u00f8\u0279\u0254\u01dd \u028d\u0265\u01ddn \u0279\u01dd\u028c\u1d09\u01dd\u028d\u1d09n\u0183 \u0287\u0265\u01dd \u028c\u1d09d\u01dd\u00f8s. F\u00f8\u0279 \u01ddx\u0250\u026fdl\u01dd, \u028e\u00f8n \u0254\u00f8nld sd\u01dd\u0254\u1d09\u025f\u028e \u0287\u0265\u0250\u0287 \u0254\u0250l\u0254nl\u0250\u0287\u00f8\u0279s \u0250\u0279\u01dd \u0250ll\u00f8\u028d\u01ddd.", @@ -1247,6 +1259,7 @@ "Start regenerating certificates for students in this course?": "S\u0287\u0250\u0279\u0287 \u0279\u01dd\u0183\u01ddn\u01dd\u0279\u0250\u0287\u1d09n\u0183 \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds \u025f\u00f8\u0279 s\u0287nd\u01ddn\u0287s \u1d09n \u0287\u0265\u1d09s \u0254\u00f8n\u0279s\u01dd?", "Start search": "S\u0287\u0250\u0279\u0287 s\u01dd\u0250\u0279\u0254\u0265", "Start working toward your next learning goal.": "S\u0287\u0250\u0279\u0287 \u028d\u00f8\u0279\u029e\u1d09n\u0183 \u0287\u00f8\u028d\u0250\u0279d \u028e\u00f8n\u0279 n\u01ddx\u0287 l\u01dd\u0250\u0279n\u1d09n\u0183 \u0183\u00f8\u0250l.", + "Started At": "S\u0287\u0250\u0279\u0287\u01ddd \u023a\u0287", "Started entrance exam rescore task for student '{student_id}'. Click the 'Show Background Task History for Student' button to see the status of the task.": "S\u0287\u0250\u0279\u0287\u01ddd \u01ddn\u0287\u0279\u0250n\u0254\u01dd \u01ddx\u0250\u026f \u0279\u01dds\u0254\u00f8\u0279\u01dd \u0287\u0250s\u029e \u025f\u00f8\u0279 s\u0287nd\u01ddn\u0287 '{student_id}'. \u023bl\u1d09\u0254\u029e \u0287\u0265\u01dd 'S\u0265\u00f8\u028d \u0243\u0250\u0254\u029e\u0183\u0279\u00f8nnd \u0166\u0250s\u029e \u0126\u1d09s\u0287\u00f8\u0279\u028e \u025f\u00f8\u0279 S\u0287nd\u01ddn\u0287' bn\u0287\u0287\u00f8n \u0287\u00f8 s\u01dd\u01dd \u0287\u0265\u01dd s\u0287\u0250\u0287ns \u00f8\u025f \u0287\u0265\u01dd \u0287\u0250s\u029e.", "Started rescore problem task for problem '<%= problem_id %>' and student '<%= student_id %>'. Click the 'Show Background Task History for Student' button to see the status of the task.": "S\u0287\u0250\u0279\u0287\u01ddd \u0279\u01dds\u0254\u00f8\u0279\u01dd d\u0279\u00f8bl\u01dd\u026f \u0287\u0250s\u029e \u025f\u00f8\u0279 d\u0279\u00f8bl\u01dd\u026f '<%= problem_id %>' \u0250nd s\u0287nd\u01ddn\u0287 '<%= student_id %>'. \u023bl\u1d09\u0254\u029e \u0287\u0265\u01dd 'S\u0265\u00f8\u028d \u0243\u0250\u0254\u029e\u0183\u0279\u00f8nnd \u0166\u0250s\u029e \u0126\u1d09s\u0287\u00f8\u0279\u028e \u025f\u00f8\u0279 S\u0287nd\u01ddn\u0287' bn\u0287\u0287\u00f8n \u0287\u00f8 s\u01dd\u01dd \u0287\u0265\u01dd s\u0287\u0250\u0287ns \u00f8\u025f \u0287\u0265\u01dd \u0287\u0250s\u029e.", "Starts": "S\u0287\u0250\u0279\u0287s", @@ -1437,6 +1450,7 @@ "This team is full.": "\u0166\u0265\u1d09s \u0287\u01dd\u0250\u026f \u1d09s \u025fnll.", "This thread is closed.": "\u0166\u0265\u1d09s \u0287\u0265\u0279\u01dd\u0250d \u1d09s \u0254l\u00f8s\u01ddd.", "Time Allotted (HH:MM):": "\u0166\u1d09\u026f\u01dd \u023all\u00f8\u0287\u0287\u01ddd (\u0126\u0126:MM):", + "Time Limit": "\u0166\u1d09\u026f\u01dd \u0141\u1d09\u026f\u1d09\u0287", "Time Sent": "\u0166\u1d09\u026f\u01dd S\u01ddn\u0287", "Time Sent:": "\u0166\u1d09\u026f\u01dd S\u01ddn\u0287:", "Timed": "\u0166\u1d09\u026f\u01ddd", @@ -1554,6 +1568,7 @@ "User": "\u0244s\u01dd\u0279", "User Email": "\u0244s\u01dd\u0279 \u0246\u026f\u0250\u1d09l", "Username": "\u0244s\u01dd\u0279n\u0250\u026f\u01dd", + "Username or Email": "\u0244s\u01dd\u0279n\u0250\u026f\u01dd \u00f8\u0279 \u0246\u026f\u0250\u1d09l", "Username or email address": "\u0244s\u01dd\u0279n\u0250\u026f\u01dd \u00f8\u0279 \u01dd\u026f\u0250\u1d09l \u0250dd\u0279\u01ddss", "Users": "\u0244s\u01dd\u0279s", "Users must create and activate their account before they can be promoted to beta tester.": "\u0244s\u01dd\u0279s \u026fns\u0287 \u0254\u0279\u01dd\u0250\u0287\u01dd \u0250nd \u0250\u0254\u0287\u1d09\u028c\u0250\u0287\u01dd \u0287\u0265\u01dd\u1d09\u0279 \u0250\u0254\u0254\u00f8nn\u0287 b\u01dd\u025f\u00f8\u0279\u01dd \u0287\u0265\u01dd\u028e \u0254\u0250n b\u01dd d\u0279\u00f8\u026f\u00f8\u0287\u01ddd \u0287\u00f8 b\u01dd\u0287\u0250 \u0287\u01dds\u0287\u01dd\u0279.", @@ -1561,6 +1576,7 @@ "Valid": "V\u0250l\u1d09d", "Validation Error": "V\u0250l\u1d09d\u0250\u0287\u1d09\u00f8n \u0246\u0279\u0279\u00f8\u0279", "Validation Error While Saving": "V\u0250l\u1d09d\u0250\u0287\u1d09\u00f8n \u0246\u0279\u0279\u00f8\u0279 W\u0265\u1d09l\u01dd S\u0250\u028c\u1d09n\u0183", + "Value": "V\u0250ln\u01dd", "Verification Checkpoint": "V\u01dd\u0279\u1d09\u025f\u1d09\u0254\u0250\u0287\u1d09\u00f8n \u023b\u0265\u01dd\u0254\u029ed\u00f8\u1d09n\u0287", "Verification Deadline": "V\u01dd\u0279\u1d09\u025f\u1d09\u0254\u0250\u0287\u1d09\u00f8n \u0110\u01dd\u0250dl\u1d09n\u01dd", "Verification checkpoint to be completed": "V\u01dd\u0279\u1d09\u025f\u1d09\u0254\u0250\u0287\u1d09\u00f8n \u0254\u0265\u01dd\u0254\u029ed\u00f8\u1d09n\u0287 \u0287\u00f8 b\u01dd \u0254\u00f8\u026fdl\u01dd\u0287\u01ddd", @@ -1652,6 +1668,7 @@ "Will Be Visible To:": "W\u1d09ll \u0243\u01dd V\u1d09s\u1d09bl\u01dd \u0166\u00f8:", "Words: {0}": "W\u00f8\u0279ds: {0}", "Would you like to sign in using your %(providerName)s credentials?": "W\u00f8nld \u028e\u00f8n l\u1d09\u029e\u01dd \u0287\u00f8 s\u1d09\u0183n \u1d09n ns\u1d09n\u0183 \u028e\u00f8n\u0279 %(providerName)s \u0254\u0279\u01ddd\u01ddn\u0287\u1d09\u0250ls?", + "XSeries Program Certificates": "XS\u01dd\u0279\u1d09\u01dds \u2c63\u0279\u00f8\u0183\u0279\u0250\u026f \u023b\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds", "Year of Birth": "\u024e\u01dd\u0250\u0279 \u00f8\u025f \u0243\u1d09\u0279\u0287\u0265", "Yes, allow edits to the active Certificate": "\u024e\u01dds, \u0250ll\u00f8\u028d \u01ddd\u1d09\u0287s \u0287\u00f8 \u0287\u0265\u01dd \u0250\u0254\u0287\u1d09\u028c\u01dd \u023b\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd", "Yes, delete this %(xblock_type)s": "\u024e\u01dds, d\u01ddl\u01dd\u0287\u01dd \u0287\u0265\u1d09s %(xblock_type)s", @@ -1664,6 +1681,7 @@ "You are currently sharing a limited profile.": "\u024e\u00f8n \u0250\u0279\u01dd \u0254n\u0279\u0279\u01ddn\u0287l\u028e s\u0265\u0250\u0279\u1d09n\u0183 \u0250 l\u1d09\u026f\u1d09\u0287\u01ddd d\u0279\u00f8\u025f\u1d09l\u01dd.", "You are enrolling in: {courseName}": "\u024e\u00f8n \u0250\u0279\u01dd \u01ddn\u0279\u00f8ll\u1d09n\u0183 \u1d09n: {courseName}", "You are not currently a member of any team.": "\u024e\u00f8n \u0250\u0279\u01dd n\u00f8\u0287 \u0254n\u0279\u0279\u01ddn\u0287l\u028e \u0250 \u026f\u01dd\u026fb\u01dd\u0279 \u00f8\u025f \u0250n\u028e \u0287\u01dd\u0250\u026f.", + "You are not enrolled in any XSeries Programs yet.": "\u024e\u00f8n \u0250\u0279\u01dd n\u00f8\u0287 \u01ddn\u0279\u00f8ll\u01ddd \u1d09n \u0250n\u028e XS\u01dd\u0279\u1d09\u01dds \u2c63\u0279\u00f8\u0183\u0279\u0250\u026fs \u028e\u01dd\u0287.", "You are now enrolled as a verified student for:": "\u024e\u00f8n \u0250\u0279\u01dd n\u00f8\u028d \u01ddn\u0279\u00f8ll\u01ddd \u0250s \u0250 \u028c\u01dd\u0279\u1d09\u025f\u1d09\u01ddd s\u0287nd\u01ddn\u0287 \u025f\u00f8\u0279:", "You are upgrading your enrollment for: {courseName}": "\u024e\u00f8n \u0250\u0279\u01dd nd\u0183\u0279\u0250d\u1d09n\u0183 \u028e\u00f8n\u0279 \u01ddn\u0279\u00f8ll\u026f\u01ddn\u0287 \u025f\u00f8\u0279: {courseName}", "You can now enter your payment information and complete your enrollment.": "\u024e\u00f8n \u0254\u0250n n\u00f8\u028d \u01ddn\u0287\u01dd\u0279 \u028e\u00f8n\u0279 d\u0250\u028e\u026f\u01ddn\u0287 \u1d09n\u025f\u00f8\u0279\u026f\u0250\u0287\u1d09\u00f8n \u0250nd \u0254\u00f8\u026fdl\u01dd\u0287\u01dd \u028e\u00f8n\u0279 \u01ddn\u0279\u00f8ll\u026f\u01ddn\u0287.", @@ -1759,6 +1777,8 @@ "asset_path is required": "\u0250ss\u01dd\u0287_d\u0250\u0287\u0265 \u1d09s \u0279\u01ddbn\u1d09\u0279\u01ddd", "bytes": "b\u028e\u0287\u01dds", "certificate": "\u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd", + "certificate.credential_url": "\u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd.\u0254\u0279\u01ddd\u01ddn\u0287\u1d09\u0250l_n\u0279l", + "certificate.display_name": "\u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd.d\u1d09sdl\u0250\u028e_n\u0250\u026f\u01dd", "close": "\u0254l\u00f8s\u01dd", "content group": "\u0254\u00f8n\u0287\u01ddn\u0287 \u0183\u0279\u00f8nd", "correct": "\u0254\u00f8\u0279\u0279\u01dd\u0254\u0287", @@ -1794,6 +1814,7 @@ "marked as answer %(time_ago)s": "\u026f\u0250\u0279\u029e\u01ddd \u0250s \u0250ns\u028d\u01dd\u0279 %(time_ago)s", "marked as answer %(time_ago)s by %(user)s": "\u026f\u0250\u0279\u029e\u01ddd \u0250s \u0250ns\u028d\u01dd\u0279 %(time_ago)s b\u028e %(user)s", "message": "\u026f\u01ddss\u0250\u0183\u01dd", + "minutes": "\u026f\u1d09nn\u0287\u01dds", "name": "n\u0250\u026f\u01dd", "off": "\u00f8\u025f\u025f", "on": "\u00f8n", diff --git a/cms/static/js/i18n/fr/djangojs.js b/cms/static/js/i18n/fr/djangojs.js index a03e281f7c..34f74e9ec6 100644 --- a/cms/static/js/i18n/fr/djangojs.js +++ b/cms/static/js/i18n/fr/djangojs.js @@ -125,7 +125,6 @@ "Account Settings page.": "Param\u00e8tres du compte", "Actions": "Actions", "Activate Your Account": "Activez votre compte", - "Activating an item in this group will spool the video to the corresponding time point. To skip transcript, go to previous item.": "L'activation d'un \u00e9l\u00e9ment de ce groupe jouera la vid\u00e9o \u00e0 partir de ce point. Pour passer la transcription, allez \u00e0 l'\u00e9l\u00e9ment pr\u00e9c\u00e9dent.", "Active Uploads": "T\u00e9l\u00e9chargement Actifs", "Add Cohort": "Ajouter une cohorte", "Add Component:": "Ajouter un composant :", @@ -649,14 +648,12 @@ "Only <%= fileTypes %> files can be uploaded. Please select a file ending in <%= fileExtensions %> to upload.": "Seuls les fichiers de type <%= fileTypes %> peuvent \u00eatre envoy\u00e9s. Merci de s\u00e9lectionner un fichier se terminant par <%= fileExtensions %> pour l'envoyer.", "Only properly formatted .csv files will be accepted.": "Seuls les fichiers au format .csv seront accept\u00e9s.", "Open Calculator": "Afficher la calculatrice", - "Open language menu": "Ouvrir le menu des langues", "Open/download this file": "Ouvrir/T\u00e9l\u00e9charger ce fichier", "OpenAssessment Save Error": "Erreur de la sauvegarde d'OpenAssessment", "Order No.": "Commande N\u00b0", "Organization": "Organisation", "Other": "Autre", "Page break": "Saut de page", - "Page number": "Num\u00e9ro de page", "Paragraph": "Paragraphe", "Password": "Mot de passe", "Password Reset Email Sent": "L'email de r\u00e9initialisation du mot de passe a \u00e9t\u00e9 envoy\u00e9", @@ -890,7 +887,6 @@ "Text": "Texte", "Text color": "Couleur du texte", "Text to display": "Texte \u00e0 afficher", - "Thank you! We have received your payment for %(courseName)s.": "Merci ! Nous avons re\u00e7u votre paiement pour %(courseName)s.", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre une adresse e-mail. Voulez-vous ajouter le prefix requis mailto: ?", "The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre un lien externe. Voulez-vous ajouter le pr\u00e9fixe http:// requis ?", "The cohort cannot be added": "La cohorte ne peut pas \u00eatre ajout\u00e9e", @@ -958,7 +954,6 @@ ], "This browser cannot play .mp4, .ogg, or .webm files.": "Ce navigateur ne peut pas lire les fichiers .mp4, .ogg, ou .webm", "This component has validation issues.": "Ce composant a des probl\u00e8mes de validation.", - "This edX learner is currently sharing a limited profile.": "Cette utilisateur partage actuellement un profil restreint.", "This learner will be removed from the team, allowing another learner to take the available spot.": "Cet apprenant sera supprim\u00e9 de l'\u00e9quipe, permettant \u00e0 un nouvel apprenant de prendre la place vacante.", "This link will open in a modal window": "Ce lien s'ouvrira dans une nouvelle fen\u00eatre contextuelle", "This link will open in a new browser window/tab": "Ce lien s'ouvrira dans une nouvelle fen\u00eatre ou onglet de votre navigateur", @@ -1096,7 +1091,6 @@ "You are about to send an email titled '<%= subject %>' to everyone who is staff or instructor on this course. Is this OK?": "Vous \u00eates sur le point d'envoyer un e-mail intitul\u00e9 '<%= subject %>' \u00e0 tous les membres du staff et enseignants. Voulez-vous continuer ?", "You are about to send an email titled '<%= subject %>' to yourself. Is this OK?": "Vous \u00eates sur le point d'envoyer un e-mail intitul\u00e9 '<%= subject %>' \u00e0 vous-m\u00eame. Voulez-vous continuer ?", "You are currently sharing a limited profile.": "Vous partagez actuellement votre profil restreint.", - "You are enrolling in: %(courseName)s": "Vous vous inscrivez \u00e0 : %(courseName)s", "You are not currently a member of any team.": "Actuellement, vous n'\u00eates membre d'aucune \u00e9quipe.", "You are now enrolled as a verified student for:": "Vous vous \u00eates maintenant engag\u00e9 en tant qu'\u00e9tudiant v\u00e9rifi\u00e9 pour :", "You can now enter your payment information and complete your enrollment.": "Vous pouvez maintenant entrer vos informations de paiement et terminer votre inscription.", @@ -1151,7 +1145,6 @@ "Your request could not be completed. Reload the page and try again.": "Votre demande n'a pas pu \u00eatre r\u00e9alis\u00e9e. Rafra\u00eechissez la page et r\u00e9essayez.", "Your upload of '{file}' failed.": "Le chargement de '{file}' a \u00e9chou\u00e9.", "Your upload of '{file}' succeeded.": "Chargement de '{file}' r\u00e9ussi.", - "Your verification status is good until %(verificationGoodUntil)s.": "Votre v\u00e9rification est valable jusqu'au %(verificationGoodUntil)s.", "Zoom In": "Zoomer", "Zoom Out": "D\u00e9zoomer ", "[no tags]": "[aucun tag]", diff --git a/cms/static/js/i18n/ko-kr/djangojs.js b/cms/static/js/i18n/ko-kr/djangojs.js index 9adef59bb6..d6dd0c42c2 100644 --- a/cms/static/js/i18n/ko-kr/djangojs.js +++ b/cms/static/js/i18n/ko-kr/djangojs.js @@ -79,7 +79,6 @@ "About me": "\uc790\uae30\uc18c\uac1c", "Account Settings": "\uacc4\uc815 \uc124\uc815", "Account Settings page.": "\uacc4\uc815 \uc124\uc815 \ud398\uc774\uc9c0", - "Activating an item in this group will spool the video to the corresponding time point. To skip transcript, go to previous item.": "\uc774 \uadf8\ub8f9\uc758 \ud56d\ubaa9 \ud65c\uc131\ud654\uac00 \uc77c\uce58\ud558\ub294 \uc2dc\uac04 \uc9c0\uc810\uc5d0 \ub3d9\uc601\uc0c1\uc744 \uc2a4\ud480\ud560 \uac83\uc785\ub2c8\ub2e4. \uc790\ub9c9\uc744 \ub118\uae30\ub824\uba74, \uc774\uc804 \ud56d\ubaa9\uc73c\ub85c \uac00\uc138\uc694. ", "Add Cohort": "\ud559\uc2b5\uc9d1\ub2e8 \ucd94\uac00\ud558\uae30", "Add Country": "\uad6d\uac00 \ucd94\uac00", "Add Students": "\ud559\uc2b5\uc790 \ucd94\uac00", diff --git a/cms/static/js/i18n/pt-br/djangojs.js b/cms/static/js/i18n/pt-br/djangojs.js index f5ee13448c..c5a397ee16 100644 --- a/cms/static/js/i18n/pt-br/djangojs.js +++ b/cms/static/js/i18n/pt-br/djangojs.js @@ -129,7 +129,6 @@ "- Sortable": "- Classific\u00e1veis", "": "", "%s": "%s", - "
  • Transcript will be displayed when ": "
  • Transcri\u00e7\u00e3o ser\u00e1 exibida quando", "A driver's license, passport, or government-issued ID with your name and photo.": "Uma carteira de motorista, um passaporte ou um documento de identidade oficial com o seu nome e foto.", "A driver's license, passport, or other government-issued ID with your name and photo": "Uma carteira de motorista, um passaporte ou outro documento de identidade oficial com o seu nome e foto", "A list of courses you have just enrolled in as a verified student": "Lista de cursos para quais voc\u00ea se inscreveu como um aluno verificado", @@ -147,7 +146,6 @@ "Actions": "A\u00e7\u00f5es", "Activate": "Ativar", "Activate Your Account": "Ativar a sua conta", - "Activating an item in this group will spool the video to the corresponding time point. To skip transcript, go to previous item.": "Ativar um item nesse grupo vai mover o v\u00eddeo para o ponto no tempo correspondente. Para pular a transcri\u00e7\u00e3o, v\u00e1 at\u00e9 o item anterior.", "Active Threads": "T\u00f3picos ativos", "Active Uploads": "Uploads ativos", "Add": "Adicionar", @@ -310,7 +308,6 @@ "Change My Email Address": "Alterar meu endere\u00e7o de E-mail", "Change image": "Trocar imagem", "Change the settings for %(display_name)s": "Alterar configura\u00e7\u00f5es para %(display_name)s", - "Chapter %s": "Cap\u00edtulo %s", "Chapter Asset": "Ativo do Cap\u00edtulo", "Chapter Name": "Nome do Cap\u00edtulo", "Chapter information": "Informa\u00e7\u00e3o do cap\u00edtulo", @@ -654,7 +651,6 @@ "General": "Geral", "Generate": "Emitir", "Generate Exception Certificates": "Gerar certificados de exce\u00e7\u00e3o", - "Generate a Certificate for all ": "Gerar um Certificado para todos", "Generate a Certificate for all users on the Exception list": "Gerar um certificado para todos os usu\u00e1rios na lista de exce\u00e7\u00f5es", "Generate the user's certificate": "Emitir certificado do usu\u00e1rio", "Get Credit": "Obter Cr\u00e9dito", @@ -774,7 +770,6 @@ "Keywords": "Palavras-chave", "LEARN MORE": "APRENDER MAIS", "Language": "Idioma", - "Language: Press the UP arrow key to enter the language menu, then use UP and DOWN arrow keys to navigate language options. Press ENTER to change to the selected language.": "Idioma: Pressione a tecla UP para entrar no menu de idioma, ent\u00e3o pressione as teclas UP e DOWN para navegar nas op\u00e7\u00f5es de idioma. Pressione ENTER para mudar para o idioma selecionado.", "Large": "Grande", "Last Activity %(date)s": "\u00daltima atividade %(date)s", "Last Edited:": "\u00daltima Edi\u00e7\u00e3o:", @@ -862,7 +857,6 @@ "Name of the signatory": "Nome da assinatura", "Name or short description of the configuration": "Nome ou descri\u00e7\u00e3o curta da configura\u00e7\u00e3o", "Never published": "Nunca publicado", - "New": "Novo", "New %(component_type)s": "Novos %(component_type)s", "New %(item_type)s": "Novo %(item_type)s", "New Address": "Novo Endere\u00e7o", @@ -911,13 +905,10 @@ "Numbered list": "Lista numerada", "OK": "OK", "Ok": "Ok", - "Once in position, use the camera button %(icon)s to capture your ID": "Uma vez em posi\u00e7\u00e3o, utilize o bot\u00e3o da c\u00e2mera %(icon)s para tirar a foto da sua identidade.", - "Once in position, use the camera button %(icon)s to capture your photo": "Quando estiver na posi\u00e7\u00e3o, use o bot\u00e3o da c\u00e2mera %(icon)s para capturar a sua foto", "Only <%= fileTypes %> files can be uploaded. Please select a file ending in <%= fileExtensions %> to upload.": "Apenas arquivos <%= fileTypes %> podem ser enviados. Por favor selecione uma extens\u00e3o de arquivo finalizando em <%= fileExtensions %> para enviar.", "Only properly formatted .csv files will be accepted.": "Apenas arquivos .csv formatados corretamente ser\u00e3o aceitos.", "Open": "Abrir", "Open Calculator": "Abrir calculadora", - "Open language menu": "Abrir menu de idiomas", "Open/download this file": "Abrir/baixar este arquivo", "OpenAssessment Save Error": "Erro ao salvar o OpenAssessment", "Optional Characteristics": "Caracter\u00edsticas Opcionais", @@ -929,7 +920,6 @@ "Organization of the signatory": "Organiza\u00e7\u00e3o do signat\u00e1rio", "Other": "Outro", "Page break": "Quebra de p\u00e1gina", - "Page number": "N\u00famero da p\u00e1gina", "Paragraph": "Par\u00e1grafo", "Password": "Senha", "Password Reset Email Sent": "O e-mail para redefinir a senha foi enviado", @@ -1007,7 +997,6 @@ "Proctored": "Supervisionado", "Proctored Exam": "Exame supervisionado", "Proctored exams are timed and they record video of each learner taking the exam. The videos are then reviewed to ensure that learners follow all examination rules.": "Exames supervisionados s\u00e3o cronometrados e eles gravam um v\u00eddeo de cada aluno fazendo a prova. Os v\u00eddeos s\u00e3o ent\u00e3o revisados para garantir que os alunos sigam as regras do exame.", - "Professional Certificate for %(courseName)s": "Certificado profissional para %(courseName)s", "Professional Education": "Educa\u00e7\u00e3o Profissional", "Professional Education Verified Certificate": "Certificado verificado de profissional de educa\u00e7\u00e3o", "Profile Image": "Imagem do perfil", @@ -1260,9 +1249,7 @@ "Textbook name is required": "O nome do livro texto \u00e9 obrigat\u00f3rio", "Thank you for submitting your financial assistance application for {course_name}! You can expect a response in 2-4 business days.": "Agradecemos por nos enviar o seu pedido de assist\u00eancia financeira para {course_name}! Voc\u00ea pode esperar uma resposta entre 2-4 dias \u00fateis.", "Thank you for submitting your photos. We will review them shortly. You can now sign up for any %(platformName)s course that offers verified certificates. Verification is good for one year. After one year, you must submit photos for verification again.": "Obrigado por enviar suas fotos. N\u00f3s vamos analis\u00e1-las rapidamente. Voc\u00ea pode inscrever-se para qualquer curso da plataforma %(platformName)s que ofere\u00e7a certificados verificados. A verifica\u00e7\u00e3o \u00e9 v\u00e1lida por um ano. Depois disso, voc\u00ea precisa enviar fotos para verificar novamente.", - "Thank you! We have received your payment for %(courseName)s.": "Obrigado! N\u00f3s recebemos o seu pagamento para o curso %(courseName)s.", "Thank you! We have received your payment for %(course_name)s.": "Obrigado! Recebemos o seu pagamento para %(course_name)s.", - "Thanks for returning to verify your ID in: %(courseName)s": "Obrigado por retornar para verificar sua identidade em: %(courseName)s", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "A URL que voc\u00ea inseriu parece ser um endere\u00e7o de e-mail. Deseja adicionar o prefixo obrigat\u00f3rio mailto:? ", "The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "A URL que voc\u00ea inseriu parece ser um link externo. Deseja adicionar o prefixo obrigat\u00f3rio http://?", "The cohort cannot be added": "O grupo n\u00e3o pode ser adicionado", @@ -1351,7 +1338,6 @@ "This configuration is currently used in content experiments. If you make changes to the groups, you may need to edit those experiments.": "Essa configura\u00e7\u00e3o est\u00e1 sendo usada em experimentos de conte\u00fado. Se fizer altera\u00e7\u00f5es aos grupos, voc\u00ea vai precisar editar os experimentos.", "This content group is used in one or more units.": "Este grupo de conte\u00fado \u00e9 utilizado em uma ou mais unidades.", "This content group is used in:": "Esse grupo de conte\u00fado \u00e9 utilizado em:", - "This edX learner is currently sharing a limited profile.": "Este estudante da edX est\u00e1 atualmente compartilhando um perfil limitado.", "This is the Description of the Group Configuration": "Esta \u00e9 a Descri\u00e7\u00e3o da Configura\u00e7\u00e3o do Grupo", "This is the Name of the Group Configuration": "Este \u00e9 o Nome da Configura\u00e7\u00e3o do Grupo", "This is the name of the group": "Esse \u00e9 o nome do grupo", @@ -1385,7 +1371,6 @@ "To receive a certificate, you must also verify your identity before %(date)s.": "Para receber um certificado, voc\u00ea tamb\u00e9m deve verificar sua identidade antes de %(date)s.", "To receive a certificate, you must also verify your identity.": "Para receber um certificado, voc\u00ea tamb\u00e9m deve verificar a sua identidade.", "To take a successful photo, make sure that:": "Para tirar uma foto corretamente, certifique-se que:", - "To use the current photo, select the camera button %(icon)s. To take another photo, select the retake button %(icon)s.": "Para usar a foto atual, selecione o %(icon)s do bot\u00e3o da c\u00e2mera. Para tirar outra foto, selecione o %(icon)s do bot\u00e3o tirar novamente.", "To verify your identity, you need a webcam and a government-issued photo ID.": "Para verificar sua identidade, voc\u00ea precisa de uma webcam e um documento com foto emitido pelo governo.", "Toggle Notifications Setting": "Alterar Configura\u00e7\u00f5es de Notifica\u00e7\u00e3o", "Tools": "Ferramentas", @@ -1397,7 +1382,6 @@ "Total Number": "N\u00famero Total", "Try the transaction again in a few minutes.": "Tente fazer esta transa\u00e7\u00e3o novamente em alguns minutos.", "Try using a different browser, such as Google Chrome.": "Tente usar um navegador diferente, como o Google Chrome.", - "Turn off transcript": "Desativar transcri\u00e7\u00f5es", "Turn off transcripts": "Desligar legendas", "Turn on closed captioning": "Ativar as legendas ocultas", "Turn on transcripts": "Ativar legendas", @@ -1433,7 +1417,6 @@ "Update team.": "Atualizar equipe.", "Updating with latest library content": "Atualizando com o conte\u00fado mais recente da biblioteca", "Upgrade Deadline": "Prazo final para atualiza\u00e7\u00e3o", - "Upgrade to a Verified Certificate for %(courseName)s": "Atualizar para um Certificado Verificado de %(courseName)s", "Upload": "Enviar", "Upload File": "Carregar arquivo", "Upload File and Assign Students": "Fa\u00e7a o upload do arquivo e a atribui\u00e7\u00e3o de Alunos.", @@ -1482,7 +1465,6 @@ "Verification Deadline": "Prazo de verifica\u00e7\u00e3o", "Verification checkpoint to be completed": "Ponto de verifica\u00e7\u00e3o a completar", "Verified Certificate": "Certificado Verificado", - "Verified Certificate for %(courseName)s": "Certificado verificado para %(courseName)s", "Verified Certificate upgrade": "Atualiza\u00e7\u00e3o do certificado verificado", "Verified Status": "Status verificado", "Verified mode price": "Pre\u00e7o de modo verificado", @@ -1558,7 +1540,6 @@ "What does %(platformName)s do with this photo?": "O que %(platformName)s faz com esta foto?", "What does this mean?": "O que isso significa?", "When you click \"Reset Password\", a message will be sent to your email address. Click the link in the message to reset your password.": "Quando voc\u00ea clicar em \"Redefinir senha\", uma mensagem ser\u00e1 enviada para o seu endere\u00e7o de e-mail. Clique no link na mensagem para redefinir sua senha.", - "When your face is in position, use the camera button %(icon)s below to take your photo.": "Quando seu rosto estiver posicionado, use o %(icon)s do bot\u00e3o da c\u00e2mera abaixo para tirar sua foto.", "Which timed transcript would you like to use?": "Qual transcri\u00e7\u00e3o sincronizada voc\u00ea gostaria de utilizar?", "Whole words": "Palavras completas", "Why does %(platformName)s need my photo?": "Por que %(platformName)s precisa da minha foto?", @@ -1576,11 +1557,8 @@ "You are about to send an email titled '<%= subject %>' to everyone who is staff or instructor on this course. Is this OK?": "Voc\u00ea est\u00e1 prestes a enviar um email com o t\u00edtulo '<%= subject %>' para todos da equipe ou os instrutores deste curso. Tem certeza?", "You are about to send an email titled '<%= subject %>' to yourself. Is this OK?": "Voc\u00ea est\u00e1 prestes a enviar um email com o t\u00edtulo '<%= subject %>' para si mesmo. Tem certeza?", "You are currently sharing a limited profile.": "Voc\u00ea est\u00e1 compartilhando um perfil limitado no momento.", - "You are enrolling in %(courseName)s": "Voc\u00ea est\u00e1 se matriculando em %(courseName)s", - "You are enrolling in: %(courseName)s": "Voc\u00ea est\u00e1 se inscrevendo em: %(courseName)s", "You are not currently a member of any team.": "No momento, voc\u00ea n\u00e3o \u00e9 membro de nenhuma equipe. ", "You are now enrolled as a verified student for:": "Voc\u00ea est\u00e1 inscrito como aluno verificado para:", - "You are upgrading your enrollment for: %(courseName)s": "Voc\u00ea est\u00e1 atualizando sua matr\u00edcula para: %(courseName)s", "You can now enter your payment information and complete your enrollment.": "Voc\u00ea pode preencher agora as informa\u00e7\u00f5es sobre o pagamento e completar a sua matr\u00edcula", "You can pay now even if you don't have the following items available, but you will need to have these by %(date)s to qualify to earn a Verified Certificate.": "Voc\u00ea pode pagar agora, mesmo que n\u00e3o tenha nenhum dos seguintes itens dispon\u00edveis, mas voc\u00ea ter\u00e1 que t\u00ea-los at\u00e9 %(date)s para se qualificar para um Certificado Verificado.", "You can pay now even if you don't have the following items available, but you will need to have these to qualify to earn a Verified Certificate.": "Voc\u00ea pode pagar agora, mesmo n\u00e3o tendo nenhum dos seguintes itens dispon\u00edveis, mas voc\u00ea ter\u00e1 que t\u00ea-los para se qualificar para um Certificado Verificado.", @@ -1652,7 +1630,6 @@ "Your team could not be updated.": "Sua equipe n\u00e3o p\u00f4de ser atualizada.", "Your upload of '{file}' failed.": "O carregamento do arquivo '{file}' falhou.", "Your upload of '{file}' succeeded.": "O carregamento do arquivo '{file}' foi conclu\u00eddo com sucesso.", - "Your verification status is good until %(verificationGoodUntil)s.": "Seu status de verifica\u00e7\u00e3o \u00e9 v\u00e1lido at\u00e9 %(verificationGoodUntil)s.", "Your video uploads are not complete.": "Os seus uploads de v\u00eddeo n\u00e3o est\u00e3o completos.", "Zoom In": "Aumentar a tela", "Zoom Out": "Diminuir a tela", @@ -1666,7 +1643,6 @@ "about a month": "aproximadamente um m\u00eas", "about a year": "aproximadamente um ano", "about an hour": "aproximadamente uma hora", - "additions to the Exception list": "adi\u00e7\u00f5es \u00e0 lista de exce\u00e7\u00e3o", "and others": "e outros", "anonymous": "an\u00f4nimo", "answer": "resposta", @@ -1713,7 +1689,6 @@ "or": "ou", "or create a new one here": "ou criar uma nova aqui", "or sign in with": "ou entrar com", - "path/to/introductionToCookieBaking-CH%d.pdf": "path/to/introductionToCookieBaking-CH%d.pdf", "post anonymously": "publicar anonimamente", "post anonymously to classmates": "publicar anonimamente para os colegas da turma", "posted %(time_ago)s by %(author)s": "postado %(time_ago)s por %(author)s", diff --git a/cms/static/js/i18n/ru/djangojs.js b/cms/static/js/i18n/ru/djangojs.js index b43e9dca0e..50ec9e152e 100644 --- a/cms/static/js/i18n/ru/djangojs.js +++ b/cms/static/js/i18n/ru/djangojs.js @@ -177,7 +177,6 @@ "<%= user %> has been successfully added to the exception list. Click Generate Exception Certificate below to send the certificate.": "<%= user %> \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d. \u0414\u043b\u044f \u0432\u044b\u0434\u0430\u0447\u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u00ab\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0434\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432\u00bb.", "": "", "%s": "%s", - "
  • Transcript will be displayed when ": "
  • \u041e\u0446\u0435\u043d\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b, \u043a\u043e\u0433\u0434\u0430", "A driver's license, passport, or government-issued ID with your name and photo.": "\u0412\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d\u0438\u0435, \u043f\u0430\u0441\u043f\u043e\u0440\u0442 \u0438\u043b\u0438 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d\u0438\u0435 \u043b\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0446\u0430 \u0441 \u0432\u0430\u0448\u0438\u043c\u0438 \u0438\u043c\u0435\u043d\u0435\u043c \u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0435\u0439.", "A driver's license, passport, or other government-issued ID with your name and photo": "\u0412\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d\u0438\u0435, \u043f\u0430\u0441\u043f\u043e\u0440\u0442 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0446\u0430 \u0441 \u0432\u0430\u0448\u0438\u043c\u0438 \u0438\u043c\u0435\u043d\u0435\u043c \u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0435\u0439", "A list of courses you have just enrolled in as a verified student": "\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u0443\u0440\u0441\u043e\u0432, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u0447\u0438\u0441\u043b\u0435\u043d\u044b", @@ -196,7 +195,6 @@ "Actions": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f", "Activate": "\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c", "Activate Your Account": "\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0439\u0442\u0435 \u0421\u0432\u043e\u044e \u0423\u0447\u0451\u0442\u043d\u0443\u044e \u0417\u0430\u043f\u0438\u0441\u044c", - "Activating an item in this group will spool the video to the corresponding time point. To skip transcript, go to previous item.": "\u041f\u0440\u0438 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u043f\u0443\u043d\u043a\u0442\u0430 \u0432 \u044d\u0442\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u043f\u0435\u0440\u0435\u043c\u043e\u0442\u043a\u0430 \u0432\u0438\u0434\u0435\u043e \u043a \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u0435. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0442\u0438\u0442\u0440\u044b, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u043f\u0443\u043d\u043a\u0442\u0443.", "Active Threads": "\u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0442\u0435\u043c\u044b", "Active Uploads": "\u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438", "Add": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c", @@ -363,7 +361,6 @@ "Change My Email Address": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b", "Change image": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435", "Change the settings for %(display_name)s": "%(display_name)s: \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 ", - "Chapter %s": "\u0413\u043b\u0430\u0432\u0430 %s", "Chapter Asset": "\u0410\u043a\u0442\u0438\u0432 \u0433\u043b\u0430\u0432\u044b", "Chapter Name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0433\u043b\u0430\u0432\u044b", "Chapter information": "\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0433\u043b\u0430\u0432\u0435", @@ -720,7 +717,6 @@ "General": "\u041e\u0431\u0449\u0435\u0435", "Generate": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c", "Generate Exception Certificates": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0434\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432", - "Generate a Certificate for all ": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0434\u043b\u044f \u0432\u0441\u0435\u0445", "Generate a Certificate for all users on the Exception list": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439", "Generate the user's certificate": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442", "Get Credit": "\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u0430\u0447\u0451\u0442", @@ -843,7 +839,6 @@ "Keywords": "\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430", "LEARN MORE": "\u041f\u041e\u0414\u0420\u041e\u0411\u041d\u0415\u0415", "Language": "\u042f\u0437\u044b\u043a", - "Language: Press the UP arrow key to enter the language menu, then use UP and DOWN arrow keys to navigate language options. Press ENTER to change to the selected language.": "\u042f\u0437\u044b\u043a: \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u0441\u043e \u0441\u0442\u0440\u0435\u043b\u043a\u043e\u0439 \u0432\u0432\u0435\u0440\u0445 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u044f\u0437\u044b\u043a\u0430, \u0437\u0430\u0442\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u0432\u0432\u0435\u0440\u0445 \u0438 \u0432\u043d\u0438\u0437 \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043f\u043e \u043c\u0435\u043d\u044e. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 ENTER \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u0430.", "Large": "\u0411\u043e\u043b\u044c\u0448\u043e\u0439", "Last Activity %(date)s": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c %(date)s", "Last Edited:": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f", @@ -937,7 +932,6 @@ "Name of the signatory": "\u0418\u043c\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f, \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442", "Name or short description of the configuration": "\u0418\u043c\u044f \u0438 \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0433\u0440\u0443\u043f\u043f", "Never published": "\u0420\u0430\u043d\u0435\u0435 \u043d\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u043e\u0441\u044c", - "New": "\u041d\u043e\u0432\u044b\u0439", "New %(component_type)s": "\u041d\u043e\u0432\u044b\u0439 %(component_type)s", "New %(item_type)s": "\u041d\u043e\u0432\u0430\u044f %(item_type)s", "New Address": "\u041d\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441", @@ -987,13 +981,10 @@ "Numbered list": "\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a", "OK": "\u041e\u041a", "Ok": "\u041e\u043a", - "Once in position, use the camera button %(icon)s to capture your ID": "\u041a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442\u0435 \u0433\u043e\u0442\u043e\u0432\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u043a\u0430\u043c\u0435\u0440\u044b %(icon)s, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a \u0441\u0432\u043e\u0435\u0433\u043e \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d\u0438\u044f \u043b\u0438\u0447\u043d\u043e\u0441\u0442\u0438", - "Once in position, use the camera button %(icon)s to capture your photo": "\u041a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442\u0435 \u0433\u043e\u0442\u043e\u0432\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u043a\u0430\u043c\u0435\u0440\u044b %(icon)s, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a", "Only <%= fileTypes %> files can be uploaded. Please select a file ending in <%= fileExtensions %> to upload.": "\u0422\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u044b \u0442\u0438\u043f\u043e\u0432 <%= fileTypes %> \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c <%= fileExtensions %>.", "Only properly formatted .csv files will be accepted.": "\u0422\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b .csv \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u043d\u044f\u0442\u044b.", "Open": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c", "Open Calculator": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440", - "Open language menu": "\u0412\u044b\u0431\u043e\u0440 \u044f\u0437\u044b\u043a\u0430", "Open/download this file": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c/\u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0444\u0430\u0439\u043b", "OpenAssessment Save Error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f OpenAssessment", "Optional Characteristics": "\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b", @@ -1005,7 +996,6 @@ "Organization of the signatory": "\u041c\u0435\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f, \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442", "Other": "\u0414\u0440\u0443\u0433\u043e\u0435", "Page break": "\u041a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b", - "Page number": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b", "Paragraph": "\u0410\u0431\u0437\u0430\u0446", "Password": "\u041f\u0430\u0440\u043e\u043b\u044c", "Password Reset Email Sent": "\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e \u0441\u0431\u0440\u043e\u0441\u0443 \u043f\u0430\u0440\u043e\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b", @@ -1088,7 +1078,6 @@ "Proctored": "\u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u043e\u0435", "Proctored Exam": "\u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u043e\u0435 \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0435", "Proctored exams are timed and they record video of each learner taking the exam. The videos are then reviewed to ensure that learners follow all examination rules.": "\u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u0435 \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u043c \u0438\u0437 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u0432\u0435\u0434\u0451\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u043e\u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435. \u0417\u0430\u0442\u0435\u043c \u0432\u0438\u0434\u0435\u043e\u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0438 \u043f\u0440\u0430\u0432\u0438\u043b.", - "Professional Certificate for %(courseName)s": "\u0421\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 %(courseName)s", "Professional Education": "\u041f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435", "Professional Education Verified Certificate": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u043e \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438", "Profile Image": "\u0424\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f", @@ -1350,9 +1339,7 @@ "Textbook name is required": "\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u0430", "Thank you for submitting your financial assistance application for {course_name}! You can expect a response in 2-4 business days.": "\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u043c \u0432\u0430\u0441 \u0437\u0430 \u043f\u043e\u0434\u0430\u0447\u0443 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0433\u0440\u0430\u043d\u0442 \u043f\u043e \u043a\u0443\u0440\u0441\u0443 {course_name}! \u0412\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043e\u0442\u0432\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 2-4 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0434\u043d\u044f.", "Thank you for submitting your photos. We will review them shortly. You can now sign up for any %(platformName)s course that offers verified certificates. Verification is good for one year. After one year, you must submit photos for verification again.": "\u0421\u043f\u0430\u0441\u0438\u0431\u043e, \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0444\u043e\u0442\u043e! \u041c\u044b \u0441\u043a\u043e\u0440\u043e \u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c. \u0421\u0435\u0439\u0447\u0430\u0441 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 \u043a\u0443\u0440\u0441\u043e\u0432 %(platformName)s, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u044b\u0435 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b. \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043b\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0434\u0438\u043d \u0433\u043e\u0434. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0444\u043e\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e.", - "Thank you! We have received your payment for %(courseName)s.": "\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u043c \u0432\u0430\u0441! \u0412\u0430\u0448 \u043f\u043b\u0430\u0442\u0451\u0436 \u0437\u0430 \u043a\u0443\u0440\u0441 %(courseName)s \u043f\u043e\u043b\u0443\u0447\u0435\u043d.", "Thank you! We have received your payment for %(course_name)s.": "\u0421\u043f\u0430\u0441\u0438\u0431\u043e! \u0412\u0430\u0448 \u043f\u043b\u0430\u0442\u0451\u0436 \u043f\u043e \u043a\u0443\u0440\u0441\u0443 \u00ab%(course_name)s\u00bb \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d.", - "Thanks for returning to verify your ID in: %(courseName)s": "\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u043c \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432\u044b \u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0438 \u0441\u0432\u043e\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043a\u0443\u0440\u0441\u0435: %(courseName)s", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0410\u0434\u0440\u0435\u0441 URL, \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u0432\u0430\u043c\u0438, \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u00abmailto:\u00bb?", "The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "\u0410\u0434\u0440\u0435\u0441 URL, \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u0432\u0430\u043c\u0438, \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u0441\u044b\u043b\u043a\u0443. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u00abhttp://\u00bb?", "The certificate for this learner has been re-validated and the system is re-running the grade for this learner.": "\u0421\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043f\u0435\u0440\u0435\u0441\u0447\u0451\u0442 \u043e\u0446\u0435\u043d\u043a\u0438.", @@ -1447,7 +1434,6 @@ "This configuration is currently used in content experiments. If you make changes to the groups, you may need to edit those experiments.": "\u042d\u0442\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430.\u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u0433\u0440\u0443\u043f\u043f\u044b, \u0432\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b", "This content group is used in one or more units.": "\u042d\u0442\u0430 \u0433\u0440\u0443\u043f\u043f\u0430 \u043f\u043e \u0438\u0437\u0443\u0447\u0430\u0435\u043c\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u043c \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0431\u043b\u043e\u043a\u0430\u0445", "This content group is used in:": "\u042d\u0442\u0430 \u0433\u0440\u0443\u043f\u043f\u0430 \u043f\u043e \u0438\u0437\u0443\u0447\u0430\u0435\u043c\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0431\u043b\u043e\u043a\u0430\u0445:", - "This edX learner is currently sharing a limited profile.": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043b \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0432\u043e\u0435\u043c\u0443 \u043f\u0440\u043e\u0444\u0438\u043b\u044e.", "This image is for decorative purposes only and does not require a description.": "\u042d\u0442\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0446\u0435\u043b\u0435\u0439 \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f.", "This is the Description of the Group Configuration": "\u042d\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0433\u0440\u0443\u043f\u043f", "This is the Name of the Group Configuration": "\u042d\u0442\u043e \u0438\u043c\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0433\u0440\u0443\u043f\u043f", @@ -1483,7 +1469,6 @@ "To receive a certificate, you must also verify your identity.": "\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u043b\u0438\u0447\u043d\u043e\u0441\u0442\u044c.", "To receive credit on a problem, you must click \"Check\" or \"Final Check\" on it before you select \"End My Exam\".": "\u0427\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u0430 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u0447\u0451\u0442\u043d\u044b\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b, \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0436\u0430\u0442\u0438\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u00ab\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0441\u0434\u0430\u0447\u0443 \u044d\u043a\u0437\u0430\u043c\u0435\u043d\u0430\u00bb \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0436\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443 \u00ab\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u00bb \u0438\u043b\u0438 \u00ab\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c/\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u00bb \u0432 \u044d\u0442\u043e\u043c \u0437\u0430\u0434\u0430\u043d\u0438\u0438.", "To take a successful photo, make sure that:": "\u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u0434\u0430\u0447\u043d\u044b\u0439 \u0441\u043d\u0438\u043c\u043e\u043a, \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044c\u0442\u0435\u0441\u044c, \u0447\u0442\u043e:", - "To use the current photo, select the camera button %(icon)s. To take another photo, select the retake button %(icon)s.": "\u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044e, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043a\u0430\u043c\u0435\u0440\u044b %(icon)s. \u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044e, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u043f\u0435\u0440\u0435\u0441\u044a\u0451\u043c\u043a\u0438 %(icon)s.", "To verify your identity, you need a webcam and a government-issued photo ID.": "\u0414\u043b\u044f \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f, \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0432\u0435\u0431-\u043a\u0430\u043c\u0435\u0440\u0430 \u0438 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d\u0438\u0435 \u043b\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u0441 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0435\u0439: \u043f\u0430\u0441\u043f\u043e\u0440\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442.", "Toggle Notifications Setting": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439", "Tools": "\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b", @@ -1495,7 +1480,6 @@ "Total Number": "\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e", "Try the transaction again in a few minutes.": "\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0451 \u0440\u0430\u0437 \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043f\u043b\u0430\u0442\u0451\u0436 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435.", "Try using a different browser, such as Google Chrome.": "\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Google Chrome.", - "Turn off transcript": "\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043a\u0440\u0438\u043f\u0442", "Turn off transcripts": "\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043a\u0440\u0438\u043f\u0442\u044b", "Turn on closed captioning": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u044b", "Turn on transcripts": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043a\u0440\u0438\u043f\u0442\u044b", @@ -1532,7 +1516,6 @@ "Update team.": "\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b", "Updating with latest library content": "\u041f\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438", "Upgrade Deadline": "\u041f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0440\u043e\u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f", - "Upgrade to a Verified Certificate for %(courseName)s": "\u041f\u043e\u0432\u044b\u0441\u044c\u0442\u0435 \u0434\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 %(courseName)s", "Upload": "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c", "Upload File": "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0430\u0439\u043b", "Upload File and Assign Students": "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0430\u0439\u043b \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0445\u0441\u044f", @@ -1583,7 +1566,6 @@ "Verification Deadline": "\u0421\u0440\u043e\u043a \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f", "Verification checkpoint to be completed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0439\u0442\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043b\u0438\u0447\u043d\u043e\u0441\u0442\u0438", "Verified Certificate": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442", - "Verified Certificate for %(courseName)s": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 %(courseName)s", "Verified Certificate upgrade": "\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430", "Verified Status": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0443\u0441", "Verified mode price": "\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430", @@ -1662,7 +1644,6 @@ "What does %(platformName)s do with this photo?": "\u0414\u043b\u044f \u0447\u0435\u0433\u043e %(platformName)s \u043d\u0443\u0436\u0435\u043d \u044d\u0442\u043e\u0442 \u0441\u043d\u0438\u043c\u043e\u043a?", "What does this mean?": "\u0427\u0442\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442?", "When you click \"Reset Password\", a message will be sent to your email address. Click the link in the message to reset your password.": "\u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u00ab\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c\u00bb \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0432\u0430\u0448\u0435\u0439 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u043b\u0430\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0432 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438.", - "When your face is in position, use the camera button %(icon)s below to take your photo.": "\u041a\u043e\u0433\u0434\u0430 \u0432\u0430\u0448\u0435 \u043b\u0438\u0446\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u043f\u0430\u0434\u0451\u0442 \u0432 \u043a\u0430\u0434\u0440, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u043d\u0438\u0436\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043a\u0430\u043c\u0435\u0440\u044b %(icon)s, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a.", "Which timed transcript would you like to use?": "\u041a\u0430\u043a\u0438\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u044b \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c?", "Whole words": "\u0421\u043b\u043e\u0432\u0430 \u0446\u0435\u043b\u0438\u043a\u043e\u043c", "Why does %(platformName)s need my photo?": "\u0417\u0430\u0447\u0435\u043c %(platformName)s \u043d\u0443\u0436\u043d\u0430 \u043c\u043e\u044f \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f?", @@ -1680,11 +1661,8 @@ "You are about to send an email titled '<%= subject %>' to everyone who is staff or instructor on this course. Is this OK?": "\u0412\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c '<%= subject %>' \u0432\u0441\u0435\u043c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c \u0438 \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043a\u0443\u0440\u0441\u0430. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c?", "You are about to send an email titled '<%= subject %>' to yourself. Is this OK?": "\u0412\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c '<%= subject %>' \u043d\u0430 \u0441\u0432\u043e\u0439 \u0430\u0434\u0440\u0435\u0441. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c?", "You are currently sharing a limited profile.": "\u0421\u0435\u0439\u0447\u0430\u0441 \u0441\u043e\u043a\u0443\u0440\u0441\u043d\u0438\u043a\u0430\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0432\u0430\u0448\u0435\u043c\u0443 \u043f\u0440\u043e\u0444\u0438\u043b\u044e.", - "You are enrolling in %(courseName)s": "\u0412\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0435\u0441\u044c \u043d\u0430 \u043a\u0443\u0440\u0441: %(courseName)s", - "You are enrolling in: %(courseName)s": "\u0412\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0435\u0441\u044c \u043d\u0430 \u043a\u0443\u0440\u0441: %(courseName)s", "You are not currently a member of any team.": "\u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b \u043d\u0435 \u0432\u0445\u043e\u0434\u0438\u0442\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432 \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.", "You are now enrolled as a verified student for:": "\u0412\u044b \u0437\u0430\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u0443\u0440\u0441\u044b:", - "You are upgrading your enrollment for: %(courseName)s": "\u0412\u044b \u043c\u0435\u043d\u044f\u0435\u0442\u0435 \u0444\u043e\u0440\u043c\u0443 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0430 \u043a\u0443\u0440\u0441: %(courseName)s", "You can now enter your payment information and complete your enrollment.": "\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0432\u0435\u0441\u0442\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043b\u0430\u0442\u0435\u0436\u0435 \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e.", "You can pay now even if you don't have the following items available, but you will need to have these by %(date)s to qualify to earn a Verified Certificate.": "\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0441\u0435\u0439\u0447\u0430\u0441, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438 \u0432\u0441\u0435 \u0448\u0430\u0433\u0438. \u041d\u043e \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0438\u0445 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043d\u0435 \u043f\u043e\u0437\u0434\u043d\u0435\u0435 %(date)s , \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442.", "You can pay now even if you don't have the following items available, but you will need to have these to qualify to earn a Verified Certificate.": "\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0441\u0435\u0439\u0447\u0430\u0441, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438 \u0432\u0441\u0435 \u0448\u0430\u0433\u0438. \u041d\u043e \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0438\u0445 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442.", @@ -1756,7 +1734,6 @@ "Your team could not be updated.": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0432\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.", "Your upload of '{file}' failed.": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 '{file}'", "Your upload of '{file}' succeeded.": "\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 '{file}' \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430", - "Your verification status is good until %(verificationGoodUntil)s.": "\u0412\u0430\u0448 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u043e %(verificationGoodUntil)s.", "Your video uploads are not complete.": "\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u0438\u0434\u0435\u043e \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430.", "Zoom In": "\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c", "Zoom Out": "\u041e\u0442\u0434\u0430\u043b\u0438\u0442\u044c", @@ -1772,7 +1749,6 @@ "about a month": "\u043e\u043a\u043e\u043b\u043e \u043c\u0435\u0441\u044f\u0446\u0430", "about a year": "\u043e\u043a\u043e\u043b\u043e \u0433\u043e\u0434\u0430", "about an hour": "\u043e\u043a\u043e\u043b\u043e \u0447\u0430\u0441\u0430", - "additions to the Exception list": "\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439", "and others": "\u0438 \u0434\u0440\u0443\u0433\u0438\u0435", "anonymous": "\u0430\u043d\u043e\u043d\u0438\u043c", "answer": "\u043e\u0442\u0432\u0435\u0442", @@ -1822,7 +1798,6 @@ "or": "\u0438\u043b\u0438", "or create a new one here": "\u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0432 \u044d\u0442\u043e\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u0435", "or sign in with": "\u0438\u043b\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e", - "path/to/introductionToCookieBaking-CH%d.pdf": "\u043f\u0443\u0442\u044c/\u043a/\u0432\u0432\u043e\u0434\u043d\u0430\u044f\u041f\u043e\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u044eCookie-\u0413\u041b%d.pdf", "post anonymously": "\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u043e", "post anonymously to classmates": "\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u0438\u043a\u043e\u0432", "posted %(time_ago)s by %(author)s": "\u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043e %(time_ago)s \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c %(author)s", diff --git a/cms/static/js/i18n/zh-cn/djangojs.js b/cms/static/js/i18n/zh-cn/djangojs.js index a21596d8db..768bd7d326 100644 --- a/cms/static/js/i18n/zh-cn/djangojs.js +++ b/cms/static/js/i18n/zh-cn/djangojs.js @@ -521,8 +521,6 @@ "Numbered list": "\u7f16\u53f7\u5217\u8868", "OK": "\u662f\u7684", "Ok": "\u786e\u5b9a", - "Once in position, use the camera button %(icon)s to capture your ID": "\u4e00\u65e6\u4f60\u5c06\u8eab\u4efd\u8bc1\u4ef6\u6446\u653e\u59a5\u5f53\uff0c\u8bf7\u7528\u76f8\u673a\u6309\u94ae%(icon)s\u6765\u62cd\u7167", - "Once in position, use the camera button %(icon)s to capture your photo": "\u4e00\u4f46\u4f60\u5df2\u7ecf\u5c31\u4f4d\uff0c\u8bf7\u7528\u76f8\u673a\u6309\u94ae%(icon)s\u6765\u62cd\u7167", "Only <%= fileTypes %> files can be uploaded. Please select a file ending in <%= fileExtensions %> to upload.": "\u53ea\u6709 <%= fileTypes %> \u683c\u5f0f\u7684\u6587\u4ef6\u53ef\u4ee5\u4e0a\u4f20\u3002\u8bf7\u9009\u62e9\u4e00\u4e2a\u4ee5 <%= fileExtensions %> \u7ed3\u5c3e\u7684\u6587\u4ef6\u4e0a\u4f20\u3002", "Only properly formatted .csv files will be accepted.": "\u53ea\u6709\u6807\u51c6\u7684CSV\u683c\u5f0f\u6587\u4ef6\u4f1a\u88ab\u63a5\u53d7\u3002", "Open Calculator": "\u6253\u5f00\u8ba1\u7b97\u5668", @@ -717,8 +715,6 @@ "Text color": "\u6587\u672c\u989c\u8272", "Text to display": "\u8981\u663e\u793a\u7684\u6587\u5b57", "Thank you for submitting your photos. We will review them shortly. You can now sign up for any %(platformName)s course that offers verified certificates. Verification is good for one year. After one year, you must submit photos for verification again.": "\u611f\u8c22\u4f60\u63d0\u4ea4\u7167\u7247\uff0c\u6211\u4eec\u5c06\u4e8e\u7a0d\u540e\u8fdb\u884c\u5ba1\u6838\u3002\u4f60\u73b0\u5728\u5c31\u53ef\u4ee5\u6ce8\u518c%(platformName)s\u4e0a\u4efb\u610f\u63d0\u4f9b\u8ba4\u8bc1\u8bc1\u4e66\u7684\u8bfe\u7a0b\u3002\u8ba4\u8bc1\u53ea\u5728\u4e00\u5e74\u5185\u6709\u6548\uff0c\u4e00\u5e74\u540e\uff0c\u4f60\u5fc5\u987b\u8981\u63d0\u4ea4\u7167\u7247\u91cd\u65b0\u8ba4\u8bc1\u3002", - "Thank you! We have received your payment for %(courseName)s.": "\u8c22\u8c22\uff01\u6211\u4eec\u5df2\u7ecf\u6536\u5230\u4f60\u5bf9%(courseName)s\u7684\u4ed8\u6b3e\u3002", - "Thanks for returning to verify your ID in: %(courseName)s": "\u611f\u8c22\u4f60\u56de\u6765\u4e3a%(courseName)s\u9a8c\u8bc1\u4f60\u7684\u8eab\u4efd\u8bc1\u4ef6", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u8f93\u5165\u7684URL\u4f3c\u4e4e\u662f\u4e00\u4e2a\u7535\u5b50\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0a\u201cmailto:\u201d\u524d\u7f00\u5417\uff1f", "The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "\u8f93\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0a\u201chttp://\u201d\u524d\u7f00\u5417\uff1f", "The cohort cannot be added": "\u8be5\u7fa4\u7ec4\u4e0d\u80fd\u6dfb\u52a0", @@ -877,9 +873,7 @@ "You are about to send an email titled '<%= subject %>' to ALL (everyone who is enrolled in this course as student, staff, or instructor). Is this OK?": "\u60a8\u5373\u5c06\u5411\u9009\u4fee\u8be5\u8bfe\u7a0b\u7684\u6240\u6709\u4eba(\u9009\u8bfe\u7684\u5b66\u751f\u3001\u6559\u5458\u548c\u4e3b\u8bb2\u6559\u5e08)\u53d1\u9001\u4e00\u5c01\u6807\u9898\u4e3a\u201c<%= subject %>\u201d\u7684\u90ae\u4ef6\uff0c\u786e\u8ba4\u5417\uff1f", "You are about to send an email titled '<%= subject %>' to everyone who is staff or instructor on this course. Is this OK?": "\u60a8\u51c6\u5907\u5411\u8be5\u8bfe\u7a0b\u7684\u6240\u6709\u6559\u5458\u548c\u4e3b\u8bb2\u6559\u5e08\u53d1\u9001\u4e00\u5c01\u6807\u9898\u4e3a\u201c<%= subject %>\u201d\u7684\u90ae\u4ef6\uff0c\u786e\u8ba4\u5417\uff1f", "You are about to send an email titled '<%= subject %>' to yourself. Is this OK?": "\u4f60\u51c6\u5907\u5411\u81ea\u5df1\u53d1\u9001\u4e00\u5c01\u6807\u9898\u4e3a\u201c<%= subject %>\u201d\u7684\u90ae\u4ef6\uff0c\u786e\u8ba4\u5417\uff1f", - "You are enrolling in: %(courseName)s": "\u4f60\u5373\u5c06\u9009\u4fee\uff1a%(courseName)s", "You are now enrolled as a verified student for:": "\u4f60\u73b0\u5728\u6b63\u4ee5\u5df2\u8ba4\u8bc1\u5b66\u751f\u7684\u8eab\u4efd\u9009\u4fee\uff1a", - "You are upgrading your enrollment for: %(courseName)s": "\u4f60\u6b63\u5728\u4e3a%(courseName)s\u5347\u7ea7\u4f60\u7684\u9009\u8bfe\u7c7b\u578b", "You can now enter your payment information and complete your enrollment.": "\u4f60\u53ef\u4ee5\u73b0\u5728\u5c31\u8f93\u5165\u652f\u4ed8\u4fe1\u606f\u5e76\u5b8c\u6210\u9009\u8bfe\u3002", "You can pay now even if you don't have the following items available, but you will need to have these by %(date)s to qualify to earn a Verified Certificate.": "\u5373\u4f7f\u4f60\u6ca1\u6709\u6ee1\u8db3\u4e0b\u9762\u8fd9\u4e9b\u8981\u6c42\uff0c\u4f60\u4e5f\u53ef\u4ee5\u73b0\u5728\u5c31\u4ed8\u6b3e\uff1b\u4f46\u662f\u4f60\u53ea\u6709\u5728%(date)s\u4e4b\u524d\u6ee1\u8db3\u8fd9\u4e9b\u8981\u6c42\u624d\u6709\u8d44\u683c\u83b7\u5f97\u4e00\u4efd\u5df2\u8ba4\u8bc1\u7684\u8bc1\u4e66\u3002", "You can pay now even if you don't have the following items available, but you will need to have these to qualify to earn a Verified Certificate.": "\u5373\u4f7f\u4f60\u6ca1\u6709\u6ee1\u8db3\u4e0b\u9762\u8fd9\u4e9b\u8981\u6c42\uff0c\u4f60\u4e5f\u53ef\u4ee5\u73b0\u5728\u5c31\u4ed8\u6b3e\uff1b\u4f46\u662f\u4f60\u53ea\u6709\u6ee1\u8db3\u4e86\u8fd9\u4e9b\u8981\u6c42\u624d\u6709\u8d44\u683c\u83b7\u5f97\u4e00\u4efd\u5df2\u8ba4\u8bc1\u7684\u8bc1\u4e66\u3002", @@ -923,7 +917,6 @@ "Your post will be discarded.": "\u60a8\u7684\u5e16\u5b50\u5c06\u88ab\u64a4\u9500\u3002", "Your upload of '{file}' failed.": "\u4f60\u7684\u6587\u4ef6\u201c{file}\u201d\u4e0a\u4f20\u5931\u8d25\u3002", "Your upload of '{file}' succeeded.": "\u4f60\u7684\u6587\u4ef6\u201c{file}\u201d\u4e0a\u4f20\u6210\u529f\u3002", - "Your verification status is good until %(verificationGoodUntil)s.": "\u5728%(verificationGoodUntil)s\u4e4b\u524d\u60a8\u7684\u9a8c\u8bc1\u72b6\u6001\u90fd\u6709\u6548\u3002", "a day": "\u4e00\u5929", "about %d hour": [ "\u5927\u7ea6 %d \u5c0f\u65f6" diff --git a/conf/locale/ar/LC_MESSAGES/django.mo b/conf/locale/ar/LC_MESSAGES/django.mo index b27593cc1a70881ed32bd1898f18cda47354bfa6..15c7bae25f3a86959a03fe6c07ab5344e6e0a147 100644 GIT binary patch delta 82316 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%0A33gOQJ^vGxwP0$G5!C0S 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 F^dCr+48Q;Y delta 85045 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 KA7A?^3;zpdZz!+; diff --git a/conf/locale/ar/LC_MESSAGES/django.po b/conf/locale/ar/LC_MESSAGES/django.po index d214544882..3c7d5cffd4 100644 --- a/conf/locale/ar/LC_MESSAGES/django.po +++ b/conf/locale/ar/LC_MESSAGES/django.po @@ -147,7 +147,7 @@ msgid "" msgstr "" "Project-Id-Version: edx-platform\n" "Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" -"POT-Creation-Date: 2016-03-30 19:39+0000\n" +"POT-Creation-Date: 2016-04-15 11:05+0000\n" "PO-Revision-Date: 2015-12-07 09:55+0000\n" "Last-Translator: Soha Assali \n" "Language-Team: Arabic (http://www.transifex.com/open-edx/edx-platform/language/ar/)\n" @@ -414,6 +414,10 @@ msgstr "" "لا يُسمح في أوضاع التعليم المهنية تحديد مجموعة تواريخ وأوقات انتهاء " "الاستحقاق." +#: common/djangoapps/course_modes/models.py +msgid "Verified modes cannot be free." +msgstr "" + #: common/djangoapps/course_modes/models.py msgid "" "The time period before a course ends in which a course mode will expire" @@ -454,6 +458,7 @@ msgid "Student" msgstr "الطالب" #: common/djangoapps/embargo/forms.py +#: lms/djangoapps/verified_track_content/forms.py msgid "COURSE NOT FOUND. Please check that the course ID is valid." msgstr "" "عذرًا، لم نتمكّن من إيجاد المساق. يُرجى التأكّد من صحّة الرقم التعريفي " @@ -4424,6 +4429,83 @@ msgstr "جميع الكلمات المحتملة من جميع الطلّاب." msgid "Top num_top_words words for word cloud." msgstr "أفضل num_top_words كلمات بالنسبة لسحابة الكلمات." +#: lms/djangoapps/badges/events/course_complete.py +msgid "" +"Completed the course \"{course_name}\" ({course_mode}, {start_date} - " +"{end_date})" +msgstr "" +"استُكمِل المساق \"{course_name}\" ({course_mode}, {start_date} - {end_date})" + +#: lms/djangoapps/badges/events/course_complete.py +msgid "Completed the course \"{course_name}\" ({course_mode})" +msgstr "لقد أتممت المساق \"{course_name}\" ({course_mode})" + +#: lms/djangoapps/badges/models.py +msgid "The badge image must be square." +msgstr "يجب أن تكون صورة الشارة مربَّعة." + +#: lms/djangoapps/badges/models.py +msgid "The badge image file size must be less than 250KB." +msgstr "يجب ألا يزيد حجم ملف صورة الشارة عن 250 كيلو بايت." + +#: lms/djangoapps/badges/models.py +msgid "This value must be all lowercase." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The course mode for this badge image. For example, \"verified\" or \"honor\"." +msgstr "" +"وضع المساق الموفق لصورة الشارة هذه. مثلًا، \"موثَّقة\" أو \"شهادة ميثاق " +"الشرف\"" + +#: lms/djangoapps/badges/models.py +msgid "" +"Badge images must be square PNG files. The file size should be under 250KB." +msgstr "" +"يجب أن تكون صور الشارات ملفّات صور مربّعة بصيغة PNG. وألا يزيد حجم كل ملفّ " +"عن 250 كيلو بايت." + +#: lms/djangoapps/badges/models.py +msgid "" +"Set this value to True if you want this image to be the default image for " +"any course modes that do not have a specified badge image. You can have only" +" one default image." +msgstr "" +"اضبط هذه القيمة على \"صحيح\" إذا أردت اعتماد هذه الصورة كصورة افتراضية لجميع" +" أوضاع المساق غير الموسومة بصورة محدَّدة. يمكن أن يكون لديك صورة افتراضية " +"واحدة." + +#: lms/djangoapps/badges/models.py +msgid "There can be only one default image." +msgstr "يجب تحديد صورة افتراضية واحدة فقط." + +#: lms/djangoapps/badges/models.py +msgid "" +"On each line, put the number of completed courses to award a badge for, a " +"comma, and the slug of a badge class you have created that has the issuing " +"component 'openedx__course'. For example: 3,enrolled_3_courses" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"On each line, put the number of enrolled courses to award a badge for, a " +"comma, and the slug of a badge class you have created that has the issuing " +"component 'openedx__course'. For example: 3,enrolled_3_courses" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Each line is a comma-separated list. The first item in each line is the slug" +" of a badge class you have created that has an issuing component of " +"'openedx__course'. The remaining items in each line are the course keys the " +"learner needs to complete to be awarded the badge. For example: " +"slug_for_compsci_courses_group_badge,course-v1:CompSci+Course+First,course-v1:CompsSci+Course+Second" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "Please check the syntax of your entry." +msgstr "" + #. Translators: 'EdX', 'edX', and 'Open edX' are trademarks of 'edX Inc.'. #. Please do not translate any of these trademarks and company names. #: lms/djangoapps/branding/api.py @@ -4553,17 +4635,6 @@ msgstr "" "عذرًا، لا يمكنك إنشاء CCX من أحد المساقات باستخدام رقم تعريفي غير مقبول. " "ويُرجى المباشرة بعملية إعادة طرح هذا المساق لإتاحة هذا الإجراء." -#: lms/djangoapps/certificates/badge_handler.py -msgid "" -"Completed the course \"{course_name}\" ({course_mode}, {start_date} - " -"{end_date})" -msgstr "" -"استُكمِل المساق \"{course_name}\" ({course_mode}, {start_date} - {end_date})" - -#: lms/djangoapps/certificates/badge_handler.py -msgid "Completed the course \"{course_name}\" ({course_mode})" -msgstr "لقد أتممت المساق \"{course_name}\" ({course_mode})" - #: lms/djangoapps/certificates/models.py wiki/admin.py wiki/models/article.py msgid "created" msgstr "أُنشئ المقال." @@ -4638,41 +4709,6 @@ msgstr "سبب حدوث خطأ أثناء إنشاء الشهادة" msgid "The download URL for the generated certificate." msgstr "رابط التنزيل للشهادة المُعدّة." -#: lms/djangoapps/certificates/models.py -msgid "The badge image must be square." -msgstr "يجب أن تكون صورة الشارة مربَّعة." - -#: lms/djangoapps/certificates/models.py -msgid "The badge image file size must be less than 250KB." -msgstr "يجب ألا يزيد حجم ملف صورة الشارة عن 250 كيلو بايت." - -#: lms/djangoapps/certificates/models.py -msgid "The course mode for this badge image. For example, \"verified\" or \"honor\"." -msgstr "" -"وضع المساق الموفق لصورة الشارة هذه. مثلًا، \"موثَّقة\" أو \"شهادة ميثاق " -"الشرف\"" - -#: lms/djangoapps/certificates/models.py -msgid "" -"Badge images must be square PNG files. The file size should be under 250KB." -msgstr "" -"يجب أن تكون صور الشارات ملفّات صور مربّعة بصيغة PNG. وألا يزيد حجم كل ملفّ " -"عن 250 كيلو بايت." - -#: lms/djangoapps/certificates/models.py -msgid "" -"Set this value to True if you want this image to be the default image for " -"any course modes that do not have a specified badge image. You can have only" -" one default image." -msgstr "" -"اضبط هذه القيمة على \"صحيح\" إذا أردت اعتماد هذه الصورة كصورة افتراضية لجميع" -" أوضاع المساق غير الموسومة بصورة محدَّدة. يمكن أن يكون لديك صورة افتراضية " -"واحدة." - -#: lms/djangoapps/certificates/models.py -msgid "There can be only one default image." -msgstr "يجب تحديد صورة افتراضية واحدة فقط." - #: lms/djangoapps/certificates/models.py msgid "Name of template." msgstr "اسم النموذج" @@ -5182,6 +5218,10 @@ msgid "" "To earn a certificate, you must complete all requirements before this date." msgstr "لتحصل على شهادة، لابدّ من إتمام جميع المتطلّبات قبل هذا التاريخ." +#: lms/djangoapps/courseware/date_summary.py +msgid "After this date, course content will be archived." +msgstr "" + #: lms/djangoapps/courseware/date_summary.py msgid "" "This course is archived, which means you can review course content but it is" @@ -6242,13 +6282,8 @@ msgstr "" "إعادة المحاولة." #: lms/djangoapps/instructor/views/api.py -msgid "Invalid Json data, Please refresh the page and then try again." -msgstr "عذرًا، بيانات ’JSON‘ غير صالحة. يُرجى تحديث الصفحة والمحاولة من جديد." - -#: lms/djangoapps/instructor/views/api.py -msgid "Invalid data, user_id must be present for all certificate exceptions." +msgid "Invalid data, generate_for must be \"new\" or \"all\"." msgstr "" -"عذرًا، البيانات غير صالحة. يجب توفّر user_id من أجل جميع استنثاءات الشهادة." #: lms/djangoapps/instructor/views/api.py msgid "Certificate generation started for white listed students." @@ -6604,6 +6639,7 @@ msgid "Last Name" msgstr "الاسم الأخير" #: lms/djangoapps/instructor_task/tasks_helper.py +#: openedx/core/djangoapps/api_admin/forms.py #: lms/templates/shoppingcart/receipt.html msgid "Company Name" msgstr "اسم الشركة" @@ -8156,6 +8192,10 @@ msgid "" "The user {username} is not enrolled in the course associated with this team." msgstr "إنّ المستخدم {username} غير مسجَّل في المساق المرتبط بهذا الفريق." +#: lms/djangoapps/verified_track_content/models.py +msgid "The course key for the course we would like to be auto-cohorted." +msgstr "" + #: lms/djangoapps/verify_student/models.py msgid "Your {platform_name} verification has expired." msgstr "" @@ -8983,6 +9023,26 @@ msgstr "جرى حذف هذه المراجعة." msgid "Restoring to this revision will mark the article as deleted." msgstr "ستشير العودة إلى هذه المراجعة أنّ المقال قد حُذِف " +#: openedx/core/djangoapps/api_admin/forms.py +msgid "Company Address" +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "Describe what your application does." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The URL of your company's website." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The name of your company." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The contact address of your company." +msgstr "" + #: openedx/core/djangoapps/api_admin/models.py cms/templates/index.html msgid "Denied" msgstr "مرفوض" @@ -9003,6 +9063,27 @@ msgstr "رابط الموقع الإلكتروني المرتبط بمستخدم msgid "The reason this user wants to access the API." msgstr "السبب وراء رغبة هذا المستخدم باستخدام واجهة التطبيق البرمجية." +#: openedx/core/djangoapps/api_admin/models.py +msgid "API access request from {company}" +msgstr "" + +#: openedx/core/djangoapps/api_admin/models.py +msgid "API access request" +msgstr "" + +#: openedx/core/djangoapps/api_admin/views.py +msgid "TODO" +msgstr "" + +#. Translators: link_start and link_end are HTML tags for a link to the terms +#. of service. +#. platform_name is the name of this Open edX installation. +#: openedx/core/djangoapps/api_admin/widgets.py +msgid "" +"I, and my company, accept the {link_start}{platform_name} API Terms of " +"Service{link_end}." +msgstr "" + #: openedx/core/djangoapps/bookmarks/views.py msgid "An error has occurred. Please try again." msgstr "نأسف لحدوث خطأ. يُرجى إعادة المحاولة." @@ -9035,6 +9116,10 @@ msgstr "" msgid "Bookmark with usage_id: {usage_id} does not exist." msgstr "ضع علامة باستخدام ’usage_id‘: {usage_id} غير موجود." +#: openedx/core/djangoapps/course_groups/cohorts.py +msgid "Default Group" +msgstr "" + #: openedx/core/djangoapps/course_groups/cohorts.py msgid "You cannot create two cohorts with the same name" msgstr "لا يمكنك إنشاء شعبتين بنفس الاسم" @@ -9300,6 +9385,14 @@ msgstr "" "عند تقديم طلبات لمنح شهادات، يمكن، وكحدّ أقصى، إجراء هذا العدد من المحاولات " "لإعادة تقديم الطلبات غير الناجحة. " +#: openedx/core/djangoapps/programs/models.py +msgid "Do we want to show xseries program advertising" +msgstr "" + +#: openedx/core/djangoapps/programs/models.py +msgid "Do we want to show program listing page" +msgstr "" + #: openedx/core/djangoapps/self_paced/models.py msgid "Enable course home page improvements." msgstr "فعّل ميزة تحسين الصفحة الرئيسية للمساق." @@ -10022,10 +10115,18 @@ msgstr "رقم المساق: " #: lms/templates/sysadmin_dashboard.html #: lms/templates/sysadmin_dashboard_gitlogs.html #: lms/templates/courseware/courses.html +#: themes/edx.org/lms/templates/header.html #: themes/red-theme/lms/templates/header.html msgid "Courses" msgstr "المساقات" +#: cms/templates/index.html cms/templates/widgets/header.html +#: lms/templates/navigation.html lms/templates/learner_dashboard/programs.html +#: themes/edx.org/lms/templates/header.html +#: themes/red-theme/lms/templates/header.html +msgid "Programs" +msgstr "" + #: cms/templates/login.html cms/templates/widgets/header.html #: themes/red-theme/cms/templates/login.html msgid "Sign In" @@ -10459,31 +10560,23 @@ msgstr "المساعدة الخاصة بمنصّة {platform_name}" #: lms/templates/help_modal.html msgid "" -"For questions on course lectures, homework, tools, or materials for " -"this course, post in the {link_start}course discussion " -"forum{link_end}." +"For {strong_start}questions on course lectures, homework, tools, or " +"materials for this course{strong_end}, post in the {link_start}course " +"discussion forum{link_end}." msgstr "" -"فيما يخصّ الأسئلة المتعلّقة بمحاضرات المساق، أو الفروض المنزلية، أو " -"الأدوات، أو المواد اللازمة لهذا المساق، يُرجى نشرها في " -"{link_start}منتدى نقاشات المساق{link_end}." #: lms/templates/help_modal.html msgid "" -"Have general questions about {platform_name}? You can find " -"lots of helpful information in the {platform_name} " +"Have {strong_start}general questions about {platform_name}{strong_end}? You " +"can find lots of helpful information in the {platform_name} " "{link_start}FAQ{link_end}." msgstr "" -"هل لديك أسئلة عامة حول {platform_name}؟ قد تجد الكثير من " -"المعلومات المفيدة في صفحة {link_start}الأسئلة الشائعة{link_end} حول " -"{platform_name}. " #: lms/templates/help_modal.html msgid "" -"Have a question about something specific? You can contact " -"the {platform_name} general support team directly:" +"Have a {strong_start}question about something specific{strong_end}? You can " +"contact the {platform_name} general support team directly:" msgstr "" -"هل لديك سؤال حول أمر معيّن؟ يُرجى الاتّصال مباشرةً بفريق " -"الدعم العام لدى {platform_name}:" #: lms/templates/help_modal.html msgid "Report a problem" @@ -10558,13 +10651,10 @@ msgid "Brief description of the problem" msgstr "شرح موجز للمشكلة " #: lms/templates/help_modal.html -msgid "Details of the problem you are encountering" -msgstr "تفاصيل المشكلة التي تواجهها" - -#: lms/templates/help_modal.html -msgid "Include error messages, steps which lead to the issue, etc." +msgid "" +"Details of the problem you are encountering{asterisk}{begin_span}Include " +"error messages, steps which lead to the issue, etc.{end_span}" msgstr "" -"بما في ذلك رسائل الخطأ التي تردك، والخطوات التي تودّي إلى المشكلة، الخ." #: lms/templates/help_modal.html msgid "suggestion" @@ -10772,8 +10862,6 @@ msgstr "" msgid "Account Preferences" msgstr "تفضيلات الحساب" -#. Translators: provider_name is the name of an external, third-party user -#. authentication provider (like Google or LinkedIn). #: lms/templates/login.html msgid "Sign in with {provider_name}" msgstr "تسجيل الدخول باستخدام حساب {provider_name}" @@ -10949,14 +11037,10 @@ msgid "Register" msgstr "تسجيل" #: lms/templates/navigation-edx.html lms/templates/navigation.html -#: themes/edx.org/lms/templates/header.html -#: themes/red-theme/lms/templates/header.html msgid "" -"Warning: Your browser is not fully supported. We strongly " -"recommend using {chrome_link} or {ff_link}." +"{begin_strong}Warning:{end_strong} Your browser is not fully supported. We " +"strongly recommend using {chrome_link} or {ff_link}." msgstr "" -"تحذير: إنّ متصفّحك غير مدعوم بالكامل، وبالتالي نوصيك بشدّة " -"باستخدام {chrome_link} أو {ff_link}." #: lms/templates/navigation.html themes/red-theme/lms/templates/header.html msgid "Global" @@ -11035,8 +11119,6 @@ msgstr "" msgid "The following errors occurred while processing your registration:" msgstr "حدثت الأخطاء التالية أثناء معالجة عملية تسجيلك:" -#. Translators: provider_name is the name of an external, third-party user -#. authentication service (like Google or LinkedIn). #: lms/templates/register-form.html #: themes/stanford-style/lms/templates/register-form.html msgid "Sign up with {provider_name}" @@ -11650,10 +11732,6 @@ msgstr "" " تصغيرها. وبإمكانك أن تفعل هذا في متصفّح جوجل كروم Google Chrome عبر الضغط " "على الزرّين ctrl وplus أو الزرّين ctrl وminus في الوقت نفسه. " -#: lms/templates/video.html -msgid "Skip to a navigable version of this video's transcript." -msgstr "الانتقال مباشرةً إلى نسخة من نص هذا الفيديو قابلة للتصفّح. " - #: lms/templates/video.html msgid "Loading video player" msgstr "تحميل مشغّل الفيديو" @@ -11666,14 +11744,6 @@ msgstr "تشغيل الفيديو" msgid "No playable video sources found." msgstr "لم يُعثر على مصادر فيديو قابلة للتشغيل." -#: lms/templates/video.html -msgid "Skip to end of transcript." -msgstr "الانتقال إلى نهاية النص." - -#: lms/templates/video.html -msgid "Go back to start of transcript." -msgstr "العودة إلى بداية النص." - #: lms/templates/video.html msgid "Download video" msgstr "تنزيل الفيديو " @@ -11694,6 +11764,476 @@ msgstr "كلماتك:" msgid "Total number of words:" msgstr "إجمالي عدد الكلمات:" +#: lms/templates/api_admin/api_access_request_form.html +msgid "API Access Request" +msgstr "" + +#: lms/templates/api_admin/api_access_request_form.html +#: lms/templates/api_admin/status.html +msgid "{platform_name} API Access Request" +msgstr "" + +#: lms/templates/api_admin/api_access_request_form.html +msgid "Request API Access" +msgstr "" + +#. Translators: "platform_name" is the name of this Open edX installation. +#. "link_start" and "link_end" are the HTML for a link to the API +#. documentation. "api_support_email_link" is HTML for a link to email the API +#. support staff. +#: lms/templates/api_admin/status.html +msgid "" +"Your request to access the {platform_name} Course Catalog API is being " +"processed. You will receive a message at the email address in your profile " +"when processing is complete. You can also return to this page to see the " +"status of your API access request. To learn more about the {platform_name} " +"Course Catalog API, visit {link_start}our API documentation page{link_end}. " +"For questions about using this API, visit our FAQ page or contact " +"{api_support_email_link}." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Terms of Service for {platform_name} APIs" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Effective Date: April 12th, 2016" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Welcome to {platform_name}. Thank you for using {platform_name}'s Course " +"Discovery API and any additional APIs that we may offer from time to time " +"(collectively, the \"APIs\"). Please read these Terms of Service prior to " +"accessing or using the APIs. These Terms of Service, any additional terms " +"within accompanying API documentation, and any applicable policies and " +"guidelines that {platform_name} makes available and/or updates from time to " +"time are agreements (collectively, the \"Terms\") between you and " +"{platform_name}. By accessing or using the APIs, you accept and agree to be " +"legally bound by the Terms, whether or not you are a registered user. If you" +" do not understand or do not wish to be bound by the Terms, you should not " +"use the APIs." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "API Access" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To access the APIs, you will need to create an {platform_name} user account " +"for your application (not for personal use). This account will provide you " +"with access to our API request page at {request_url}. On that page, you must" +" complete the API request form including a description of your proposed uses" +" for the APIs. Any account and registration information that you provide to " +"{platform_name} must be accurate and up to date, and you agree to inform us " +"promptly of any changes. {platform_name} will review your API request form " +"and, upon approval in {platform_name}'s sole discretion, will provide you " +"with instructions for obtaining your API shared secret and client ID." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Permissible Use" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to use the APIs solely for the purpose of delivering content that " +"is accessed through the APIs (the \"API Content\") to your own website, " +"mobile site, app, blog, email distribution list, or social media property or" +" for another commercial use that you described in your request for access " +"and that {platform_name} has approved on a case-by-case basis. " +"{platform_name} may monitor your use of the APIs for compliance with the " +"Terms and may deny your access or shut down your integration if you try to " +"go around or exceed the requirements and limitations set by {platform_name}." +" Your Application or other approved use of the API or the API Content must " +"not prompt your end users to provide their {platform_name} username, " +"password or other {platform_name} user credentials anywhere other than the " +"{platform_name} website at {platform_url}." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Prohibited Uses and Activities" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} shall have the sole right to determine whether or not any " +"given use of the APIs is acceptable, and {platform_name} reserves the right " +"to revoke API access for any use that {platform_name} determines at any " +"time, in its sole discretion, does not benefit or serve the best interests " +"of {platform_name}, its users and its partners." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The following activities are not acceptable when using the APIs (this is not" +" an exhaustive list):" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"collecting or storing the names, passwords, or other credentials of " +"{platform_name} users;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"scraping or similar techniques to aggregate or otherwise create permanent " +"copies of API Content;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"violating, misappropriating or infringing any copyright, trademark rights, " +"rights of privacy or publicity, confidential information or any other right " +"of any third party;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"altering or removing any trademark, copyright or other proprietary or legal " +"notices contained in, or appearing on, the APIs or any API Content;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "altering or editing any content or graphics in the API Content" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"sublicensing, re-distributing, renting, selling or leasing access to the " +"APIs or your client secret to any third party;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"distributing any virus, Trojan horse, spyware, adware, malware, bot, time " +"bomb, worm, or other harmful or malicious component; or" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"using the APIs for any purpose which or might overburden, impair or disrupt " +"the {platform_name} platform, servers or networks." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Usage and Quotas" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} reserves the right, in its discretion, to impose " +"restrictions and limitations on the number and frequency of calls made by " +"you or your Application to the APIs. You must not attempt to circumvent any " +"restrictions or limitations that we impose." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Compliance" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to comply with all applicable law, regulation, and third party " +"rights (including without limitation laws regarding the import or export of " +"data or software, privacy, copyright, and local laws). You will not use the " +"APIs to encourage or promote illegal activity or violation of third party " +"rights. You will not violate any other terms of service with " +"{platform_name}. You will only access (or attempt to access) an API by the " +"means described in the documentation of that API. You will not misrepresent " +"or mask either your identity or yourApplication's identity when using the " +"APIs." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Ownership" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You acknowledge and agree that the APIs and all API Content contain valuable" +" intellectual property of {platform_name} and its partners. The APIs and all" +" API Content are protected by United States and foreign copyright, " +"trademark, and other laws. All rights in the APIs and the API Content, if " +"not expressly granted, are reserved. By using the APIs or any API Content, " +"you do not acquire ownership of any rights in the APIs or API Content. You " +"must not claim or attempt to claim ownership in the APIs or any API Content " +"or misrepresent yourself or your company or your Application as being the " +"source of any API Content. You may not modify, create derivative works of, " +"or attempt to use, license, or in any way exploit any API Content in whole " +"or in part on your own behalf or on behalf of any third party. You may not " +"distribute or modify the APIs or any API Content (including adaptation, " +"editing, excerpting, or creating derivative works)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"All names, logos and seals (\"Trademarks\") that appear in the APIs, API " +"Content, or on or through the services made available on or through the " +"APIs, if any, are the property of their respective owners. You may not " +"remove, alter, or obscure any copyright, Trademark, or other proprietary " +"rightrs notices incorporated in or accompanying the API Content. If any " +"third party revokes access to API Content owned or controlled by that third " +"party, including without limitation any Trademarks, you must ensure that all" +" API Content pertaining to that third party is deleted from your app, " +"networks, systems and servers as soon as reasonably possible. If you stop " +"using the APIs altogether or if your API access is revoked, you must delete " +"all API Content in the same way." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To the extent that you submit any content to {platform_name} in connection " +"with your use of the APIs or any API Content, you hereby grant to " +"{platform_name} a worldwide, non-exclusive, transferable, assignable, sub " +"licensable, 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 such " +"content, in whole or in part, in any form and in any media formats and " +"through any media channels (now known or hereafter developed)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Privacy" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to comply with all applicable privacy laws and regulations and to " +"be transparent with respect to any collection and use of end user data. You " +"will provide and adhere to a privacy policy for your Application that " +"clearly and accurately describes to your end users what user information you" +" collect and how you may use and share such information (including for " +"advertising) with {platform_name} and other third parties." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Right to Charge" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} reserves the right to modify the Terms at any time without " +"advance notice. Any changes to the Terms will be effective immediately upon " +"posting on this page, with an updated effective date. By accessing or using " +"the APIs after any changes have been made, you signify your agreement on a " +"prospective basis to the modified Terms and all of the changes. Be sure to " +"return to this page periodically to ensure familiarity with the most current" +" version of the Terms." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} may also update or modify the APIs from time to time without" +" advance notice. These changes may affect your use of the APIs or the way " +"your integration interacts with the API. If we make a change that is " +"unacceptable to you, you should stop using the APIs. Continued use of the " +"APIs means you accept the change." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Confidentiality" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Your credentials (such as client secret and IDs) are intended to be used " +"solely by you. You will keep your credentials confidential and discourage " +"others from using your credentials. Your credentials may not be embedded in " +"open source projects." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"In the event that {platform_name} provides you with access to information " +"specific to {platform_name} and/or the APIs that is either marked as " +"\"Confidential\" or which a reasonable person would assume to be " +"confidential or proprietary given the terms of its disclosure " +"(\"Confidential Information\"), you agree to use this information only to " +"use and build with the APIs. You may not disclose the Confidential " +"Information to anyone without {platform_name}'s prior written consent, and " +"you agree to protect the Confidential Information from unauthorized use and " +"disclosure in the same way that you would protect your own confidential " +"information. Confidential information does not include information that you " +"independently developed, that was rightfully given to you by a third party " +"without confidentiality obligation, or that becomes public through no fault " +"of your own. You may disclose Confidential Information when compelled to do " +"so by law if you provide {platform_name} with reasonable prior notice, " +"unless a court orders that {platform_name} not receive notice." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Disclaimer of Warranty / Limitation of Liabilities" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"THE APIS AND ANY INFORMATION, API CONTENT OR SERVICES MADE AVAILABLE ON OR " +"THROUGH THE APIS 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." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} AND THE {platform_name} PARTICIPANTS (AS HERINAFTER DEFINED)" +" DO NOT WARRANT THAT THE APIS WILL OPERATE IN AN UNINTERRUPTED OR ERROR-FREE" +" MANNER, THAT THE APIS ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS, OR " +"THAT THE APIS OR API CONTENT PROVIDED WILL MEET YOUR NEEDS OR EXPECTATIONS. " +"{platform_name} AND THE {platform_name} PARTICIPANTS ALSO MAKE NO WARRANTY " +"ABOUT THE ACCURACY, COMPLETENESS, TIMELINESS, OR QUALITY OF THE APIS OR ANY " +"API CONTENT, OR THAT ANY PARTICULAR API CONTENT WILL CONTINUE TO BE MADE " +"AVAILABLE. \"{platform_name} PARTICIPANTS\" MEANS MIT, HARVARD, THE OTHER " +"MEMBERS, THE ENTITIES PROVIDING INFORMATION, API CONTENT OR SERVICES FOR THE" +" APIS, THE COURSE INSTRUCTORS AND THEIR STAFFS." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"USE OF THE APIS, AND THE API CONTENT AND ANY SERVICES OBTAINED FROM OR " +"THROUGH THE APIS, IS AT YOUR OWN RISK. YOUR ACCESS TO OR DOWNLOAD OF " +"INFORMATION, MATERIALS OR DATA THROUGH THE APIS 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, UNLESS OTHERWISE EXPRESSLY " +"PROVIDED FOR IN THE {platform_name} PRIVACY POLICY." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, YOU AGREE THAT NEITHER " +"{platform_name} NOR ANY OF THE {platform_name} PARTICIPANTS WILL BE LIABLE " +"TO YOU FOR ANY LOSS OR DAMAGES, EITHER ACTUAL OR CONSEQUENTIAL, ARISING OUT " +"OF OR RELATING TO THESE TERMS, OR YOUR (OR ANY THIRD PARTY'S) USE OF OR " +"INABILITY TO USE THE APIS OR ANY API CONTENT, OR YOUR RELIANCE UPON " +"INFORMATION OBTAINED FROM OR THROUGH THE APIS, WHETHER YOUR CLAIM IS BASED " +"IN CONTRACT, TORT, STATUTORY OR OTHER LAW." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"IN PARTICULAR, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER " +"{platform_name} NOR ANY OF THE {platform_name} PARTICIPANTS WILL HAVE ANY " +"LIABILITY FOR ANY CONSEQUENTIAL, INDIRECT, PUNITIVE, SPECIAL, EXEMPLARY OR " +"INCIDENTAL DAMAGES, WHETHER FORESEEABLE OR UNFORESEEABLE AND WHETHER OR NOT " +"{platform_name} OR ANY OF THE {platform_name} 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)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"CERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE " +"EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME" +" OR ALL OF THE ABOVE DISCLAIMERS, EXCLUSIONS, OR LIMITATIONS MAY NOT APPLY " +"TO YOU, AND YOU MIGHT HAVE ADDITIONAL RIGHTS." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The APIs and API Content may include hyperlinks to sites maintained or " +"controlled by others. {platform_name} and the {platform_name} 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 " +"websites, you do so at your own risk." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To the maximum extent permitted by applicable law, you agree to defend, hold" +" harmless and indemnify {platform_name} and the {platform_name} " +"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 APIs and any API " +"Content, 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, " +"{platform_name} or one of the {platform_name} Participants will provide you " +"with written notice of such claim, suit or action." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "General Legal Terms" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The Terms constitute the entire agreement between you and {platform_name} " +"with respect to your use of the APIs and API Content, superseding any prior " +"agreements between you and {platform_name} regarding your use of the APIs " +"and API Content. The failure of {platform_name} to exercise or enforce any " +"right or provision of the Terms shall not constitute a waiver of such right " +"or provision. If any provision of the Terms 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 the Terms shall remain in full " +"force and effect. The Terms do not create any third party beneficiary rights" +" or any agency, partnership, or joint venture. For any notice provided to " +"you by {platform_name} under these Terms, {platform_name} may notify you via" +" the email address associated with your {platform_name} account." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree that the Terms, the APIs, and any claim or dispute arising out of " +"or relating to the Terms or the APIs 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). Notwithstanding the foregoing, you agree that {platform_name} shall " +"still be allowed to apply to injunctive remedies (or an equivalent type of " +"urgent legal relief) in any jursdiction." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Termination" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You may stop using the APIs at any time. You agree that {platform_name}, in " +"its sole discretion and at any time, may terminate your use of the APIs or " +"any API Content for any reason or no reason, without prior notice or " +"liabiliy." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} and the {platform_name} Participants reserve the right at " +"any time in their sole discretion to cancel, delay, reschedule or alter the " +"format of any API or API Content offered through {platform_name}, or to " +"cease providing any part or all of the APIs or API Content or related " +"services, and you agree that neither {platform_name} nor any of the " +"{platform_name} Participants will have any liability to you for such an " +"action." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Upon any termination of the Terms or discontinuation of your access to an " +"API for any reason, your right to use any API and API Content will " +"immediately cease. You will immediately stop using the APIs and delete any " +"cached or stored API Content. All provisions of the Terms that by their " +"nature should survive termination shall survive termination, including, " +"without limitation, ownership provisions, warranty disclaimers, and " +"limitation of liability. Termination of your access to and use of the APIs " +"and API Content shall not relieve you of any obligations arising or " +"accrusing prior to such termination or limit any liability that you " +"otherwise may have to {platform_name}, including without limitation any " +"indemnification obligations contained herein." +msgstr "" + #: lms/templates/calculator/toggle_calculator.html msgid "Open Calculator" msgstr "فتح الآلة الحاسبة " @@ -11921,24 +12461,17 @@ msgid "Auto Enroll" msgstr "التسجيل الآلي " #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is checked, users who have not yet registered for " -"{platform_name} will be automatically enrolled." +"If this option is {em_start}checked{em_end}, users who have not yet " +"registered for {platform_name} will be automatically enrolled." msgstr "" -"في حال تم التحقق من هذا الخيار، فإن المستخدمين الذين لم يقوموا " -"بالتسجيل بعد على المنصة {platform_name} سيتم إلحاقهم بالمساق تلقائيّاً." #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is left unchecked, users who have not yet registered" -" for {platform_name} will not be enrolled, but will be allowed to enroll " -"once they make an account." +"If this option is left {em_start}unchecked{em_end}, users who have not yet " +"registered for {platform_name} will not be enrolled, but will be allowed to " +"enroll once they make an account." msgstr "" -"في حال بقي هذا الخيار دون التحقق منه ، فلن يتم إلحاق المستخدمين " -"الذين لم يقوموا بالتسجيل بعد على المنصة {platform_name} بالمساق، لكن سيسمح " -"لهم بالتسجيل فور أن يقوموا بإنشاء حساب." #: lms/templates/ccx/enrollment.html #: lms/templates/instructor/instructor_dashboard_2/membership.html @@ -11952,13 +12485,10 @@ msgid "Notify users by email" msgstr "إعلام المستخدمين عبر البريد الإلكتروني" #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is checked, users will receive an email " +"If this option is {em_start}checked{em_end}, users will receive an email " "notification." msgstr "" -"في حال تم التحقق من هذا الخيار، سيتلقى المستخدمون إشعاراً بالبريد " -"الإلكتروني." #: lms/templates/ccx/enrollment.html #: lms/templates/courseware/course_about.html @@ -12365,6 +12895,10 @@ msgstr "" msgid "{chapter} current chapter" msgstr "الفصل الحالي {chapter}" +#: lms/templates/courseware/accordion.html +msgid "{span_start}current section{span_end}" +msgstr "" + #: lms/templates/courseware/accordion.html #: lms/templates/courseware/progress.html msgid "due {date}" @@ -12786,8 +13320,8 @@ msgid "Verification Declined" msgstr "عذرًا، لقد جرى رفض عملية التحقّق" #: lms/templates/courseware/progress.html -msgid "Completed" -msgstr "استُكملت العملية" +msgid "Completed by" +msgstr "" #: lms/templates/courseware/progress.html msgid "Upcoming" @@ -13171,12 +13705,9 @@ msgstr "" #: lms/templates/dashboard/_dashboard_course_listing.html msgid "" "It's official. It's easily shareable. It's a proven motivator to complete " -"the course.
    {link_start}Learn more about the verified " +"the course. {line_break}{link_start}Learn more about the verified " "{cert_name_long}{link_end}." msgstr "" -"الشهادة رسمية وبإمكانك مشاركتها بكل سهولة. وهي، بكل تأكيد، حافز كبير لإتمام " -"المساق.
    {link_start}اعرف المزيد عن شهادة {cert_name_long} " -"الموثّقة{link_end}." #: lms/templates/dashboard/_dashboard_course_listing.html msgid "Upgrade to Verified" @@ -15398,6 +15929,32 @@ msgstr "لذا يرجى توفير تفاصيل كافية لتبرير هذه msgid "Reason" msgstr "السبب" +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is checked, users who have not yet registered for " +"{platform_name} will be automatically enrolled." +msgstr "" +"في حال تم التحقق من هذا الخيار، فإن المستخدمين الذين لم يقوموا " +"بالتسجيل بعد على المنصة {platform_name} سيتم إلحاقهم بالمساق تلقائيّاً." + +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is left unchecked, users who have not yet registered" +" for {platform_name} will not be enrolled, but will be allowed to enroll " +"once they make an account." +msgstr "" +"في حال بقي هذا الخيار دون التحقق منه ، فلن يتم إلحاق المستخدمين " +"الذين لم يقوموا بالتسجيل بعد على المنصة {platform_name} بالمساق، لكن سيسمح " +"لهم بالتسجيل فور أن يقوموا بإنشاء حساب." + +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is checked, users will receive an email " +"notification." +msgstr "" +"في حال تم التحقق من هذا الخيار، سيتلقى المستخدمون إشعاراً بالبريد " +"الإلكتروني." + #: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "Register/Enroll Students" msgstr "تسجيل الطلاب" @@ -16950,15 +17507,11 @@ msgstr "المتطلّبات التقنيّة" #: lms/templates/verify_student/pay_and_verify.html msgid "" -"Please make sure your browser is updated to the {a_start}most recent version" -" possible{a_end}. Also, please make sure your webcam is plugged in, " -"turned on, and allowed to function in your web browser (commonly adjustable " -"in your browser settings)." +"Please make sure your browser is updated to the {strong_start}{a_start}most " +"recent version possible{a_end}{strong_end}. Also, please make sure your " +"{strong_start}webcam is plugged in, turned on, and allowed to function in " +"your web browser (commonly adjustable in your browser settings).{strong_end}" msgstr "" -"يرجى التأكد من تحديث متصفحك إلى {a_start}أحدث نسخة متاحة{a_end}، كما يرجى " -"التأكد من أن كاميرا الكومبيوتر لديك متصلة ومشغّلة ومسموح بتشغيلها " -"على متصفح الإنترنت لديك (عادة ما يمكن تنسيق هذه الإعدادات من خلال إعدادات " -"المتصفح لديك)." #: lms/templates/verify_student/reverify.html msgid "Re-Verification" @@ -17041,6 +17594,15 @@ msgstr "" "وشعارَي edX وOpen edX هي علامات تجارية مسجَّلة أو علامات تجارية لمؤسّسة edX " "Inc." +#: themes/edx.org/lms/templates/header.html +#: themes/red-theme/lms/templates/header.html +msgid "" +"Warning: Your browser is not fully supported. We strongly " +"recommend using {chrome_link} or {ff_link}." +msgstr "" +"تحذير: إنّ متصفّحك غير مدعوم بالكامل، وبالتالي نوصيك بشدّة " +"باستخدام {chrome_link} أو {ff_link}." + #: themes/edx.org/lms/templates/course_modes/choose.html msgid "" "{b_start}Support our Mission: {b_end} EdX, a non-profit, relies on verified " @@ -19060,10 +19622,6 @@ msgstr "" msgid "Libraries" msgstr "المكتبات" -#: cms/templates/index.html cms/templates/widgets/header.html -msgid "Programs" -msgstr "البرامج" - #: cms/templates/index.html msgid "Re-run Course" msgstr "مساق مشغَّل مرّة أخرى" diff --git a/conf/locale/ar/LC_MESSAGES/djangojs.mo b/conf/locale/ar/LC_MESSAGES/djangojs.mo index bfb04268a84f47ed2a6fd9dc72308c13e0eae3e3..28db146bf6a64a4ebac9d60f5a231a615252f817 100644 GIT binary patch delta 36414 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 U$5}C-V%07np_Ws3U^e3c0KBzezW@LL diff --git a/conf/locale/ar/LC_MESSAGES/djangojs.po b/conf/locale/ar/LC_MESSAGES/djangojs.po index dcf5cfb30d..8662e28d01 100644 --- a/conf/locale/ar/LC_MESSAGES/djangojs.po +++ b/conf/locale/ar/LC_MESSAGES/djangojs.po @@ -95,9 +95,9 @@ msgid "" msgstr "" "Project-Id-Version: edx-platform\n" "Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" -"POT-Creation-Date: 2016-03-30 19:38+0000\n" -"PO-Revision-Date: 2016-04-01 18:45+0000\n" -"Last-Translator: Soha Assali \n" +"POT-Creation-Date: 2016-04-15 11:04+0000\n" +"PO-Revision-Date: 2016-04-15 11:07+0000\n" +"Last-Translator: Ned Batchelder \n" "Language-Team: Arabic (http://www.transifex.com/open-edx/edx-platform/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -264,6 +264,7 @@ msgstr "إعدادات متقدّمة" #: common/lib/xmodule/xmodule/js/src/html/edit.js #: common/static/common/templates/image-modal.underscore #: common/static/common/templates/discussion/forum-action-close.underscore +#: lms/templates/student_profile/share_modal.underscore msgid "Close" msgstr "إغلاق" @@ -1842,38 +1843,37 @@ msgid "Do not show again" msgstr "يُرجى عدم إظهار هذا مرّة أخرى." #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Turn on closed captioning" -msgstr "تشغيل العناوين الفرعية المغلقة" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Turn off transcript" -msgstr "إخفاء نص الكلام المدوّن" +msgid "Transcript will be displayed when you start playing the video." +msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "" -"Language: Press the UP arrow key to enter the language menu, then use UP and" -" DOWN arrow keys to navigate language options. Press ENTER to change to the " +"Activating a link in this group will skip to the corresponding point in the " +"video." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Video transcript" +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Start of transcript. Skip to the end." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "End of transcript. Skip to the start." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "" +"Language: Press the UP arrow key to enter the language menu then use UP and " +"DOWN arrow keys to navigate language options. Press ENTER to change to the " "selected language." msgstr "" -"اللغة: الضغط على زر السهم \"أعلى\" للدخول إلى قائمة ضبط اللغة ومن ثم استخدام" -" زريّ الأسهم \"أعلى\" و\"أسفل\" للانتقال بين خيارات اللغات المختلفة ومن ثم " -"الضغط على زر \"Enter\" لاعتماد اللغة المختارة." #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Open language menu" -msgstr "فتح قائمة اللغات المتوفرة" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "" -"Activating an item in this group will spool the video to the corresponding " -"time point. To skip transcript, go to previous item." +msgid "Open language menu." msgstr "" -"سيؤدّي تفعيل أحد العناصر في هذه المجموعة إلى تحريك الفيديو نحو النقطة " -"الزمنية الموافقة. ولتخطّي النص، يُرجى الذهاب إلى العنصر السابق." - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "
  • Transcript will be displayed when " -msgstr "
  • سيُعرض نص العناوين الفرعيّة عندما" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "Hide closed captions" @@ -1883,6 +1883,10 @@ msgstr "إخفاء العناوين الفرعيّة التي جرى إغلاق msgid "(Caption will be displayed when you start playing the video.)" msgstr "(ستُعرض العناوين الفرعيّة مع بدء عرض مقطع الفيديو.)" +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Turn on closed captioning" +msgstr "تشغيل العناوين الفرعية المغلقة" + #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "Turn on transcripts" msgstr "عرض نص الكلام المدوّن" @@ -2180,6 +2184,17 @@ msgstr "يُرجى عدم إدخال أي مسافات في هذا الحقل." msgid "Please do not use any spaces or special characters in this field." msgstr "يُرجى عدم إدخال أي مسافات أو أحرف خاصة في هذا الحقل." +#: common/static/common/js/components/views/paginated_view.js +#: common/static/common/js/components/views/paging_footer.js +msgid "Pagination" +msgstr "" + +#: common/static/common/js/components/views/paginated_view.js +msgid "" +"Your request could not be completed. Reload the page and try again. If the " +"issue persists, click the Help tab to report the problem." +msgstr "" + #: common/static/common/js/components/views/paging_header.js msgid "Showing %(first_index)s out of %(num_items)s total" msgstr "إظهار %(first_index)s من أصل %(num_items)s." @@ -2507,6 +2522,7 @@ msgstr "الشواغر المتاحة" #: lms/djangoapps/teams/static/teams/js/collections/topic.js #: lms/templates/edxnotes/tab-item.underscore +#: lms/templates/learner_dashboard/program_card.underscore msgid "name" msgstr "الاسم " @@ -2516,6 +2532,11 @@ msgstr "الاسم " msgid "team count" msgstr "عدد أعضاء الفريق" +#: lms/djangoapps/teams/static/teams/js/teams_tab_factory.js +#: lms/djangoapps/teams/static/teams/js/views/teams_tab.js +msgid "Teams" +msgstr "الفِرَق" + #: lms/djangoapps/teams/static/teams/js/views/edit_team.js #: cms/templates/js/certificate-editor.underscore #: cms/templates/js/content-group-editor.underscore @@ -2714,14 +2735,14 @@ msgstr[5] "%(memberCount)s / %(maxMemberCount)s عضو" msgid "All teams" msgstr "جميع الفرق" +#: lms/djangoapps/teams/static/teams/js/views/teams.js +msgid "Teams Pagination" +msgstr "" + #: lms/djangoapps/teams/static/teams/js/views/teams_tab.js msgid "Topics" msgstr "المواضيع" -#: lms/djangoapps/teams/static/teams/js/views/teams_tab.js -msgid "Teams" -msgstr "الفِرَق" - #: lms/djangoapps/teams/static/teams/js/views/teams_tab.js msgid "" "See all teams in your course, organized by topic. Join a team to collaborate" @@ -4374,6 +4395,10 @@ msgstr "الربط" msgid "Successfully unlinked." msgstr "نجح فصل الربط" +#: lms/static/js/student_profile/views/badge_list_container.js +msgid "Accomplishments Pagination" +msgstr "" + #: lms/static/js/student_profile/views/learner_profile_factory.js msgid "{platform_name} learners can see my:" msgstr "يمكن للمتعلّمين في منصّة {platform_name} رؤية:" @@ -4436,6 +4461,18 @@ msgstr "صورة الملف الشخصي" msgid "Profile image for {username}" msgstr "صورة الصفحة الشخصية للمستخدم {username}" +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "About Me" +msgstr "" + +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "Accomplishments" +msgstr "" + +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "Profile" +msgstr "" + #: lms/static/js/verify_student/views/image_input_view.js msgid "Image Upload Error" msgstr "نأسف لحدوث خطأ في تحميل الصورة" @@ -4956,6 +4993,10 @@ msgstr "مسار المادة الموجودة مطلوب" msgid "You must specify a name" msgstr "عليك أن تحدّد اسمًا." +#: cms/static/js/models/course_update.js +msgid "Action required: Enter a valid date." +msgstr "" + #: cms/static/js/models/group.js msgid "Group name is required" msgstr "اسم المجموعة مطلوب" @@ -5793,6 +5834,11 @@ msgstr "غير مجدوَل" msgid "Date" msgstr "التاريخ " +#: cms/templates/js/edit-chapter.underscore +#: lms/templates/ccx/schedule.underscore +msgid "gettext(" +msgstr "وظيفة gettext(" + #: cms/templates/js/paging-header.underscore #: common/static/common/templates/components/paging-footer.underscore #: common/static/common/templates/discussion/pagination.underscore @@ -5818,8 +5864,9 @@ msgid "Zoom Out" msgstr "تصغير" #: common/static/common/templates/components/paging-footer.underscore -msgid "Page number" -msgstr "رقم الصفحة" +#, python-format +msgid "Page number out of %(total_pages)s" +msgstr "" #: common/static/common/templates/components/paging-footer.underscore msgid "Enter the page number you'd like to quickly navigate to." @@ -6494,10 +6541,6 @@ msgstr "تاريخ الاستحقاق" msgid "remove all" msgstr "حذف الكل" -#: lms/templates/ccx/schedule.underscore -msgid "gettext(" -msgstr "وظيفة gettext(" - #: lms/templates/ccx/schedule.underscore msgid "Section" msgstr "قسم" @@ -6841,16 +6884,10 @@ msgid "Generate Exception Certificates" msgstr "إنشاء شهادات استثنائية" #: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "Generate a Certificate for all " -msgstr "إنشاء شهادة للجميع" - -#: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "New" -msgstr "جديد" - -#: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "additions to the Exception list" -msgstr "إضافات إلى لائحة الاستثناءات" +msgid "" +"Generate certificates for all users on the Exception list for whom " +"certificates have not yet been run" +msgstr "" #: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore msgid "Generate a Certificate for all users on the Exception list" @@ -7099,6 +7136,24 @@ msgstr "مستخدَم" msgid "Valid" msgstr "صالح" +#: lms/templates/learner_dashboard/explore_new_programs.underscore +msgid "" +"Browse recently launched courses and see what\\'s new in your favorite " +"subjects" +msgstr "" + +#: lms/templates/learner_dashboard/explore_new_programs.underscore +msgid "Explore New XSeries" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore +msgid "org.display_name" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore +msgid "type" +msgstr "" + #: lms/templates/search/course_search_results.underscore #: lms/templates/search/dashboard_search_results.underscore #, python-format @@ -7147,7 +7202,6 @@ msgid "section.title" msgstr "section.title" #: lms/templates/student_account/account_settings.underscore -#: lms/templates/student_profile/learner_profile.underscore msgid "An error occurred. Please reload the page." msgstr "نأسف لحدوث خطأ. يُرجى إعادة فتح الصفحة." @@ -7335,13 +7389,69 @@ msgstr "حقل مطلوب" msgid "Already have an account?" msgstr "لديك حساب على إدراك؟" +#: lms/templates/student_profile/badge.underscore +#, python-format +msgid "Share your \"%(display_name)s\" award" +msgstr "" + +#: lms/templates/student_profile/badge.underscore +msgid "Share" +msgstr "" + +#: lms/templates/student_profile/badge.underscore +#, python-format +msgid "Earned %(created)s." +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "What's Your Next Accomplishment?" +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "Start working toward your next learning goal." +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "Find a course" +msgstr "" + #: lms/templates/student_profile/learner_profile.underscore +msgid "An error occurred. Try loading the page again." +msgstr "" + +#: lms/templates/student_profile/section_two.underscore msgid "You are currently sharing a limited profile." msgstr "إنّك حاليًّا تشارك ملفًّا شخصيًّا محدودًا." -#: lms/templates/student_profile/learner_profile.underscore -msgid "This edX learner is currently sharing a limited profile." -msgstr "يُشارك حاليًّا هذا الطالب لدى edX ملفًّا شخصيًّا محدودًا." +#: lms/templates/student_profile/section_two.underscore +msgid "This learner is currently sharing a limited profile." +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +msgid "Share on Mozilla Backpack" +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +msgid "" +"To share your certificate on Mozilla Backpack, you must first have a " +"Backpack account. Complete the following steps to add your certificate to " +"Backpack." +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +#, python-format +msgid "" +"Create a %(link_start)sMozilla Backpack%(link_end)s account, or log in to " +"your existing account" +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +#, python-format +msgid "" +"%(download_link_start)sDownload this image (right-click or option-click, " +"save as)%(link_end)s and then %(upload_link_start)supload%(link_end)s it to " +"your backpack.
  • " +msgstr "" #: lms/templates/verify_student/enrollment_confirmation_step.underscore #, python-format @@ -7432,13 +7542,10 @@ msgid "Take Your Photo" msgstr "التقط صورتك " #: lms/templates/verify_student/face_photo_step.underscore -#, python-format msgid "" -"When your face is in position, use the camera button %(icon)s below to take " +"When your face is in position, use the camera button {icon} below to take " "your photo." msgstr "" -"حالما تضبط وضعية جلوسك ووجهك، يُرجى استخدام زرّ الكاميرا %(icon)s أدناه " -"لالتقاط صورتك. " #: lms/templates/verify_student/face_photo_step.underscore msgid "To take a successful photo, make sure that:" @@ -7457,13 +7564,10 @@ msgid "The photo of your face matches the photo on your ID." msgstr "أن تطابق الصورة على بطاقتك الشخصية صورة وجهك. " #: lms/templates/verify_student/face_photo_step.underscore -#, python-format msgid "" -"To use the current photo, select the camera button %(icon)s. To take another" -" photo, select the retake button %(icon)s." +"To use the current photo, select the camera button {icon}. To take another " +"photo, select the retake button {icon}." msgstr "" -"لاستخدام الصورة الحالية، يُرجى اختيار زرّ الكاميرا %(icon)s. ولالتقاط صورة " -"أخرى، يُرجى اختيار زرّ إعادة التصوير %(icon)s." #: lms/templates/verify_student/face_photo_step.underscore #: lms/templates/verify_student/id_photo_step.underscore @@ -7553,11 +7657,8 @@ msgid "Make sure your ID is well-lit" msgstr "تأكّد من أنّ الإضاءة جيّدة على بطاقتك الشخصية" #: lms/templates/verify_student/id_photo_step.underscore -#, python-format -msgid "Once in position, use the camera button %(icon)s to capture your ID" +msgid "Once in position, use the camera button {icon} to capture your ID" msgstr "" -"حالما تضبط وضعية بطاقتك الشخصية، استخدم زر الكاميرا %(icon)s لالتقاط صورة " -"لها. " #: lms/templates/verify_student/id_photo_step.underscore #: lms/templates/verify_student/incourse_reverify.underscore @@ -7589,11 +7690,8 @@ msgid "Be sure your entire face is inside the frame" msgstr "تأكّد من أنّ وجهك داخل إطار الصورة بالكامل " #: lms/templates/verify_student/incourse_reverify.underscore -#, python-format -msgid "Once in position, use the camera button %(icon)s to capture your photo" +msgid "Once in position, use the camera button {icon} to capture your photo" msgstr "" -"حالما تتّخذ وضعية الجلوس المناسبة، يُرجى استخدام زر الكاميرا %(icon)s لتلتقط" -" صورك. " #: lms/templates/verify_student/incourse_reverify.underscore msgid "Can we match the photo you took with the one on your ID?" @@ -7601,9 +7699,8 @@ msgstr "" "هل يمكننا مطابقة الصورة التي التقطتها مع صورتك الموجودة على بطاقتك الشخصية؟ " #: lms/templates/verify_student/intro_step.underscore -#, python-format -msgid "Thanks for returning to verify your ID in: %(courseName)s" -msgstr "شكرًا لك على العودة لتأكيد هويّتك في: %(courseName)s" +msgid "Thanks for returning to verify your ID in: {courseName}" +msgstr "" #: lms/templates/verify_student/intro_step.underscore #: lms/templates/verify_student/make_payment_step.underscore @@ -7642,14 +7739,13 @@ msgstr "" "واحدة من هذه الوثائق اسمك وصورتك " #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "You are enrolling in: %(courseName)s" -msgstr "إنّك تسجّل في: %(courseName)s" +#: lms/templates/verify_student/make_payment_step_ab_testing.underscore +msgid "You are enrolling in: {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "You are upgrading your enrollment for: %(courseName)s" -msgstr "إنّك تجدّد تسجيلك في: %(courseName)s" +msgid "You are upgrading your enrollment for: {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step.underscore msgid "" @@ -7696,10 +7792,8 @@ msgid "You have already verified your ID!" msgstr "سبق أن خضتَ عملية التحقّق من بطاقتك الشخصية! " #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "Your verification status is good until %(verificationGoodUntil)s." +msgid "Your verification status is good until {verificationGoodUntil}." msgstr "" -"يسري مفعول عملية التحقّق من هويّتك حتى تاريخ %(verificationGoodUntil)s." #: lms/templates/verify_student/make_payment_step.underscore msgid "price" @@ -7710,14 +7804,8 @@ msgid "Account Not Activated" msgstr "الحساب غير مفعّل" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "You are enrolling in %(courseName)s" -msgstr "أنت تسجّل في %(courseName)s" - -#: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Upgrade to a Verified Certificate for %(courseName)s" -msgstr "قم بالترقية لتحصل على شهادة موثّقة للمساق %(courseName)s" +msgid "Upgrade to a Verified Certificate for {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore msgid "" @@ -7729,14 +7817,12 @@ msgid "Check your email for an activation message." msgstr "يٌرجى التأكّد من حساب بريدك الإلكتروني بحثّا عن رسالة التفعيل." #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Professional Certificate for %(courseName)s" -msgstr "شهادة مهنيّة للمساق %(courseName)s" +msgid "Professional Certificate for {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Verified Certificate for %(courseName)s" -msgstr "شهادة موثقة للمساق %(courseName)s" +msgid "Verified Certificate for {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore #, python-format @@ -7771,9 +7857,8 @@ msgstr "" "خاصّتك." #: lms/templates/verify_student/payment_confirmation_step.underscore -#, python-format -msgid "Thank you! We have received your payment for %(courseName)s." -msgstr "شكرًا جزيلًا! لقد تلقّينا المبلغ الذي ساهمت به في %(courseName)s" +msgid "Thank you! We have received your payment for {courseName}." +msgstr "" #: lms/templates/verify_student/payment_confirmation_step.underscore msgid "Next Step: Confirm your identity" @@ -8373,11 +8458,6 @@ msgstr "حذف تاريخ استحقاق التقييم" msgid "Chapter Name" msgstr "اسم الفصل" -#: cms/templates/js/edit-chapter.underscore -#, python-format -msgid "Chapter %s" -msgstr "الفصل %s" - #: cms/templates/js/edit-chapter.underscore msgid "provide the title/name of the chapter that will be used in navigating" msgstr "حدّد عنوان/ اسم الفصل الذي سيُستخدم في التصفّح " @@ -8386,11 +8466,6 @@ msgstr "حدّد عنوان/ اسم الفصل الذي سيُستخدم في ا msgid "Chapter Asset" msgstr "مادة ملحقة بفصل" -#: cms/templates/js/edit-chapter.underscore -#, python-format -msgid "path/to/introductionToCookieBaking-CH%d.pdf" -msgstr "path/to/introductionToCookieBaking-CH%d.pdf" - #: cms/templates/js/edit-chapter.underscore msgid "upload a PDF file or provide the path to a Studio asset file" msgstr "" diff --git a/conf/locale/eo/LC_MESSAGES/django.mo b/conf/locale/eo/LC_MESSAGES/django.mo index 841c93e9eff44df33678b0c13f2415e7e526f7b3..e79801c0b059cdd70a90c8b9f7af491b837884d4 100644 GIT binary patch delta 83393 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⋘T(E;VZ$|8o5uLo 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 XaC0^a2fDfDOc>;5o-n9km(~9VR(!B3 delta 83480 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

    YWKmh+ZS`qF8b5XP*- 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 n6_$%RBHFc|v#H&Bdv}xX`>q2`ht|3}\n" "MIME-Version: 1.0\n" @@ -10784,7 +10784,6 @@ msgstr "" #: lms/templates/login.html lms/templates/provider_login.html #: lms/templates/register-form.html lms/templates/signup_modal.html #: lms/templates/sysadmin_dashboard.html -#: themes/red-theme/cms/templates/login.html #: themes/stanford-style/lms/templates/register-form.html msgid "Password" msgstr "Pässwörd Ⱡ'σяєм ιρѕυм ∂#" @@ -11451,11 +11450,7 @@ msgstr "" "Ìnçörréçt förmät för fïéld '{name}'. {detailed_message} Ⱡ'σяєм ιρѕυм ∂σłσя " "ѕιт αмєт, ¢σηѕє¢тєтυ#" -#: cms/lib/xblock/tagging.py -msgid "Difficulty" -msgstr "Dïffïçültý Ⱡ'σяєм ιρѕυм ∂σłσ#" - -#: cms/lib/xblock/tagging.py +#: cms/lib/xblock/tagging/tagging.py msgid "Dictionary with the available tags" msgstr "" "Dïçtïönärý wïth thé äväïläßlé tägs Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєт#" @@ -11533,32 +11528,10 @@ msgstr "Çöürsés Ⱡ'σяєм ιρѕυм #" msgid "Programs" msgstr "Prögräms Ⱡ'σяєм ιρѕυм ∂#" -#: cms/templates/login.html cms/templates/widgets/header.html -#: themes/red-theme/cms/templates/login.html -msgid "Sign In" -msgstr "Sïgn Ìn Ⱡ'σяєм ιρѕυм #" - -#: cms/templates/login.html themes/red-theme/cms/templates/login.html -msgid "Sign In to {studio_name}" -msgstr "Sïgn Ìn tö {studio_name} Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт#" - -#: cms/templates/login.html themes/red-theme/cms/templates/login.html -msgid "Don't have a {studio_name} Account? Sign up!" -msgstr "" -"Dön't hävé ä {studio_name} Àççöünt? Sïgn üp! Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, " -"¢σηѕє¢тєт#" - -#: cms/templates/login.html themes/red-theme/cms/templates/login.html -msgid "Required Information to Sign In to {studio_name}" -msgstr "" -"Réqüïréd Ìnförmätïön tö Sïgn Ìn tö {studio_name} Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт " -"αмєт, ¢σηѕє¢тєтυя#" - #: cms/templates/login.html cms/templates/register.html #: lms/templates/help_modal.html lms/templates/login.html #: lms/templates/provider_login.html lms/templates/register-form.html #: lms/templates/register-shib.html lms/templates/signup_modal.html -#: themes/red-theme/cms/templates/login.html #: themes/stanford-style/lms/templates/register-form.html #: themes/stanford-style/lms/templates/register-shib.html msgid "E-mail" @@ -11570,14 +11543,13 @@ msgstr "É-mäïl Ⱡ'σяєм ιρѕυ#" #: cms/templates/login.html cms/templates/manage_users.html #: cms/templates/manage_users_lib.html cms/templates/register.html #: lms/templates/login.html lms/templates/register-form.html -#: lms/templates/register-shib.html themes/red-theme/cms/templates/login.html +#: lms/templates/register-shib.html #: themes/stanford-style/lms/templates/register-form.html #: themes/stanford-style/lms/templates/register-shib.html msgid "example: username@domain.com" msgstr "éxämplé: üsérnämé@dömäïn.çöm Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢#" #: cms/templates/login.html lms/templates/login.html -#: themes/red-theme/cms/templates/login.html msgid "Forgot password?" msgstr "Förgöt pässwörd? Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αм#" @@ -11815,14 +11787,15 @@ msgid "My Courses" msgstr "Mý Çöürsés Ⱡ'σяєм ιρѕυм ∂σłσ#" #: lms/templates/dashboard.html themes/edx.org/lms/templates/dashboard.html -msgid "Looks like you haven't enrolled in any courses yet." +msgid "You are not enrolled in any courses yet." msgstr "" -"Lööks lïké ýöü hävén't énrölléd ïn äný çöürsés ýét. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт " -"αмєт, ¢σηѕє¢тєтυя α#" +"Ýöü äré nöt énrölléd ïn äný çöürsés ýét. Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, " +"¢σηѕє¢тєтυя#" -#: lms/templates/dashboard.html themes/edx.org/lms/templates/dashboard.html -msgid "Find courses now!" -msgstr "Fïnd çöürsés nöw! Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмє#" +#: lms/templates/dashboard.html lms/templates/navigation.html +#: themes/edx.org/lms/templates/dashboard.html +msgid "Explore courses" +msgstr "Éxplöré çöürsés Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт α#" #: lms/templates/dashboard.html themes/edx.org/lms/templates/dashboard.html msgid "Course-loading errors" @@ -12486,8 +12459,7 @@ msgstr "{platform_name} Hömé Pägé Ⱡ'σяєм ιρѕυм ∂σłσя ѕι#" msgid "How it Works" msgstr "Höw ït Wörks Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#" -#: lms/templates/navigation-edx.html lms/templates/navigation.html -#: themes/edx.org/lms/templates/header.html +#: lms/templates/navigation-edx.html themes/edx.org/lms/templates/header.html #: themes/red-theme/lms/templates/header.html msgid "Find Courses" msgstr "Fïnd Çöürsés Ⱡ'σяєм ιρѕυм ∂σłσя ѕ#" @@ -23106,6 +23078,26 @@ msgid "Learn more about content libraries" msgstr "" "Léärn möré äßöüt çöntént lïßrärïés Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, ¢σηѕє¢тєт#" +#: cms/templates/login.html cms/templates/widgets/header.html +msgid "Sign In" +msgstr "Sïgn Ìn Ⱡ'σяєм ιρѕυм #" + +#: cms/templates/login.html +msgid "Sign In to {studio_name}" +msgstr "Sïgn Ìn tö {studio_name} Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт#" + +#: cms/templates/login.html +msgid "Don't have a {studio_name} Account? Sign up!" +msgstr "" +"Dön't hävé ä {studio_name} Àççöünt? Sïgn üp! Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, " +"¢σηѕє¢тєт#" + +#: cms/templates/login.html +msgid "Required Information to Sign In to {studio_name}" +msgstr "" +"Réqüïréd Ìnförmätïön tö Sïgn Ìn tö {studio_name} Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт " +"αмєт, ¢σηѕє¢тєтυя#" + #: cms/templates/manage_users.html msgid "Course Team Settings" msgstr "Çöürsé Téäm Séttïngs Ⱡ'σяєм ιρѕυм ∂σłσя ѕιт αмєт, #" diff --git a/conf/locale/es_419/LC_MESSAGES/django.mo b/conf/locale/es_419/LC_MESSAGES/django.mo index df5cb59e182d1e135bef69dcc864e077908c2d2b..4a8a06d5684d678f7a20013805ea2e0e7ae9053d 100644 GIT binary patch delta 82409 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

    `TkiWWq&@!@E<%= zN&@FoKFMej)A=AgO~(^{OfVGoL8Q}0U!F%pX??!T`Ese&H!s5Sf9~cqoXhRqe!Vabx)8fY0IY8{Opdw{M7fdk=R06 zsfOhQ`hCRSd32Q2^ZyGPDq&3N7NHu?RfhVI=@o_Lj8tg@@|}@S%;_9B}ThvQi%`XS>%&pPTZQ1=9T6(TYJwNTO(Z~SODLgi7eE(j#H z%D!0VmeKhvZAzywz8wRL=of+fTCV>vP#Er^eV!x59hE)_(UpdB9Ap=w>oblXW{^vf z?Hh^l@54}f>tzB2ci1^COnpAeQBbV3opN(J7KFZ3T=6E2vyo_vk^bZpq2m`}uWYAG zGGnlj8Kar$KN*>5IFnW%7+N5Oc9bcsv2+Oc#MnaG{?ZnW4)Nd_{P7%s(?1o@j>Q*fpY{b$i2wmn5IgPpQRmbEcH1w%b47e&6Yl^u^m>CiEk_FoLB9oJ`^s7IZ1{_R8A z9Xj-46v1?w#+8QfC>7^gPWvl_2O)D3nU2<(6DV1STnR_g{1}AtH)O|BUkSstk*x|B zqcf7#dCx{;6m?1T{I{8ro<^BcAv@~mc2uU;{A`Nx>eT;-!a$}?={fzsS;Yyc3q$!n zy1v`G-1IqSr)@NK;V~LAdHIL*u9j9=4}_Jvp=1sDY6!<>M1G8-K2Zpn+GAw99m#z1 zRgqIVMO~1|@-5gL;golA6-Vb=Di|)y#;7aV zjuDZ)j?57|O357}-<|d?u6F-$<#o{Rib*F!K|TQ z1@z|B{=Y!yCI}Yia#QvteKA3P+LXpqzmQRN!N687rKyxhq3n~DF|`~%45To+4$*#- z_9Nu;kiSU3R~WrOc^`dZpwoH&IEiPmX;{vPU%-6`-{JD5@OG5p7`bj3A1UAEs)~Z; z^o>Nm7*tAUWtA^LT_5@s#_$f9i?(iX25rM}tdG>)p|ZIhkvdhxyX&k2U;2O}1qs_& ztGGI{^HHMog1VR*1%}3P4I$smG`X_Uw#&-BM&}gDEoobfjGNJybK0EyA1^>rIunn4 z=?el=5vWLgSUN7@+KN-*tfPM{M_Nal;$#twG_&;sVN;urMno%Mv>nlHOx<{dpx3a>b%<3+Hcz_apW1? zG#d@u)wL2`-WPW9v_jD$8-X|0^W?TeRZRiPvLV|OW7+5!jI$XT)iz|ZP;NxqKFT3e zcj}`cuk--9f3UE%7Xg;n{r{bdGNgi%GY%EvHYySP?R9)s{68!s>`+k6Zh{m!+OaJCNNKoaYqWR+%Mw6BdwDWarQ9z&;)Ysdh)S>v0K8LroV-KqG2 zS2gYE($lFM!bb@CJZpT6(c?Nn-9+TdQU4fcs^a`ZWNUNvq2Es0KcVlvHKK0MxHjAM z@EqsH<-ool#FmaV@T7)J4FFljJue`FIfE#PzWRFp*MB2=jzClzF3~UmW&J4Mqb(}sd$doa zE))6Dum_`DWtESj&vTnki`;4)x@@D?oB9>xFQF>|^*v~xL!_6HuSdTkoxzzhoXmp&XuTl%5r!)fHN=fzk?-+EhM~7wBGc~leBaiEg4t4jfl5%+NOQSIu zmj1sm@|nsOj9jTT%!GV5SdOw+YlQM#^v$+*USQ*xKGTy1B{S`U+lyyYDW||8e*_D2 zU7>D{MuyB=8wFLRRSq>ieN{4NmSuM@ft>pnaJgNNxCmYY+9G(B)l> zl7n;#!qZe-->oCb@H(f>m!rc~ga;yb5c$D2IyY=2s?grqhISEor6jNE?96Fyyu#=TjU0G}V0Hdfz`Hh{1GxXWbb(ZU$jox`2AB)Ur>!A88T|{pl-Tw

    XT*iH~`0=C=A9Gh+2nBhVVv(N3t2_C@WUF*d#s^ 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 diff --git a/conf/locale/es_419/LC_MESSAGES/djangojs.po b/conf/locale/es_419/LC_MESSAGES/djangojs.po index b2ead0aa5c..80e198604a 100644 --- a/conf/locale/es_419/LC_MESSAGES/djangojs.po +++ b/conf/locale/es_419/LC_MESSAGES/djangojs.po @@ -107,9 +107,9 @@ msgid "" msgstr "" "Project-Id-Version: edx-platform\n" "Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" -"POT-Creation-Date: 2016-03-30 19:38+0000\n" -"PO-Revision-Date: 2016-04-08 21:01+0000\n" -"Last-Translator: Laura Silva \n" +"POT-Creation-Date: 2016-04-15 11:04+0000\n" +"PO-Revision-Date: 2016-04-15 11:07+0000\n" +"Last-Translator: Ned Batchelder \n" "Language-Team: Spanish (Latin America) (http://www.transifex.com/open-edx/edx-platform/language/es_419/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -276,6 +276,7 @@ msgstr "Avanzado" #: common/lib/xmodule/xmodule/js/src/html/edit.js #: common/static/common/templates/image-modal.underscore #: common/static/common/templates/discussion/forum-action-close.underscore +#: lms/templates/student_profile/share_modal.underscore msgid "Close" msgstr "Cerrar" @@ -1835,38 +1836,37 @@ msgid "Do not show again" msgstr "No mostrar nuevamente" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Turn on closed captioning" -msgstr "Activar subtítulos" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Turn off transcript" -msgstr "Desactivar transcripción" +msgid "Transcript will be displayed when you start playing the video." +msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "" -"Language: Press the UP arrow key to enter the language menu, then use UP and" -" DOWN arrow keys to navigate language options. Press ENTER to change to the " +"Activating a link in this group will skip to the corresponding point in the " +"video." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Video transcript" +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Start of transcript. Skip to the end." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "End of transcript. Skip to the start." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "" +"Language: Press the UP arrow key to enter the language menu then use UP and " +"DOWN arrow keys to navigate language options. Press ENTER to change to the " "selected language." msgstr "" -"Idioma: Presione la flecha ARRIBA para entrar al menú de idioma, luego use " -"las flechas ARRIBA y ABAJO para navegar las opciones. Presione ENTRAR para " -"cambiar al idioma seleccionado." #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Open language menu" -msgstr "Abrir menú de lenguaje" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "" -"Activating an item in this group will spool the video to the corresponding " -"time point. To skip transcript, go to previous item." +msgid "Open language menu." msgstr "" -"Activar un ítem en este grupo llevará el vídeo al momento correspondiente. " -"Para saltar la transcripción, vaya al item anterior." - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "
  • Transcript will be displayed when " -msgstr "
  • La transcripción se mostrará cuando" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "Hide closed captions" @@ -1877,6 +1877,10 @@ msgid "(Caption will be displayed when you start playing the video.)" msgstr "" "(Los subtítulos serán mostrados al iniciar la reproducción del video.)" +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Turn on closed captioning" +msgstr "Activar subtítulos" + #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "Turn on transcripts" msgstr "Activar transcripción" @@ -2175,6 +2179,17 @@ msgid "Please do not use any spaces or special characters in this field." msgstr "" "Por favor, no utilizar espacios o caracteres especiales en este campo." +#: common/static/common/js/components/views/paginated_view.js +#: common/static/common/js/components/views/paging_footer.js +msgid "Pagination" +msgstr "" + +#: common/static/common/js/components/views/paginated_view.js +msgid "" +"Your request could not be completed. Reload the page and try again. If the " +"issue persists, click the Help tab to report the problem." +msgstr "" + #: common/static/common/js/components/views/paging_header.js msgid "Showing %(first_index)s out of %(num_items)s total" msgstr "Mostrando %(first_index)s de un total de %(num_items)s " @@ -2471,6 +2486,7 @@ msgstr "campos abiertos" #: lms/djangoapps/teams/static/teams/js/collections/topic.js #: lms/templates/edxnotes/tab-item.underscore +#: lms/templates/learner_dashboard/program_card.underscore msgid "name" msgstr "nombre" @@ -2480,6 +2496,11 @@ msgstr "nombre" msgid "team count" msgstr "Cantidad de equipos" +#: lms/djangoapps/teams/static/teams/js/teams_tab_factory.js +#: lms/djangoapps/teams/static/teams/js/views/teams_tab.js +msgid "Teams" +msgstr "Equipos" + #: lms/djangoapps/teams/static/teams/js/views/edit_team.js #: cms/templates/js/certificate-editor.underscore #: cms/templates/js/content-group-editor.underscore @@ -2675,14 +2696,14 @@ msgstr[1] "%(memberCount)s / %(maxMemberCount)s Miembros" msgid "All teams" msgstr "Todos los equipos" +#: lms/djangoapps/teams/static/teams/js/views/teams.js +msgid "Teams Pagination" +msgstr "" + #: lms/djangoapps/teams/static/teams/js/views/teams_tab.js msgid "Topics" msgstr "Temas" -#: lms/djangoapps/teams/static/teams/js/views/teams_tab.js -msgid "Teams" -msgstr "Equipos" - #: lms/djangoapps/teams/static/teams/js/views/teams_tab.js msgid "" "See all teams in your course, organized by topic. Join a team to collaborate" @@ -4349,6 +4370,10 @@ msgstr "Vinculando" msgid "Successfully unlinked." msgstr "Se desvinculó con éxito." +#: lms/static/js/student_profile/views/badge_list_container.js +msgid "Accomplishments Pagination" +msgstr "" + #: lms/static/js/student_profile/views/learner_profile_factory.js msgid "{platform_name} learners can see my:" msgstr "Los usuarios de {platform_name} pueden ver mi:" @@ -4412,6 +4437,18 @@ msgstr "Foto de perfil" msgid "Profile image for {username}" msgstr "Foto de perfil para {username}" +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "About Me" +msgstr "" + +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "Accomplishments" +msgstr "" + +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "Profile" +msgstr "" + #: lms/static/js/verify_student/views/image_input_view.js msgid "Image Upload Error" msgstr "Error en subir imagen" @@ -4931,6 +4968,10 @@ msgstr "Se requiere la ruta del archivo" msgid "You must specify a name" msgstr "Debe especificar un nombre" +#: cms/static/js/models/course_update.js +msgid "Action required: Enter a valid date." +msgstr "" + #: cms/static/js/models/group.js msgid "Group name is required" msgstr "Nombre de grupo requerido" @@ -5774,6 +5815,11 @@ msgstr "No programado" msgid "Date" msgstr "Fecha" +#: cms/templates/js/edit-chapter.underscore +#: lms/templates/ccx/schedule.underscore +msgid "gettext(" +msgstr "gettext(" + #: cms/templates/js/paging-header.underscore #: common/static/common/templates/components/paging-footer.underscore #: common/static/common/templates/discussion/pagination.underscore @@ -5799,8 +5845,9 @@ msgid "Zoom Out" msgstr "Alejar" #: common/static/common/templates/components/paging-footer.underscore -msgid "Page number" -msgstr "Número de página" +#, python-format +msgid "Page number out of %(total_pages)s" +msgstr "" #: common/static/common/templates/components/paging-footer.underscore msgid "Enter the page number you'd like to quickly navigate to." @@ -6473,10 +6520,6 @@ msgstr "Fecha límite de entrega" msgid "remove all" msgstr "eliminar todo" -#: lms/templates/ccx/schedule.underscore -msgid "gettext(" -msgstr "gettext(" - #: lms/templates/ccx/schedule.underscore msgid "Section" msgstr "Sección" @@ -6822,16 +6865,10 @@ msgid "Generate Exception Certificates" msgstr "Generar excepciones de certificados" #: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "Generate a Certificate for all " -msgstr "Generar certificado para todos" - -#: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "New" -msgstr "Nuevo" - -#: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "additions to the Exception list" -msgstr "adiciones a la lista de excepciones" +msgid "" +"Generate certificates for all users on the Exception list for whom " +"certificates have not yet been run" +msgstr "" #: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore msgid "Generate a Certificate for all users on the Exception list" @@ -7078,6 +7115,24 @@ msgstr "Utilizado" msgid "Valid" msgstr "Válido" +#: lms/templates/learner_dashboard/explore_new_programs.underscore +msgid "" +"Browse recently launched courses and see what\\'s new in your favorite " +"subjects" +msgstr "" + +#: lms/templates/learner_dashboard/explore_new_programs.underscore +msgid "Explore New XSeries" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore +msgid "org.display_name" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore +msgid "type" +msgstr "" + #: lms/templates/search/course_search_results.underscore #: lms/templates/search/dashboard_search_results.underscore #, python-format @@ -7122,7 +7177,6 @@ msgid "section.title" msgstr "section.title" #: lms/templates/student_account/account_settings.underscore -#: lms/templates/student_profile/learner_profile.underscore msgid "An error occurred. Please reload the page." msgstr "Ocurrió un error. Por favor recargue la página." @@ -7314,13 +7368,69 @@ msgstr "Campo requerido" msgid "Already have an account?" msgstr "¿Ya está registrado?" +#: lms/templates/student_profile/badge.underscore +#, python-format +msgid "Share your \"%(display_name)s\" award" +msgstr "" + +#: lms/templates/student_profile/badge.underscore +msgid "Share" +msgstr "" + +#: lms/templates/student_profile/badge.underscore +#, python-format +msgid "Earned %(created)s." +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "What's Your Next Accomplishment?" +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "Start working toward your next learning goal." +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "Find a course" +msgstr "" + #: lms/templates/student_profile/learner_profile.underscore +msgid "An error occurred. Try loading the page again." +msgstr "" + +#: lms/templates/student_profile/section_two.underscore msgid "You are currently sharing a limited profile." msgstr "Actualmente está compartiendo un perfil limitado." -#: lms/templates/student_profile/learner_profile.underscore -msgid "This edX learner is currently sharing a limited profile." -msgstr "Este usuario está compartiendo un perfil limitado." +#: lms/templates/student_profile/section_two.underscore +msgid "This learner is currently sharing a limited profile." +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +msgid "Share on Mozilla Backpack" +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +msgid "" +"To share your certificate on Mozilla Backpack, you must first have a " +"Backpack account. Complete the following steps to add your certificate to " +"Backpack." +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +#, python-format +msgid "" +"Create a %(link_start)sMozilla Backpack%(link_end)s account, or log in to " +"your existing account" +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +#, python-format +msgid "" +"%(download_link_start)sDownload this image (right-click or option-click, " +"save as)%(link_end)s and then %(upload_link_start)supload%(link_end)s it to " +"your backpack.
  • " +msgstr "" #: lms/templates/verify_student/enrollment_confirmation_step.underscore #, python-format @@ -7411,13 +7521,10 @@ msgid "Take Your Photo" msgstr "Tome su fotografía" #: lms/templates/verify_student/face_photo_step.underscore -#, python-format msgid "" -"When your face is in position, use the camera button %(icon)s below to take " +"When your face is in position, use the camera button {icon} below to take " "your photo." msgstr "" -"Luego de colocar su rostro en posición, haga clic en el siguiente icono " -"%(icon)s para tomar la foto." #: lms/templates/verify_student/face_photo_step.underscore msgid "To take a successful photo, make sure that:" @@ -7436,13 +7543,10 @@ msgid "The photo of your face matches the photo on your ID." msgstr "La foto de su documento coincide con la foto de su cara." #: lms/templates/verify_student/face_photo_step.underscore -#, python-format msgid "" -"To use the current photo, select the camera button %(icon)s. To take another" -" photo, select the retake button %(icon)s." +"To use the current photo, select the camera button {icon}. To take another " +"photo, select the retake button {icon}." msgstr "" -"Para usar la foto actual, seleccione el botón con la camara %(icon)s. Para " -"tomar una nueva foto, seleccione el botón de nueva toma %(icon)s." #: lms/templates/verify_student/face_photo_step.underscore #: lms/templates/verify_student/id_photo_step.underscore @@ -7538,10 +7642,8 @@ msgid "Make sure your ID is well-lit" msgstr "Asegurese que su documento está bien iluminado" #: lms/templates/verify_student/id_photo_step.underscore -#, python-format -msgid "Once in position, use the camera button %(icon)s to capture your ID" +msgid "Once in position, use the camera button {icon} to capture your ID" msgstr "" -"Una vez en posición, usa el botón de la cámara %(icon)s para capturar tu ID" #: lms/templates/verify_student/id_photo_step.underscore #: lms/templates/verify_student/incourse_reverify.underscore @@ -7573,11 +7675,8 @@ msgid "Be sure your entire face is inside the frame" msgstr "Verifique que su cara está completamente dentro del marco de la foto" #: lms/templates/verify_student/incourse_reverify.underscore -#, python-format -msgid "Once in position, use the camera button %(icon)s to capture your photo" +msgid "Once in position, use the camera button {icon} to capture your photo" msgstr "" -"Una vez en posición, use el botón de la cámara %(icon)s para capturar su " -"foto" #: lms/templates/verify_student/incourse_reverify.underscore msgid "Can we match the photo you took with the one on your ID?" @@ -7586,9 +7685,8 @@ msgstr "" "documento de identificación?" #: lms/templates/verify_student/intro_step.underscore -#, python-format -msgid "Thanks for returning to verify your ID in: %(courseName)s" -msgstr "Gracias por volver a verificar su identificación en: %(courseName)s" +msgid "Thanks for returning to verify your ID in: {courseName}" +msgstr "" #: lms/templates/verify_student/intro_step.underscore #: lms/templates/verify_student/make_payment_step.underscore @@ -7628,14 +7726,13 @@ msgstr "" "con su nombre y foto" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "You are enrolling in: %(courseName)s" -msgstr "Estas inscrito en: %(courseName)s" +#: lms/templates/verify_student/make_payment_step_ab_testing.underscore +msgid "You are enrolling in: {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "You are upgrading your enrollment for: %(courseName)s" -msgstr "Estas actualizando tu inscripción para: %(courseName)s" +msgid "You are upgrading your enrollment for: {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step.underscore msgid "" @@ -7686,9 +7783,8 @@ msgid "You have already verified your ID!" msgstr "Usted ha verificado su ID!" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "Your verification status is good until %(verificationGoodUntil)s." -msgstr "Su estado de verificación es válido hasta %(verificationGoodUntil)s." +msgid "Your verification status is good until {verificationGoodUntil}." +msgstr "" #: lms/templates/verify_student/make_payment_step.underscore msgid "price" @@ -7699,14 +7795,8 @@ msgid "Account Not Activated" msgstr "Cuenta no activada" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "You are enrolling in %(courseName)s" -msgstr "Usted está inscribiendose a %(courseName)s" - -#: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Upgrade to a Verified Certificate for %(courseName)s" -msgstr "Cambiar a Certificado Verificado para %(courseName)s" +msgid "Upgrade to a Verified Certificate for {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore msgid "" @@ -7720,14 +7810,12 @@ msgid "Check your email for an activation message." msgstr "Revise sus correos electrónicos para un mensaje de activación." #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Professional Certificate for %(courseName)s" -msgstr "Certificado Verificado para %(courseName)s" +msgid "Professional Certificate for {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Verified Certificate for %(courseName)s" -msgstr "Certificado Verificado para %(courseName)s" +msgid "Verified Certificate for {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore #, python-format @@ -7765,9 +7853,8 @@ msgstr "" "identificación oficial con foto." #: lms/templates/verify_student/payment_confirmation_step.underscore -#, python-format -msgid "Thank you! We have received your payment for %(courseName)s." -msgstr "Gracias! Hemos recibido su pago para %(courseName)s." +msgid "Thank you! We have received your payment for {courseName}." +msgstr "" #: lms/templates/verify_student/payment_confirmation_step.underscore msgid "Next Step: Confirm your identity" @@ -8368,11 +8455,6 @@ msgstr "Borrar la fecha límite de calificación" msgid "Chapter Name" msgstr "Nombre del capítulo" -#: cms/templates/js/edit-chapter.underscore -#, python-format -msgid "Chapter %s" -msgstr "Capítulo %s" - #: cms/templates/js/edit-chapter.underscore msgid "provide the title/name of the chapter that will be used in navigating" msgstr "Ingrese el título / nombre del capítulo que se usará" @@ -8381,11 +8463,6 @@ msgstr "Ingrese el título / nombre del capítulo que se usará" msgid "Chapter Asset" msgstr "Recursos del capítulo" -#: cms/templates/js/edit-chapter.underscore -#, python-format -msgid "path/to/introductionToCookieBaking-CH%d.pdf" -msgstr "ruta/al/capitulo%d.pdf" - #: cms/templates/js/edit-chapter.underscore msgid "upload a PDF file or provide the path to a Studio asset file" msgstr "Suba un archivo PDF o ingrese la ruta de un recurso en Studio" diff --git a/conf/locale/fr/LC_MESSAGES/django.mo b/conf/locale/fr/LC_MESSAGES/django.mo index 62931ee127d4b7d8adcc19f0e19ddd4dd1010638..23f84ecadb5b9c6ca91cd2e06c7361c9badbed27 100644 GIT binary patch delta 39911 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 O-WtK1`3tDSmi`}N*Eb3P delta 41849 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\n" "Language-Team: French (http://www.transifex.com/open-edx/edx-platform/language/fr/)\n" @@ -441,6 +441,10 @@ msgid "" "set." msgstr "" +#: common/djangoapps/course_modes/models.py +msgid "Verified modes cannot be free." +msgstr "" + #: common/djangoapps/course_modes/models.py msgid "" "The time period before a course ends in which a course mode will expire" @@ -479,6 +483,7 @@ msgid "Student" msgstr "Étudiant" #: common/djangoapps/embargo/forms.py +#: lms/djangoapps/verified_track_content/forms.py msgid "COURSE NOT FOUND. Please check that the course ID is valid." msgstr "" @@ -3957,6 +3962,75 @@ msgstr "" msgid "Top num_top_words words for word cloud." msgstr "" +#: lms/djangoapps/badges/events/course_complete.py +msgid "" +"Completed the course \"{course_name}\" ({course_mode}, {start_date} - " +"{end_date})" +msgstr "" + +#: lms/djangoapps/badges/events/course_complete.py +msgid "Completed the course \"{course_name}\" ({course_mode})" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The badge image must be square." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The badge image file size must be less than 250KB." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "This value must be all lowercase." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The course mode for this badge image. For example, \"verified\" or \"honor\"." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Badge images must be square PNG files. The file size should be under 250KB." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Set this value to True if you want this image to be the default image for " +"any course modes that do not have a specified badge image. You can have only" +" one default image." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "There can be only one default image." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"On each line, put the number of completed courses to award a badge for, a " +"comma, and the slug of a badge class you have created that has the issuing " +"component 'openedx__course'. For example: 3,enrolled_3_courses" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"On each line, put the number of enrolled courses to award a badge for, a " +"comma, and the slug of a badge class you have created that has the issuing " +"component 'openedx__course'. For example: 3,enrolled_3_courses" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Each line is a comma-separated list. The first item in each line is the slug" +" of a badge class you have created that has an issuing component of " +"'openedx__course'. The remaining items in each line are the course keys the " +"learner needs to complete to be awarded the badge. For example: " +"slug_for_compsci_courses_group_badge,course-v1:CompSci+Course+First,course-v1:CompsSci+Course+Second" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "Please check the syntax of your entry." +msgstr "" + #. Translators: 'EdX', 'edX', and 'Open edX' are trademarks of 'edX Inc.'. #. Please do not translate any of these trademarks and company names. #: lms/djangoapps/branding/api.py @@ -4065,16 +4139,6 @@ msgid "" " rerun of this course in the studio to allow this action." msgstr "" -#: lms/djangoapps/certificates/badge_handler.py -msgid "" -"Completed the course \"{course_name}\" ({course_mode}, {start_date} - " -"{end_date})" -msgstr "" - -#: lms/djangoapps/certificates/badge_handler.py -msgid "Completed the course \"{course_name}\" ({course_mode})" -msgstr "" - #: wiki/admin.py wiki/models/article.py msgid "created" msgstr "créé" @@ -4143,34 +4207,6 @@ msgstr "" msgid "The download URL for the generated certificate." msgstr "" -#: lms/djangoapps/certificates/models.py -msgid "The badge image must be square." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "The badge image file size must be less than 250KB." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "The course mode for this badge image. For example, \"verified\" or \"honor\"." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "" -"Badge images must be square PNG files. The file size should be under 250KB." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "" -"Set this value to True if you want this image to be the default image for " -"any course modes that do not have a specified badge image. You can have only" -" one default image." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "There can be only one default image." -msgstr "" - #: lms/djangoapps/certificates/models.py msgid "Name of template." msgstr "" @@ -4637,6 +4673,10 @@ msgid "" "To earn a certificate, you must complete all requirements before this date." msgstr "" +#: lms/djangoapps/courseware/date_summary.py +msgid "After this date, course content will be archived." +msgstr "" + #: lms/djangoapps/courseware/date_summary.py msgid "" "This course is archived, which means you can review course content but it is" @@ -5584,11 +5624,7 @@ msgid "" msgstr "" #: lms/djangoapps/instructor/views/api.py -msgid "Invalid Json data, Please refresh the page and then try again." -msgstr "" - -#: lms/djangoapps/instructor/views/api.py -msgid "Invalid data, user_id must be present for all certificate exceptions." +msgid "Invalid data, generate_for must be \"new\" or \"all\"." msgstr "" #: lms/djangoapps/instructor/views/api.py @@ -5924,6 +5960,7 @@ msgid "Last Name" msgstr "Nom" #: lms/djangoapps/instructor_task/tasks_helper.py +#: openedx/core/djangoapps/api_admin/forms.py #: lms/templates/shoppingcart/receipt.html msgid "Company Name" msgstr "Nom Entreprise" @@ -7253,6 +7290,10 @@ msgid "" "The user {username} is not enrolled in the course associated with this team." msgstr "" +#: lms/djangoapps/verified_track_content/models.py +msgid "The course key for the course we would like to be auto-cohorted." +msgstr "" + #: lms/djangoapps/verify_student/models.py msgid "Your {platform_name} verification has expired." msgstr "" @@ -8065,6 +8106,26 @@ msgstr "Cette révision a été supprimée." msgid "Restoring to this revision will mark the article as deleted." msgstr "Restaurer cette révision marquera cet article comme supprimé." +#: openedx/core/djangoapps/api_admin/forms.py +msgid "Company Address" +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "Describe what your application does." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The URL of your company's website." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The name of your company." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The contact address of your company." +msgstr "" + #: openedx/core/djangoapps/api_admin/models.py cms/templates/index.html msgid "Denied" msgstr "Refusée" @@ -8085,6 +8146,27 @@ msgstr "" msgid "The reason this user wants to access the API." msgstr "" +#: openedx/core/djangoapps/api_admin/models.py +msgid "API access request from {company}" +msgstr "" + +#: openedx/core/djangoapps/api_admin/models.py +msgid "API access request" +msgstr "" + +#: openedx/core/djangoapps/api_admin/views.py +msgid "TODO" +msgstr "" + +#. Translators: link_start and link_end are HTML tags for a link to the terms +#. of service. +#. platform_name is the name of this Open edX installation. +#: openedx/core/djangoapps/api_admin/widgets.py +msgid "" +"I, and my company, accept the {link_start}{platform_name} API Terms of " +"Service{link_end}." +msgstr "" + #: openedx/core/djangoapps/bookmarks/views.py msgid "An error has occurred. Please try again." msgstr "" @@ -8115,6 +8197,10 @@ msgstr "" msgid "Bookmark with usage_id: {usage_id} does not exist." msgstr "" +#: openedx/core/djangoapps/course_groups/cohorts.py +msgid "Default Group" +msgstr "" + #: openedx/core/djangoapps/course_groups/cohorts.py msgid "You cannot create two cohorts with the same name" msgstr "" @@ -8351,6 +8437,14 @@ msgid "" "to retry a failing request." msgstr "" +#: openedx/core/djangoapps/programs/models.py +msgid "Do we want to show xseries program advertising" +msgstr "" + +#: openedx/core/djangoapps/programs/models.py +msgid "Do we want to show program listing page" +msgstr "" + #: openedx/core/djangoapps/self_paced/models.py msgid "Enable course home page improvements." msgstr "" @@ -9077,10 +9171,18 @@ msgstr "Numéro du cours :" #: lms/templates/sysadmin_dashboard.html #: lms/templates/sysadmin_dashboard_gitlogs.html #: lms/templates/courseware/courses.html +#: themes/edx.org/lms/templates/header.html #: themes/red-theme/lms/templates/header.html msgid "Courses" msgstr "Cours" +#: cms/templates/index.html cms/templates/widgets/header.html +#: lms/templates/navigation.html lms/templates/learner_dashboard/programs.html +#: themes/edx.org/lms/templates/header.html +#: themes/red-theme/lms/templates/header.html +msgid "Programs" +msgstr "" + #: cms/templates/login.html cms/templates/widgets/header.html #: themes/red-theme/cms/templates/login.html msgid "Sign In" @@ -9516,31 +9618,23 @@ msgstr "{platform_name} Aide" #: lms/templates/help_modal.html msgid "" -"For questions on course lectures, homework, tools, or materials for " -"this course, post in the {link_start}course discussion " -"forum{link_end}." +"For {strong_start}questions on course lectures, homework, tools, or " +"materials for this course{strong_end}, post in the {link_start}course " +"discussion forum{link_end}." msgstr "" -"Pour les questions sur les cours magistraux, les devoirs, les outils" -" ou les composants de ce cours, écrivez dans le {link_start}forum " -"de discussion du cours{link_end}" #: lms/templates/help_modal.html msgid "" -"Have general questions about {platform_name}? You can find " -"lots of helpful information in the {platform_name} " +"Have {strong_start}general questions about {platform_name}{strong_end}? You " +"can find lots of helpful information in the {platform_name} " "{link_start}FAQ{link_end}." msgstr "" -"Vous avez des questions d'ordre général à propos de " -"{platform_name}? Vous pouvez trouver un tas d'informations utiles " -"dans la {link_start}FAQ{link_end} de {platform_name}." #: lms/templates/help_modal.html msgid "" -"Have a question about something specific? You can contact " -"the {platform_name} general support team directly:" +"Have a {strong_start}question about something specific{strong_end}? You can " +"contact the {platform_name} general support team directly:" msgstr "" -"Vous avez une question spécifique ? Vous pouvez contacter " -"l'équipe de support de {platform_name} directement :" #: lms/templates/help_modal.html msgid "Report a problem" @@ -9615,13 +9709,10 @@ msgid "Brief description of the problem" msgstr "Brève description du problème" #: lms/templates/help_modal.html -msgid "Details of the problem you are encountering" -msgstr "Détails du problème que vous rencontrez" - -#: lms/templates/help_modal.html -msgid "Include error messages, steps which lead to the issue, etc." +msgid "" +"Details of the problem you are encountering{asterisk}{begin_span}Include " +"error messages, steps which lead to the issue, etc.{end_span}" msgstr "" -"Inclure les messages d'erreur, les étapes qui aboutissent au problème, etc." #: lms/templates/help_modal.html msgid "suggestion" @@ -9817,8 +9908,6 @@ msgstr "" msgid "Account Preferences" msgstr "Préférences du compte" -#. Translators: provider_name is the name of an external, third-party user -#. authentication provider (like Google or LinkedIn). #: lms/templates/login.html msgid "Sign in with {provider_name}" msgstr "S'enregistrer avec {provider_name}" @@ -9995,14 +10084,10 @@ msgid "Register" msgstr "Inscription" #: lms/templates/navigation-edx.html lms/templates/navigation.html -#: themes/edx.org/lms/templates/header.html -#: themes/red-theme/lms/templates/header.html msgid "" -"Warning: Your browser is not fully supported. We strongly " -"recommend using {chrome_link} or {ff_link}." +"{begin_strong}Warning:{end_strong} Your browser is not fully supported. We " +"strongly recommend using {chrome_link} or {ff_link}." msgstr "" -"Attention : Votre navigateur n'est pas complètement " -"supporté. Nous recommandons vivement d'utiliser {chrome_link} ou {ff_link}." #: lms/templates/navigation.html themes/red-theme/lms/templates/header.html msgid "Global" @@ -10081,8 +10166,6 @@ msgstr "" "Les erreurs suivantes se sont produites pendant le traitement de votre " "inscription :" -#. Translators: provider_name is the name of an external, third-party user -#. authentication service (like Google or LinkedIn). #: lms/templates/register-form.html #: themes/stanford-style/lms/templates/register-form.html msgid "Sign up with {provider_name}" @@ -10693,10 +10776,6 @@ msgstr "" "utilisez les paramètres de votre navigateur pour les agrandir ou les " "diminuer. Sous Google Chrome, ceci se fait avec CTRL+PLUS, ou CTRL+MOINS." -#: lms/templates/video.html -msgid "Skip to a navigable version of this video's transcript." -msgstr "Aller à une version navigable du sous-titrage de cette vidéo. " - #: lms/templates/video.html msgid "Loading video player" msgstr "Chargement du lecteur vidéo" @@ -10709,14 +10788,6 @@ msgstr "Jouer la vidéo" msgid "No playable video sources found." msgstr "Aucune source vidéo jouable trouvée" -#: lms/templates/video.html -msgid "Skip to end of transcript." -msgstr "Aller à la fin du sous-titrage" - -#: lms/templates/video.html -msgid "Go back to start of transcript." -msgstr "Retourner au début du sous-titrage." - #: lms/templates/video.html msgid "Download video" msgstr "Télécharger la vidéo" @@ -10737,6 +10808,476 @@ msgstr "Vos mots :" msgid "Total number of words:" msgstr "Nombre total de mots :" +#: lms/templates/api_admin/api_access_request_form.html +msgid "API Access Request" +msgstr "" + +#: lms/templates/api_admin/api_access_request_form.html +#: lms/templates/api_admin/status.html +msgid "{platform_name} API Access Request" +msgstr "" + +#: lms/templates/api_admin/api_access_request_form.html +msgid "Request API Access" +msgstr "" + +#. Translators: "platform_name" is the name of this Open edX installation. +#. "link_start" and "link_end" are the HTML for a link to the API +#. documentation. "api_support_email_link" is HTML for a link to email the API +#. support staff. +#: lms/templates/api_admin/status.html +msgid "" +"Your request to access the {platform_name} Course Catalog API is being " +"processed. You will receive a message at the email address in your profile " +"when processing is complete. You can also return to this page to see the " +"status of your API access request. To learn more about the {platform_name} " +"Course Catalog API, visit {link_start}our API documentation page{link_end}. " +"For questions about using this API, visit our FAQ page or contact " +"{api_support_email_link}." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Terms of Service for {platform_name} APIs" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Effective Date: April 12th, 2016" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Welcome to {platform_name}. Thank you for using {platform_name}'s Course " +"Discovery API and any additional APIs that we may offer from time to time " +"(collectively, the \"APIs\"). Please read these Terms of Service prior to " +"accessing or using the APIs. These Terms of Service, any additional terms " +"within accompanying API documentation, and any applicable policies and " +"guidelines that {platform_name} makes available and/or updates from time to " +"time are agreements (collectively, the \"Terms\") between you and " +"{platform_name}. By accessing or using the APIs, you accept and agree to be " +"legally bound by the Terms, whether or not you are a registered user. If you" +" do not understand or do not wish to be bound by the Terms, you should not " +"use the APIs." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "API Access" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To access the APIs, you will need to create an {platform_name} user account " +"for your application (not for personal use). This account will provide you " +"with access to our API request page at {request_url}. On that page, you must" +" complete the API request form including a description of your proposed uses" +" for the APIs. Any account and registration information that you provide to " +"{platform_name} must be accurate and up to date, and you agree to inform us " +"promptly of any changes. {platform_name} will review your API request form " +"and, upon approval in {platform_name}'s sole discretion, will provide you " +"with instructions for obtaining your API shared secret and client ID." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Permissible Use" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to use the APIs solely for the purpose of delivering content that " +"is accessed through the APIs (the \"API Content\") to your own website, " +"mobile site, app, blog, email distribution list, or social media property or" +" for another commercial use that you described in your request for access " +"and that {platform_name} has approved on a case-by-case basis. " +"{platform_name} may monitor your use of the APIs for compliance with the " +"Terms and may deny your access or shut down your integration if you try to " +"go around or exceed the requirements and limitations set by {platform_name}." +" Your Application or other approved use of the API or the API Content must " +"not prompt your end users to provide their {platform_name} username, " +"password or other {platform_name} user credentials anywhere other than the " +"{platform_name} website at {platform_url}." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Prohibited Uses and Activities" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} shall have the sole right to determine whether or not any " +"given use of the APIs is acceptable, and {platform_name} reserves the right " +"to revoke API access for any use that {platform_name} determines at any " +"time, in its sole discretion, does not benefit or serve the best interests " +"of {platform_name}, its users and its partners." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The following activities are not acceptable when using the APIs (this is not" +" an exhaustive list):" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"collecting or storing the names, passwords, or other credentials of " +"{platform_name} users;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"scraping or similar techniques to aggregate or otherwise create permanent " +"copies of API Content;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"violating, misappropriating or infringing any copyright, trademark rights, " +"rights of privacy or publicity, confidential information or any other right " +"of any third party;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"altering or removing any trademark, copyright or other proprietary or legal " +"notices contained in, or appearing on, the APIs or any API Content;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "altering or editing any content or graphics in the API Content" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"sublicensing, re-distributing, renting, selling or leasing access to the " +"APIs or your client secret to any third party;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"distributing any virus, Trojan horse, spyware, adware, malware, bot, time " +"bomb, worm, or other harmful or malicious component; or" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"using the APIs for any purpose which or might overburden, impair or disrupt " +"the {platform_name} platform, servers or networks." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Usage and Quotas" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} reserves the right, in its discretion, to impose " +"restrictions and limitations on the number and frequency of calls made by " +"you or your Application to the APIs. You must not attempt to circumvent any " +"restrictions or limitations that we impose." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Compliance" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to comply with all applicable law, regulation, and third party " +"rights (including without limitation laws regarding the import or export of " +"data or software, privacy, copyright, and local laws). You will not use the " +"APIs to encourage or promote illegal activity or violation of third party " +"rights. You will not violate any other terms of service with " +"{platform_name}. You will only access (or attempt to access) an API by the " +"means described in the documentation of that API. You will not misrepresent " +"or mask either your identity or yourApplication's identity when using the " +"APIs." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Ownership" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You acknowledge and agree that the APIs and all API Content contain valuable" +" intellectual property of {platform_name} and its partners. The APIs and all" +" API Content are protected by United States and foreign copyright, " +"trademark, and other laws. All rights in the APIs and the API Content, if " +"not expressly granted, are reserved. By using the APIs or any API Content, " +"you do not acquire ownership of any rights in the APIs or API Content. You " +"must not claim or attempt to claim ownership in the APIs or any API Content " +"or misrepresent yourself or your company or your Application as being the " +"source of any API Content. You may not modify, create derivative works of, " +"or attempt to use, license, or in any way exploit any API Content in whole " +"or in part on your own behalf or on behalf of any third party. You may not " +"distribute or modify the APIs or any API Content (including adaptation, " +"editing, excerpting, or creating derivative works)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"All names, logos and seals (\"Trademarks\") that appear in the APIs, API " +"Content, or on or through the services made available on or through the " +"APIs, if any, are the property of their respective owners. You may not " +"remove, alter, or obscure any copyright, Trademark, or other proprietary " +"rightrs notices incorporated in or accompanying the API Content. If any " +"third party revokes access to API Content owned or controlled by that third " +"party, including without limitation any Trademarks, you must ensure that all" +" API Content pertaining to that third party is deleted from your app, " +"networks, systems and servers as soon as reasonably possible. If you stop " +"using the APIs altogether or if your API access is revoked, you must delete " +"all API Content in the same way." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To the extent that you submit any content to {platform_name} in connection " +"with your use of the APIs or any API Content, you hereby grant to " +"{platform_name} a worldwide, non-exclusive, transferable, assignable, sub " +"licensable, 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 such " +"content, in whole or in part, in any form and in any media formats and " +"through any media channels (now known or hereafter developed)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Privacy" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to comply with all applicable privacy laws and regulations and to " +"be transparent with respect to any collection and use of end user data. You " +"will provide and adhere to a privacy policy for your Application that " +"clearly and accurately describes to your end users what user information you" +" collect and how you may use and share such information (including for " +"advertising) with {platform_name} and other third parties." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Right to Charge" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} reserves the right to modify the Terms at any time without " +"advance notice. Any changes to the Terms will be effective immediately upon " +"posting on this page, with an updated effective date. By accessing or using " +"the APIs after any changes have been made, you signify your agreement on a " +"prospective basis to the modified Terms and all of the changes. Be sure to " +"return to this page periodically to ensure familiarity with the most current" +" version of the Terms." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} may also update or modify the APIs from time to time without" +" advance notice. These changes may affect your use of the APIs or the way " +"your integration interacts with the API. If we make a change that is " +"unacceptable to you, you should stop using the APIs. Continued use of the " +"APIs means you accept the change." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Confidentiality" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Your credentials (such as client secret and IDs) are intended to be used " +"solely by you. You will keep your credentials confidential and discourage " +"others from using your credentials. Your credentials may not be embedded in " +"open source projects." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"In the event that {platform_name} provides you with access to information " +"specific to {platform_name} and/or the APIs that is either marked as " +"\"Confidential\" or which a reasonable person would assume to be " +"confidential or proprietary given the terms of its disclosure " +"(\"Confidential Information\"), you agree to use this information only to " +"use and build with the APIs. You may not disclose the Confidential " +"Information to anyone without {platform_name}'s prior written consent, and " +"you agree to protect the Confidential Information from unauthorized use and " +"disclosure in the same way that you would protect your own confidential " +"information. Confidential information does not include information that you " +"independently developed, that was rightfully given to you by a third party " +"without confidentiality obligation, or that becomes public through no fault " +"of your own. You may disclose Confidential Information when compelled to do " +"so by law if you provide {platform_name} with reasonable prior notice, " +"unless a court orders that {platform_name} not receive notice." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Disclaimer of Warranty / Limitation of Liabilities" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"THE APIS AND ANY INFORMATION, API CONTENT OR SERVICES MADE AVAILABLE ON OR " +"THROUGH THE APIS 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." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} AND THE {platform_name} PARTICIPANTS (AS HERINAFTER DEFINED)" +" DO NOT WARRANT THAT THE APIS WILL OPERATE IN AN UNINTERRUPTED OR ERROR-FREE" +" MANNER, THAT THE APIS ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS, OR " +"THAT THE APIS OR API CONTENT PROVIDED WILL MEET YOUR NEEDS OR EXPECTATIONS. " +"{platform_name} AND THE {platform_name} PARTICIPANTS ALSO MAKE NO WARRANTY " +"ABOUT THE ACCURACY, COMPLETENESS, TIMELINESS, OR QUALITY OF THE APIS OR ANY " +"API CONTENT, OR THAT ANY PARTICULAR API CONTENT WILL CONTINUE TO BE MADE " +"AVAILABLE. \"{platform_name} PARTICIPANTS\" MEANS MIT, HARVARD, THE OTHER " +"MEMBERS, THE ENTITIES PROVIDING INFORMATION, API CONTENT OR SERVICES FOR THE" +" APIS, THE COURSE INSTRUCTORS AND THEIR STAFFS." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"USE OF THE APIS, AND THE API CONTENT AND ANY SERVICES OBTAINED FROM OR " +"THROUGH THE APIS, IS AT YOUR OWN RISK. YOUR ACCESS TO OR DOWNLOAD OF " +"INFORMATION, MATERIALS OR DATA THROUGH THE APIS 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, UNLESS OTHERWISE EXPRESSLY " +"PROVIDED FOR IN THE {platform_name} PRIVACY POLICY." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, YOU AGREE THAT NEITHER " +"{platform_name} NOR ANY OF THE {platform_name} PARTICIPANTS WILL BE LIABLE " +"TO YOU FOR ANY LOSS OR DAMAGES, EITHER ACTUAL OR CONSEQUENTIAL, ARISING OUT " +"OF OR RELATING TO THESE TERMS, OR YOUR (OR ANY THIRD PARTY'S) USE OF OR " +"INABILITY TO USE THE APIS OR ANY API CONTENT, OR YOUR RELIANCE UPON " +"INFORMATION OBTAINED FROM OR THROUGH THE APIS, WHETHER YOUR CLAIM IS BASED " +"IN CONTRACT, TORT, STATUTORY OR OTHER LAW." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"IN PARTICULAR, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER " +"{platform_name} NOR ANY OF THE {platform_name} PARTICIPANTS WILL HAVE ANY " +"LIABILITY FOR ANY CONSEQUENTIAL, INDIRECT, PUNITIVE, SPECIAL, EXEMPLARY OR " +"INCIDENTAL DAMAGES, WHETHER FORESEEABLE OR UNFORESEEABLE AND WHETHER OR NOT " +"{platform_name} OR ANY OF THE {platform_name} 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)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"CERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE " +"EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME" +" OR ALL OF THE ABOVE DISCLAIMERS, EXCLUSIONS, OR LIMITATIONS MAY NOT APPLY " +"TO YOU, AND YOU MIGHT HAVE ADDITIONAL RIGHTS." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The APIs and API Content may include hyperlinks to sites maintained or " +"controlled by others. {platform_name} and the {platform_name} 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 " +"websites, you do so at your own risk." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To the maximum extent permitted by applicable law, you agree to defend, hold" +" harmless and indemnify {platform_name} and the {platform_name} " +"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 APIs and any API " +"Content, 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, " +"{platform_name} or one of the {platform_name} Participants will provide you " +"with written notice of such claim, suit or action." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "General Legal Terms" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The Terms constitute the entire agreement between you and {platform_name} " +"with respect to your use of the APIs and API Content, superseding any prior " +"agreements between you and {platform_name} regarding your use of the APIs " +"and API Content. The failure of {platform_name} to exercise or enforce any " +"right or provision of the Terms shall not constitute a waiver of such right " +"or provision. If any provision of the Terms 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 the Terms shall remain in full " +"force and effect. The Terms do not create any third party beneficiary rights" +" or any agency, partnership, or joint venture. For any notice provided to " +"you by {platform_name} under these Terms, {platform_name} may notify you via" +" the email address associated with your {platform_name} account." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree that the Terms, the APIs, and any claim or dispute arising out of " +"or relating to the Terms or the APIs 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). Notwithstanding the foregoing, you agree that {platform_name} shall " +"still be allowed to apply to injunctive remedies (or an equivalent type of " +"urgent legal relief) in any jursdiction." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Termination" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You may stop using the APIs at any time. You agree that {platform_name}, in " +"its sole discretion and at any time, may terminate your use of the APIs or " +"any API Content for any reason or no reason, without prior notice or " +"liabiliy." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} and the {platform_name} Participants reserve the right at " +"any time in their sole discretion to cancel, delay, reschedule or alter the " +"format of any API or API Content offered through {platform_name}, or to " +"cease providing any part or all of the APIs or API Content or related " +"services, and you agree that neither {platform_name} nor any of the " +"{platform_name} Participants will have any liability to you for such an " +"action." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Upon any termination of the Terms or discontinuation of your access to an " +"API for any reason, your right to use any API and API Content will " +"immediately cease. You will immediately stop using the APIs and delete any " +"cached or stored API Content. All provisions of the Terms that by their " +"nature should survive termination shall survive termination, including, " +"without limitation, ownership provisions, warranty disclaimers, and " +"limitation of liability. Termination of your access to and use of the APIs " +"and API Content shall not relieve you of any obligations arising or " +"accrusing prior to such termination or limit any liability that you " +"otherwise may have to {platform_name}, including without limitation any " +"indemnification obligations contained herein." +msgstr "" + #: lms/templates/calculator/toggle_calculator.html msgid "Open Calculator" msgstr "Afficher la calculatrice" @@ -10963,24 +11504,17 @@ msgid "Auto Enroll" msgstr "Inscription Automatique" #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is checked, users who have not yet registered for " -"{platform_name} will be automatically enrolled." +"If this option is {em_start}checked{em_end}, users who have not yet " +"registered for {platform_name} will be automatically enrolled." msgstr "" -"Si cette option est cochée, les utilisateurs qui ne se sont pas " -"encore inscrits dans {platform_name} seront automatiquement ajoutés. " #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is left unchecked, users who have not yet registered" -" for {platform_name} will not be enrolled, but will be allowed to enroll " -"once they make an account." +"If this option is left {em_start}unchecked{em_end}, users who have not yet " +"registered for {platform_name} will not be enrolled, but will be allowed to " +"enroll once they make an account." msgstr "" -"Si cette option n'est pas cochée, les utilisateurs qui ne se sont " -"pas encore inscrits dans {platform_name} ne seront pas ajoutés mais ils " -"seront autorisés à s'inscrire dès qu'ils auront créé leur compte. " #: lms/templates/ccx/enrollment.html #: lms/templates/instructor/instructor_dashboard_2/membership.html @@ -10993,13 +11527,10 @@ msgid "Notify users by email" msgstr "Notifier les utilisateurs par e-mail" #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is checked, users will receive an email " +"If this option is {em_start}checked{em_end}, users will receive an email " "notification." msgstr "" -"Si cette option est cochée, les utilisateurs recevront une " -"notification par e-mail." #: lms/templates/ccx/enrollment.html #: lms/templates/courseware/course_about.html @@ -11374,6 +11905,10 @@ msgstr "" msgid "{chapter} current chapter" msgstr "" +#: lms/templates/courseware/accordion.html +msgid "{span_start}current section{span_end}" +msgstr "" + #: lms/templates/courseware/accordion.html #: lms/templates/courseware/progress.html msgid "due {date}" @@ -11786,7 +12321,7 @@ msgid "Verification Declined" msgstr "" #: lms/templates/courseware/progress.html -msgid "Completed" +msgid "Completed by" msgstr "" #: lms/templates/courseware/progress.html @@ -12143,7 +12678,7 @@ msgstr "" #: lms/templates/dashboard/_dashboard_course_listing.html msgid "" "It's official. It's easily shareable. It's a proven motivator to complete " -"the course.
    {link_start}Learn more about the verified " +"the course. {line_break}{link_start}Learn more about the verified " "{cert_name_long}{link_end}." msgstr "" @@ -14292,6 +14827,32 @@ msgstr "" msgid "Reason" msgstr "Raison" +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is checked, users who have not yet registered for " +"{platform_name} will be automatically enrolled." +msgstr "" +"Si cette option est cochée, les utilisateurs qui ne se sont pas " +"encore inscrits dans {platform_name} seront automatiquement ajoutés. " + +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is left unchecked, users who have not yet registered" +" for {platform_name} will not be enrolled, but will be allowed to enroll " +"once they make an account." +msgstr "" +"Si cette option n'est pas cochée, les utilisateurs qui ne se sont " +"pas encore inscrits dans {platform_name} ne seront pas ajoutés mais ils " +"seront autorisés à s'inscrire dès qu'ils auront créé leur compte. " + +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is checked, users will receive an email " +"notification." +msgstr "" +"Si cette option est cochée, les utilisateurs recevront une " +"notification par e-mail." + #: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "Register/Enroll Students" msgstr "Inscrire/Enregistrer des étudiants " @@ -15824,16 +16385,11 @@ msgstr "Spécifications techniques" #: lms/templates/verify_student/pay_and_verify.html msgid "" -"Please make sure your browser is updated to the {a_start}most recent version" -" possible{a_end}. Also, please make sure your webcam is plugged in, " -"turned on, and allowed to function in your web browser (commonly adjustable " -"in your browser settings)." +"Please make sure your browser is updated to the {strong_start}{a_start}most " +"recent version possible{a_end}{strong_end}. Also, please make sure your " +"{strong_start}webcam is plugged in, turned on, and allowed to function in " +"your web browser (commonly adjustable in your browser settings).{strong_end}" msgstr "" -"Veuillez vous assurer que votre navigateur est mis à jour à la{a_start} " -"version la plus récente possible{a_end}. Veuillez aussi vous assurer que " -"votre webcam est branchée, mise sous tension, et autorisé à " -"fonctionner dans votre navigateur Web (paramètre communément ajustable dans " -"les paramètres du navigateur). " #: lms/templates/verify_student/reverify.html msgid "Re-Verification" @@ -15908,6 +16464,15 @@ msgid "" "edX and Open EdX logos are registered trademarks or trademarks of edX Inc." msgstr "" +#: themes/edx.org/lms/templates/header.html +#: themes/red-theme/lms/templates/header.html +msgid "" +"Warning: Your browser is not fully supported. We strongly " +"recommend using {chrome_link} or {ff_link}." +msgstr "" +"Attention : Votre navigateur n'est pas complètement " +"supporté. Nous recommandons vivement d'utiliser {chrome_link} ou {ff_link}." + #: themes/edx.org/lms/templates/course_modes/choose.html msgid "" "{b_start}Support our Mission: {b_end} EdX, a non-profit, relies on verified " @@ -17834,10 +18399,6 @@ msgstr "" msgid "Libraries" msgstr "Bibliothèques" -#: cms/templates/index.html cms/templates/widgets/header.html -msgid "Programs" -msgstr "" - #: cms/templates/index.html msgid "Re-run Course" msgstr "Relancer le cours" diff --git a/conf/locale/fr/LC_MESSAGES/djangojs.mo b/conf/locale/fr/LC_MESSAGES/djangojs.mo index 859f9b6dc5b049c6b012e446c64895d7908e45c1..c69135b7d1c057116535ac772e298d2d26a24c4f 100644 GIT binary patch delta 23880 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
    O0gE&cTGZ3e|24CdNIe0mq?kbOE*YH!wNgK|RPD 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 delta 24763 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 MyZWth)yw{W0K5a9Jpcdz diff --git a/conf/locale/fr/LC_MESSAGES/djangojs.po b/conf/locale/fr/LC_MESSAGES/djangojs.po index b5d258c6fb..0f16d01c2f 100644 --- a/conf/locale/fr/LC_MESSAGES/djangojs.po +++ b/conf/locale/fr/LC_MESSAGES/djangojs.po @@ -121,9 +121,9 @@ msgid "" msgstr "" "Project-Id-Version: edx-platform\n" "Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" -"POT-Creation-Date: 2016-03-30 19:38+0000\n" -"PO-Revision-Date: 2016-04-06 10:16+0000\n" -"Last-Translator: moocit-france \n" +"POT-Creation-Date: 2016-04-15 11:04+0000\n" +"PO-Revision-Date: 2016-04-15 11:07+0000\n" +"Last-Translator: Ned Batchelder \n" "Language-Team: French (http://www.transifex.com/open-edx/edx-platform/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -290,6 +290,7 @@ msgstr "Avancé" #: common/lib/xmodule/xmodule/js/src/html/edit.js #: common/static/common/templates/image-modal.underscore #: common/static/common/templates/discussion/forum-action-close.underscore +#: lms/templates/student_profile/share_modal.underscore msgid "Close" msgstr "Fermer" @@ -1838,34 +1839,36 @@ msgid "Do not show again" msgstr "Ne pas montrer de nouveau" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Turn on closed captioning" -msgstr "" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Turn off transcript" +msgid "Transcript will be displayed when you start playing the video." msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "" -"Language: Press the UP arrow key to enter the language menu, then use UP and" -" DOWN arrow keys to navigate language options. Press ENTER to change to the " +"Activating a link in this group will skip to the corresponding point in the " +"video." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Video transcript" +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Start of transcript. Skip to the end." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "End of transcript. Skip to the start." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "" +"Language: Press the UP arrow key to enter the language menu then use UP and " +"DOWN arrow keys to navigate language options. Press ENTER to change to the " "selected language." msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Open language menu" -msgstr "Ouvrir le menu des langues" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "" -"Activating an item in this group will spool the video to the corresponding " -"time point. To skip transcript, go to previous item." -msgstr "" -"L'activation d'un élément de ce groupe jouera la vidéo à partir de ce point." -" Pour passer la transcription, allez à l'élément précédent." - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "
  • Transcript will be displayed when " +msgid "Open language menu." msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js @@ -1876,6 +1879,10 @@ msgstr "Masquer les sous-titres" msgid "(Caption will be displayed when you start playing the video.)" msgstr "" +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Turn on closed captioning" +msgstr "" + #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "Turn on transcripts" msgstr "Activer la transcription" @@ -2186,6 +2193,17 @@ msgid "Please do not use any spaces or special characters in this field." msgstr "" "Merci de ne pas utiliser d'espace ou caractères spéciaux dans ce champ." +#: common/static/common/js/components/views/paginated_view.js +#: common/static/common/js/components/views/paging_footer.js +msgid "Pagination" +msgstr "" + +#: common/static/common/js/components/views/paginated_view.js +msgid "" +"Your request could not be completed. Reload the page and try again. If the " +"issue persists, click the Help tab to report the problem." +msgstr "" + #: common/static/common/js/components/views/paging_header.js msgid "Showing %(first_index)s out of %(num_items)s total" msgstr "%(first_index)s sur %(num_items)s au total" @@ -2472,6 +2490,7 @@ msgstr "" #: lms/djangoapps/teams/static/teams/js/collections/topic.js #: lms/templates/edxnotes/tab-item.underscore +#: lms/templates/learner_dashboard/program_card.underscore msgid "name" msgstr "nom" @@ -2481,6 +2500,11 @@ msgstr "nom" msgid "team count" msgstr "total équipe" +#: lms/djangoapps/teams/static/teams/js/teams_tab_factory.js +#: lms/djangoapps/teams/static/teams/js/views/teams_tab.js +msgid "Teams" +msgstr "Équipes" + #: lms/djangoapps/teams/static/teams/js/views/edit_team.js msgid "Create" msgstr "Créer" @@ -2674,14 +2698,14 @@ msgstr[1] "%(memberCount)s / %(maxMemberCount)s membres" msgid "All teams" msgstr "Toutes les équipes" +#: lms/djangoapps/teams/static/teams/js/views/teams.js +msgid "Teams Pagination" +msgstr "" + #: lms/djangoapps/teams/static/teams/js/views/teams_tab.js msgid "Topics" msgstr "Sujets" -#: lms/djangoapps/teams/static/teams/js/views/teams_tab.js -msgid "Teams" -msgstr "Équipes" - #: lms/djangoapps/teams/static/teams/js/views/teams_tab.js msgid "" "See all teams in your course, organized by topic. Join a team to collaborate" @@ -4322,6 +4346,10 @@ msgstr "Lier" msgid "Successfully unlinked." msgstr "Lien supprimé." +#: lms/static/js/student_profile/views/badge_list_container.js +msgid "Accomplishments Pagination" +msgstr "" + #: lms/static/js/student_profile/views/learner_profile_factory.js msgid "{platform_name} learners can see my:" msgstr "Les utilisateurs de {platform_name} peuvent voir mon:" @@ -4384,6 +4412,18 @@ msgstr "Image du profil" msgid "Profile image for {username}" msgstr "Image de profil pour {username}" +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "About Me" +msgstr "" + +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "Accomplishments" +msgstr "" + +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "Profile" +msgstr "" + #: lms/static/js/verify_student/views/image_input_view.js msgid "Image Upload Error" msgstr "Erreur lors du téléchargement de l'image" @@ -4903,6 +4943,10 @@ msgstr "" msgid "You must specify a name" msgstr "Vous devez indiquer un nom" +#: cms/static/js/models/course_update.js +msgid "Action required: Enter a valid date." +msgstr "" + #: cms/static/js/models/group.js msgid "Group name is required" msgstr "Un nom de groupe est requis" @@ -5704,6 +5748,11 @@ msgstr "Non programmé" msgid "Date" msgstr "Date" +#: cms/templates/js/edit-chapter.underscore +#: lms/templates/ccx/schedule.underscore +msgid "gettext(" +msgstr "" + #: cms/templates/js/paging-header.underscore #: common/static/common/templates/components/paging-footer.underscore #: common/static/common/templates/discussion/pagination.underscore @@ -5729,8 +5778,9 @@ msgid "Zoom Out" msgstr "Dézoomer " #: common/static/common/templates/components/paging-footer.underscore -msgid "Page number" -msgstr "Numéro de page" +#, python-format +msgid "Page number out of %(total_pages)s" +msgstr "" #: common/static/common/templates/components/paging-footer.underscore msgid "Enter the page number you'd like to quickly navigate to." @@ -6383,10 +6433,6 @@ msgstr "Date d'échéance" msgid "remove all" msgstr "tout supprimer" -#: lms/templates/ccx/schedule.underscore -msgid "gettext(" -msgstr "" - #: lms/templates/ccx/schedule.underscore msgid "Section" msgstr "" @@ -6712,15 +6758,9 @@ msgid "Generate Exception Certificates" msgstr "" #: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "Generate a Certificate for all " -msgstr "" - -#: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "New" -msgstr "" - -#: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "additions to the Exception list" +msgid "" +"Generate certificates for all users on the Exception list for whom " +"certificates have not yet been run" msgstr "" #: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore @@ -6962,6 +7002,24 @@ msgstr "Utilisé" msgid "Valid" msgstr "Valide" +#: lms/templates/learner_dashboard/explore_new_programs.underscore +msgid "" +"Browse recently launched courses and see what\\'s new in your favorite " +"subjects" +msgstr "" + +#: lms/templates/learner_dashboard/explore_new_programs.underscore +msgid "Explore New XSeries" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore +msgid "org.display_name" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore +msgid "type" +msgstr "" + #: lms/templates/search/course_search_results.underscore #: lms/templates/search/dashboard_search_results.underscore #, python-format @@ -7006,7 +7064,6 @@ msgid "section.title" msgstr "section.title" #: lms/templates/student_account/account_settings.underscore -#: lms/templates/student_profile/learner_profile.underscore msgid "An error occurred. Please reload the page." msgstr "Une erreur est survenue. Merci de rafraîchir la page." @@ -7195,13 +7252,69 @@ msgstr "Champ requis" msgid "Already have an account?" msgstr "Vous avez déjà un compte ?" +#: lms/templates/student_profile/badge.underscore +#, python-format +msgid "Share your \"%(display_name)s\" award" +msgstr "" + +#: lms/templates/student_profile/badge.underscore +msgid "Share" +msgstr "" + +#: lms/templates/student_profile/badge.underscore +#, python-format +msgid "Earned %(created)s." +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "What's Your Next Accomplishment?" +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "Start working toward your next learning goal." +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "Find a course" +msgstr "" + #: lms/templates/student_profile/learner_profile.underscore +msgid "An error occurred. Try loading the page again." +msgstr "" + +#: lms/templates/student_profile/section_two.underscore msgid "You are currently sharing a limited profile." msgstr "Vous partagez actuellement votre profil restreint." -#: lms/templates/student_profile/learner_profile.underscore -msgid "This edX learner is currently sharing a limited profile." -msgstr "Cette utilisateur partage actuellement un profil restreint." +#: lms/templates/student_profile/section_two.underscore +msgid "This learner is currently sharing a limited profile." +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +msgid "Share on Mozilla Backpack" +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +msgid "" +"To share your certificate on Mozilla Backpack, you must first have a " +"Backpack account. Complete the following steps to add your certificate to " +"Backpack." +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +#, python-format +msgid "" +"Create a %(link_start)sMozilla Backpack%(link_end)s account, or log in to " +"your existing account" +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +#, python-format +msgid "" +"%(download_link_start)sDownload this image (right-click or option-click, " +"save as)%(link_end)s and then %(upload_link_start)supload%(link_end)s it to " +"your backpack.
  • " +msgstr "" #: lms/templates/verify_student/enrollment_confirmation_step.underscore #, python-format @@ -7291,9 +7404,8 @@ msgid "Take Your Photo" msgstr "Prendre votre photo" #: lms/templates/verify_student/face_photo_step.underscore -#, python-format msgid "" -"When your face is in position, use the camera button %(icon)s below to take " +"When your face is in position, use the camera button {icon} below to take " "your photo." msgstr "" @@ -7315,10 +7427,9 @@ msgstr "" "La photo de votre visage concorde avec la photo sur votre pièce d'identité." #: lms/templates/verify_student/face_photo_step.underscore -#, python-format msgid "" -"To use the current photo, select the camera button %(icon)s. To take another" -" photo, select the retake button %(icon)s." +"To use the current photo, select the camera button {icon}. To take another " +"photo, select the retake button {icon}." msgstr "" #: lms/templates/verify_student/face_photo_step.underscore @@ -7401,8 +7512,7 @@ msgid "Make sure your ID is well-lit" msgstr "" #: lms/templates/verify_student/id_photo_step.underscore -#, python-format -msgid "Once in position, use the camera button %(icon)s to capture your ID" +msgid "Once in position, use the camera button {icon} to capture your ID" msgstr "" #: lms/templates/verify_student/id_photo_step.underscore @@ -7433,8 +7543,7 @@ msgid "Be sure your entire face is inside the frame" msgstr "" #: lms/templates/verify_student/incourse_reverify.underscore -#, python-format -msgid "Once in position, use the camera button %(icon)s to capture your photo" +msgid "Once in position, use the camera button {icon} to capture your photo" msgstr "" #: lms/templates/verify_student/incourse_reverify.underscore @@ -7442,8 +7551,7 @@ msgid "Can we match the photo you took with the one on your ID?" msgstr "" #: lms/templates/verify_student/intro_step.underscore -#, python-format -msgid "Thanks for returning to verify your ID in: %(courseName)s" +msgid "Thanks for returning to verify your ID in: {courseName}" msgstr "" #: lms/templates/verify_student/intro_step.underscore @@ -7483,13 +7591,12 @@ msgstr "" " et photo." #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "You are enrolling in: %(courseName)s" -msgstr "Vous vous inscrivez à : %(courseName)s" +#: lms/templates/verify_student/make_payment_step_ab_testing.underscore +msgid "You are enrolling in: {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "You are upgrading your enrollment for: %(courseName)s" +msgid "You are upgrading your enrollment for: {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step.underscore @@ -7535,9 +7642,8 @@ msgid "You have already verified your ID!" msgstr "Vous avez déjà vérifié votre ID!" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "Your verification status is good until %(verificationGoodUntil)s." -msgstr "Votre vérification est valable jusqu'au %(verificationGoodUntil)s." +msgid "Your verification status is good until {verificationGoodUntil}." +msgstr "" #: lms/templates/verify_student/make_payment_step.underscore msgid "price" @@ -7548,13 +7654,7 @@ msgid "Account Not Activated" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "You are enrolling in %(courseName)s" -msgstr "" - -#: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Upgrade to a Verified Certificate for %(courseName)s" +msgid "Upgrade to a Verified Certificate for {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore @@ -7567,13 +7667,11 @@ msgid "Check your email for an activation message." msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Professional Certificate for %(courseName)s" +msgid "Professional Certificate for {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Verified Certificate for %(courseName)s" +msgid "Verified Certificate for {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore @@ -7604,9 +7702,8 @@ msgid "" msgstr "" #: lms/templates/verify_student/payment_confirmation_step.underscore -#, python-format -msgid "Thank you! We have received your payment for %(courseName)s." -msgstr "Merci ! Nous avons reçu votre paiement pour %(courseName)s." +msgid "Thank you! We have received your payment for {courseName}." +msgstr "" #: lms/templates/verify_student/payment_confirmation_step.underscore msgid "Next Step: Confirm your identity" @@ -8184,11 +8281,6 @@ msgstr "" msgid "Chapter Name" msgstr "" -#: cms/templates/js/edit-chapter.underscore -#, python-format -msgid "Chapter %s" -msgstr "" - #: cms/templates/js/edit-chapter.underscore msgid "provide the title/name of the chapter that will be used in navigating" msgstr "" @@ -8197,11 +8289,6 @@ msgstr "" msgid "Chapter Asset" msgstr "" -#: cms/templates/js/edit-chapter.underscore -#, python-format -msgid "path/to/introductionToCookieBaking-CH%d.pdf" -msgstr "" - #: cms/templates/js/edit-chapter.underscore msgid "upload a PDF file or provide the path to a Studio asset file" msgstr "" diff --git a/conf/locale/he/LC_MESSAGES/django.mo b/conf/locale/he/LC_MESSAGES/django.mo index 2580f8c4631dc5d4a258ab7eca1d54cd89f4d2fb..499c7737dfdfa39a842405a4757a7f741dc3b40d 100644 GIT binary patch delta 23 fcmdm|xKDAz4R$UQT|-j^LqjVA)6I|A?{EMBU^oZB delta 23 fcmdm|xKDAz4R$VLU1I|ULrW`T%gvA2?{EMBV0;J5 diff --git a/conf/locale/he/LC_MESSAGES/django.po b/conf/locale/he/LC_MESSAGES/django.po index 86e1db841e..28f0bf3fb9 100644 --- a/conf/locale/he/LC_MESSAGES/django.po +++ b/conf/locale/he/LC_MESSAGES/django.po @@ -66,7 +66,7 @@ msgid "" msgstr "" "Project-Id-Version: edx-platform\n" "Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" -"POT-Creation-Date: 2016-03-30 19:39+0000\n" +"POT-Creation-Date: 2016-04-15 11:05+0000\n" "PO-Revision-Date: 2015-11-24 13:39+0000\n" "Last-Translator: Sarina Canelake \n" "Language-Team: Hebrew (http://www.transifex.com/open-edx/edx-platform/language/he/)\n" @@ -321,6 +321,10 @@ msgid "" "set." msgstr "" +#: common/djangoapps/course_modes/models.py +msgid "Verified modes cannot be free." +msgstr "" + #: common/djangoapps/course_modes/models.py msgid "" "The time period before a course ends in which a course mode will expire" @@ -361,6 +365,7 @@ msgid "Student" msgstr "" #: common/djangoapps/embargo/forms.py +#: lms/djangoapps/verified_track_content/forms.py msgid "COURSE NOT FOUND. Please check that the course ID is valid." msgstr "" @@ -3837,6 +3842,75 @@ msgstr "" msgid "Top num_top_words words for word cloud." msgstr "" +#: lms/djangoapps/badges/events/course_complete.py +msgid "" +"Completed the course \"{course_name}\" ({course_mode}, {start_date} - " +"{end_date})" +msgstr "" + +#: lms/djangoapps/badges/events/course_complete.py +msgid "Completed the course \"{course_name}\" ({course_mode})" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The badge image must be square." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The badge image file size must be less than 250KB." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "This value must be all lowercase." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The course mode for this badge image. For example, \"verified\" or \"honor\"." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Badge images must be square PNG files. The file size should be under 250KB." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Set this value to True if you want this image to be the default image for " +"any course modes that do not have a specified badge image. You can have only" +" one default image." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "There can be only one default image." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"On each line, put the number of completed courses to award a badge for, a " +"comma, and the slug of a badge class you have created that has the issuing " +"component 'openedx__course'. For example: 3,enrolled_3_courses" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"On each line, put the number of enrolled courses to award a badge for, a " +"comma, and the slug of a badge class you have created that has the issuing " +"component 'openedx__course'. For example: 3,enrolled_3_courses" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Each line is a comma-separated list. The first item in each line is the slug" +" of a badge class you have created that has an issuing component of " +"'openedx__course'. The remaining items in each line are the course keys the " +"learner needs to complete to be awarded the badge. For example: " +"slug_for_compsci_courses_group_badge,course-v1:CompSci+Course+First,course-v1:CompsSci+Course+Second" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "Please check the syntax of your entry." +msgstr "" + #. Translators: 'EdX', 'edX', and 'Open edX' are trademarks of 'edX Inc.'. #. Please do not translate any of these trademarks and company names. #: lms/djangoapps/branding/api.py @@ -3957,16 +4031,6 @@ msgid "" " rerun of this course in the studio to allow this action." msgstr "" -#: lms/djangoapps/certificates/badge_handler.py -msgid "" -"Completed the course \"{course_name}\" ({course_mode}, {start_date} - " -"{end_date})" -msgstr "" - -#: lms/djangoapps/certificates/badge_handler.py -msgid "Completed the course \"{course_name}\" ({course_mode})" -msgstr "" - #: lms/djangoapps/certificates/models.py wiki/admin.py wiki/models/article.py msgid "created" msgstr "" @@ -4035,34 +4099,6 @@ msgstr "" msgid "The download URL for the generated certificate." msgstr "" -#: lms/djangoapps/certificates/models.py -msgid "The badge image must be square." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "The badge image file size must be less than 250KB." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "The course mode for this badge image. For example, \"verified\" or \"honor\"." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "" -"Badge images must be square PNG files. The file size should be under 250KB." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "" -"Set this value to True if you want this image to be the default image for " -"any course modes that do not have a specified badge image. You can have only" -" one default image." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "There can be only one default image." -msgstr "" - #: lms/djangoapps/certificates/models.py msgid "Name of template." msgstr "" @@ -4535,6 +4571,10 @@ msgid "" "To earn a certificate, you must complete all requirements before this date." msgstr "" +#: lms/djangoapps/courseware/date_summary.py +msgid "After this date, course content will be archived." +msgstr "" + #: lms/djangoapps/courseware/date_summary.py msgid "" "This course is archived, which means you can review course content but it is" @@ -5489,11 +5529,7 @@ msgid "" msgstr "" #: lms/djangoapps/instructor/views/api.py -msgid "Invalid Json data, Please refresh the page and then try again." -msgstr "" - -#: lms/djangoapps/instructor/views/api.py -msgid "Invalid data, user_id must be present for all certificate exceptions." +msgid "Invalid data, generate_for must be \"new\" or \"all\"." msgstr "" #: lms/djangoapps/instructor/views/api.py @@ -5829,6 +5865,7 @@ msgid "Last Name" msgstr "" #: lms/djangoapps/instructor_task/tasks_helper.py +#: openedx/core/djangoapps/api_admin/forms.py #: lms/templates/shoppingcart/receipt.html msgid "Company Name" msgstr "" @@ -7160,6 +7197,10 @@ msgid "" "The user {username} is not enrolled in the course associated with this team." msgstr "" +#: lms/djangoapps/verified_track_content/models.py +msgid "The course key for the course we would like to be auto-cohorted." +msgstr "" + #: lms/djangoapps/verify_student/models.py msgid "Your {platform_name} verification has expired." msgstr "" @@ -7947,6 +7988,26 @@ msgstr "" msgid "Restoring to this revision will mark the article as deleted." msgstr "" +#: openedx/core/djangoapps/api_admin/forms.py +msgid "Company Address" +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "Describe what your application does." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The URL of your company's website." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The name of your company." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The contact address of your company." +msgstr "" + #: openedx/core/djangoapps/api_admin/models.py cms/templates/index.html msgid "Denied" msgstr "" @@ -7967,6 +8028,27 @@ msgstr "" msgid "The reason this user wants to access the API." msgstr "" +#: openedx/core/djangoapps/api_admin/models.py +msgid "API access request from {company}" +msgstr "" + +#: openedx/core/djangoapps/api_admin/models.py +msgid "API access request" +msgstr "" + +#: openedx/core/djangoapps/api_admin/views.py +msgid "TODO" +msgstr "" + +#. Translators: link_start and link_end are HTML tags for a link to the terms +#. of service. +#. platform_name is the name of this Open edX installation. +#: openedx/core/djangoapps/api_admin/widgets.py +msgid "" +"I, and my company, accept the {link_start}{platform_name} API Terms of " +"Service{link_end}." +msgstr "" + #: openedx/core/djangoapps/bookmarks/views.py msgid "An error has occurred. Please try again." msgstr "" @@ -7997,6 +8079,10 @@ msgstr "" msgid "Bookmark with usage_id: {usage_id} does not exist." msgstr "" +#: openedx/core/djangoapps/course_groups/cohorts.py +msgid "Default Group" +msgstr "" + #: openedx/core/djangoapps/course_groups/cohorts.py msgid "You cannot create two cohorts with the same name" msgstr "" @@ -8233,6 +8319,14 @@ msgid "" "to retry a failing request." msgstr "" +#: openedx/core/djangoapps/programs/models.py +msgid "Do we want to show xseries program advertising" +msgstr "" + +#: openedx/core/djangoapps/programs/models.py +msgid "Do we want to show program listing page" +msgstr "" + #: openedx/core/djangoapps/self_paced/models.py msgid "Enable course home page improvements." msgstr "" @@ -8918,10 +9012,18 @@ msgstr "" #: lms/templates/sysadmin_dashboard.html #: lms/templates/sysadmin_dashboard_gitlogs.html #: lms/templates/courseware/courses.html +#: themes/edx.org/lms/templates/header.html #: themes/red-theme/lms/templates/header.html msgid "Courses" msgstr "" +#: cms/templates/index.html cms/templates/widgets/header.html +#: lms/templates/navigation.html lms/templates/learner_dashboard/programs.html +#: themes/edx.org/lms/templates/header.html +#: themes/red-theme/lms/templates/header.html +msgid "Programs" +msgstr "" + #: cms/templates/login.html cms/templates/widgets/header.html #: themes/red-theme/cms/templates/login.html msgid "Sign In" @@ -9349,22 +9451,22 @@ msgstr "" #: lms/templates/help_modal.html msgid "" -"For questions on course lectures, homework, tools, or materials for " -"this course, post in the {link_start}course discussion " -"forum{link_end}." +"For {strong_start}questions on course lectures, homework, tools, or " +"materials for this course{strong_end}, post in the {link_start}course " +"discussion forum{link_end}." msgstr "" #: lms/templates/help_modal.html msgid "" -"Have general questions about {platform_name}? You can find " -"lots of helpful information in the {platform_name} " +"Have {strong_start}general questions about {platform_name}{strong_end}? You " +"can find lots of helpful information in the {platform_name} " "{link_start}FAQ{link_end}." msgstr "" #: lms/templates/help_modal.html msgid "" -"Have a question about something specific? You can contact " -"the {platform_name} general support team directly:" +"Have a {strong_start}question about something specific{strong_end}? You can " +"contact the {platform_name} general support team directly:" msgstr "" #: lms/templates/help_modal.html @@ -9431,11 +9533,9 @@ msgid "Brief description of the problem" msgstr "" #: lms/templates/help_modal.html -msgid "Details of the problem you are encountering" -msgstr "" - -#: lms/templates/help_modal.html -msgid "Include error messages, steps which lead to the issue, etc." +msgid "" +"Details of the problem you are encountering{asterisk}{begin_span}Include " +"error messages, steps which lead to the issue, etc.{end_span}" msgstr "" #: lms/templates/help_modal.html @@ -9617,8 +9717,6 @@ msgstr "" msgid "Account Preferences" msgstr "" -#. Translators: provider_name is the name of an external, third-party user -#. authentication provider (like Google or LinkedIn). #: lms/templates/login.html msgid "Sign in with {provider_name}" msgstr "" @@ -9793,11 +9891,9 @@ msgid "Register" msgstr "" #: lms/templates/navigation-edx.html lms/templates/navigation.html -#: themes/edx.org/lms/templates/header.html -#: themes/red-theme/lms/templates/header.html msgid "" -"Warning: Your browser is not fully supported. We strongly " -"recommend using {chrome_link} or {ff_link}." +"{begin_strong}Warning:{end_strong} Your browser is not fully supported. We " +"strongly recommend using {chrome_link} or {ff_link}." msgstr "" #: lms/templates/navigation.html themes/red-theme/lms/templates/header.html @@ -9872,8 +9968,6 @@ msgstr "" msgid "The following errors occurred while processing your registration:" msgstr "" -#. Translators: provider_name is the name of an external, third-party user -#. authentication service (like Google or LinkedIn). #: lms/templates/register-form.html #: themes/stanford-style/lms/templates/register-form.html msgid "Sign up with {provider_name}" @@ -10455,10 +10549,6 @@ msgid "" " ctrl-minus at the same time." msgstr "" -#: lms/templates/video.html -msgid "Skip to a navigable version of this video's transcript." -msgstr "" - #: lms/templates/video.html msgid "Loading video player" msgstr "" @@ -10471,14 +10561,6 @@ msgstr "" msgid "No playable video sources found." msgstr "" -#: lms/templates/video.html -msgid "Skip to end of transcript." -msgstr "" - -#: lms/templates/video.html -msgid "Go back to start of transcript." -msgstr "" - #: lms/templates/video.html msgid "Download video" msgstr "" @@ -10499,6 +10581,476 @@ msgstr "" msgid "Total number of words:" msgstr "" +#: lms/templates/api_admin/api_access_request_form.html +msgid "API Access Request" +msgstr "" + +#: lms/templates/api_admin/api_access_request_form.html +#: lms/templates/api_admin/status.html +msgid "{platform_name} API Access Request" +msgstr "" + +#: lms/templates/api_admin/api_access_request_form.html +msgid "Request API Access" +msgstr "" + +#. Translators: "platform_name" is the name of this Open edX installation. +#. "link_start" and "link_end" are the HTML for a link to the API +#. documentation. "api_support_email_link" is HTML for a link to email the API +#. support staff. +#: lms/templates/api_admin/status.html +msgid "" +"Your request to access the {platform_name} Course Catalog API is being " +"processed. You will receive a message at the email address in your profile " +"when processing is complete. You can also return to this page to see the " +"status of your API access request. To learn more about the {platform_name} " +"Course Catalog API, visit {link_start}our API documentation page{link_end}. " +"For questions about using this API, visit our FAQ page or contact " +"{api_support_email_link}." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Terms of Service for {platform_name} APIs" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Effective Date: April 12th, 2016" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Welcome to {platform_name}. Thank you for using {platform_name}'s Course " +"Discovery API and any additional APIs that we may offer from time to time " +"(collectively, the \"APIs\"). Please read these Terms of Service prior to " +"accessing or using the APIs. These Terms of Service, any additional terms " +"within accompanying API documentation, and any applicable policies and " +"guidelines that {platform_name} makes available and/or updates from time to " +"time are agreements (collectively, the \"Terms\") between you and " +"{platform_name}. By accessing or using the APIs, you accept and agree to be " +"legally bound by the Terms, whether or not you are a registered user. If you" +" do not understand or do not wish to be bound by the Terms, you should not " +"use the APIs." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "API Access" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To access the APIs, you will need to create an {platform_name} user account " +"for your application (not for personal use). This account will provide you " +"with access to our API request page at {request_url}. On that page, you must" +" complete the API request form including a description of your proposed uses" +" for the APIs. Any account and registration information that you provide to " +"{platform_name} must be accurate and up to date, and you agree to inform us " +"promptly of any changes. {platform_name} will review your API request form " +"and, upon approval in {platform_name}'s sole discretion, will provide you " +"with instructions for obtaining your API shared secret and client ID." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Permissible Use" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to use the APIs solely for the purpose of delivering content that " +"is accessed through the APIs (the \"API Content\") to your own website, " +"mobile site, app, blog, email distribution list, or social media property or" +" for another commercial use that you described in your request for access " +"and that {platform_name} has approved on a case-by-case basis. " +"{platform_name} may monitor your use of the APIs for compliance with the " +"Terms and may deny your access or shut down your integration if you try to " +"go around or exceed the requirements and limitations set by {platform_name}." +" Your Application or other approved use of the API or the API Content must " +"not prompt your end users to provide their {platform_name} username, " +"password or other {platform_name} user credentials anywhere other than the " +"{platform_name} website at {platform_url}." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Prohibited Uses and Activities" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} shall have the sole right to determine whether or not any " +"given use of the APIs is acceptable, and {platform_name} reserves the right " +"to revoke API access for any use that {platform_name} determines at any " +"time, in its sole discretion, does not benefit or serve the best interests " +"of {platform_name}, its users and its partners." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The following activities are not acceptable when using the APIs (this is not" +" an exhaustive list):" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"collecting or storing the names, passwords, or other credentials of " +"{platform_name} users;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"scraping or similar techniques to aggregate or otherwise create permanent " +"copies of API Content;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"violating, misappropriating or infringing any copyright, trademark rights, " +"rights of privacy or publicity, confidential information or any other right " +"of any third party;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"altering or removing any trademark, copyright or other proprietary or legal " +"notices contained in, or appearing on, the APIs or any API Content;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "altering or editing any content or graphics in the API Content" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"sublicensing, re-distributing, renting, selling or leasing access to the " +"APIs or your client secret to any third party;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"distributing any virus, Trojan horse, spyware, adware, malware, bot, time " +"bomb, worm, or other harmful or malicious component; or" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"using the APIs for any purpose which or might overburden, impair or disrupt " +"the {platform_name} platform, servers or networks." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Usage and Quotas" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} reserves the right, in its discretion, to impose " +"restrictions and limitations on the number and frequency of calls made by " +"you or your Application to the APIs. You must not attempt to circumvent any " +"restrictions or limitations that we impose." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Compliance" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to comply with all applicable law, regulation, and third party " +"rights (including without limitation laws regarding the import or export of " +"data or software, privacy, copyright, and local laws). You will not use the " +"APIs to encourage or promote illegal activity or violation of third party " +"rights. You will not violate any other terms of service with " +"{platform_name}. You will only access (or attempt to access) an API by the " +"means described in the documentation of that API. You will not misrepresent " +"or mask either your identity or yourApplication's identity when using the " +"APIs." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Ownership" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You acknowledge and agree that the APIs and all API Content contain valuable" +" intellectual property of {platform_name} and its partners. The APIs and all" +" API Content are protected by United States and foreign copyright, " +"trademark, and other laws. All rights in the APIs and the API Content, if " +"not expressly granted, are reserved. By using the APIs or any API Content, " +"you do not acquire ownership of any rights in the APIs or API Content. You " +"must not claim or attempt to claim ownership in the APIs or any API Content " +"or misrepresent yourself or your company or your Application as being the " +"source of any API Content. You may not modify, create derivative works of, " +"or attempt to use, license, or in any way exploit any API Content in whole " +"or in part on your own behalf or on behalf of any third party. You may not " +"distribute or modify the APIs or any API Content (including adaptation, " +"editing, excerpting, or creating derivative works)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"All names, logos and seals (\"Trademarks\") that appear in the APIs, API " +"Content, or on or through the services made available on or through the " +"APIs, if any, are the property of their respective owners. You may not " +"remove, alter, or obscure any copyright, Trademark, or other proprietary " +"rightrs notices incorporated in or accompanying the API Content. If any " +"third party revokes access to API Content owned or controlled by that third " +"party, including without limitation any Trademarks, you must ensure that all" +" API Content pertaining to that third party is deleted from your app, " +"networks, systems and servers as soon as reasonably possible. If you stop " +"using the APIs altogether or if your API access is revoked, you must delete " +"all API Content in the same way." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To the extent that you submit any content to {platform_name} in connection " +"with your use of the APIs or any API Content, you hereby grant to " +"{platform_name} a worldwide, non-exclusive, transferable, assignable, sub " +"licensable, 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 such " +"content, in whole or in part, in any form and in any media formats and " +"through any media channels (now known or hereafter developed)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Privacy" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to comply with all applicable privacy laws and regulations and to " +"be transparent with respect to any collection and use of end user data. You " +"will provide and adhere to a privacy policy for your Application that " +"clearly and accurately describes to your end users what user information you" +" collect and how you may use and share such information (including for " +"advertising) with {platform_name} and other third parties." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Right to Charge" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} reserves the right to modify the Terms at any time without " +"advance notice. Any changes to the Terms will be effective immediately upon " +"posting on this page, with an updated effective date. By accessing or using " +"the APIs after any changes have been made, you signify your agreement on a " +"prospective basis to the modified Terms and all of the changes. Be sure to " +"return to this page periodically to ensure familiarity with the most current" +" version of the Terms." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} may also update or modify the APIs from time to time without" +" advance notice. These changes may affect your use of the APIs or the way " +"your integration interacts with the API. If we make a change that is " +"unacceptable to you, you should stop using the APIs. Continued use of the " +"APIs means you accept the change." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Confidentiality" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Your credentials (such as client secret and IDs) are intended to be used " +"solely by you. You will keep your credentials confidential and discourage " +"others from using your credentials. Your credentials may not be embedded in " +"open source projects." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"In the event that {platform_name} provides you with access to information " +"specific to {platform_name} and/or the APIs that is either marked as " +"\"Confidential\" or which a reasonable person would assume to be " +"confidential or proprietary given the terms of its disclosure " +"(\"Confidential Information\"), you agree to use this information only to " +"use and build with the APIs. You may not disclose the Confidential " +"Information to anyone without {platform_name}'s prior written consent, and " +"you agree to protect the Confidential Information from unauthorized use and " +"disclosure in the same way that you would protect your own confidential " +"information. Confidential information does not include information that you " +"independently developed, that was rightfully given to you by a third party " +"without confidentiality obligation, or that becomes public through no fault " +"of your own. You may disclose Confidential Information when compelled to do " +"so by law if you provide {platform_name} with reasonable prior notice, " +"unless a court orders that {platform_name} not receive notice." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Disclaimer of Warranty / Limitation of Liabilities" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"THE APIS AND ANY INFORMATION, API CONTENT OR SERVICES MADE AVAILABLE ON OR " +"THROUGH THE APIS 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." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} AND THE {platform_name} PARTICIPANTS (AS HERINAFTER DEFINED)" +" DO NOT WARRANT THAT THE APIS WILL OPERATE IN AN UNINTERRUPTED OR ERROR-FREE" +" MANNER, THAT THE APIS ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS, OR " +"THAT THE APIS OR API CONTENT PROVIDED WILL MEET YOUR NEEDS OR EXPECTATIONS. " +"{platform_name} AND THE {platform_name} PARTICIPANTS ALSO MAKE NO WARRANTY " +"ABOUT THE ACCURACY, COMPLETENESS, TIMELINESS, OR QUALITY OF THE APIS OR ANY " +"API CONTENT, OR THAT ANY PARTICULAR API CONTENT WILL CONTINUE TO BE MADE " +"AVAILABLE. \"{platform_name} PARTICIPANTS\" MEANS MIT, HARVARD, THE OTHER " +"MEMBERS, THE ENTITIES PROVIDING INFORMATION, API CONTENT OR SERVICES FOR THE" +" APIS, THE COURSE INSTRUCTORS AND THEIR STAFFS." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"USE OF THE APIS, AND THE API CONTENT AND ANY SERVICES OBTAINED FROM OR " +"THROUGH THE APIS, IS AT YOUR OWN RISK. YOUR ACCESS TO OR DOWNLOAD OF " +"INFORMATION, MATERIALS OR DATA THROUGH THE APIS 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, UNLESS OTHERWISE EXPRESSLY " +"PROVIDED FOR IN THE {platform_name} PRIVACY POLICY." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, YOU AGREE THAT NEITHER " +"{platform_name} NOR ANY OF THE {platform_name} PARTICIPANTS WILL BE LIABLE " +"TO YOU FOR ANY LOSS OR DAMAGES, EITHER ACTUAL OR CONSEQUENTIAL, ARISING OUT " +"OF OR RELATING TO THESE TERMS, OR YOUR (OR ANY THIRD PARTY'S) USE OF OR " +"INABILITY TO USE THE APIS OR ANY API CONTENT, OR YOUR RELIANCE UPON " +"INFORMATION OBTAINED FROM OR THROUGH THE APIS, WHETHER YOUR CLAIM IS BASED " +"IN CONTRACT, TORT, STATUTORY OR OTHER LAW." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"IN PARTICULAR, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER " +"{platform_name} NOR ANY OF THE {platform_name} PARTICIPANTS WILL HAVE ANY " +"LIABILITY FOR ANY CONSEQUENTIAL, INDIRECT, PUNITIVE, SPECIAL, EXEMPLARY OR " +"INCIDENTAL DAMAGES, WHETHER FORESEEABLE OR UNFORESEEABLE AND WHETHER OR NOT " +"{platform_name} OR ANY OF THE {platform_name} 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)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"CERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE " +"EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME" +" OR ALL OF THE ABOVE DISCLAIMERS, EXCLUSIONS, OR LIMITATIONS MAY NOT APPLY " +"TO YOU, AND YOU MIGHT HAVE ADDITIONAL RIGHTS." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The APIs and API Content may include hyperlinks to sites maintained or " +"controlled by others. {platform_name} and the {platform_name} 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 " +"websites, you do so at your own risk." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To the maximum extent permitted by applicable law, you agree to defend, hold" +" harmless and indemnify {platform_name} and the {platform_name} " +"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 APIs and any API " +"Content, 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, " +"{platform_name} or one of the {platform_name} Participants will provide you " +"with written notice of such claim, suit or action." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "General Legal Terms" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The Terms constitute the entire agreement between you and {platform_name} " +"with respect to your use of the APIs and API Content, superseding any prior " +"agreements between you and {platform_name} regarding your use of the APIs " +"and API Content. The failure of {platform_name} to exercise or enforce any " +"right or provision of the Terms shall not constitute a waiver of such right " +"or provision. If any provision of the Terms 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 the Terms shall remain in full " +"force and effect. The Terms do not create any third party beneficiary rights" +" or any agency, partnership, or joint venture. For any notice provided to " +"you by {platform_name} under these Terms, {platform_name} may notify you via" +" the email address associated with your {platform_name} account." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree that the Terms, the APIs, and any claim or dispute arising out of " +"or relating to the Terms or the APIs 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). Notwithstanding the foregoing, you agree that {platform_name} shall " +"still be allowed to apply to injunctive remedies (or an equivalent type of " +"urgent legal relief) in any jursdiction." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Termination" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You may stop using the APIs at any time. You agree that {platform_name}, in " +"its sole discretion and at any time, may terminate your use of the APIs or " +"any API Content for any reason or no reason, without prior notice or " +"liabiliy." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} and the {platform_name} Participants reserve the right at " +"any time in their sole discretion to cancel, delay, reschedule or alter the " +"format of any API or API Content offered through {platform_name}, or to " +"cease providing any part or all of the APIs or API Content or related " +"services, and you agree that neither {platform_name} nor any of the " +"{platform_name} Participants will have any liability to you for such an " +"action." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Upon any termination of the Terms or discontinuation of your access to an " +"API for any reason, your right to use any API and API Content will " +"immediately cease. You will immediately stop using the APIs and delete any " +"cached or stored API Content. All provisions of the Terms that by their " +"nature should survive termination shall survive termination, including, " +"without limitation, ownership provisions, warranty disclaimers, and " +"limitation of liability. Termination of your access to and use of the APIs " +"and API Content shall not relieve you of any obligations arising or " +"accrusing prior to such termination or limit any liability that you " +"otherwise may have to {platform_name}, including without limitation any " +"indemnification obligations contained herein." +msgstr "" + #: lms/templates/calculator/toggle_calculator.html msgid "Open Calculator" msgstr "" @@ -10714,18 +11266,16 @@ msgid "Auto Enroll" msgstr "" #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is checked, users who have not yet registered for " -"{platform_name} will be automatically enrolled." +"If this option is {em_start}checked{em_end}, users who have not yet " +"registered for {platform_name} will be automatically enrolled." msgstr "" #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is left unchecked, users who have not yet registered" -" for {platform_name} will not be enrolled, but will be allowed to enroll " -"once they make an account." +"If this option is left {em_start}unchecked{em_end}, users who have not yet " +"registered for {platform_name} will not be enrolled, but will be allowed to " +"enroll once they make an account." msgstr "" #: lms/templates/ccx/enrollment.html @@ -10739,9 +11289,8 @@ msgid "Notify users by email" msgstr "" #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is checked, users will receive an email " +"If this option is {em_start}checked{em_end}, users will receive an email " "notification." msgstr "" @@ -11118,6 +11667,10 @@ msgstr "" msgid "{chapter} current chapter" msgstr "" +#: lms/templates/courseware/accordion.html +msgid "{span_start}current section{span_end}" +msgstr "" + #: lms/templates/courseware/accordion.html #: lms/templates/courseware/progress.html msgid "due {date}" @@ -11522,7 +12075,7 @@ msgid "Verification Declined" msgstr "" #: lms/templates/courseware/progress.html -msgid "Completed" +msgid "Completed by" msgstr "" #: lms/templates/courseware/progress.html @@ -11857,7 +12410,7 @@ msgstr "" #: lms/templates/dashboard/_dashboard_course_listing.html msgid "" "It's official. It's easily shareable. It's a proven motivator to complete " -"the course.
    {link_start}Learn more about the verified " +"the course. {line_break}{link_start}Learn more about the verified " "{cert_name_long}{link_end}." msgstr "" @@ -13849,6 +14402,25 @@ msgstr "" msgid "Reason" msgstr "" +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is checked, users who have not yet registered for " +"{platform_name} will be automatically enrolled." +msgstr "" + +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is left unchecked, users who have not yet registered" +" for {platform_name} will not be enrolled, but will be allowed to enroll " +"once they make an account." +msgstr "" + +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is checked, users will receive an email " +"notification." +msgstr "" + #: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "Register/Enroll Students" msgstr "" @@ -15240,10 +15812,10 @@ msgstr "" #: lms/templates/verify_student/pay_and_verify.html msgid "" -"Please make sure your browser is updated to the {a_start}most recent version" -" possible{a_end}. Also, please make sure your webcam is plugged in, " -"turned on, and allowed to function in your web browser (commonly adjustable " -"in your browser settings)." +"Please make sure your browser is updated to the {strong_start}{a_start}most " +"recent version possible{a_end}{strong_end}. Also, please make sure your " +"{strong_start}webcam is plugged in, turned on, and allowed to function in " +"your web browser (commonly adjustable in your browser settings).{strong_end}" msgstr "" #: lms/templates/verify_student/reverify.html @@ -15319,6 +15891,13 @@ msgid "" "edX and Open EdX logos are registered trademarks or trademarks of edX Inc." msgstr "" +#: themes/edx.org/lms/templates/header.html +#: themes/red-theme/lms/templates/header.html +msgid "" +"Warning: Your browser is not fully supported. We strongly " +"recommend using {chrome_link} or {ff_link}." +msgstr "" + #: themes/edx.org/lms/templates/course_modes/choose.html msgid "" "{b_start}Support our Mission: {b_end} EdX, a non-profit, relies on verified " @@ -17057,10 +17636,6 @@ msgstr "" msgid "Libraries" msgstr "" -#: cms/templates/index.html cms/templates/widgets/header.html -msgid "Programs" -msgstr "" - #: cms/templates/index.html msgid "Re-run Course" msgstr "" diff --git a/conf/locale/he/LC_MESSAGES/djangojs.mo b/conf/locale/he/LC_MESSAGES/djangojs.mo index 490b92fb5972b3507b6f57ecbd6bbe1c7f2085c5..b57da4bd28ecadd398a2fc4994213349b431dc67 100644 GIT binary patch delta 38 lcmaFP{hWJ)2s4+7uA!-dp`n$5$z(ZZIRw{yvm5h5CIGxc2?78B delta 38 mcmaFP{hWJ)2s4+luCalFp{13v#bh~VIXKtEc(WVxLM8ycM+p%C diff --git a/conf/locale/he/LC_MESSAGES/djangojs.po b/conf/locale/he/LC_MESSAGES/djangojs.po index ddbe894e16..2fac1411a8 100644 --- a/conf/locale/he/LC_MESSAGES/djangojs.po +++ b/conf/locale/he/LC_MESSAGES/djangojs.po @@ -48,8 +48,8 @@ msgid "" msgstr "" "Project-Id-Version: edx-platform\n" "Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" -"POT-Creation-Date: 2016-03-30 19:38+0000\n" -"PO-Revision-Date: 2016-03-30 19:43+0000\n" +"POT-Creation-Date: 2016-04-15 11:04+0000\n" +"PO-Revision-Date: 2016-04-15 11:07+0000\n" "Last-Translator: Ned Batchelder \n" "Language-Team: Hebrew (http://www.transifex.com/open-edx/edx-platform/language/he/)\n" "MIME-Version: 1.0\n" @@ -217,6 +217,7 @@ msgstr "" #: common/lib/xmodule/xmodule/js/src/html/edit.js #: common/static/common/templates/image-modal.underscore #: common/static/common/templates/discussion/forum-action-close.underscore +#: lms/templates/student_profile/share_modal.underscore msgid "Close" msgstr "" @@ -1738,32 +1739,36 @@ msgid "Do not show again" msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Turn on closed captioning" -msgstr "" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Turn off transcript" +msgid "Transcript will be displayed when you start playing the video." msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "" -"Language: Press the UP arrow key to enter the language menu, then use UP and" -" DOWN arrow keys to navigate language options. Press ENTER to change to the " +"Activating a link in this group will skip to the corresponding point in the " +"video." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Video transcript" +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Start of transcript. Skip to the end." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "End of transcript. Skip to the start." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "" +"Language: Press the UP arrow key to enter the language menu then use UP and " +"DOWN arrow keys to navigate language options. Press ENTER to change to the " "selected language." msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Open language menu" -msgstr "" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "" -"Activating an item in this group will spool the video to the corresponding " -"time point. To skip transcript, go to previous item." -msgstr "" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "
  • Transcript will be displayed when " +msgid "Open language menu." msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js @@ -1774,6 +1779,10 @@ msgstr "" msgid "(Caption will be displayed when you start playing the video.)" msgstr "" +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Turn on closed captioning" +msgstr "" + #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "Turn on transcripts" msgstr "" @@ -2037,6 +2046,17 @@ msgstr "" msgid "Please do not use any spaces or special characters in this field." msgstr "" +#: common/static/common/js/components/views/paginated_view.js +#: common/static/common/js/components/views/paging_footer.js +msgid "Pagination" +msgstr "" + +#: common/static/common/js/components/views/paginated_view.js +msgid "" +"Your request could not be completed. Reload the page and try again. If the " +"issue persists, click the Help tab to report the problem." +msgstr "" + #: common/static/common/js/components/views/paging_header.js msgid "Showing %(first_index)s out of %(num_items)s total" msgstr "" @@ -2330,6 +2350,7 @@ msgstr "" #: lms/djangoapps/teams/static/teams/js/collections/topic.js #: lms/templates/edxnotes/tab-item.underscore +#: lms/templates/learner_dashboard/program_card.underscore msgid "name" msgstr "" @@ -2339,6 +2360,11 @@ msgstr "" msgid "team count" msgstr "" +#: lms/djangoapps/teams/static/teams/js/teams_tab_factory.js +#: lms/djangoapps/teams/static/teams/js/views/teams_tab.js +msgid "Teams" +msgstr "" + #: lms/djangoapps/teams/static/teams/js/views/edit_team.js #: cms/templates/js/certificate-editor.underscore #: cms/templates/js/content-group-editor.underscore @@ -2524,12 +2550,12 @@ msgstr[1] "" msgid "All teams" msgstr "" -#: lms/djangoapps/teams/static/teams/js/views/teams_tab.js -msgid "Topics" +#: lms/djangoapps/teams/static/teams/js/views/teams.js +msgid "Teams Pagination" msgstr "" #: lms/djangoapps/teams/static/teams/js/views/teams_tab.js -msgid "Teams" +msgid "Topics" msgstr "" #: lms/djangoapps/teams/static/teams/js/views/teams_tab.js @@ -4003,6 +4029,10 @@ msgstr "" msgid "Successfully unlinked." msgstr "" +#: lms/static/js/student_profile/views/badge_list_container.js +msgid "Accomplishments Pagination" +msgstr "" + #: lms/static/js/student_profile/views/learner_profile_factory.js msgid "{platform_name} learners can see my:" msgstr "" @@ -4057,6 +4087,18 @@ msgstr "" msgid "Profile image for {username}" msgstr "" +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "About Me" +msgstr "" + +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "Accomplishments" +msgstr "" + +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "Profile" +msgstr "" + #: lms/static/js/verify_student/views/image_input_view.js msgid "Image Upload Error" msgstr "" @@ -4542,6 +4584,10 @@ msgstr "" msgid "You must specify a name" msgstr "" +#: cms/static/js/models/course_update.js +msgid "Action required: Enter a valid date." +msgstr "" + #: cms/static/js/models/group.js msgid "Group name is required" msgstr "" @@ -5316,6 +5362,11 @@ msgstr "" msgid "Date" msgstr "" +#: cms/templates/js/edit-chapter.underscore +#: lms/templates/ccx/schedule.underscore +msgid "gettext(" +msgstr "" + #: cms/templates/js/paging-header.underscore #: common/static/common/templates/components/paging-footer.underscore #: common/static/common/templates/discussion/pagination.underscore @@ -5341,7 +5392,8 @@ msgid "Zoom Out" msgstr "" #: common/static/common/templates/components/paging-footer.underscore -msgid "Page number" +#, python-format +msgid "Page number out of %(total_pages)s" msgstr "" #: common/static/common/templates/components/paging-footer.underscore @@ -5995,10 +6047,6 @@ msgstr "" msgid "remove all" msgstr "" -#: lms/templates/ccx/schedule.underscore -msgid "gettext(" -msgstr "" - #: lms/templates/ccx/schedule.underscore msgid "Section" msgstr "" @@ -6317,15 +6365,9 @@ msgid "Generate Exception Certificates" msgstr "" #: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "Generate a Certificate for all " -msgstr "" - -#: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "New" -msgstr "" - -#: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "additions to the Exception list" +msgid "" +"Generate certificates for all users on the Exception list for whom " +"certificates have not yet been run" msgstr "" #: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore @@ -6555,6 +6597,24 @@ msgstr "" msgid "Valid" msgstr "" +#: lms/templates/learner_dashboard/explore_new_programs.underscore +msgid "" +"Browse recently launched courses and see what\\'s new in your favorite " +"subjects" +msgstr "" + +#: lms/templates/learner_dashboard/explore_new_programs.underscore +msgid "Explore New XSeries" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore +msgid "org.display_name" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore +msgid "type" +msgstr "" + #: lms/templates/search/course_search_results.underscore #: lms/templates/search/dashboard_search_results.underscore #, python-format @@ -6596,7 +6656,6 @@ msgid "section.title" msgstr "" #: lms/templates/student_account/account_settings.underscore -#: lms/templates/student_profile/learner_profile.underscore msgid "An error occurred. Please reload the page." msgstr "" @@ -6773,12 +6832,68 @@ msgstr "" msgid "Already have an account?" msgstr "" -#: lms/templates/student_profile/learner_profile.underscore -msgid "You are currently sharing a limited profile." +#: lms/templates/student_profile/badge.underscore +#, python-format +msgid "Share your \"%(display_name)s\" award" +msgstr "" + +#: lms/templates/student_profile/badge.underscore +msgid "Share" +msgstr "" + +#: lms/templates/student_profile/badge.underscore +#, python-format +msgid "Earned %(created)s." +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "What's Your Next Accomplishment?" +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "Start working toward your next learning goal." +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "Find a course" msgstr "" #: lms/templates/student_profile/learner_profile.underscore -msgid "This edX learner is currently sharing a limited profile." +msgid "An error occurred. Try loading the page again." +msgstr "" + +#: lms/templates/student_profile/section_two.underscore +msgid "You are currently sharing a limited profile." +msgstr "" + +#: lms/templates/student_profile/section_two.underscore +msgid "This learner is currently sharing a limited profile." +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +msgid "Share on Mozilla Backpack" +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +msgid "" +"To share your certificate on Mozilla Backpack, you must first have a " +"Backpack account. Complete the following steps to add your certificate to " +"Backpack." +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +#, python-format +msgid "" +"Create a %(link_start)sMozilla Backpack%(link_end)s account, or log in to " +"your existing account" +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +#, python-format +msgid "" +"%(download_link_start)sDownload this image (right-click or option-click, " +"save as)%(link_end)s and then %(upload_link_start)supload%(link_end)s it to " +"your backpack.
  • " msgstr "" #: lms/templates/verify_student/enrollment_confirmation_step.underscore @@ -6862,9 +6977,8 @@ msgid "Take Your Photo" msgstr "" #: lms/templates/verify_student/face_photo_step.underscore -#, python-format msgid "" -"When your face is in position, use the camera button %(icon)s below to take " +"When your face is in position, use the camera button {icon} below to take " "your photo." msgstr "" @@ -6885,10 +6999,9 @@ msgid "The photo of your face matches the photo on your ID." msgstr "" #: lms/templates/verify_student/face_photo_step.underscore -#, python-format msgid "" -"To use the current photo, select the camera button %(icon)s. To take another" -" photo, select the retake button %(icon)s." +"To use the current photo, select the camera button {icon}. To take another " +"photo, select the retake button {icon}." msgstr "" #: lms/templates/verify_student/face_photo_step.underscore @@ -6969,8 +7082,7 @@ msgid "Make sure your ID is well-lit" msgstr "" #: lms/templates/verify_student/id_photo_step.underscore -#, python-format -msgid "Once in position, use the camera button %(icon)s to capture your ID" +msgid "Once in position, use the camera button {icon} to capture your ID" msgstr "" #: lms/templates/verify_student/id_photo_step.underscore @@ -7001,8 +7113,7 @@ msgid "Be sure your entire face is inside the frame" msgstr "" #: lms/templates/verify_student/incourse_reverify.underscore -#, python-format -msgid "Once in position, use the camera button %(icon)s to capture your photo" +msgid "Once in position, use the camera button {icon} to capture your photo" msgstr "" #: lms/templates/verify_student/incourse_reverify.underscore @@ -7010,8 +7121,7 @@ msgid "Can we match the photo you took with the one on your ID?" msgstr "" #: lms/templates/verify_student/intro_step.underscore -#, python-format -msgid "Thanks for returning to verify your ID in: %(courseName)s" +msgid "Thanks for returning to verify your ID in: {courseName}" msgstr "" #: lms/templates/verify_student/intro_step.underscore @@ -7046,13 +7156,12 @@ msgid "" msgstr "" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "You are enrolling in: %(courseName)s" +#: lms/templates/verify_student/make_payment_step_ab_testing.underscore +msgid "You are enrolling in: {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "You are upgrading your enrollment for: %(courseName)s" +msgid "You are upgrading your enrollment for: {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step.underscore @@ -7094,8 +7203,7 @@ msgid "You have already verified your ID!" msgstr "" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "Your verification status is good until %(verificationGoodUntil)s." +msgid "Your verification status is good until {verificationGoodUntil}." msgstr "" #: lms/templates/verify_student/make_payment_step.underscore @@ -7107,13 +7215,7 @@ msgid "Account Not Activated" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "You are enrolling in %(courseName)s" -msgstr "" - -#: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Upgrade to a Verified Certificate for %(courseName)s" +msgid "Upgrade to a Verified Certificate for {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore @@ -7126,13 +7228,11 @@ msgid "Check your email for an activation message." msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Professional Certificate for %(courseName)s" +msgid "Professional Certificate for {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Verified Certificate for %(courseName)s" +msgid "Verified Certificate for {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore @@ -7163,8 +7263,7 @@ msgid "" msgstr "" #: lms/templates/verify_student/payment_confirmation_step.underscore -#, python-format -msgid "Thank you! We have received your payment for %(courseName)s." +msgid "Thank you! We have received your payment for {courseName}." msgstr "" #: lms/templates/verify_student/payment_confirmation_step.underscore @@ -7729,11 +7828,6 @@ msgstr "" msgid "Chapter Name" msgstr "" -#: cms/templates/js/edit-chapter.underscore -#, python-format -msgid "Chapter %s" -msgstr "" - #: cms/templates/js/edit-chapter.underscore msgid "provide the title/name of the chapter that will be used in navigating" msgstr "" @@ -7742,11 +7836,6 @@ msgstr "" msgid "Chapter Asset" msgstr "" -#: cms/templates/js/edit-chapter.underscore -#, python-format -msgid "path/to/introductionToCookieBaking-CH%d.pdf" -msgstr "" - #: cms/templates/js/edit-chapter.underscore msgid "upload a PDF file or provide the path to a Studio asset file" msgstr "" diff --git a/conf/locale/hi/LC_MESSAGES/django.mo b/conf/locale/hi/LC_MESSAGES/django.mo index 72c08b124d94ff2e2506505bfbc6cde5dc4edfa4..502e873c9aed1e59ab9c72192f68b8f0eb36512b 100644 GIT binary patch delta 16275 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 delta 17868 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\n" "Language-Team: Hindi (http://www.transifex.com/open-edx/edx-platform/language/hi/)\n" @@ -321,6 +321,10 @@ msgid "" "set." msgstr "" +#: common/djangoapps/course_modes/models.py +msgid "Verified modes cannot be free." +msgstr "" + #: common/djangoapps/course_modes/models.py msgid "" "The time period before a course ends in which a course mode will expire" @@ -361,6 +365,7 @@ msgid "Student" msgstr "" #: common/djangoapps/embargo/forms.py +#: lms/djangoapps/verified_track_content/forms.py msgid "COURSE NOT FOUND. Please check that the course ID is valid." msgstr "" @@ -3830,6 +3835,75 @@ msgstr "" msgid "Top num_top_words words for word cloud." msgstr "" +#: lms/djangoapps/badges/events/course_complete.py +msgid "" +"Completed the course \"{course_name}\" ({course_mode}, {start_date} - " +"{end_date})" +msgstr "" + +#: lms/djangoapps/badges/events/course_complete.py +msgid "Completed the course \"{course_name}\" ({course_mode})" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The badge image must be square." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The badge image file size must be less than 250KB." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "This value must be all lowercase." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The course mode for this badge image. For example, \"verified\" or \"honor\"." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Badge images must be square PNG files. The file size should be under 250KB." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Set this value to True if you want this image to be the default image for " +"any course modes that do not have a specified badge image. You can have only" +" one default image." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "There can be only one default image." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"On each line, put the number of completed courses to award a badge for, a " +"comma, and the slug of a badge class you have created that has the issuing " +"component 'openedx__course'. For example: 3,enrolled_3_courses" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"On each line, put the number of enrolled courses to award a badge for, a " +"comma, and the slug of a badge class you have created that has the issuing " +"component 'openedx__course'. For example: 3,enrolled_3_courses" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Each line is a comma-separated list. The first item in each line is the slug" +" of a badge class you have created that has an issuing component of " +"'openedx__course'. The remaining items in each line are the course keys the " +"learner needs to complete to be awarded the badge. For example: " +"slug_for_compsci_courses_group_badge,course-v1:CompSci+Course+First,course-v1:CompsSci+Course+Second" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "Please check the syntax of your entry." +msgstr "" + #. Translators: 'EdX', 'edX', and 'Open edX' are trademarks of 'edX Inc.'. #. Please do not translate any of these trademarks and company names. #: lms/djangoapps/branding/api.py @@ -3942,16 +4016,6 @@ msgid "" " rerun of this course in the studio to allow this action." msgstr "" -#: lms/djangoapps/certificates/badge_handler.py -msgid "" -"Completed the course \"{course_name}\" ({course_mode}, {start_date} - " -"{end_date})" -msgstr "" - -#: lms/djangoapps/certificates/badge_handler.py -msgid "Completed the course \"{course_name}\" ({course_mode})" -msgstr "" - #: wiki/admin.py wiki/models/article.py msgid "created" msgstr "बनाया गया" @@ -4020,34 +4084,6 @@ msgstr "" msgid "The download URL for the generated certificate." msgstr "" -#: lms/djangoapps/certificates/models.py -msgid "The badge image must be square." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "The badge image file size must be less than 250KB." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "The course mode for this badge image. For example, \"verified\" or \"honor\"." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "" -"Badge images must be square PNG files. The file size should be under 250KB." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "" -"Set this value to True if you want this image to be the default image for " -"any course modes that do not have a specified badge image. You can have only" -" one default image." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "There can be only one default image." -msgstr "" - #: lms/djangoapps/certificates/models.py msgid "Name of template." msgstr "" @@ -4516,6 +4552,10 @@ msgid "" "To earn a certificate, you must complete all requirements before this date." msgstr "" +#: lms/djangoapps/courseware/date_summary.py +msgid "After this date, course content will be archived." +msgstr "" + #: lms/djangoapps/courseware/date_summary.py msgid "" "This course is archived, which means you can review course content but it is" @@ -5449,11 +5489,7 @@ msgid "" msgstr "" #: lms/djangoapps/instructor/views/api.py -msgid "Invalid Json data, Please refresh the page and then try again." -msgstr "" - -#: lms/djangoapps/instructor/views/api.py -msgid "Invalid data, user_id must be present for all certificate exceptions." +msgid "Invalid data, generate_for must be \"new\" or \"all\"." msgstr "" #: lms/djangoapps/instructor/views/api.py @@ -5787,6 +5823,7 @@ msgid "Last Name" msgstr "" #: lms/djangoapps/instructor_task/tasks_helper.py +#: openedx/core/djangoapps/api_admin/forms.py #: lms/templates/shoppingcart/receipt.html msgid "Company Name" msgstr "" @@ -7106,6 +7143,10 @@ msgid "" "The user {username} is not enrolled in the course associated with this team." msgstr "" +#: lms/djangoapps/verified_track_content/models.py +msgid "The course key for the course we would like to be auto-cohorted." +msgstr "" + #: lms/djangoapps/verify_student/models.py msgid "Your {platform_name} verification has expired." msgstr "" @@ -7920,6 +7961,26 @@ msgstr "यह संशोधन हटा दिया गया है।" msgid "Restoring to this revision will mark the article as deleted." msgstr "पुनर्स्थापित करने पर यह संशोधन हटाए गए के रूप में चिह्नित किया जाएगा।" +#: openedx/core/djangoapps/api_admin/forms.py +msgid "Company Address" +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "Describe what your application does." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The URL of your company's website." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The name of your company." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The contact address of your company." +msgstr "" + #: openedx/core/djangoapps/api_admin/models.py cms/templates/index.html msgid "Denied" msgstr "" @@ -7940,6 +8001,27 @@ msgstr "" msgid "The reason this user wants to access the API." msgstr "" +#: openedx/core/djangoapps/api_admin/models.py +msgid "API access request from {company}" +msgstr "" + +#: openedx/core/djangoapps/api_admin/models.py +msgid "API access request" +msgstr "" + +#: openedx/core/djangoapps/api_admin/views.py +msgid "TODO" +msgstr "" + +#. Translators: link_start and link_end are HTML tags for a link to the terms +#. of service. +#. platform_name is the name of this Open edX installation. +#: openedx/core/djangoapps/api_admin/widgets.py +msgid "" +"I, and my company, accept the {link_start}{platform_name} API Terms of " +"Service{link_end}." +msgstr "" + #: openedx/core/djangoapps/bookmarks/views.py msgid "An error has occurred. Please try again." msgstr "" @@ -7970,6 +8052,10 @@ msgstr "" msgid "Bookmark with usage_id: {usage_id} does not exist." msgstr "" +#: openedx/core/djangoapps/course_groups/cohorts.py +msgid "Default Group" +msgstr "" + #: openedx/core/djangoapps/course_groups/cohorts.py msgid "You cannot create two cohorts with the same name" msgstr "" @@ -8206,6 +8292,14 @@ msgid "" "to retry a failing request." msgstr "" +#: openedx/core/djangoapps/programs/models.py +msgid "Do we want to show xseries program advertising" +msgstr "" + +#: openedx/core/djangoapps/programs/models.py +msgid "Do we want to show program listing page" +msgstr "" + #: openedx/core/djangoapps/self_paced/models.py msgid "Enable course home page improvements." msgstr "" @@ -8880,10 +8974,18 @@ msgstr "पाठ्यक्रम संख्या:" #: lms/templates/sysadmin_dashboard.html #: lms/templates/sysadmin_dashboard_gitlogs.html #: lms/templates/courseware/courses.html +#: themes/edx.org/lms/templates/header.html #: themes/red-theme/lms/templates/header.html msgid "Courses" msgstr "पाठ्यक्रम" +#: cms/templates/index.html cms/templates/widgets/header.html +#: lms/templates/navigation.html lms/templates/learner_dashboard/programs.html +#: themes/edx.org/lms/templates/header.html +#: themes/red-theme/lms/templates/header.html +msgid "Programs" +msgstr "" + #: cms/templates/login.html cms/templates/widgets/header.html #: themes/red-theme/cms/templates/login.html msgid "Sign In" @@ -9318,31 +9420,23 @@ msgstr "{platform_name} सहायता" #: lms/templates/help_modal.html msgid "" -"For questions on course lectures, homework, tools, or materials for " -"this course, post in the {link_start}course discussion " -"forum{link_end}." +"For {strong_start}questions on course lectures, homework, tools, or " +"materials for this course{strong_end}, post in the {link_start}course " +"discussion forum{link_end}." msgstr "" -"पाठ्यक्रम लेकचर्स, गृह कार्य, और पाठ्यक्रम की अन्य किसी " -"सामग्री के लिए {link_start}पाठ्यक्रम चर्चा मंच{link_end} पर पोस्ट " -"करें।" #: lms/templates/help_modal.html msgid "" -"Have general questions about {platform_name}? You can find " -"lots of helpful information in the {platform_name} " +"Have {strong_start}general questions about {platform_name}{strong_end}? You " +"can find lots of helpful information in the {platform_name} " "{link_start}FAQ{link_end}." msgstr "" -"क्या {platform_name} के बारे में आपके कोई साधारण से सवाल " -"हैं? आप {platform_name} {link_start}आम सवाल{link_end} पर ढेर सारी " -"उपयोगी जानकारी पा सकते हैँ।" #: lms/templates/help_modal.html msgid "" -"Have a question about something specific? You can contact " -"the {platform_name} general support team directly:" +"Have a {strong_start}question about something specific{strong_end}? You can " +"contact the {platform_name} general support team directly:" msgstr "" -"क्या किसी ख़ास चीज़ के बारे में आपका कोई ठोस सवाल है? आप " -"{platform_name} की जनरल सपोर्ट टीम से सीधा संपर्क कर सकते हैं:" #: lms/templates/help_modal.html msgid "Report a problem" @@ -9416,13 +9510,10 @@ msgid "Brief description of the problem" msgstr "समस्या का संक्षिप्त वर्णन" #: lms/templates/help_modal.html -msgid "Details of the problem you are encountering" -msgstr "आप जिस समस्या का सामना कर रहे हैं उसका विवरण दें" - -#: lms/templates/help_modal.html -msgid "Include error messages, steps which lead to the issue, etc." +msgid "" +"Details of the problem you are encountering{asterisk}{begin_span}Include " +"error messages, steps which lead to the issue, etc.{end_span}" msgstr "" -"ये सब शामिल करें: त्रुटि संदेश, वे कदम जो इस मुद्दे तक ले जाते हैं, वगैरह" #: lms/templates/help_modal.html msgid "suggestion" @@ -9614,8 +9705,6 @@ msgstr "" msgid "Account Preferences" msgstr "खाते की प्राथमिकताएं" -#. Translators: provider_name is the name of an external, third-party user -#. authentication provider (like Google or LinkedIn). #: lms/templates/login.html msgid "Sign in with {provider_name}" msgstr "" @@ -9787,11 +9876,9 @@ msgid "Register" msgstr "रजिस्टर करें" #: lms/templates/navigation-edx.html lms/templates/navigation.html -#: themes/edx.org/lms/templates/header.html -#: themes/red-theme/lms/templates/header.html msgid "" -"Warning: Your browser is not fully supported. We strongly " -"recommend using {chrome_link} or {ff_link}." +"{begin_strong}Warning:{end_strong} Your browser is not fully supported. We " +"strongly recommend using {chrome_link} or {ff_link}." msgstr "" #: lms/templates/navigation.html themes/red-theme/lms/templates/header.html @@ -9867,8 +9954,6 @@ msgstr "" msgid "The following errors occurred while processing your registration:" msgstr "आपके रजिस्ट्रेशन को प्रोसेस करते समय ये त्रुटियां हुईः" -#. Translators: provider_name is the name of an external, third-party user -#. authentication service (like Google or LinkedIn). #: lms/templates/register-form.html #: themes/stanford-style/lms/templates/register-form.html msgid "Sign up with {provider_name}" @@ -10471,10 +10556,6 @@ msgstr "" "ब्राउज़र सेटिंग्स का उपयोग करें। गूगल क्रोम में, यह एक ही साथ ctrl-plus, या " "ctrl-minus दबाकर किया जाता है।" -#: lms/templates/video.html -msgid "Skip to a navigable version of this video's transcript." -msgstr "इस वीडियो की प्रतिलिपि के एक सरल संस्करण में जाएं" - #: lms/templates/video.html msgid "Loading video player" msgstr "वीडियो प्लेयर लोड हो रहा है " @@ -10487,14 +10568,6 @@ msgstr "वीडियो प्ले करें" msgid "No playable video sources found." msgstr "" -#: lms/templates/video.html -msgid "Skip to end of transcript." -msgstr "प्रतिलिपि के अंत में जाएं।" - -#: lms/templates/video.html -msgid "Go back to start of transcript." -msgstr "प्रतिलिपि की शुरूआत में जाएं।" - #: lms/templates/video.html msgid "Download video" msgstr "वीडियो को डाउनलोड करें" @@ -10515,6 +10588,476 @@ msgstr "आपके शब्द:" msgid "Total number of words:" msgstr "कुल शब्द:" +#: lms/templates/api_admin/api_access_request_form.html +msgid "API Access Request" +msgstr "" + +#: lms/templates/api_admin/api_access_request_form.html +#: lms/templates/api_admin/status.html +msgid "{platform_name} API Access Request" +msgstr "" + +#: lms/templates/api_admin/api_access_request_form.html +msgid "Request API Access" +msgstr "" + +#. Translators: "platform_name" is the name of this Open edX installation. +#. "link_start" and "link_end" are the HTML for a link to the API +#. documentation. "api_support_email_link" is HTML for a link to email the API +#. support staff. +#: lms/templates/api_admin/status.html +msgid "" +"Your request to access the {platform_name} Course Catalog API is being " +"processed. You will receive a message at the email address in your profile " +"when processing is complete. You can also return to this page to see the " +"status of your API access request. To learn more about the {platform_name} " +"Course Catalog API, visit {link_start}our API documentation page{link_end}. " +"For questions about using this API, visit our FAQ page or contact " +"{api_support_email_link}." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Terms of Service for {platform_name} APIs" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Effective Date: April 12th, 2016" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Welcome to {platform_name}. Thank you for using {platform_name}'s Course " +"Discovery API and any additional APIs that we may offer from time to time " +"(collectively, the \"APIs\"). Please read these Terms of Service prior to " +"accessing or using the APIs. These Terms of Service, any additional terms " +"within accompanying API documentation, and any applicable policies and " +"guidelines that {platform_name} makes available and/or updates from time to " +"time are agreements (collectively, the \"Terms\") between you and " +"{platform_name}. By accessing or using the APIs, you accept and agree to be " +"legally bound by the Terms, whether or not you are a registered user. If you" +" do not understand or do not wish to be bound by the Terms, you should not " +"use the APIs." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "API Access" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To access the APIs, you will need to create an {platform_name} user account " +"for your application (not for personal use). This account will provide you " +"with access to our API request page at {request_url}. On that page, you must" +" complete the API request form including a description of your proposed uses" +" for the APIs. Any account and registration information that you provide to " +"{platform_name} must be accurate and up to date, and you agree to inform us " +"promptly of any changes. {platform_name} will review your API request form " +"and, upon approval in {platform_name}'s sole discretion, will provide you " +"with instructions for obtaining your API shared secret and client ID." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Permissible Use" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to use the APIs solely for the purpose of delivering content that " +"is accessed through the APIs (the \"API Content\") to your own website, " +"mobile site, app, blog, email distribution list, or social media property or" +" for another commercial use that you described in your request for access " +"and that {platform_name} has approved on a case-by-case basis. " +"{platform_name} may monitor your use of the APIs for compliance with the " +"Terms and may deny your access or shut down your integration if you try to " +"go around or exceed the requirements and limitations set by {platform_name}." +" Your Application or other approved use of the API or the API Content must " +"not prompt your end users to provide their {platform_name} username, " +"password or other {platform_name} user credentials anywhere other than the " +"{platform_name} website at {platform_url}." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Prohibited Uses and Activities" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} shall have the sole right to determine whether or not any " +"given use of the APIs is acceptable, and {platform_name} reserves the right " +"to revoke API access for any use that {platform_name} determines at any " +"time, in its sole discretion, does not benefit or serve the best interests " +"of {platform_name}, its users and its partners." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The following activities are not acceptable when using the APIs (this is not" +" an exhaustive list):" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"collecting or storing the names, passwords, or other credentials of " +"{platform_name} users;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"scraping or similar techniques to aggregate or otherwise create permanent " +"copies of API Content;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"violating, misappropriating or infringing any copyright, trademark rights, " +"rights of privacy or publicity, confidential information or any other right " +"of any third party;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"altering or removing any trademark, copyright or other proprietary or legal " +"notices contained in, or appearing on, the APIs or any API Content;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "altering or editing any content or graphics in the API Content" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"sublicensing, re-distributing, renting, selling or leasing access to the " +"APIs or your client secret to any third party;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"distributing any virus, Trojan horse, spyware, adware, malware, bot, time " +"bomb, worm, or other harmful or malicious component; or" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"using the APIs for any purpose which or might overburden, impair or disrupt " +"the {platform_name} platform, servers or networks." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Usage and Quotas" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} reserves the right, in its discretion, to impose " +"restrictions and limitations on the number and frequency of calls made by " +"you or your Application to the APIs. You must not attempt to circumvent any " +"restrictions or limitations that we impose." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Compliance" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to comply with all applicable law, regulation, and third party " +"rights (including without limitation laws regarding the import or export of " +"data or software, privacy, copyright, and local laws). You will not use the " +"APIs to encourage or promote illegal activity or violation of third party " +"rights. You will not violate any other terms of service with " +"{platform_name}. You will only access (or attempt to access) an API by the " +"means described in the documentation of that API. You will not misrepresent " +"or mask either your identity or yourApplication's identity when using the " +"APIs." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Ownership" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You acknowledge and agree that the APIs and all API Content contain valuable" +" intellectual property of {platform_name} and its partners. The APIs and all" +" API Content are protected by United States and foreign copyright, " +"trademark, and other laws. All rights in the APIs and the API Content, if " +"not expressly granted, are reserved. By using the APIs or any API Content, " +"you do not acquire ownership of any rights in the APIs or API Content. You " +"must not claim or attempt to claim ownership in the APIs or any API Content " +"or misrepresent yourself or your company or your Application as being the " +"source of any API Content. You may not modify, create derivative works of, " +"or attempt to use, license, or in any way exploit any API Content in whole " +"or in part on your own behalf or on behalf of any third party. You may not " +"distribute or modify the APIs or any API Content (including adaptation, " +"editing, excerpting, or creating derivative works)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"All names, logos and seals (\"Trademarks\") that appear in the APIs, API " +"Content, or on or through the services made available on or through the " +"APIs, if any, are the property of their respective owners. You may not " +"remove, alter, or obscure any copyright, Trademark, or other proprietary " +"rightrs notices incorporated in or accompanying the API Content. If any " +"third party revokes access to API Content owned or controlled by that third " +"party, including without limitation any Trademarks, you must ensure that all" +" API Content pertaining to that third party is deleted from your app, " +"networks, systems and servers as soon as reasonably possible. If you stop " +"using the APIs altogether or if your API access is revoked, you must delete " +"all API Content in the same way." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To the extent that you submit any content to {platform_name} in connection " +"with your use of the APIs or any API Content, you hereby grant to " +"{platform_name} a worldwide, non-exclusive, transferable, assignable, sub " +"licensable, 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 such " +"content, in whole or in part, in any form and in any media formats and " +"through any media channels (now known or hereafter developed)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Privacy" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to comply with all applicable privacy laws and regulations and to " +"be transparent with respect to any collection and use of end user data. You " +"will provide and adhere to a privacy policy for your Application that " +"clearly and accurately describes to your end users what user information you" +" collect and how you may use and share such information (including for " +"advertising) with {platform_name} and other third parties." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Right to Charge" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} reserves the right to modify the Terms at any time without " +"advance notice. Any changes to the Terms will be effective immediately upon " +"posting on this page, with an updated effective date. By accessing or using " +"the APIs after any changes have been made, you signify your agreement on a " +"prospective basis to the modified Terms and all of the changes. Be sure to " +"return to this page periodically to ensure familiarity with the most current" +" version of the Terms." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} may also update or modify the APIs from time to time without" +" advance notice. These changes may affect your use of the APIs or the way " +"your integration interacts with the API. If we make a change that is " +"unacceptable to you, you should stop using the APIs. Continued use of the " +"APIs means you accept the change." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Confidentiality" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Your credentials (such as client secret and IDs) are intended to be used " +"solely by you. You will keep your credentials confidential and discourage " +"others from using your credentials. Your credentials may not be embedded in " +"open source projects." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"In the event that {platform_name} provides you with access to information " +"specific to {platform_name} and/or the APIs that is either marked as " +"\"Confidential\" or which a reasonable person would assume to be " +"confidential or proprietary given the terms of its disclosure " +"(\"Confidential Information\"), you agree to use this information only to " +"use and build with the APIs. You may not disclose the Confidential " +"Information to anyone without {platform_name}'s prior written consent, and " +"you agree to protect the Confidential Information from unauthorized use and " +"disclosure in the same way that you would protect your own confidential " +"information. Confidential information does not include information that you " +"independently developed, that was rightfully given to you by a third party " +"without confidentiality obligation, or that becomes public through no fault " +"of your own. You may disclose Confidential Information when compelled to do " +"so by law if you provide {platform_name} with reasonable prior notice, " +"unless a court orders that {platform_name} not receive notice." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Disclaimer of Warranty / Limitation of Liabilities" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"THE APIS AND ANY INFORMATION, API CONTENT OR SERVICES MADE AVAILABLE ON OR " +"THROUGH THE APIS 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." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} AND THE {platform_name} PARTICIPANTS (AS HERINAFTER DEFINED)" +" DO NOT WARRANT THAT THE APIS WILL OPERATE IN AN UNINTERRUPTED OR ERROR-FREE" +" MANNER, THAT THE APIS ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS, OR " +"THAT THE APIS OR API CONTENT PROVIDED WILL MEET YOUR NEEDS OR EXPECTATIONS. " +"{platform_name} AND THE {platform_name} PARTICIPANTS ALSO MAKE NO WARRANTY " +"ABOUT THE ACCURACY, COMPLETENESS, TIMELINESS, OR QUALITY OF THE APIS OR ANY " +"API CONTENT, OR THAT ANY PARTICULAR API CONTENT WILL CONTINUE TO BE MADE " +"AVAILABLE. \"{platform_name} PARTICIPANTS\" MEANS MIT, HARVARD, THE OTHER " +"MEMBERS, THE ENTITIES PROVIDING INFORMATION, API CONTENT OR SERVICES FOR THE" +" APIS, THE COURSE INSTRUCTORS AND THEIR STAFFS." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"USE OF THE APIS, AND THE API CONTENT AND ANY SERVICES OBTAINED FROM OR " +"THROUGH THE APIS, IS AT YOUR OWN RISK. YOUR ACCESS TO OR DOWNLOAD OF " +"INFORMATION, MATERIALS OR DATA THROUGH THE APIS 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, UNLESS OTHERWISE EXPRESSLY " +"PROVIDED FOR IN THE {platform_name} PRIVACY POLICY." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, YOU AGREE THAT NEITHER " +"{platform_name} NOR ANY OF THE {platform_name} PARTICIPANTS WILL BE LIABLE " +"TO YOU FOR ANY LOSS OR DAMAGES, EITHER ACTUAL OR CONSEQUENTIAL, ARISING OUT " +"OF OR RELATING TO THESE TERMS, OR YOUR (OR ANY THIRD PARTY'S) USE OF OR " +"INABILITY TO USE THE APIS OR ANY API CONTENT, OR YOUR RELIANCE UPON " +"INFORMATION OBTAINED FROM OR THROUGH THE APIS, WHETHER YOUR CLAIM IS BASED " +"IN CONTRACT, TORT, STATUTORY OR OTHER LAW." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"IN PARTICULAR, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER " +"{platform_name} NOR ANY OF THE {platform_name} PARTICIPANTS WILL HAVE ANY " +"LIABILITY FOR ANY CONSEQUENTIAL, INDIRECT, PUNITIVE, SPECIAL, EXEMPLARY OR " +"INCIDENTAL DAMAGES, WHETHER FORESEEABLE OR UNFORESEEABLE AND WHETHER OR NOT " +"{platform_name} OR ANY OF THE {platform_name} 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)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"CERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE " +"EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME" +" OR ALL OF THE ABOVE DISCLAIMERS, EXCLUSIONS, OR LIMITATIONS MAY NOT APPLY " +"TO YOU, AND YOU MIGHT HAVE ADDITIONAL RIGHTS." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The APIs and API Content may include hyperlinks to sites maintained or " +"controlled by others. {platform_name} and the {platform_name} 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 " +"websites, you do so at your own risk." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To the maximum extent permitted by applicable law, you agree to defend, hold" +" harmless and indemnify {platform_name} and the {platform_name} " +"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 APIs and any API " +"Content, 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, " +"{platform_name} or one of the {platform_name} Participants will provide you " +"with written notice of such claim, suit or action." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "General Legal Terms" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The Terms constitute the entire agreement between you and {platform_name} " +"with respect to your use of the APIs and API Content, superseding any prior " +"agreements between you and {platform_name} regarding your use of the APIs " +"and API Content. The failure of {platform_name} to exercise or enforce any " +"right or provision of the Terms shall not constitute a waiver of such right " +"or provision. If any provision of the Terms 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 the Terms shall remain in full " +"force and effect. The Terms do not create any third party beneficiary rights" +" or any agency, partnership, or joint venture. For any notice provided to " +"you by {platform_name} under these Terms, {platform_name} may notify you via" +" the email address associated with your {platform_name} account." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree that the Terms, the APIs, and any claim or dispute arising out of " +"or relating to the Terms or the APIs 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). Notwithstanding the foregoing, you agree that {platform_name} shall " +"still be allowed to apply to injunctive remedies (or an equivalent type of " +"urgent legal relief) in any jursdiction." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Termination" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You may stop using the APIs at any time. You agree that {platform_name}, in " +"its sole discretion and at any time, may terminate your use of the APIs or " +"any API Content for any reason or no reason, without prior notice or " +"liabiliy." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} and the {platform_name} Participants reserve the right at " +"any time in their sole discretion to cancel, delay, reschedule or alter the " +"format of any API or API Content offered through {platform_name}, or to " +"cease providing any part or all of the APIs or API Content or related " +"services, and you agree that neither {platform_name} nor any of the " +"{platform_name} Participants will have any liability to you for such an " +"action." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Upon any termination of the Terms or discontinuation of your access to an " +"API for any reason, your right to use any API and API Content will " +"immediately cease. You will immediately stop using the APIs and delete any " +"cached or stored API Content. All provisions of the Terms that by their " +"nature should survive termination shall survive termination, including, " +"without limitation, ownership provisions, warranty disclaimers, and " +"limitation of liability. Termination of your access to and use of the APIs " +"and API Content shall not relieve you of any obligations arising or " +"accrusing prior to such termination or limit any liability that you " +"otherwise may have to {platform_name}, including without limitation any " +"indemnification obligations contained herein." +msgstr "" + #: lms/templates/calculator/toggle_calculator.html msgid "Open Calculator" msgstr "कैलक्यूलेटर खोलें" @@ -10734,24 +11277,17 @@ msgid "Auto Enroll" msgstr "खुद-ब-खुद दाखिला " #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is checked, users who have not yet registered for " -"{platform_name} will be automatically enrolled." +"If this option is {em_start}checked{em_end}, users who have not yet " +"registered for {platform_name} will be automatically enrolled." msgstr "" -"अगर यह विकल्प चुना गया, तो जिन उपयोगकर्ताओं ने {platform_name} के " -"लिए रजिस्टर नहीं किया है उनका नामांकन अपने-आप हो जाएगा। " #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is left unchecked, users who have not yet registered" -" for {platform_name} will not be enrolled, but will be allowed to enroll " -"once they make an account." +"If this option is left {em_start}unchecked{em_end}, users who have not yet " +"registered for {platform_name} will not be enrolled, but will be allowed to " +"enroll once they make an account." msgstr "" -"अगर यह विकल्प चुना नहीं गया, तो वे उपयोगकर्ता जिन्होंने अभी तक " -"{platform_name} के लिए रजिस्टर नहीं किया है वे दाखिल नहीं किये जायेंगे, " -"लेकिन खाता बनाने के बाद उन्हें नामांकन करने की अनुमति दी जायेगी।" #: lms/templates/ccx/enrollment.html #: lms/templates/instructor/instructor_dashboard_2/membership.html @@ -10764,13 +11300,10 @@ msgid "Notify users by email" msgstr "उपयोगकर्ताओं को ई-मेल से इत्तला करें" #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is checked, users will receive an email " +"If this option is {em_start}checked{em_end}, users will receive an email " "notification." msgstr "" -"अगर इस विकल्प चुना गया है , तो उपयोगकर्ताओं को ईमेल सूचना प्राप्त " -"होगी!" #: lms/templates/ccx/enrollment.html #: lms/templates/courseware/course_about.html @@ -11145,6 +11678,10 @@ msgstr "" msgid "{chapter} current chapter" msgstr "" +#: lms/templates/courseware/accordion.html +msgid "{span_start}current section{span_end}" +msgstr "" + #: lms/templates/courseware/accordion.html #: lms/templates/courseware/progress.html msgid "due {date}" @@ -11546,7 +12083,7 @@ msgid "Verification Declined" msgstr "" #: lms/templates/courseware/progress.html -msgid "Completed" +msgid "Completed by" msgstr "" #: lms/templates/courseware/progress.html @@ -11902,7 +12439,7 @@ msgstr "" #: lms/templates/dashboard/_dashboard_course_listing.html msgid "" "It's official. It's easily shareable. It's a proven motivator to complete " -"the course.
    {link_start}Learn more about the verified " +"the course. {line_break}{link_start}Learn more about the verified " "{cert_name_long}{link_end}." msgstr "" @@ -13913,6 +14450,32 @@ msgstr "" msgid "Reason" msgstr "" +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is checked, users who have not yet registered for " +"{platform_name} will be automatically enrolled." +msgstr "" +"अगर यह विकल्प चुना गया, तो जिन उपयोगकर्ताओं ने {platform_name} के " +"लिए रजिस्टर नहीं किया है उनका नामांकन अपने-आप हो जाएगा। " + +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is left unchecked, users who have not yet registered" +" for {platform_name} will not be enrolled, but will be allowed to enroll " +"once they make an account." +msgstr "" +"अगर यह विकल्प चुना नहीं गया, तो वे उपयोगकर्ता जिन्होंने अभी तक " +"{platform_name} के लिए रजिस्टर नहीं किया है वे दाखिल नहीं किये जायेंगे, " +"लेकिन खाता बनाने के बाद उन्हें नामांकन करने की अनुमति दी जायेगी।" + +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is checked, users will receive an email " +"notification." +msgstr "" +"अगर इस विकल्प चुना गया है , तो उपयोगकर्ताओं को ईमेल सूचना प्राप्त " +"होगी!" + #: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "Register/Enroll Students" msgstr "" @@ -15355,10 +15918,10 @@ msgstr "तकनीकी आवश्यकताएं" #: lms/templates/verify_student/pay_and_verify.html msgid "" -"Please make sure your browser is updated to the {a_start}most recent version" -" possible{a_end}. Also, please make sure your webcam is plugged in, " -"turned on, and allowed to function in your web browser (commonly adjustable " -"in your browser settings)." +"Please make sure your browser is updated to the {strong_start}{a_start}most " +"recent version possible{a_end}{strong_end}. Also, please make sure your " +"{strong_start}webcam is plugged in, turned on, and allowed to function in " +"your web browser (commonly adjustable in your browser settings).{strong_end}" msgstr "" #: lms/templates/verify_student/reverify.html @@ -15434,6 +15997,13 @@ msgid "" "edX and Open EdX logos are registered trademarks or trademarks of edX Inc." msgstr "" +#: themes/edx.org/lms/templates/header.html +#: themes/red-theme/lms/templates/header.html +msgid "" +"Warning: Your browser is not fully supported. We strongly " +"recommend using {chrome_link} or {ff_link}." +msgstr "" + #: themes/edx.org/lms/templates/course_modes/choose.html msgid "" "{b_start}Support our Mission: {b_end} EdX, a non-profit, relies on verified " @@ -17176,10 +17746,6 @@ msgstr "" msgid "Libraries" msgstr "" -#: cms/templates/index.html cms/templates/widgets/header.html -msgid "Programs" -msgstr "" - #: cms/templates/index.html msgid "Re-run Course" msgstr "" diff --git a/conf/locale/hi/LC_MESSAGES/djangojs.mo b/conf/locale/hi/LC_MESSAGES/djangojs.mo index d669b8453b5d588dcdeca23e997a36eadd87911d..433bda2b694a70698871cf6735216aae0dd76ade 100644 GIT binary patch delta 40 ncmZ41%(SeTX~Rc-E)!itQw2jqD+80szxCx1T=UJ!2F-y01mO$8 delta 40 ocmZ41%(SeTX~Rc-E@NF|0|i4%D`ShvzxCzdTodEX$_CAW00rd>&;S4c diff --git a/conf/locale/hi/LC_MESSAGES/djangojs.po b/conf/locale/hi/LC_MESSAGES/djangojs.po index 89d95de30a..ff7bf4070b 100644 --- a/conf/locale/hi/LC_MESSAGES/djangojs.po +++ b/conf/locale/hi/LC_MESSAGES/djangojs.po @@ -47,8 +47,8 @@ msgid "" msgstr "" "Project-Id-Version: edx-platform\n" "Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" -"POT-Creation-Date: 2016-03-30 19:38+0000\n" -"PO-Revision-Date: 2016-03-30 19:43+0000\n" +"POT-Creation-Date: 2016-04-15 11:04+0000\n" +"PO-Revision-Date: 2016-04-15 11:07+0000\n" "Last-Translator: Ned Batchelder \n" "Language-Team: Hindi (http://www.transifex.com/open-edx/edx-platform/language/hi/)\n" "MIME-Version: 1.0\n" @@ -1717,32 +1717,36 @@ msgid "Do not show again" msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Turn on closed captioning" -msgstr "" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Turn off transcript" +msgid "Transcript will be displayed when you start playing the video." msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "" -"Language: Press the UP arrow key to enter the language menu, then use UP and" -" DOWN arrow keys to navigate language options. Press ENTER to change to the " +"Activating a link in this group will skip to the corresponding point in the " +"video." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Video transcript" +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Start of transcript. Skip to the end." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "End of transcript. Skip to the start." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "" +"Language: Press the UP arrow key to enter the language menu then use UP and " +"DOWN arrow keys to navigate language options. Press ENTER to change to the " "selected language." msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Open language menu" -msgstr "" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "" -"Activating an item in this group will spool the video to the corresponding " -"time point. To skip transcript, go to previous item." -msgstr "" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "
  • Transcript will be displayed when " +msgid "Open language menu." msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js @@ -1753,6 +1757,10 @@ msgstr "" msgid "(Caption will be displayed when you start playing the video.)" msgstr "" +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Turn on closed captioning" +msgstr "" + #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "Turn on transcripts" msgstr "" @@ -2021,6 +2029,17 @@ msgstr "" msgid "Please do not use any spaces or special characters in this field." msgstr "" +#: common/static/common/js/components/views/paginated_view.js +#: common/static/common/js/components/views/paging_footer.js +msgid "Pagination" +msgstr "" + +#: common/static/common/js/components/views/paginated_view.js +msgid "" +"Your request could not be completed. Reload the page and try again. If the " +"issue persists, click the Help tab to report the problem." +msgstr "" + #: common/static/common/js/components/views/paging_header.js msgid "Showing %(first_index)s out of %(num_items)s total" msgstr "" @@ -2314,6 +2333,7 @@ msgstr "" #: lms/djangoapps/teams/static/teams/js/collections/topic.js #: lms/templates/edxnotes/tab-item.underscore +#: lms/templates/learner_dashboard/program_card.underscore msgid "name" msgstr "" @@ -2323,6 +2343,11 @@ msgstr "" msgid "team count" msgstr "" +#: lms/djangoapps/teams/static/teams/js/teams_tab_factory.js +#: lms/djangoapps/teams/static/teams/js/views/teams_tab.js +msgid "Teams" +msgstr "" + #: lms/djangoapps/teams/static/teams/js/views/edit_team.js #: cms/templates/js/certificate-editor.underscore #: cms/templates/js/content-group-editor.underscore @@ -2508,12 +2533,12 @@ msgstr[1] "" msgid "All teams" msgstr "" -#: lms/djangoapps/teams/static/teams/js/views/teams_tab.js -msgid "Topics" +#: lms/djangoapps/teams/static/teams/js/views/teams.js +msgid "Teams Pagination" msgstr "" #: lms/djangoapps/teams/static/teams/js/views/teams_tab.js -msgid "Teams" +msgid "Topics" msgstr "" #: lms/djangoapps/teams/static/teams/js/views/teams_tab.js @@ -4015,6 +4040,10 @@ msgstr "" msgid "Successfully unlinked." msgstr "" +#: lms/static/js/student_profile/views/badge_list_container.js +msgid "Accomplishments Pagination" +msgstr "" + #: lms/static/js/student_profile/views/learner_profile_factory.js msgid "{platform_name} learners can see my:" msgstr "" @@ -4069,6 +4098,18 @@ msgstr "" msgid "Profile image for {username}" msgstr "" +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "About Me" +msgstr "" + +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "Accomplishments" +msgstr "" + +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "Profile" +msgstr "" + #: lms/static/js/verify_student/views/image_input_view.js msgid "Image Upload Error" msgstr "" @@ -4559,6 +4600,10 @@ msgstr "" msgid "You must specify a name" msgstr "नाम देना आवश्यक है" +#: cms/static/js/models/course_update.js +msgid "Action required: Enter a valid date." +msgstr "" + #: cms/static/js/models/group.js msgid "Group name is required" msgstr "समूह के नाम की आवश्‍यकता है" @@ -5341,6 +5386,11 @@ msgstr "" msgid "Date" msgstr "" +#: cms/templates/js/edit-chapter.underscore +#: lms/templates/ccx/schedule.underscore +msgid "gettext(" +msgstr "" + #: cms/templates/js/paging-header.underscore #: common/static/common/templates/components/paging-footer.underscore #: common/static/common/templates/discussion/pagination.underscore @@ -5366,7 +5416,8 @@ msgid "Zoom Out" msgstr "" #: common/static/common/templates/components/paging-footer.underscore -msgid "Page number" +#, python-format +msgid "Page number out of %(total_pages)s" msgstr "" #: common/static/common/templates/components/paging-footer.underscore @@ -6020,10 +6071,6 @@ msgstr "" msgid "remove all" msgstr "" -#: lms/templates/ccx/schedule.underscore -msgid "gettext(" -msgstr "" - #: lms/templates/ccx/schedule.underscore msgid "Section" msgstr "" @@ -6342,15 +6389,9 @@ msgid "Generate Exception Certificates" msgstr "" #: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "Generate a Certificate for all " -msgstr "" - -#: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "New" -msgstr "" - -#: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "additions to the Exception list" +msgid "" +"Generate certificates for all users on the Exception list for whom " +"certificates have not yet been run" msgstr "" #: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore @@ -6580,6 +6621,24 @@ msgstr "" msgid "Valid" msgstr "" +#: lms/templates/learner_dashboard/explore_new_programs.underscore +msgid "" +"Browse recently launched courses and see what\\'s new in your favorite " +"subjects" +msgstr "" + +#: lms/templates/learner_dashboard/explore_new_programs.underscore +msgid "Explore New XSeries" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore +msgid "org.display_name" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore +msgid "type" +msgstr "" + #: lms/templates/search/course_search_results.underscore #: lms/templates/search/dashboard_search_results.underscore #, python-format @@ -6621,7 +6680,6 @@ msgid "section.title" msgstr "" #: lms/templates/student_account/account_settings.underscore -#: lms/templates/student_profile/learner_profile.underscore msgid "An error occurred. Please reload the page." msgstr "" @@ -6798,12 +6856,68 @@ msgstr "" msgid "Already have an account?" msgstr "" -#: lms/templates/student_profile/learner_profile.underscore -msgid "You are currently sharing a limited profile." +#: lms/templates/student_profile/badge.underscore +#, python-format +msgid "Share your \"%(display_name)s\" award" +msgstr "" + +#: lms/templates/student_profile/badge.underscore +msgid "Share" +msgstr "" + +#: lms/templates/student_profile/badge.underscore +#, python-format +msgid "Earned %(created)s." +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "What's Your Next Accomplishment?" +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "Start working toward your next learning goal." +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "Find a course" msgstr "" #: lms/templates/student_profile/learner_profile.underscore -msgid "This edX learner is currently sharing a limited profile." +msgid "An error occurred. Try loading the page again." +msgstr "" + +#: lms/templates/student_profile/section_two.underscore +msgid "You are currently sharing a limited profile." +msgstr "" + +#: lms/templates/student_profile/section_two.underscore +msgid "This learner is currently sharing a limited profile." +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +msgid "Share on Mozilla Backpack" +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +msgid "" +"To share your certificate on Mozilla Backpack, you must first have a " +"Backpack account. Complete the following steps to add your certificate to " +"Backpack." +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +#, python-format +msgid "" +"Create a %(link_start)sMozilla Backpack%(link_end)s account, or log in to " +"your existing account" +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +#, python-format +msgid "" +"%(download_link_start)sDownload this image (right-click or option-click, " +"save as)%(link_end)s and then %(upload_link_start)supload%(link_end)s it to " +"your backpack.
  • " msgstr "" #: lms/templates/verify_student/enrollment_confirmation_step.underscore @@ -6887,9 +7001,8 @@ msgid "Take Your Photo" msgstr "" #: lms/templates/verify_student/face_photo_step.underscore -#, python-format msgid "" -"When your face is in position, use the camera button %(icon)s below to take " +"When your face is in position, use the camera button {icon} below to take " "your photo." msgstr "" @@ -6910,10 +7023,9 @@ msgid "The photo of your face matches the photo on your ID." msgstr "" #: lms/templates/verify_student/face_photo_step.underscore -#, python-format msgid "" -"To use the current photo, select the camera button %(icon)s. To take another" -" photo, select the retake button %(icon)s." +"To use the current photo, select the camera button {icon}. To take another " +"photo, select the retake button {icon}." msgstr "" #: lms/templates/verify_student/face_photo_step.underscore @@ -6994,8 +7106,7 @@ msgid "Make sure your ID is well-lit" msgstr "" #: lms/templates/verify_student/id_photo_step.underscore -#, python-format -msgid "Once in position, use the camera button %(icon)s to capture your ID" +msgid "Once in position, use the camera button {icon} to capture your ID" msgstr "" #: lms/templates/verify_student/id_photo_step.underscore @@ -7026,8 +7137,7 @@ msgid "Be sure your entire face is inside the frame" msgstr "" #: lms/templates/verify_student/incourse_reverify.underscore -#, python-format -msgid "Once in position, use the camera button %(icon)s to capture your photo" +msgid "Once in position, use the camera button {icon} to capture your photo" msgstr "" #: lms/templates/verify_student/incourse_reverify.underscore @@ -7035,8 +7145,7 @@ msgid "Can we match the photo you took with the one on your ID?" msgstr "" #: lms/templates/verify_student/intro_step.underscore -#, python-format -msgid "Thanks for returning to verify your ID in: %(courseName)s" +msgid "Thanks for returning to verify your ID in: {courseName}" msgstr "" #: lms/templates/verify_student/intro_step.underscore @@ -7071,13 +7180,12 @@ msgid "" msgstr "" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "You are enrolling in: %(courseName)s" +#: lms/templates/verify_student/make_payment_step_ab_testing.underscore +msgid "You are enrolling in: {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "You are upgrading your enrollment for: %(courseName)s" +msgid "You are upgrading your enrollment for: {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step.underscore @@ -7119,8 +7227,7 @@ msgid "You have already verified your ID!" msgstr "" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "Your verification status is good until %(verificationGoodUntil)s." +msgid "Your verification status is good until {verificationGoodUntil}." msgstr "" #: lms/templates/verify_student/make_payment_step.underscore @@ -7132,13 +7239,7 @@ msgid "Account Not Activated" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "You are enrolling in %(courseName)s" -msgstr "" - -#: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Upgrade to a Verified Certificate for %(courseName)s" +msgid "Upgrade to a Verified Certificate for {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore @@ -7151,13 +7252,11 @@ msgid "Check your email for an activation message." msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Professional Certificate for %(courseName)s" +msgid "Professional Certificate for {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Verified Certificate for %(courseName)s" +msgid "Verified Certificate for {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore @@ -7188,8 +7287,7 @@ msgid "" msgstr "" #: lms/templates/verify_student/payment_confirmation_step.underscore -#, python-format -msgid "Thank you! We have received your payment for %(courseName)s." +msgid "Thank you! We have received your payment for {courseName}." msgstr "" #: lms/templates/verify_student/payment_confirmation_step.underscore @@ -7754,11 +7852,6 @@ msgstr "" msgid "Chapter Name" msgstr "" -#: cms/templates/js/edit-chapter.underscore -#, python-format -msgid "Chapter %s" -msgstr "" - #: cms/templates/js/edit-chapter.underscore msgid "provide the title/name of the chapter that will be used in navigating" msgstr "" @@ -7767,11 +7860,6 @@ msgstr "" msgid "Chapter Asset" msgstr "" -#: cms/templates/js/edit-chapter.underscore -#, python-format -msgid "path/to/introductionToCookieBaking-CH%d.pdf" -msgstr "" - #: cms/templates/js/edit-chapter.underscore msgid "upload a PDF file or provide the path to a Studio asset file" msgstr "" diff --git a/conf/locale/ko_KR/LC_MESSAGES/django.mo b/conf/locale/ko_KR/LC_MESSAGES/django.mo index b337dec87c77b838248fcb69a71203ee5fe35ef5..166369780c44445792f8edc18a77fa5493ce30b0 100644 GIT binary patch delta 43841 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 a>g(N&p1{ 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 Kk)vXFzy4o5pp@?b diff --git a/conf/locale/ko_KR/LC_MESSAGES/django.po b/conf/locale/ko_KR/LC_MESSAGES/django.po index c4dbfe6851..2593147a72 100644 --- a/conf/locale/ko_KR/LC_MESSAGES/django.po +++ b/conf/locale/ko_KR/LC_MESSAGES/django.po @@ -92,7 +92,7 @@ msgid "" msgstr "" "Project-Id-Version: edx-platform\n" "Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" -"POT-Creation-Date: 2016-03-30 19:39+0000\n" +"POT-Creation-Date: 2016-04-15 11:05+0000\n" "PO-Revision-Date: 2015-11-24 13:39+0000\n" "Last-Translator: Sarina Canelake \n" "Language-Team: Korean (Korea) (http://www.transifex.com/open-edx/edx-platform/language/ko_KR/)\n" @@ -312,6 +312,10 @@ msgid "" "set." msgstr "" +#: common/djangoapps/course_modes/models.py +msgid "Verified modes cannot be free." +msgstr "" + #: common/djangoapps/course_modes/models.py msgid "" "The time period before a course ends in which a course mode will expire" @@ -350,6 +354,7 @@ msgid "Student" msgstr "학습자" #: common/djangoapps/embargo/forms.py +#: lms/djangoapps/verified_track_content/forms.py msgid "COURSE NOT FOUND. Please check that the course ID is valid." msgstr "" @@ -3802,6 +3807,75 @@ msgstr "" msgid "Top num_top_words words for word cloud." msgstr "" +#: lms/djangoapps/badges/events/course_complete.py +msgid "" +"Completed the course \"{course_name}\" ({course_mode}, {start_date} - " +"{end_date})" +msgstr "" + +#: lms/djangoapps/badges/events/course_complete.py +msgid "Completed the course \"{course_name}\" ({course_mode})" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The badge image must be square." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The badge image file size must be less than 250KB." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "This value must be all lowercase." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The course mode for this badge image. For example, \"verified\" or \"honor\"." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Badge images must be square PNG files. The file size should be under 250KB." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Set this value to True if you want this image to be the default image for " +"any course modes that do not have a specified badge image. You can have only" +" one default image." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "There can be only one default image." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"On each line, put the number of completed courses to award a badge for, a " +"comma, and the slug of a badge class you have created that has the issuing " +"component 'openedx__course'. For example: 3,enrolled_3_courses" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"On each line, put the number of enrolled courses to award a badge for, a " +"comma, and the slug of a badge class you have created that has the issuing " +"component 'openedx__course'. For example: 3,enrolled_3_courses" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Each line is a comma-separated list. The first item in each line is the slug" +" of a badge class you have created that has an issuing component of " +"'openedx__course'. The remaining items in each line are the course keys the " +"learner needs to complete to be awarded the badge. For example: " +"slug_for_compsci_courses_group_badge,course-v1:CompSci+Course+First,course-v1:CompsSci+Course+Second" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "Please check the syntax of your entry." +msgstr "" + #. Translators: 'EdX', 'edX', and 'Open edX' are trademarks of 'edX Inc.'. #. Please do not translate any of these trademarks and company names. #: lms/djangoapps/branding/api.py @@ -3914,16 +3988,6 @@ msgid "" " rerun of this course in the studio to allow this action." msgstr "" -#: lms/djangoapps/certificates/badge_handler.py -msgid "" -"Completed the course \"{course_name}\" ({course_mode}, {start_date} - " -"{end_date})" -msgstr "" - -#: lms/djangoapps/certificates/badge_handler.py -msgid "Completed the course \"{course_name}\" ({course_mode})" -msgstr "" - #: wiki/admin.py wiki/models/article.py msgid "created" msgstr "생성되었습니다." @@ -3992,34 +4056,6 @@ msgstr "" msgid "The download URL for the generated certificate." msgstr "" -#: lms/djangoapps/certificates/models.py -msgid "The badge image must be square." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "The badge image file size must be less than 250KB." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "The course mode for this badge image. For example, \"verified\" or \"honor\"." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "" -"Badge images must be square PNG files. The file size should be under 250KB." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "" -"Set this value to True if you want this image to be the default image for " -"any course modes that do not have a specified badge image. You can have only" -" one default image." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "There can be only one default image." -msgstr "" - #: lms/djangoapps/certificates/models.py msgid "Name of template." msgstr "" @@ -4486,6 +4522,10 @@ msgid "" "To earn a certificate, you must complete all requirements before this date." msgstr "" +#: lms/djangoapps/courseware/date_summary.py +msgid "After this date, course content will be archived." +msgstr "" + #: lms/djangoapps/courseware/date_summary.py msgid "" "This course is archived, which means you can review course content but it is" @@ -5404,11 +5444,7 @@ msgid "" msgstr "" #: lms/djangoapps/instructor/views/api.py -msgid "Invalid Json data, Please refresh the page and then try again." -msgstr "" - -#: lms/djangoapps/instructor/views/api.py -msgid "Invalid data, user_id must be present for all certificate exceptions." +msgid "Invalid data, generate_for must be \"new\" or \"all\"." msgstr "" #: lms/djangoapps/instructor/views/api.py @@ -7053,6 +7089,10 @@ msgid "" "The user {username} is not enrolled in the course associated with this team." msgstr "" +#: lms/djangoapps/verified_track_content/models.py +msgid "The course key for the course we would like to be auto-cohorted." +msgstr "" + #: lms/djangoapps/verify_student/models.py msgid "Your {platform_name} verification has expired." msgstr "" @@ -7841,6 +7881,26 @@ msgstr "이 버전은 삭제되었습니다." msgid "Restoring to this revision will mark the article as deleted." msgstr "이 버전으로 되돌리면 글이 삭제된 것으로 표시될 것입니다." +#: openedx/core/djangoapps/api_admin/forms.py +msgid "Company Address" +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "Describe what your application does." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The URL of your company's website." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The name of your company." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The contact address of your company." +msgstr "" + #: cms/templates/index.html msgid "Denied" msgstr "거절됨" @@ -7861,6 +7921,27 @@ msgstr "" msgid "The reason this user wants to access the API." msgstr "" +#: openedx/core/djangoapps/api_admin/models.py +msgid "API access request from {company}" +msgstr "" + +#: openedx/core/djangoapps/api_admin/models.py +msgid "API access request" +msgstr "" + +#: openedx/core/djangoapps/api_admin/views.py +msgid "TODO" +msgstr "" + +#. Translators: link_start and link_end are HTML tags for a link to the terms +#. of service. +#. platform_name is the name of this Open edX installation. +#: openedx/core/djangoapps/api_admin/widgets.py +msgid "" +"I, and my company, accept the {link_start}{platform_name} API Terms of " +"Service{link_end}." +msgstr "" + #: openedx/core/djangoapps/bookmarks/views.py msgid "An error has occurred. Please try again." msgstr "" @@ -7891,6 +7972,10 @@ msgstr "" msgid "Bookmark with usage_id: {usage_id} does not exist." msgstr "" +#: openedx/core/djangoapps/course_groups/cohorts.py +msgid "Default Group" +msgstr "" + #: openedx/core/djangoapps/course_groups/cohorts.py msgid "You cannot create two cohorts with the same name" msgstr "" @@ -8127,6 +8212,14 @@ msgid "" "to retry a failing request." msgstr "" +#: openedx/core/djangoapps/programs/models.py +msgid "Do we want to show xseries program advertising" +msgstr "" + +#: openedx/core/djangoapps/programs/models.py +msgid "Do we want to show program listing page" +msgstr "" + #: openedx/core/djangoapps/self_paced/models.py msgid "Enable course home page improvements." msgstr "" @@ -8798,10 +8891,18 @@ msgstr "강좌 번호:" #: lms/templates/sysadmin_dashboard.html #: lms/templates/sysadmin_dashboard_gitlogs.html #: lms/templates/courseware/courses.html +#: themes/edx.org/lms/templates/header.html #: themes/red-theme/lms/templates/header.html msgid "Courses" msgstr "강좌" +#: cms/templates/index.html cms/templates/widgets/header.html +#: lms/templates/navigation.html lms/templates/learner_dashboard/programs.html +#: themes/edx.org/lms/templates/header.html +#: themes/red-theme/lms/templates/header.html +msgid "Programs" +msgstr "" + #: cms/templates/login.html cms/templates/widgets/header.html #: themes/red-theme/cms/templates/login.html msgid "Sign In" @@ -9229,27 +9330,23 @@ msgstr "{platform_name} 도움말" #: lms/templates/help_modal.html msgid "" -"For questions on course lectures, homework, tools, or materials for " -"this course, post in the {link_start}course discussion " -"forum{link_end}." +"For {strong_start}questions on course lectures, homework, tools, or " +"materials for this course{strong_end}, post in the {link_start}course " +"discussion forum{link_end}." msgstr "" -"이 강좌에서 강의, 과제, 도구 및 자료들에 대한 질문들은 {link_start}강좌 토론 포럼 " -"{link_end}에 게시해 주세요." #: lms/templates/help_modal.html msgid "" -"Have general questions about {platform_name}? You can find " -"lots of helpful information in the {platform_name} " +"Have {strong_start}general questions about {platform_name}{strong_end}? You " +"can find lots of helpful information in the {platform_name} " "{link_start}FAQ{link_end}." msgstr "" -"{platform_name}에 대한 일반적인 질문이 있으십니까? {platform_name} " -"{link_start}자주하는질문{link_end}에서 많은 유익한 정보를 찾을 수 있습니다." #: lms/templates/help_modal.html msgid "" -"Have a question about something specific? You can contact " -"the {platform_name} general support team directly:" -msgstr "구체적인 질문이 있으십니까? {platform_name} 지원팀에 연락하세요." +"Have a {strong_start}question about something specific{strong_end}? You can " +"contact the {platform_name} general support team directly:" +msgstr "" #: lms/templates/help_modal.html msgid "Report a problem" @@ -9320,12 +9417,10 @@ msgid "Brief description of the problem" msgstr "문제 기술" #: lms/templates/help_modal.html -msgid "Details of the problem you are encountering" -msgstr "당신이 겪는 문제의 내역" - -#: lms/templates/help_modal.html -msgid "Include error messages, steps which lead to the issue, etc." -msgstr "오류메세지, 이슈에 가는 단계 등을 포함하세요" +msgid "" +"Details of the problem you are encountering{asterisk}{begin_span}Include " +"error messages, steps which lead to the issue, etc.{end_span}" +msgstr "" #: lms/templates/help_modal.html msgid "suggestion" @@ -9511,8 +9606,6 @@ msgstr "" msgid "Account Preferences" msgstr "계정 설정" -#. Translators: provider_name is the name of an external, third-party user -#. authentication provider (like Google or LinkedIn). #: lms/templates/login.html msgid "Sign in with {provider_name}" msgstr " {provider_name}에 로그인 하세요" @@ -9686,14 +9779,10 @@ msgid "Register" msgstr "가입하기 " #: lms/templates/navigation-edx.html lms/templates/navigation.html -#: themes/edx.org/lms/templates/header.html -#: themes/red-theme/lms/templates/header.html msgid "" -"Warning: Your browser is not fully supported. We strongly " -"recommend using {chrome_link} or {ff_link}." +"{begin_strong}Warning:{end_strong} Your browser is not fully supported. We " +"strongly recommend using {chrome_link} or {ff_link}." msgstr "" -"경고: 사용하고 있는 브라우저로는 제대로 작동하지 않을 수 있습니다. {chrome_link} 이나 " -"{ff_link} 사용을 권장합니다." #: lms/templates/navigation.html themes/red-theme/lms/templates/header.html msgid "Global" @@ -9769,8 +9858,6 @@ msgstr "" msgid "The following errors occurred while processing your registration:" msgstr "가입 처리하는 동안 다음 오류가 발생하였습니다:" -#. Translators: provider_name is the name of an external, third-party user -#. authentication service (like Google or LinkedIn). #: lms/templates/register-form.html #: themes/stanford-style/lms/templates/register-form.html msgid "Sign up with {provider_name}" @@ -10360,10 +10447,6 @@ msgstr "" "더 크거나 더 작은 글꼴이 필요한 경우에 브라우저 설정을 사용하여 글자들을 키우거나 작게 할 수 있습니다. 구글 크롬에서는 ctrl +," " 또는 ctrl - 를 동시에 누르면 됩니다." -#: lms/templates/video.html -msgid "Skip to a navigable version of this video's transcript." -msgstr "동영상 자막의 조작이 가능한 버전으로 이동" - #: lms/templates/video.html msgid "Loading video player" msgstr "동영상플레이어 로딩중" @@ -10376,14 +10459,6 @@ msgstr "동영상 플레이" msgid "No playable video sources found." msgstr "재생 가능한 동영상 소스가 없습니다." -#: lms/templates/video.html -msgid "Skip to end of transcript." -msgstr "자막끝으로 이동" - -#: lms/templates/video.html -msgid "Go back to start of transcript." -msgstr "자막 처음으로 돌아 가세요." - #: lms/templates/video.html msgid "Download video" msgstr "동영상 다운로드" @@ -10404,6 +10479,476 @@ msgstr "당신의 단어들:" msgid "Total number of words:" msgstr "전체 단어수:" +#: lms/templates/api_admin/api_access_request_form.html +msgid "API Access Request" +msgstr "" + +#: lms/templates/api_admin/api_access_request_form.html +#: lms/templates/api_admin/status.html +msgid "{platform_name} API Access Request" +msgstr "" + +#: lms/templates/api_admin/api_access_request_form.html +msgid "Request API Access" +msgstr "" + +#. Translators: "platform_name" is the name of this Open edX installation. +#. "link_start" and "link_end" are the HTML for a link to the API +#. documentation. "api_support_email_link" is HTML for a link to email the API +#. support staff. +#: lms/templates/api_admin/status.html +msgid "" +"Your request to access the {platform_name} Course Catalog API is being " +"processed. You will receive a message at the email address in your profile " +"when processing is complete. You can also return to this page to see the " +"status of your API access request. To learn more about the {platform_name} " +"Course Catalog API, visit {link_start}our API documentation page{link_end}. " +"For questions about using this API, visit our FAQ page or contact " +"{api_support_email_link}." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Terms of Service for {platform_name} APIs" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Effective Date: April 12th, 2016" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Welcome to {platform_name}. Thank you for using {platform_name}'s Course " +"Discovery API and any additional APIs that we may offer from time to time " +"(collectively, the \"APIs\"). Please read these Terms of Service prior to " +"accessing or using the APIs. These Terms of Service, any additional terms " +"within accompanying API documentation, and any applicable policies and " +"guidelines that {platform_name} makes available and/or updates from time to " +"time are agreements (collectively, the \"Terms\") between you and " +"{platform_name}. By accessing or using the APIs, you accept and agree to be " +"legally bound by the Terms, whether or not you are a registered user. If you" +" do not understand or do not wish to be bound by the Terms, you should not " +"use the APIs." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "API Access" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To access the APIs, you will need to create an {platform_name} user account " +"for your application (not for personal use). This account will provide you " +"with access to our API request page at {request_url}. On that page, you must" +" complete the API request form including a description of your proposed uses" +" for the APIs. Any account and registration information that you provide to " +"{platform_name} must be accurate and up to date, and you agree to inform us " +"promptly of any changes. {platform_name} will review your API request form " +"and, upon approval in {platform_name}'s sole discretion, will provide you " +"with instructions for obtaining your API shared secret and client ID." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Permissible Use" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to use the APIs solely for the purpose of delivering content that " +"is accessed through the APIs (the \"API Content\") to your own website, " +"mobile site, app, blog, email distribution list, or social media property or" +" for another commercial use that you described in your request for access " +"and that {platform_name} has approved on a case-by-case basis. " +"{platform_name} may monitor your use of the APIs for compliance with the " +"Terms and may deny your access or shut down your integration if you try to " +"go around or exceed the requirements and limitations set by {platform_name}." +" Your Application or other approved use of the API or the API Content must " +"not prompt your end users to provide their {platform_name} username, " +"password or other {platform_name} user credentials anywhere other than the " +"{platform_name} website at {platform_url}." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Prohibited Uses and Activities" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} shall have the sole right to determine whether or not any " +"given use of the APIs is acceptable, and {platform_name} reserves the right " +"to revoke API access for any use that {platform_name} determines at any " +"time, in its sole discretion, does not benefit or serve the best interests " +"of {platform_name}, its users and its partners." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The following activities are not acceptable when using the APIs (this is not" +" an exhaustive list):" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"collecting or storing the names, passwords, or other credentials of " +"{platform_name} users;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"scraping or similar techniques to aggregate or otherwise create permanent " +"copies of API Content;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"violating, misappropriating or infringing any copyright, trademark rights, " +"rights of privacy or publicity, confidential information or any other right " +"of any third party;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"altering or removing any trademark, copyright or other proprietary or legal " +"notices contained in, or appearing on, the APIs or any API Content;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "altering or editing any content or graphics in the API Content" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"sublicensing, re-distributing, renting, selling or leasing access to the " +"APIs or your client secret to any third party;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"distributing any virus, Trojan horse, spyware, adware, malware, bot, time " +"bomb, worm, or other harmful or malicious component; or" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"using the APIs for any purpose which or might overburden, impair or disrupt " +"the {platform_name} platform, servers or networks." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Usage and Quotas" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} reserves the right, in its discretion, to impose " +"restrictions and limitations on the number and frequency of calls made by " +"you or your Application to the APIs. You must not attempt to circumvent any " +"restrictions or limitations that we impose." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Compliance" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to comply with all applicable law, regulation, and third party " +"rights (including without limitation laws regarding the import or export of " +"data or software, privacy, copyright, and local laws). You will not use the " +"APIs to encourage or promote illegal activity or violation of third party " +"rights. You will not violate any other terms of service with " +"{platform_name}. You will only access (or attempt to access) an API by the " +"means described in the documentation of that API. You will not misrepresent " +"or mask either your identity or yourApplication's identity when using the " +"APIs." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Ownership" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You acknowledge and agree that the APIs and all API Content contain valuable" +" intellectual property of {platform_name} and its partners. The APIs and all" +" API Content are protected by United States and foreign copyright, " +"trademark, and other laws. All rights in the APIs and the API Content, if " +"not expressly granted, are reserved. By using the APIs or any API Content, " +"you do not acquire ownership of any rights in the APIs or API Content. You " +"must not claim or attempt to claim ownership in the APIs or any API Content " +"or misrepresent yourself or your company or your Application as being the " +"source of any API Content. You may not modify, create derivative works of, " +"or attempt to use, license, or in any way exploit any API Content in whole " +"or in part on your own behalf or on behalf of any third party. You may not " +"distribute or modify the APIs or any API Content (including adaptation, " +"editing, excerpting, or creating derivative works)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"All names, logos and seals (\"Trademarks\") that appear in the APIs, API " +"Content, or on or through the services made available on or through the " +"APIs, if any, are the property of their respective owners. You may not " +"remove, alter, or obscure any copyright, Trademark, or other proprietary " +"rightrs notices incorporated in or accompanying the API Content. If any " +"third party revokes access to API Content owned or controlled by that third " +"party, including without limitation any Trademarks, you must ensure that all" +" API Content pertaining to that third party is deleted from your app, " +"networks, systems and servers as soon as reasonably possible. If you stop " +"using the APIs altogether or if your API access is revoked, you must delete " +"all API Content in the same way." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To the extent that you submit any content to {platform_name} in connection " +"with your use of the APIs or any API Content, you hereby grant to " +"{platform_name} a worldwide, non-exclusive, transferable, assignable, sub " +"licensable, 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 such " +"content, in whole or in part, in any form and in any media formats and " +"through any media channels (now known or hereafter developed)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Privacy" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to comply with all applicable privacy laws and regulations and to " +"be transparent with respect to any collection and use of end user data. You " +"will provide and adhere to a privacy policy for your Application that " +"clearly and accurately describes to your end users what user information you" +" collect and how you may use and share such information (including for " +"advertising) with {platform_name} and other third parties." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Right to Charge" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} reserves the right to modify the Terms at any time without " +"advance notice. Any changes to the Terms will be effective immediately upon " +"posting on this page, with an updated effective date. By accessing or using " +"the APIs after any changes have been made, you signify your agreement on a " +"prospective basis to the modified Terms and all of the changes. Be sure to " +"return to this page periodically to ensure familiarity with the most current" +" version of the Terms." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} may also update or modify the APIs from time to time without" +" advance notice. These changes may affect your use of the APIs or the way " +"your integration interacts with the API. If we make a change that is " +"unacceptable to you, you should stop using the APIs. Continued use of the " +"APIs means you accept the change." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Confidentiality" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Your credentials (such as client secret and IDs) are intended to be used " +"solely by you. You will keep your credentials confidential and discourage " +"others from using your credentials. Your credentials may not be embedded in " +"open source projects." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"In the event that {platform_name} provides you with access to information " +"specific to {platform_name} and/or the APIs that is either marked as " +"\"Confidential\" or which a reasonable person would assume to be " +"confidential or proprietary given the terms of its disclosure " +"(\"Confidential Information\"), you agree to use this information only to " +"use and build with the APIs. You may not disclose the Confidential " +"Information to anyone without {platform_name}'s prior written consent, and " +"you agree to protect the Confidential Information from unauthorized use and " +"disclosure in the same way that you would protect your own confidential " +"information. Confidential information does not include information that you " +"independently developed, that was rightfully given to you by a third party " +"without confidentiality obligation, or that becomes public through no fault " +"of your own. You may disclose Confidential Information when compelled to do " +"so by law if you provide {platform_name} with reasonable prior notice, " +"unless a court orders that {platform_name} not receive notice." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Disclaimer of Warranty / Limitation of Liabilities" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"THE APIS AND ANY INFORMATION, API CONTENT OR SERVICES MADE AVAILABLE ON OR " +"THROUGH THE APIS 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." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} AND THE {platform_name} PARTICIPANTS (AS HERINAFTER DEFINED)" +" DO NOT WARRANT THAT THE APIS WILL OPERATE IN AN UNINTERRUPTED OR ERROR-FREE" +" MANNER, THAT THE APIS ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS, OR " +"THAT THE APIS OR API CONTENT PROVIDED WILL MEET YOUR NEEDS OR EXPECTATIONS. " +"{platform_name} AND THE {platform_name} PARTICIPANTS ALSO MAKE NO WARRANTY " +"ABOUT THE ACCURACY, COMPLETENESS, TIMELINESS, OR QUALITY OF THE APIS OR ANY " +"API CONTENT, OR THAT ANY PARTICULAR API CONTENT WILL CONTINUE TO BE MADE " +"AVAILABLE. \"{platform_name} PARTICIPANTS\" MEANS MIT, HARVARD, THE OTHER " +"MEMBERS, THE ENTITIES PROVIDING INFORMATION, API CONTENT OR SERVICES FOR THE" +" APIS, THE COURSE INSTRUCTORS AND THEIR STAFFS." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"USE OF THE APIS, AND THE API CONTENT AND ANY SERVICES OBTAINED FROM OR " +"THROUGH THE APIS, IS AT YOUR OWN RISK. YOUR ACCESS TO OR DOWNLOAD OF " +"INFORMATION, MATERIALS OR DATA THROUGH THE APIS 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, UNLESS OTHERWISE EXPRESSLY " +"PROVIDED FOR IN THE {platform_name} PRIVACY POLICY." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, YOU AGREE THAT NEITHER " +"{platform_name} NOR ANY OF THE {platform_name} PARTICIPANTS WILL BE LIABLE " +"TO YOU FOR ANY LOSS OR DAMAGES, EITHER ACTUAL OR CONSEQUENTIAL, ARISING OUT " +"OF OR RELATING TO THESE TERMS, OR YOUR (OR ANY THIRD PARTY'S) USE OF OR " +"INABILITY TO USE THE APIS OR ANY API CONTENT, OR YOUR RELIANCE UPON " +"INFORMATION OBTAINED FROM OR THROUGH THE APIS, WHETHER YOUR CLAIM IS BASED " +"IN CONTRACT, TORT, STATUTORY OR OTHER LAW." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"IN PARTICULAR, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER " +"{platform_name} NOR ANY OF THE {platform_name} PARTICIPANTS WILL HAVE ANY " +"LIABILITY FOR ANY CONSEQUENTIAL, INDIRECT, PUNITIVE, SPECIAL, EXEMPLARY OR " +"INCIDENTAL DAMAGES, WHETHER FORESEEABLE OR UNFORESEEABLE AND WHETHER OR NOT " +"{platform_name} OR ANY OF THE {platform_name} 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)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"CERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE " +"EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME" +" OR ALL OF THE ABOVE DISCLAIMERS, EXCLUSIONS, OR LIMITATIONS MAY NOT APPLY " +"TO YOU, AND YOU MIGHT HAVE ADDITIONAL RIGHTS." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The APIs and API Content may include hyperlinks to sites maintained or " +"controlled by others. {platform_name} and the {platform_name} 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 " +"websites, you do so at your own risk." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To the maximum extent permitted by applicable law, you agree to defend, hold" +" harmless and indemnify {platform_name} and the {platform_name} " +"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 APIs and any API " +"Content, 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, " +"{platform_name} or one of the {platform_name} Participants will provide you " +"with written notice of such claim, suit or action." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "General Legal Terms" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The Terms constitute the entire agreement between you and {platform_name} " +"with respect to your use of the APIs and API Content, superseding any prior " +"agreements between you and {platform_name} regarding your use of the APIs " +"and API Content. The failure of {platform_name} to exercise or enforce any " +"right or provision of the Terms shall not constitute a waiver of such right " +"or provision. If any provision of the Terms 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 the Terms shall remain in full " +"force and effect. The Terms do not create any third party beneficiary rights" +" or any agency, partnership, or joint venture. For any notice provided to " +"you by {platform_name} under these Terms, {platform_name} may notify you via" +" the email address associated with your {platform_name} account." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree that the Terms, the APIs, and any claim or dispute arising out of " +"or relating to the Terms or the APIs 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). Notwithstanding the foregoing, you agree that {platform_name} shall " +"still be allowed to apply to injunctive remedies (or an equivalent type of " +"urgent legal relief) in any jursdiction." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Termination" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You may stop using the APIs at any time. You agree that {platform_name}, in " +"its sole discretion and at any time, may terminate your use of the APIs or " +"any API Content for any reason or no reason, without prior notice or " +"liabiliy." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} and the {platform_name} Participants reserve the right at " +"any time in their sole discretion to cancel, delay, reschedule or alter the " +"format of any API or API Content offered through {platform_name}, or to " +"cease providing any part or all of the APIs or API Content or related " +"services, and you agree that neither {platform_name} nor any of the " +"{platform_name} Participants will have any liability to you for such an " +"action." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Upon any termination of the Terms or discontinuation of your access to an " +"API for any reason, your right to use any API and API Content will " +"immediately cease. You will immediately stop using the APIs and delete any " +"cached or stored API Content. All provisions of the Terms that by their " +"nature should survive termination shall survive termination, including, " +"without limitation, ownership provisions, warranty disclaimers, and " +"limitation of liability. Termination of your access to and use of the APIs " +"and API Content shall not relieve you of any obligations arising or " +"accrusing prior to such termination or limit any liability that you " +"otherwise may have to {platform_name}, including without limitation any " +"indemnification obligations contained herein." +msgstr "" + #: lms/templates/calculator/toggle_calculator.html msgid "Open Calculator" msgstr "계산기 열기" @@ -10622,22 +11167,17 @@ msgid "Auto Enroll" msgstr "자동 등록" #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is checked, users who have not yet registered for " -"{platform_name} will be automatically enrolled." +"If this option is {em_start}checked{em_end}, users who have not yet " +"registered for {platform_name} will be automatically enrolled." msgstr "" -"자동 등록이 체크 되어 있으면, {platform_name}에 등록되지 않은 학습자가 자동으로 등록될 것입니다." #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is left unchecked, users who have not yet registered" -" for {platform_name} will not be enrolled, but will be allowed to enroll " -"once they make an account." +"If this option is left {em_start}unchecked{em_end}, users who have not yet " +"registered for {platform_name} will not be enrolled, but will be allowed to " +"enroll once they make an account." msgstr "" -"자동 등록이 체크되어 있지 않으면 , {platform_name}에 등록되지 않은 학습자는 등록되지 않지만, 등록이 " -"허용될 것입니다." #: lms/templates/ccx/enrollment.html #: lms/templates/instructor/instructor_dashboard_2/membership.html @@ -10650,11 +11190,10 @@ msgid "Notify users by email" msgstr "이메일로 등록에 대해 알려줍니다." #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is checked, users will receive an email " +"If this option is {em_start}checked{em_end}, users will receive an email " "notification." -msgstr "이옵션이 체크 되어 있으면, 사용자들은 이메일 통지를 받을것입니다." +msgstr "" #: lms/templates/ccx/enrollment.html #: lms/templates/courseware/course_about.html @@ -11032,6 +11571,10 @@ msgstr "" msgid "{chapter} current chapter" msgstr "" +#: lms/templates/courseware/accordion.html +msgid "{span_start}current section{span_end}" +msgstr "" + #: lms/templates/courseware/accordion.html #: lms/templates/courseware/progress.html msgid "due {date}" @@ -11440,7 +11983,7 @@ msgid "Verification Declined" msgstr "" #: lms/templates/courseware/progress.html -msgid "Completed" +msgid "Completed by" msgstr "" #: lms/templates/courseware/progress.html @@ -11787,7 +12330,7 @@ msgstr "" #: lms/templates/dashboard/_dashboard_course_listing.html msgid "" "It's official. It's easily shareable. It's a proven motivator to complete " -"the course.
    {link_start}Learn more about the verified " +"the course. {line_break}{link_start}Learn more about the verified " "{cert_name_long}{link_end}." msgstr "" @@ -13837,6 +14380,28 @@ msgstr "그러므로 충분한 이유가 제시되어야 합니다. " msgid "Reason" msgstr "이유" +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is checked, users who have not yet registered for " +"{platform_name} will be automatically enrolled." +msgstr "" +"자동 등록이 체크 되어 있으면, {platform_name}에 등록되지 않은 학습자가 자동으로 등록될 것입니다." + +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is left unchecked, users who have not yet registered" +" for {platform_name} will not be enrolled, but will be allowed to enroll " +"once they make an account." +msgstr "" +"자동 등록이 체크되어 있지 않으면 , {platform_name}에 등록되지 않은 학습자는 등록되지 않지만, 등록이 " +"허용될 것입니다." + +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is checked, users will receive an email " +"notification." +msgstr "이옵션이 체크 되어 있으면, 사용자들은 이메일 통지를 받을것입니다." + #: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "Register/Enroll Students" msgstr "등록된 학습자" @@ -15287,14 +15852,11 @@ msgstr "기술적 요구사항" #: lms/templates/verify_student/pay_and_verify.html msgid "" -"Please make sure your browser is updated to the {a_start}most recent version" -" possible{a_end}. Also, please make sure your webcam is plugged in, " -"turned on, and allowed to function in your web browser (commonly adjustable " -"in your browser settings)." +"Please make sure your browser is updated to the {strong_start}{a_start}most " +"recent version possible{a_end}{strong_end}. Also, please make sure your " +"{strong_start}webcam is plugged in, turned on, and allowed to function in " +"your web browser (commonly adjustable in your browser settings).{strong_end}" msgstr "" -"브라우저가 {a_start}가장 최신 버전{a_end}으로 업데이트 되었는지 확인하세요. 또한, 웹캠이 연결되었으며 " -"켜져있는지, 그리고 웹 브라우저에서 작동할 수 있도록 설정되어있는지(보통 브라우저의 설정에서 확인 가능) 도 확인 " -"부탁드립니다. " #: lms/templates/verify_student/reverify.html msgid "Re-Verification" @@ -15369,6 +15931,15 @@ msgid "" "edX and Open EdX logos are registered trademarks or trademarks of edX Inc." msgstr "" +#: themes/edx.org/lms/templates/header.html +#: themes/red-theme/lms/templates/header.html +msgid "" +"Warning: Your browser is not fully supported. We strongly " +"recommend using {chrome_link} or {ff_link}." +msgstr "" +"경고: 사용하고 있는 브라우저로는 제대로 작동하지 않을 수 있습니다. {chrome_link} 이나 " +"{ff_link} 사용을 권장합니다." + #: themes/edx.org/lms/templates/course_modes/choose.html msgid "" "{b_start}Support our Mission: {b_end} EdX, a non-profit, relies on verified " @@ -17196,10 +17767,6 @@ msgstr "" msgid "Libraries" msgstr "콘텐츠 보관함" -#: cms/templates/index.html cms/templates/widgets/header.html -msgid "Programs" -msgstr "" - #: cms/templates/index.html msgid "Re-run Course" msgstr "강좌 다시 시작하기" diff --git a/conf/locale/ko_KR/LC_MESSAGES/djangojs.mo b/conf/locale/ko_KR/LC_MESSAGES/djangojs.mo index 4818f2b2d205ba86d6f48163d78df9c036d6d3ef..3e283aff14e19c5038e3cbf8de7ce8c528ed5c03 100644 GIT binary patch delta 15102 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 delta 15422 zcmYk@2VhRu|Htu5Vk8o=V|z%9#@-}W?7ge@4q`+aF^k9Eo7gn=-b(CNt=grcwQ5wU z1f^$3Wb%%4*p8-joZRS_&2ct) zInLijRqHtMp^lRlS78m@jO8#1gV7b{I2EuCmcfzO26tc)OkKrs=<1Zjyx12D;8dgA z*-DU}ic6RU?_ehU12bUisuT>wbeI>_F9d5~b?X?^M884pcNRGp=O()GCHi7aH8ajA z^i#`J0`0KSQ{gxpFcCmM z{hy#WzOcSV9r(R%_o>bLYY8*dHap}&EnzU~+Lf~P^=#f0HGv59#sR4PV^C-2w)t$- zC0LG{$a-794V#l6#P*o34(nflpjRDpMpIEY(Nfe+wgz)x0_qZ7K@Ip2Q(-b{C0^nT z^s37;;~boXA@xkZU8sKh(Hqa8#=qbu(9+#Uo%vH#$9JeR@~zK(fjLnJEQK1N0%{^* zs1>M*8mAei!S<*V>yDcEMASHoQTuO4O~Ac}AT7ZeY=GZmFyHIu^8^gocOc#FU(DzwW(S9GRP~!X^1s&25S5Z=+-s8N}z$B zpl+JLW{%SvLvbapM%9P&?1W%X)EUplN_Z7@ulTj#k;KNRH|Rmsiz*Q}V$+tU{~PQ_ zUaA%Aznx$?r(GBuwKg};AY4H{1=U{YQ$ASm8ZN??ZOkk63F;E$|IBd~U=h?C@(8N_ zFU*K3+L|TLjQPk5qgJe5Th?FCcXujutwy4jd@TCmbX&g|Gmx*a?c33xJOOo}Q#QYV z>Bw)Q?xjbz{iXFC>SlJ@nd78&6X-yhP&?#94H$yzSlU_{HGy#3-V$|Bw6k`%_Or%X zM_DJKCN>*2?lP-;4S@#Uf;#iV)>GEY)*IGetj|yrc#E2F3f`w0CoSqgIZ%&hLDY$r z$Lv_c*0)3YyPZe^y`e_n7MzLSVdV~HV6Tp50AJKyn-$YzF4TS@sB2smb>L>G19w18 zte-UoHNoMi$8Q>D(euC3Hta!NiW8`TzPI(aQ3rTt+nrA40RE`{c~I>kr~_27c@xx` zcR@|0FKS|+qb|W%Ov&+`sRUZe8P+(|&A1YEldZA&F4O?~Y<>zg&^gp&cNKLB!#kUm zX@tr;AD|}k8uj9Nk6M}ktm(R#JP=b-AB1_a z5bDFG4r&EDpbp#%wSN@qghzB?{k1gXsn82%8tQ=Cth-Uyd_QW3Bewn&YM^tdOK=@^ zpkHkJbJV4Hg}OAUx|$OTM2!=IwXtkhx8t-R7)FKOSZ7gZ@GE+D>}Dnuh|$#NMjdb_ z>e4JlO=Kf##rC4!sHbiF9n{JsTc2Y&@|UPfP}tqwT%(GpGYGeNW7JIBU~}w(T8W*g z1MkEBcmg$0=^o~c!!b8`OH}`XHXn?d=seU4uS6Zsy@sGT!FF`vEi8@yU_C6^(|qe4 ziUrA+U;#XadGJ04p%YTb4A$*KlnSkDA+l9|@_|A_6 zftZZCiM%7twG2efvV-2FwZw~16SC z^b6`lpI|zC(Vz9#O#ZPQ0tT1^Wwp9cI}}9?P{vvbtC3ejKOBWia2h6HaFp5aHhKa+G9;vYLKb-MO}&vsGBwyYK6+8P9PL@ zW;IdcHAkIDN1OLTjUR*4_52UB9lT@BfzqQ6kQoCoFY>l@N?7M$PV$#l|H0;_ErL`z zb?_5Bh{f?248u%A%nPb1Rwf^Wh4lPyBdANo57-xT4fT9Ib0%RC^1G-3eTJDgVp&xF z1@iWF)?r6XJKQXJ1nN@6VO#tfYhjKN=IeJS)Nxi~5k3DtUzj&q8Eiz}88!3GSPp;0 z3g|!5%)B<1A|H+QaR;j3Thvk)A7xgsB5J8?TI-|U6HT!^wnVoEnnIu*51_8~x2S7) z26asnQP=toX2I8}Yo2bj*)J0+&yB$tgu3?iF(0-@UCLPN1k}nb7|r@?;HOk*0{V4G zI|f*Dp=MkdHL;?or=t|=%qpV>s*alIV$@9=kDBN%%#EioJw8Ak=Ot>Kzug2HDAgGA zT&6=!ARlUnqF4_@Q4<)4C2%qp!hNVSyNx>Yr>OlijWsKh7j>Y5sQx7|JAR5`8099Y zLa-UD;v?HoaGZI;bVJq0V;#JMy5_;-`F#!tU|meWQ2YN~W|3rc!R9wRX_%Alc{L{>16k}b1TKY3s1K;3$tTdfpIPpB{ zUdl1UEOlw5%4v&Q@?Vg5nez|k!RVR#tl;|3A}C13MJ$Q0@F)h)GH3n(wL|gQ=9^F> z)J-)2^Wikq#5bc4Ucgj%9o6qPrpLd~AARPS&x}Cy=lD)Afp#o|TGA@00cv3yY=CL8 z1!lwcs1L2rt>ZC(JkGifbCG|A8uxq5gg4O}pP??*AL#Za_>Z6w`pz}4+BVpQJOKw_ z_Ic*+o`hcHTkviQUOcG%=PWSa9hae&`Y>vO*Dwn{LQVW{)Qc=LH$oz9SY=f6Rt+u^Mi)`6JYX|3&SeYO#5*WJC22LA8ftVXW^a z=s*yS+TlEA#@ndp`2}jm#g^FT8q1UKwEl`U$#X9?Z^ACfzfJ-_c$GM^HidqXgRFBU;_y_&ad!-pDBdWeIYJw$f-UfA(c0#?dx}i=e z4z+*0&9`A{J^u*=I?yq!jhC?jX8qEQa`&Ggu#g#*C}D%=iLRy9ti2HWN6BI-^9?0dAv~?iK3!PPxYXnJyE4LS7wpfJpSh zQK(Bc7B$W!)c!MVzRbEBi&DP{-Rf|SKt4d-6fZCc-=UT+&svrfi(oOFgtc&w&EKF_ zB6yv7I%=RM(Ayei9gJGRk=Ci}Sbv?tLR+yJ1IhQJCUglkf!nC(_%W*gKd2?nxZd>3 zg*xCTs7qN2)i2!UpJHnAUa0W~Sck1={UfLtPleuCzo91Z9(lPrnKzgn*Q46E+58xK zk)Ohxcov)CL)65}Z!~9G3&Y8qV*#9pdi8#Vsqq^(ftKV9dM<_a0qP82pw8$$_Cdc* z=CffiYQHZ~{idKMG!ONDSco<8JnB<3V6%Bjs$md$FD#DkX#_0@60kP zSQ4W!KdwY>T<2@tirx893FZl%2xXz{)_k6Q)QQZ>QCI1)?YTGS5LP)mLbv*B;318DZTIn!c#%wsKvY01NE zUK=$|EA+?q=%eSqk8Oyt4!4d$UHi$X9TuZEuD9)5Z2fM`Nd4F7gI6#e-m*TnzOw2! zRJHq|TS0bP5sVt36l$iS7=YoZGihOMZ|!02ZyjtMjoN>*br$MG;;idYkLUgb)?W?h zsK|u3P!o8LI^%bk9n%~zHIoi#m?G zGJ)>;dZ+^oK@Btt^}Nr;oVW*r@gnLB|3LNkK59&ds?UU4;vm#Gp{NsSidC=$>XObv zR>bXWAkaXEQA_wO>Snu$TB7S%5%1YN$1zhMWG#-`uOe!knl^7>+gqa^)6TZN7wVD> zz|4C7ClYApORSr*8Tld9D>vQOW`|hR8O*?3_#Nti4{<#vqsE#4jroGI7PZ6&QSXH_ zsFk^H>z|?L^Z#!JGT>_r|(79lPL_Q>?#kt}>_1ft#Qgd27_o(-yS?{cZaQ3?(0nT7ko;d*nOR z<8>8vZ6Bld*Y_?>JPW4A3aCq16*caNGj21$6e@I0=V4adj$`ozYR9_YnH`#-4%`8C z;6A8J6=U=9sQxoiE4To)5?gG0BI>|*u>n4F6R2aQv*vHS%~1Jz)RG;+!gvq0Qa=i>s@-CpE^sjq0QV{L`{u9Nh1E;)bcJx7=QJ~F>pmwZa z>+7Rdq@B%UF@$^~mc*S{1Mi~x<-cTZ(kiGE>W7~H{%0^j02Sj<6PSnoxCH%hgRS3- zn$RKJe%`jf;!M?o1aHribU*(kFXcE`q6wDJ!pM|dU~?_Wd8V61uK$YvHIR% z{ToqH^M-j<&cf#8du;A~)BKkZpI{m4=VA*yfu%9qEwiNcu_gIfEP+2@40_!*f0Q1A zVdP0z0Sn(TUvfLU30hHc9~)zZpUptyu{?Pq)Y$eE#dr=(|u{l0M-Bgtxn=d5Ou|4@s)V)#R zH*?SQN1f>b)Qcw{ZFegs>n&^1rM zC=7dH9?Q*GlKeI5ZZ7oFOt2lQJ^_p3W6XnD{xB0RgYo1Ou`3pOWmb4HmLcDS+ws;b z)?YK5{wK?YORx|IzBa$NS3~7vun}&+fAJ6OiZ9=ofm^*b4n|F65o&^8Ss$VgdDeGk z1@d7Q@9fzI--^`26eX&$5c29bK-dGO3X%n05##usGIN&X24v3 znf78BLS75CzdMRRD=-yxphc(&ti<%V5%s3qkKyRK0l&lgi1hBfgtYJ$Fh^IpdS z{8)p{F%EC4k}W8u`E2-|ysV!8FR5H&8;{T!O8K6g$KUf}(M~bsIVmqFk+kj8AqztmLr^5c&_EGXY1=oKG73JAkTMbGz$_&aSiXQ`Xz$n@uQg|Yr zDt6Gj#BLi8qD?o}Sjy7n z&1^dz#uC&mpe*`m$D!n_DJ`kXgxV@GR$t0CN^R<1qAu+YihCG|ZoDou=q>kvJi_is z>e;yDPD|=_UudgF`#AF4l)mJ_ltAK~)UTwZC7z{zI2E3Eis$2Ru&bm3Kr=O~+~|BSMZ_&xo!)y9rEFy;JiWi!u@F6*te+)1x`ly1aha2mY^ z5o_yB`P%NSyeRDx$R`t*!!0=SqjvRKLCH?PO%6#IwSOJ$&0*H%ZZps?^cc7FbE>6*QiuQ{pbn??Sp1em& zo+UTIe-v%{M94;bhz{K;1&Mv}<4q6p1>64-9w1+fweT(K!Php9{Wg+M!^4zVJI+Sz zLi<8bulc>org!V}<5Q{&QKE@|q&%dgB%ej8$uLuK2qhy$TO~|K{Q}Bb;#`!%wk^F? z{npd2tqFB=Y<*U18O){kNhF{Fc5f|_2~n9`B4v>hVuu4h1-K2wf+B0dG_ z5J%%dn~N3XQ$ETS=BF+Z$5Kuc@3sT0?F6~D<@g)rn$1lu^|r6O7d6{Rs$*A*J`?iN zc{XJQ^;gMn5MQ(dWWl`D&7qv6^tSa;#MvlC$m>vE5JzBZ)YgLdI(~uLCQ_QE;QDVS zh~Yqg(omX`K&eArJ<2TGnb7G#yoi1WKB}uieIN46lzp^m`;oY(?URnW9Mq+^d1h=* zT~*3C;?61i@y*w>+yDP~Mnjn0Aq5>X5$hv5HE}*lP0A$lJ$9FP96;SN`i;O3+jxS4 zp*0hB#kscUhY>Oo9HMNczJ~U(4NX6Ez^2q|%TEa>j;90> zZ%`%M4BI}+N|m|i^mXR|l{av!ZG1}HisGVZOQz`mXw;grfLLERCNr5Fd0?H0m>@ccTuLPo-L!@zaxG_iKOlV#dG|>37Xmtgr3chpVdFA z`-=Q4o4Y=$pJ(GX_#J)fdiLfWjYlaBD4$U(Fq!E%9<^OH`?;MUf}bcQOogZM7C*o7 zMCR8b8#>k5`HJoL8vnNOa5}W7bSE!HpFWiR#4{*;sNYNJM0rB_u+8=aoPQ@ek0a?% z=h3*7ycurBfz)}Uww098Ha<^Wi})$+mnff7w4J3ipgs@z8RBqTU&z|XI#iw6LiDM- zgVLLwMwvS2CbqS40FI$O1EmxM@7y;uJhr0_CvI$a@+R&NOM7SXBE%DjTN9@x_R@}Qp6{J81ji`BG^U}1QX0`=9i=_- zE=qIS3*&z3`r&knwmsH;#HEM>?Z7k1r`ong>d3a$;Q8I~AKI#td;S~#;p`MmMI|aq z+5v1|CzTyU`L7gz+wM=?%Ep`N<4bv`PIfD2+j3j~qJ1*)71~|+0Q>8EXG46ig`P(OnB4rLg5UGjM1RJa&(QMyqQDcX)<7_O!)r!=wkgX#a0ydrsK;yn~U+cqf$ z@6wqhw<$R&Np#e9ka!G!LU~VFwP$8%8!vZ{*vKK>Vk4t^yShcWB4Z;4xFVxmv3(*3 zxq8P8931T$8ri?UYf$vSf&HnCa1Dv<88Ofm%fBQ&2FAoh&=%EG`^QEOh;T&@jEssc z;c7k5HK<=?v@15IThyQ)F_F=+#az8T`$fk@42c{#c#!8?Tef)FQm)dK zL(5j0zj9vQ|E1;1?m0CtiT=h>SaKfxY0 bdHLa_Rm)u*GkHQn^3nw*Tzh_sOB?ZjT*J\n" "Language-Team: Korean (Korea) (http://www.transifex.com/open-edx/edx-platform/language/ko_KR/)\n" "MIME-Version: 1.0\n" @@ -1708,32 +1708,36 @@ msgid "Do not show again" msgstr "다시 재생하지 말기" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Turn on closed captioning" -msgstr "" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Turn off transcript" +msgid "Transcript will be displayed when you start playing the video." msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "" -"Language: Press the UP arrow key to enter the language menu, then use UP and" -" DOWN arrow keys to navigate language options. Press ENTER to change to the " +"Activating a link in this group will skip to the corresponding point in the " +"video." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Video transcript" +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Start of transcript. Skip to the end." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "End of transcript. Skip to the start." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "" +"Language: Press the UP arrow key to enter the language menu then use UP and " +"DOWN arrow keys to navigate language options. Press ENTER to change to the " "selected language." msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Open language menu" -msgstr "" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "" -"Activating an item in this group will spool the video to the corresponding " -"time point. To skip transcript, go to previous item." -msgstr "이 그룹의 항목 활성화가 일치하는 시간 지점에 동영상을 스풀할 것입니다. 자막을 넘기려면, 이전 항목으로 가세요. " - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "
  • Transcript will be displayed when " +msgid "Open language menu." msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js @@ -1744,6 +1748,10 @@ msgstr "" msgid "(Caption will be displayed when you start playing the video.)" msgstr "" +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Turn on closed captioning" +msgstr "" + #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "Turn on transcripts" msgstr "" @@ -1998,6 +2006,17 @@ msgstr "" msgid "Please do not use any spaces or special characters in this field." msgstr "" +#: common/static/common/js/components/views/paginated_view.js +#: common/static/common/js/components/views/paging_footer.js +msgid "Pagination" +msgstr "" + +#: common/static/common/js/components/views/paginated_view.js +msgid "" +"Your request could not be completed. Reload the page and try again. If the " +"issue persists, click the Help tab to report the problem." +msgstr "" + #: common/static/common/js/components/views/paging_header.js msgid "Showing %(first_index)s out of %(num_items)s total" msgstr "총 %(num_items)s개 중 %(first_index)s 보기" @@ -2272,6 +2291,7 @@ msgstr "" #: lms/djangoapps/teams/static/teams/js/collections/topic.js #: lms/templates/edxnotes/tab-item.underscore +#: lms/templates/learner_dashboard/program_card.underscore msgid "name" msgstr "이름" @@ -2281,6 +2301,11 @@ msgstr "이름" msgid "team count" msgstr "팀 인원 수" +#: lms/djangoapps/teams/static/teams/js/teams_tab_factory.js +#: lms/djangoapps/teams/static/teams/js/views/teams_tab.js +msgid "Teams" +msgstr "팀" + #: lms/djangoapps/teams/static/teams/js/views/edit_team.js #: cms/templates/js/certificate-editor.underscore #: cms/templates/js/content-group-editor.underscore @@ -2463,13 +2488,13 @@ msgstr[0] "" msgid "All teams" msgstr "" -#: lms/djangoapps/teams/static/teams/js/views/teams_tab.js -msgid "Topics" +#: lms/djangoapps/teams/static/teams/js/views/teams.js +msgid "Teams Pagination" msgstr "" #: lms/djangoapps/teams/static/teams/js/views/teams_tab.js -msgid "Teams" -msgstr "팀" +msgid "Topics" +msgstr "" #: lms/djangoapps/teams/static/teams/js/views/teams_tab.js msgid "" @@ -3955,6 +3980,10 @@ msgstr "연결하기" msgid "Successfully unlinked." msgstr "성공적 연결이 해제되었습니다." +#: lms/static/js/student_profile/views/badge_list_container.js +msgid "Accomplishments Pagination" +msgstr "" + #: lms/static/js/student_profile/views/learner_profile_factory.js msgid "{platform_name} learners can see my:" msgstr "{platform_name} 학습자가 나에 대해 볼 수 있는 것은 :" @@ -4013,6 +4042,18 @@ msgstr "프로필 이미지" msgid "Profile image for {username}" msgstr "{username}의 프로필 이미지" +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "About Me" +msgstr "" + +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "Accomplishments" +msgstr "" + +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "Profile" +msgstr "" + #: lms/static/js/verify_student/views/image_input_view.js msgid "Image Upload Error" msgstr "이미지 업로드 오류" @@ -4494,6 +4535,10 @@ msgstr "" msgid "You must specify a name" msgstr "이름을 명시해야 합니다." +#: cms/static/js/models/course_update.js +msgid "Action required: Enter a valid date." +msgstr "" + #: cms/static/js/models/group.js msgid "Group name is required" msgstr "" @@ -5264,6 +5309,11 @@ msgstr "" msgid "Date" msgstr "날짜" +#: cms/templates/js/edit-chapter.underscore +#: lms/templates/ccx/schedule.underscore +msgid "gettext(" +msgstr "" + #: cms/templates/js/paging-header.underscore #: common/static/common/templates/components/paging-footer.underscore #: common/static/common/templates/discussion/pagination.underscore @@ -5289,7 +5339,8 @@ msgid "Zoom Out" msgstr "" #: common/static/common/templates/components/paging-footer.underscore -msgid "Page number" +#, python-format +msgid "Page number out of %(total_pages)s" msgstr "" #: common/static/common/templates/components/paging-footer.underscore @@ -5942,10 +5993,6 @@ msgstr "" msgid "remove all" msgstr "" -#: lms/templates/ccx/schedule.underscore -msgid "gettext(" -msgstr "" - #: lms/templates/ccx/schedule.underscore msgid "Section" msgstr "" @@ -6264,15 +6311,9 @@ msgid "Generate Exception Certificates" msgstr "" #: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "Generate a Certificate for all " -msgstr "" - -#: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "New" -msgstr "" - -#: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "additions to the Exception list" +msgid "" +"Generate certificates for all users on the Exception list for whom " +"certificates have not yet been run" msgstr "" #: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore @@ -6501,6 +6542,24 @@ msgstr "" msgid "Valid" msgstr "" +#: lms/templates/learner_dashboard/explore_new_programs.underscore +msgid "" +"Browse recently launched courses and see what\\'s new in your favorite " +"subjects" +msgstr "" + +#: lms/templates/learner_dashboard/explore_new_programs.underscore +msgid "Explore New XSeries" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore +msgid "org.display_name" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore +msgid "type" +msgstr "" + #: lms/templates/search/course_search_results.underscore #: lms/templates/search/dashboard_search_results.underscore #, python-format @@ -6541,7 +6600,6 @@ msgid "section.title" msgstr "" #: lms/templates/student_account/account_settings.underscore -#: lms/templates/student_profile/learner_profile.underscore msgid "An error occurred. Please reload the page." msgstr "" @@ -6718,12 +6776,68 @@ msgstr "필수 항목" msgid "Already have an account?" msgstr "" -#: lms/templates/student_profile/learner_profile.underscore -msgid "You are currently sharing a limited profile." +#: lms/templates/student_profile/badge.underscore +#, python-format +msgid "Share your \"%(display_name)s\" award" +msgstr "" + +#: lms/templates/student_profile/badge.underscore +msgid "Share" +msgstr "" + +#: lms/templates/student_profile/badge.underscore +#, python-format +msgid "Earned %(created)s." +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "What's Your Next Accomplishment?" +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "Start working toward your next learning goal." +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "Find a course" msgstr "" #: lms/templates/student_profile/learner_profile.underscore -msgid "This edX learner is currently sharing a limited profile." +msgid "An error occurred. Try loading the page again." +msgstr "" + +#: lms/templates/student_profile/section_two.underscore +msgid "You are currently sharing a limited profile." +msgstr "" + +#: lms/templates/student_profile/section_two.underscore +msgid "This learner is currently sharing a limited profile." +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +msgid "Share on Mozilla Backpack" +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +msgid "" +"To share your certificate on Mozilla Backpack, you must first have a " +"Backpack account. Complete the following steps to add your certificate to " +"Backpack." +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +#, python-format +msgid "" +"Create a %(link_start)sMozilla Backpack%(link_end)s account, or log in to " +"your existing account" +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +#, python-format +msgid "" +"%(download_link_start)sDownload this image (right-click or option-click, " +"save as)%(link_end)s and then %(upload_link_start)supload%(link_end)s it to " +"your backpack.
  • " msgstr "" #: lms/templates/verify_student/enrollment_confirmation_step.underscore @@ -6807,9 +6921,8 @@ msgid "Take Your Photo" msgstr "" #: lms/templates/verify_student/face_photo_step.underscore -#, python-format msgid "" -"When your face is in position, use the camera button %(icon)s below to take " +"When your face is in position, use the camera button {icon} below to take " "your photo." msgstr "" @@ -6830,10 +6943,9 @@ msgid "The photo of your face matches the photo on your ID." msgstr "" #: lms/templates/verify_student/face_photo_step.underscore -#, python-format msgid "" -"To use the current photo, select the camera button %(icon)s. To take another" -" photo, select the retake button %(icon)s." +"To use the current photo, select the camera button {icon}. To take another " +"photo, select the retake button {icon}." msgstr "" #: lms/templates/verify_student/face_photo_step.underscore @@ -6914,8 +7026,7 @@ msgid "Make sure your ID is well-lit" msgstr "" #: lms/templates/verify_student/id_photo_step.underscore -#, python-format -msgid "Once in position, use the camera button %(icon)s to capture your ID" +msgid "Once in position, use the camera button {icon} to capture your ID" msgstr "" #: lms/templates/verify_student/id_photo_step.underscore @@ -6946,8 +7057,7 @@ msgid "Be sure your entire face is inside the frame" msgstr "" #: lms/templates/verify_student/incourse_reverify.underscore -#, python-format -msgid "Once in position, use the camera button %(icon)s to capture your photo" +msgid "Once in position, use the camera button {icon} to capture your photo" msgstr "" #: lms/templates/verify_student/incourse_reverify.underscore @@ -6955,8 +7065,7 @@ msgid "Can we match the photo you took with the one on your ID?" msgstr "" #: lms/templates/verify_student/intro_step.underscore -#, python-format -msgid "Thanks for returning to verify your ID in: %(courseName)s" +msgid "Thanks for returning to verify your ID in: {courseName}" msgstr "" #: lms/templates/verify_student/intro_step.underscore @@ -6991,13 +7100,12 @@ msgid "" msgstr "" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "You are enrolling in: %(courseName)s" +#: lms/templates/verify_student/make_payment_step_ab_testing.underscore +msgid "You are enrolling in: {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "You are upgrading your enrollment for: %(courseName)s" +msgid "You are upgrading your enrollment for: {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step.underscore @@ -7039,8 +7147,7 @@ msgid "You have already verified your ID!" msgstr "" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "Your verification status is good until %(verificationGoodUntil)s." +msgid "Your verification status is good until {verificationGoodUntil}." msgstr "" #: lms/templates/verify_student/make_payment_step.underscore @@ -7052,13 +7159,7 @@ msgid "Account Not Activated" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "You are enrolling in %(courseName)s" -msgstr "" - -#: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Upgrade to a Verified Certificate for %(courseName)s" +msgid "Upgrade to a Verified Certificate for {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore @@ -7071,13 +7172,11 @@ msgid "Check your email for an activation message." msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Professional Certificate for %(courseName)s" +msgid "Professional Certificate for {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Verified Certificate for %(courseName)s" +msgid "Verified Certificate for {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore @@ -7108,8 +7207,7 @@ msgid "" msgstr "" #: lms/templates/verify_student/payment_confirmation_step.underscore -#, python-format -msgid "Thank you! We have received your payment for %(courseName)s." +msgid "Thank you! We have received your payment for {courseName}." msgstr "" #: lms/templates/verify_student/payment_confirmation_step.underscore @@ -7674,11 +7772,6 @@ msgstr "" msgid "Chapter Name" msgstr "" -#: cms/templates/js/edit-chapter.underscore -#, python-format -msgid "Chapter %s" -msgstr "" - #: cms/templates/js/edit-chapter.underscore msgid "provide the title/name of the chapter that will be used in navigating" msgstr "" @@ -7687,11 +7780,6 @@ msgstr "" msgid "Chapter Asset" msgstr "" -#: cms/templates/js/edit-chapter.underscore -#, python-format -msgid "path/to/introductionToCookieBaking-CH%d.pdf" -msgstr "" - #: cms/templates/js/edit-chapter.underscore msgid "upload a PDF file or provide the path to a Studio asset file" msgstr "" diff --git a/conf/locale/pt_BR/LC_MESSAGES/django.mo b/conf/locale/pt_BR/LC_MESSAGES/django.mo index d0d4343eb26fcacb2d2c4024634edd9f70814ce9..e183255df1343519e22efe95618636cf4c980f68 100644 GIT binary patch delta 79197 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 diff --git a/conf/locale/pt_BR/LC_MESSAGES/django.po b/conf/locale/pt_BR/LC_MESSAGES/django.po index 08b01a7f15..9129ade5bb 100644 --- a/conf/locale/pt_BR/LC_MESSAGES/django.po +++ b/conf/locale/pt_BR/LC_MESSAGES/django.po @@ -252,7 +252,7 @@ msgid "" msgstr "" "Project-Id-Version: edx-platform\n" "Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" -"POT-Creation-Date: 2016-03-30 19:39+0000\n" +"POT-Creation-Date: 2016-04-15 11:05+0000\n" "PO-Revision-Date: 2016-01-19 18:08+0000\n" "Last-Translator: Monica Farias \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/open-edx/edx-platform/language/pt_BR/)\n" @@ -513,6 +513,10 @@ msgid "" "set." msgstr "Modos de educação profissional não podem ter definição de fim_data." +#: common/djangoapps/course_modes/models.py +msgid "Verified modes cannot be free." +msgstr "" + #: common/djangoapps/course_modes/models.py msgid "" "The time period before a course ends in which a course mode will expire" @@ -554,6 +558,7 @@ msgid "Student" msgstr "Aluno" #: common/djangoapps/embargo/forms.py +#: lms/djangoapps/verified_track_content/forms.py msgid "COURSE NOT FOUND. Please check that the course ID is valid." msgstr "" "CURSO NÃO ENCONTRADO. Por favor, verifique se a identificação do curso está " @@ -4514,6 +4519,82 @@ msgstr "Todas as palavras possíveis dos alunos." msgid "Top num_top_words words for word cloud." msgstr "O máximo de palavras num_max_palavras para uma nuvem de palavras." +#: lms/djangoapps/badges/events/course_complete.py +msgid "" +"Completed the course \"{course_name}\" ({course_mode}, {start_date} - " +"{end_date})" +msgstr "" +"Concluído o curso \"{course_name}\" ({course_mode}, {start_date} - " +"{end_date})" + +#: lms/djangoapps/badges/events/course_complete.py +msgid "Completed the course \"{course_name}\" ({course_mode})" +msgstr "Concluído o curso \"{course_name}\" ({course_mode})" + +#: lms/djangoapps/badges/models.py +msgid "The badge image must be square." +msgstr "A imagem do emblema deve ser quadrada." + +#: lms/djangoapps/badges/models.py +msgid "The badge image file size must be less than 250KB." +msgstr "O arquivo de imagem do crachá deve ser menor que 250KB." + +#: lms/djangoapps/badges/models.py +msgid "This value must be all lowercase." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The course mode for this badge image. For example, \"verified\" or \"honor\"." +msgstr "Módulo do curso para este emblema. Por exemplo, \"comprovado\" ou \"honra\"." + +#: lms/djangoapps/badges/models.py +msgid "" +"Badge images must be square PNG files. The file size should be under 250KB." +msgstr "" +"As imagens de crachás devem ser arquivos PNG quadrados. O tamanho do arquivo" +" deve ser menor que 250KB." + +#: lms/djangoapps/badges/models.py +msgid "" +"Set this value to True if you want this image to be the default image for " +"any course modes that do not have a specified badge image. You can have only" +" one default image." +msgstr "" +"Configure este valor para Verdadeiro se você deseja que esta imagem seja a " +"padrão para quaisquer modos de cursos que não possuam emblema específico. " +"Você só pode ter apenas uma imagem padrão." + +#: lms/djangoapps/badges/models.py +msgid "There can be only one default image." +msgstr "Pode haver apenas uma imagem padrão." + +#: lms/djangoapps/badges/models.py +msgid "" +"On each line, put the number of completed courses to award a badge for, a " +"comma, and the slug of a badge class you have created that has the issuing " +"component 'openedx__course'. For example: 3,enrolled_3_courses" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"On each line, put the number of enrolled courses to award a badge for, a " +"comma, and the slug of a badge class you have created that has the issuing " +"component 'openedx__course'. For example: 3,enrolled_3_courses" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Each line is a comma-separated list. The first item in each line is the slug" +" of a badge class you have created that has an issuing component of " +"'openedx__course'. The remaining items in each line are the course keys the " +"learner needs to complete to be awarded the badge. For example: " +"slug_for_compsci_courses_group_badge,course-v1:CompSci+Course+First,course-v1:CompsSci+Course+Second" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "Please check the syntax of your entry." +msgstr "" + #. Translators: 'EdX', 'edX', and 'Open edX' are trademarks of 'edX Inc.'. #. Please do not translate any of these trademarks and company names. #: lms/djangoapps/branding/api.py @@ -4637,18 +4718,6 @@ msgstr "" "Você não pode criar um CCX de um curso usando uma identificação expirada. " "Por favor crie uma reprise deste curso no estúdio para permitir essa ação." -#: lms/djangoapps/certificates/badge_handler.py -msgid "" -"Completed the course \"{course_name}\" ({course_mode}, {start_date} - " -"{end_date})" -msgstr "" -"Concluído o curso \"{course_name}\" ({course_mode}, {start_date} - " -"{end_date})" - -#: lms/djangoapps/certificates/badge_handler.py -msgid "Completed the course \"{course_name}\" ({course_mode})" -msgstr "Concluído o curso \"{course_name}\" ({course_mode})" - #: lms/djangoapps/certificates/models.py wiki/admin.py wiki/models/article.py msgid "created" msgstr "criado" @@ -4725,39 +4794,6 @@ msgstr "Ocorreu um erro durante o processamento do certificado." msgid "The download URL for the generated certificate." msgstr "A url para baixar o certificado gerado." -#: lms/djangoapps/certificates/models.py -msgid "The badge image must be square." -msgstr "A imagem do emblema deve ser quadrada." - -#: lms/djangoapps/certificates/models.py -msgid "The badge image file size must be less than 250KB." -msgstr "O arquivo de imagem do crachá deve ser menor que 250KB." - -#: lms/djangoapps/certificates/models.py -msgid "The course mode for this badge image. For example, \"verified\" or \"honor\"." -msgstr "Módulo do curso para este emblema. Por exemplo, \"comprovado\" ou \"honra\"." - -#: lms/djangoapps/certificates/models.py -msgid "" -"Badge images must be square PNG files. The file size should be under 250KB." -msgstr "" -"As imagens de crachás devem ser arquivos PNG quadrados. O tamanho do arquivo" -" deve ser menor que 250KB." - -#: lms/djangoapps/certificates/models.py -msgid "" -"Set this value to True if you want this image to be the default image for " -"any course modes that do not have a specified badge image. You can have only" -" one default image." -msgstr "" -"Configure este valor para Verdadeiro se você deseja que esta imagem seja a " -"padrão para quaisquer modos de cursos que não possuam emblema específico. " -"Você só pode ter apenas uma imagem padrão." - -#: lms/djangoapps/certificates/models.py -msgid "There can be only one default image." -msgstr "Pode haver apenas uma imagem padrão." - #: lms/djangoapps/certificates/models.py msgid "Name of template." msgstr "Nome de modelo" @@ -5270,6 +5306,10 @@ msgstr "" "Para ganhar um certificado, você deve preencher todos os requisitos antes " "desta data." +#: lms/djangoapps/courseware/date_summary.py +msgid "After this date, course content will be archived." +msgstr "" + #: lms/djangoapps/courseware/date_summary.py msgid "" "This course is archived, which means you can review course content but it is" @@ -6325,16 +6365,8 @@ msgstr "" "tente novamente." #: lms/djangoapps/instructor/views/api.py -msgid "Invalid Json data, Please refresh the page and then try again." +msgid "Invalid data, generate_for must be \"new\" or \"all\"." msgstr "" -"Dados Json inválidos. Por favor, recarregue a página e então tente " -"novamente." - -#: lms/djangoapps/instructor/views/api.py -msgid "Invalid data, user_id must be present for all certificate exceptions." -msgstr "" -"Dados inválidos, a identificação_usuário deve constar para todas as exceções" -" de certificado" #: lms/djangoapps/instructor/views/api.py msgid "Certificate generation started for white listed students." @@ -6691,6 +6723,7 @@ msgid "Last Name" msgstr "Sobrenome" #: lms/djangoapps/instructor_task/tasks_helper.py +#: openedx/core/djangoapps/api_admin/forms.py #: lms/templates/shoppingcart/receipt.html msgid "Company Name" msgstr "Nome da Empresa" @@ -8275,6 +8308,10 @@ msgid "" msgstr "" "O usuário {username} não está inscrito no curso relacionado com esta equipe." +#: lms/djangoapps/verified_track_content/models.py +msgid "The course key for the course we would like to be auto-cohorted." +msgstr "" + #: lms/djangoapps/verify_student/models.py msgid "Your {platform_name} verification has expired." msgstr "A sua verificação de {platform_name} expirou." @@ -9100,6 +9137,26 @@ msgstr "Esta revisão foi excluída." msgid "Restoring to this revision will mark the article as deleted." msgstr "A restauração desta versão marcará o artigo como excluído." +#: openedx/core/djangoapps/api_admin/forms.py +msgid "Company Address" +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "Describe what your application does." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The URL of your company's website." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The name of your company." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The contact address of your company." +msgstr "" + #: cms/templates/index.html msgid "Denied" msgstr "Recusado" @@ -9120,6 +9177,27 @@ msgstr "" msgid "The reason this user wants to access the API." msgstr "" +#: openedx/core/djangoapps/api_admin/models.py +msgid "API access request from {company}" +msgstr "" + +#: openedx/core/djangoapps/api_admin/models.py +msgid "API access request" +msgstr "" + +#: openedx/core/djangoapps/api_admin/views.py +msgid "TODO" +msgstr "" + +#. Translators: link_start and link_end are HTML tags for a link to the terms +#. of service. +#. platform_name is the name of this Open edX installation. +#: openedx/core/djangoapps/api_admin/widgets.py +msgid "" +"I, and my company, accept the {link_start}{platform_name} API Terms of " +"Service{link_end}." +msgstr "" + #: openedx/core/djangoapps/bookmarks/views.py msgid "An error has occurred. Please try again." msgstr "Ocorreu um erro. Tente novamente." @@ -9152,6 +9230,10 @@ msgstr "" msgid "Bookmark with usage_id: {usage_id} does not exist." msgstr "O indicador com id_uso : {usage_id} não existe" +#: openedx/core/djangoapps/course_groups/cohorts.py +msgid "Default Group" +msgstr "" + #: openedx/core/djangoapps/course_groups/cohorts.py msgid "You cannot create two cohorts with the same name" msgstr "Você não pode criar dois grupos com o mesmo nome" @@ -9420,6 +9502,14 @@ msgid "" "to retry a failing request." msgstr "" +#: openedx/core/djangoapps/programs/models.py +msgid "Do we want to show xseries program advertising" +msgstr "" + +#: openedx/core/djangoapps/programs/models.py +msgid "Do we want to show program listing page" +msgstr "" + #: openedx/core/djangoapps/self_paced/models.py msgid "Enable course home page improvements." msgstr "Ativar Melhorias na Home Page do curso" @@ -10157,10 +10247,18 @@ msgstr "Número do curso:" #: lms/templates/sysadmin_dashboard.html #: lms/templates/sysadmin_dashboard_gitlogs.html #: lms/templates/courseware/courses.html +#: themes/edx.org/lms/templates/header.html #: themes/red-theme/lms/templates/header.html msgid "Courses" msgstr "Cursos" +#: cms/templates/index.html cms/templates/widgets/header.html +#: lms/templates/navigation.html lms/templates/learner_dashboard/programs.html +#: themes/edx.org/lms/templates/header.html +#: themes/red-theme/lms/templates/header.html +msgid "Programs" +msgstr "" + #: cms/templates/login.html cms/templates/widgets/header.html #: themes/red-theme/cms/templates/login.html msgid "Sign In" @@ -10592,31 +10690,23 @@ msgstr "Ajuda do {platform_name}" #: lms/templates/help_modal.html msgid "" -"For questions on course lectures, homework, tools, or materials for " -"this course, post in the {link_start}course discussion " -"forum{link_end}." +"For {strong_start}questions on course lectures, homework, tools, or " +"materials for this course{strong_end}, post in the {link_start}course " +"discussion forum{link_end}." msgstr "" -"Para fazer perguntas sobre as aulas, o dever de casa, as ferramentas" -" ou materiais para este curso, publique um comentário no " -"{link_start}fórum de discussão do curso{link_end}." #: lms/templates/help_modal.html msgid "" -"Have general questions about {platform_name}? You can find " -"lots of helpful information in the {platform_name} " +"Have {strong_start}general questions about {platform_name}{strong_end}? You " +"can find lots of helpful information in the {platform_name} " "{link_start}FAQ{link_end}." msgstr "" -"Você tem perguntas generalizadas sobre {platform_name}? " -"Você pode encontrar várias informações úteis na página de " -"{link_start}Perguntas Frequentes{link_end} do {platform_name}." #: lms/templates/help_modal.html msgid "" -"Have a question about something specific? You can contact " -"the {platform_name} general support team directly:" +"Have a {strong_start}question about something specific{strong_end}? You can " +"contact the {platform_name} general support team directly:" msgstr "" -"Caso tenha perguntas mais específicas, entre em contato " -"diretamente com a equipe de suporte geral do {platform_name}:" #: lms/templates/help_modal.html msgid "Report a problem" @@ -10690,12 +10780,10 @@ msgid "Brief description of the problem" msgstr "Descrição sucinta do problema" #: lms/templates/help_modal.html -msgid "Details of the problem you are encountering" -msgstr "Detalhes do problema encontrado" - -#: lms/templates/help_modal.html -msgid "Include error messages, steps which lead to the issue, etc." -msgstr "Inclua mensagens de erro, passos para reproduzir o problema, etc." +msgid "" +"Details of the problem you are encountering{asterisk}{begin_span}Include " +"error messages, steps which lead to the issue, etc.{end_span}" +msgstr "" #: lms/templates/help_modal.html msgid "suggestion" @@ -10896,8 +10984,6 @@ msgstr "" msgid "Account Preferences" msgstr "Preferências da conta" -#. Translators: provider_name is the name of an external, third-party user -#. authentication provider (like Google or LinkedIn). #: lms/templates/login.html msgid "Sign in with {provider_name}" msgstr "Entrar com {provider_name}" @@ -11074,14 +11160,10 @@ msgid "Register" msgstr "Registre-se" #: lms/templates/navigation-edx.html lms/templates/navigation.html -#: themes/edx.org/lms/templates/header.html -#: themes/red-theme/lms/templates/header.html msgid "" -"Warning: Your browser is not fully supported. We strongly " -"recommend using {chrome_link} or {ff_link}." +"{begin_strong}Warning:{end_strong} Your browser is not fully supported. We " +"strongly recommend using {chrome_link} or {ff_link}." msgstr "" -"Aviso: Seu navegador não é totalmente suportado. " -"Recomendamos o uso do {chrome_link} ou {ff_link}." #: lms/templates/navigation.html themes/red-theme/lms/templates/header.html msgid "Global" @@ -11160,8 +11242,6 @@ msgstr "" msgid "The following errors occurred while processing your registration:" msgstr "Os seguintes erros ocorreram ao processar a sua inscrição:" -#. Translators: provider_name is the name of an external, third-party user -#. authentication service (like Google or LinkedIn). #: lms/templates/register-form.html #: themes/stanford-style/lms/templates/register-form.html msgid "Sign up with {provider_name}" @@ -11778,10 +11858,6 @@ msgstr "" "pressionar as teclas ctrl e o sinal de mais ou ctrl e o sinal de menos " "simultaneamente. " -#: lms/templates/video.html -msgid "Skip to a navigable version of this video's transcript." -msgstr "Pular para a versão navegável da transcrição deste vídeo" - #: lms/templates/video.html msgid "Loading video player" msgstr "Carregando o reprodutor de vídeo" @@ -11794,14 +11870,6 @@ msgstr "Reproduzir vídeo" msgid "No playable video sources found." msgstr "Não foram encontradas fontes de vídeos reproduzíveis!" -#: lms/templates/video.html -msgid "Skip to end of transcript." -msgstr "Pular para o final da transcrição" - -#: lms/templates/video.html -msgid "Go back to start of transcript." -msgstr "Voltar para o início da transcrição." - #: lms/templates/video.html msgid "Download video" msgstr "Baixar vídeo" @@ -11822,6 +11890,476 @@ msgstr "As suas palavras:" msgid "Total number of words:" msgstr "Número total de palavras:" +#: lms/templates/api_admin/api_access_request_form.html +msgid "API Access Request" +msgstr "" + +#: lms/templates/api_admin/api_access_request_form.html +#: lms/templates/api_admin/status.html +msgid "{platform_name} API Access Request" +msgstr "" + +#: lms/templates/api_admin/api_access_request_form.html +msgid "Request API Access" +msgstr "" + +#. Translators: "platform_name" is the name of this Open edX installation. +#. "link_start" and "link_end" are the HTML for a link to the API +#. documentation. "api_support_email_link" is HTML for a link to email the API +#. support staff. +#: lms/templates/api_admin/status.html +msgid "" +"Your request to access the {platform_name} Course Catalog API is being " +"processed. You will receive a message at the email address in your profile " +"when processing is complete. You can also return to this page to see the " +"status of your API access request. To learn more about the {platform_name} " +"Course Catalog API, visit {link_start}our API documentation page{link_end}. " +"For questions about using this API, visit our FAQ page or contact " +"{api_support_email_link}." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Terms of Service for {platform_name} APIs" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Effective Date: April 12th, 2016" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Welcome to {platform_name}. Thank you for using {platform_name}'s Course " +"Discovery API and any additional APIs that we may offer from time to time " +"(collectively, the \"APIs\"). Please read these Terms of Service prior to " +"accessing or using the APIs. These Terms of Service, any additional terms " +"within accompanying API documentation, and any applicable policies and " +"guidelines that {platform_name} makes available and/or updates from time to " +"time are agreements (collectively, the \"Terms\") between you and " +"{platform_name}. By accessing or using the APIs, you accept and agree to be " +"legally bound by the Terms, whether or not you are a registered user. If you" +" do not understand or do not wish to be bound by the Terms, you should not " +"use the APIs." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "API Access" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To access the APIs, you will need to create an {platform_name} user account " +"for your application (not for personal use). This account will provide you " +"with access to our API request page at {request_url}. On that page, you must" +" complete the API request form including a description of your proposed uses" +" for the APIs. Any account and registration information that you provide to " +"{platform_name} must be accurate and up to date, and you agree to inform us " +"promptly of any changes. {platform_name} will review your API request form " +"and, upon approval in {platform_name}'s sole discretion, will provide you " +"with instructions for obtaining your API shared secret and client ID." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Permissible Use" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to use the APIs solely for the purpose of delivering content that " +"is accessed through the APIs (the \"API Content\") to your own website, " +"mobile site, app, blog, email distribution list, or social media property or" +" for another commercial use that you described in your request for access " +"and that {platform_name} has approved on a case-by-case basis. " +"{platform_name} may monitor your use of the APIs for compliance with the " +"Terms and may deny your access or shut down your integration if you try to " +"go around or exceed the requirements and limitations set by {platform_name}." +" Your Application or other approved use of the API or the API Content must " +"not prompt your end users to provide their {platform_name} username, " +"password or other {platform_name} user credentials anywhere other than the " +"{platform_name} website at {platform_url}." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Prohibited Uses and Activities" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} shall have the sole right to determine whether or not any " +"given use of the APIs is acceptable, and {platform_name} reserves the right " +"to revoke API access for any use that {platform_name} determines at any " +"time, in its sole discretion, does not benefit or serve the best interests " +"of {platform_name}, its users and its partners." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The following activities are not acceptable when using the APIs (this is not" +" an exhaustive list):" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"collecting or storing the names, passwords, or other credentials of " +"{platform_name} users;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"scraping or similar techniques to aggregate or otherwise create permanent " +"copies of API Content;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"violating, misappropriating or infringing any copyright, trademark rights, " +"rights of privacy or publicity, confidential information or any other right " +"of any third party;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"altering or removing any trademark, copyright or other proprietary or legal " +"notices contained in, or appearing on, the APIs or any API Content;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "altering or editing any content or graphics in the API Content" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"sublicensing, re-distributing, renting, selling or leasing access to the " +"APIs or your client secret to any third party;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"distributing any virus, Trojan horse, spyware, adware, malware, bot, time " +"bomb, worm, or other harmful or malicious component; or" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"using the APIs for any purpose which or might overburden, impair or disrupt " +"the {platform_name} platform, servers or networks." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Usage and Quotas" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} reserves the right, in its discretion, to impose " +"restrictions and limitations on the number and frequency of calls made by " +"you or your Application to the APIs. You must not attempt to circumvent any " +"restrictions or limitations that we impose." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Compliance" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to comply with all applicable law, regulation, and third party " +"rights (including without limitation laws regarding the import or export of " +"data or software, privacy, copyright, and local laws). You will not use the " +"APIs to encourage or promote illegal activity or violation of third party " +"rights. You will not violate any other terms of service with " +"{platform_name}. You will only access (or attempt to access) an API by the " +"means described in the documentation of that API. You will not misrepresent " +"or mask either your identity or yourApplication's identity when using the " +"APIs." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Ownership" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You acknowledge and agree that the APIs and all API Content contain valuable" +" intellectual property of {platform_name} and its partners. The APIs and all" +" API Content are protected by United States and foreign copyright, " +"trademark, and other laws. All rights in the APIs and the API Content, if " +"not expressly granted, are reserved. By using the APIs or any API Content, " +"you do not acquire ownership of any rights in the APIs or API Content. You " +"must not claim or attempt to claim ownership in the APIs or any API Content " +"or misrepresent yourself or your company or your Application as being the " +"source of any API Content. You may not modify, create derivative works of, " +"or attempt to use, license, or in any way exploit any API Content in whole " +"or in part on your own behalf or on behalf of any third party. You may not " +"distribute or modify the APIs or any API Content (including adaptation, " +"editing, excerpting, or creating derivative works)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"All names, logos and seals (\"Trademarks\") that appear in the APIs, API " +"Content, or on or through the services made available on or through the " +"APIs, if any, are the property of their respective owners. You may not " +"remove, alter, or obscure any copyright, Trademark, or other proprietary " +"rightrs notices incorporated in or accompanying the API Content. If any " +"third party revokes access to API Content owned or controlled by that third " +"party, including without limitation any Trademarks, you must ensure that all" +" API Content pertaining to that third party is deleted from your app, " +"networks, systems and servers as soon as reasonably possible. If you stop " +"using the APIs altogether or if your API access is revoked, you must delete " +"all API Content in the same way." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To the extent that you submit any content to {platform_name} in connection " +"with your use of the APIs or any API Content, you hereby grant to " +"{platform_name} a worldwide, non-exclusive, transferable, assignable, sub " +"licensable, 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 such " +"content, in whole or in part, in any form and in any media formats and " +"through any media channels (now known or hereafter developed)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Privacy" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to comply with all applicable privacy laws and regulations and to " +"be transparent with respect to any collection and use of end user data. You " +"will provide and adhere to a privacy policy for your Application that " +"clearly and accurately describes to your end users what user information you" +" collect and how you may use and share such information (including for " +"advertising) with {platform_name} and other third parties." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Right to Charge" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} reserves the right to modify the Terms at any time without " +"advance notice. Any changes to the Terms will be effective immediately upon " +"posting on this page, with an updated effective date. By accessing or using " +"the APIs after any changes have been made, you signify your agreement on a " +"prospective basis to the modified Terms and all of the changes. Be sure to " +"return to this page periodically to ensure familiarity with the most current" +" version of the Terms." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} may also update or modify the APIs from time to time without" +" advance notice. These changes may affect your use of the APIs or the way " +"your integration interacts with the API. If we make a change that is " +"unacceptable to you, you should stop using the APIs. Continued use of the " +"APIs means you accept the change." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Confidentiality" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Your credentials (such as client secret and IDs) are intended to be used " +"solely by you. You will keep your credentials confidential and discourage " +"others from using your credentials. Your credentials may not be embedded in " +"open source projects." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"In the event that {platform_name} provides you with access to information " +"specific to {platform_name} and/or the APIs that is either marked as " +"\"Confidential\" or which a reasonable person would assume to be " +"confidential or proprietary given the terms of its disclosure " +"(\"Confidential Information\"), you agree to use this information only to " +"use and build with the APIs. You may not disclose the Confidential " +"Information to anyone without {platform_name}'s prior written consent, and " +"you agree to protect the Confidential Information from unauthorized use and " +"disclosure in the same way that you would protect your own confidential " +"information. Confidential information does not include information that you " +"independently developed, that was rightfully given to you by a third party " +"without confidentiality obligation, or that becomes public through no fault " +"of your own. You may disclose Confidential Information when compelled to do " +"so by law if you provide {platform_name} with reasonable prior notice, " +"unless a court orders that {platform_name} not receive notice." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Disclaimer of Warranty / Limitation of Liabilities" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"THE APIS AND ANY INFORMATION, API CONTENT OR SERVICES MADE AVAILABLE ON OR " +"THROUGH THE APIS 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." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} AND THE {platform_name} PARTICIPANTS (AS HERINAFTER DEFINED)" +" DO NOT WARRANT THAT THE APIS WILL OPERATE IN AN UNINTERRUPTED OR ERROR-FREE" +" MANNER, THAT THE APIS ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS, OR " +"THAT THE APIS OR API CONTENT PROVIDED WILL MEET YOUR NEEDS OR EXPECTATIONS. " +"{platform_name} AND THE {platform_name} PARTICIPANTS ALSO MAKE NO WARRANTY " +"ABOUT THE ACCURACY, COMPLETENESS, TIMELINESS, OR QUALITY OF THE APIS OR ANY " +"API CONTENT, OR THAT ANY PARTICULAR API CONTENT WILL CONTINUE TO BE MADE " +"AVAILABLE. \"{platform_name} PARTICIPANTS\" MEANS MIT, HARVARD, THE OTHER " +"MEMBERS, THE ENTITIES PROVIDING INFORMATION, API CONTENT OR SERVICES FOR THE" +" APIS, THE COURSE INSTRUCTORS AND THEIR STAFFS." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"USE OF THE APIS, AND THE API CONTENT AND ANY SERVICES OBTAINED FROM OR " +"THROUGH THE APIS, IS AT YOUR OWN RISK. YOUR ACCESS TO OR DOWNLOAD OF " +"INFORMATION, MATERIALS OR DATA THROUGH THE APIS 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, UNLESS OTHERWISE EXPRESSLY " +"PROVIDED FOR IN THE {platform_name} PRIVACY POLICY." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, YOU AGREE THAT NEITHER " +"{platform_name} NOR ANY OF THE {platform_name} PARTICIPANTS WILL BE LIABLE " +"TO YOU FOR ANY LOSS OR DAMAGES, EITHER ACTUAL OR CONSEQUENTIAL, ARISING OUT " +"OF OR RELATING TO THESE TERMS, OR YOUR (OR ANY THIRD PARTY'S) USE OF OR " +"INABILITY TO USE THE APIS OR ANY API CONTENT, OR YOUR RELIANCE UPON " +"INFORMATION OBTAINED FROM OR THROUGH THE APIS, WHETHER YOUR CLAIM IS BASED " +"IN CONTRACT, TORT, STATUTORY OR OTHER LAW." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"IN PARTICULAR, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER " +"{platform_name} NOR ANY OF THE {platform_name} PARTICIPANTS WILL HAVE ANY " +"LIABILITY FOR ANY CONSEQUENTIAL, INDIRECT, PUNITIVE, SPECIAL, EXEMPLARY OR " +"INCIDENTAL DAMAGES, WHETHER FORESEEABLE OR UNFORESEEABLE AND WHETHER OR NOT " +"{platform_name} OR ANY OF THE {platform_name} 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)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"CERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE " +"EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME" +" OR ALL OF THE ABOVE DISCLAIMERS, EXCLUSIONS, OR LIMITATIONS MAY NOT APPLY " +"TO YOU, AND YOU MIGHT HAVE ADDITIONAL RIGHTS." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The APIs and API Content may include hyperlinks to sites maintained or " +"controlled by others. {platform_name} and the {platform_name} 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 " +"websites, you do so at your own risk." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To the maximum extent permitted by applicable law, you agree to defend, hold" +" harmless and indemnify {platform_name} and the {platform_name} " +"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 APIs and any API " +"Content, 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, " +"{platform_name} or one of the {platform_name} Participants will provide you " +"with written notice of such claim, suit or action." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "General Legal Terms" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The Terms constitute the entire agreement between you and {platform_name} " +"with respect to your use of the APIs and API Content, superseding any prior " +"agreements between you and {platform_name} regarding your use of the APIs " +"and API Content. The failure of {platform_name} to exercise or enforce any " +"right or provision of the Terms shall not constitute a waiver of such right " +"or provision. If any provision of the Terms 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 the Terms shall remain in full " +"force and effect. The Terms do not create any third party beneficiary rights" +" or any agency, partnership, or joint venture. For any notice provided to " +"you by {platform_name} under these Terms, {platform_name} may notify you via" +" the email address associated with your {platform_name} account." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree that the Terms, the APIs, and any claim or dispute arising out of " +"or relating to the Terms or the APIs 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). Notwithstanding the foregoing, you agree that {platform_name} shall " +"still be allowed to apply to injunctive remedies (or an equivalent type of " +"urgent legal relief) in any jursdiction." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Termination" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You may stop using the APIs at any time. You agree that {platform_name}, in " +"its sole discretion and at any time, may terminate your use of the APIs or " +"any API Content for any reason or no reason, without prior notice or " +"liabiliy." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} and the {platform_name} Participants reserve the right at " +"any time in their sole discretion to cancel, delay, reschedule or alter the " +"format of any API or API Content offered through {platform_name}, or to " +"cease providing any part or all of the APIs or API Content or related " +"services, and you agree that neither {platform_name} nor any of the " +"{platform_name} Participants will have any liability to you for such an " +"action." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Upon any termination of the Terms or discontinuation of your access to an " +"API for any reason, your right to use any API and API Content will " +"immediately cease. You will immediately stop using the APIs and delete any " +"cached or stored API Content. All provisions of the Terms that by their " +"nature should survive termination shall survive termination, including, " +"without limitation, ownership provisions, warranty disclaimers, and " +"limitation of liability. Termination of your access to and use of the APIs " +"and API Content shall not relieve you of any obligations arising or " +"accrusing prior to such termination or limit any liability that you " +"otherwise may have to {platform_name}, including without limitation any " +"indemnification obligations contained herein." +msgstr "" + #: lms/templates/calculator/toggle_calculator.html msgid "Open Calculator" msgstr "Abrir calculadora" @@ -12052,24 +12590,17 @@ msgid "Auto Enroll" msgstr "Inscrever-se automaticamente" #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is checked, users who have not yet registered for " -"{platform_name} will be automatically enrolled." +"If this option is {em_start}checked{em_end}, users who have not yet " +"registered for {platform_name} will be automatically enrolled." msgstr "" -"Se esta opção estiver marcada, os usuários ainda não registrados no" -" {platform_name} serão inscritos automaticamente." #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is left unchecked, users who have not yet registered" -" for {platform_name} will not be enrolled, but will be allowed to enroll " -"once they make an account." +"If this option is left {em_start}unchecked{em_end}, users who have not yet " +"registered for {platform_name} will not be enrolled, but will be allowed to " +"enroll once they make an account." msgstr "" -"Se esta opção for deixada desmarcada, os usuários ainda não " -"registrados no {platform_name} não serão inscritos, mas terão permissão para" -" se inscrever assim que tiverem uma conta." #: lms/templates/ccx/enrollment.html #: lms/templates/instructor/instructor_dashboard_2/membership.html @@ -12084,13 +12615,10 @@ msgid "Notify users by email" msgstr "Notificar usuários por e-mail" #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is checked, users will receive an email " +"If this option is {em_start}checked{em_end}, users will receive an email " "notification." msgstr "" -"Se esta opção estiver marcada, os usuários receberão uma " -"notificação por e-mail." #: lms/templates/ccx/enrollment.html #: lms/templates/courseware/course_about.html @@ -12519,6 +13047,10 @@ msgstr "" msgid "{chapter} current chapter" msgstr "capítulo atual {chapter} " +#: lms/templates/courseware/accordion.html +msgid "{span_start}current section{span_end}" +msgstr "" + #: lms/templates/courseware/accordion.html #: lms/templates/courseware/progress.html msgid "due {date}" @@ -12948,8 +13480,8 @@ msgid "Verification Declined" msgstr "Data limite de verificação" #: lms/templates/courseware/progress.html -msgid "Completed" -msgstr "Completo" +msgid "Completed by" +msgstr "" #: lms/templates/courseware/progress.html msgid "Upcoming" @@ -13335,12 +13867,9 @@ msgstr "" #: lms/templates/dashboard/_dashboard_course_listing.html msgid "" "It's official. It's easily shareable. It's a proven motivator to complete " -"the course.
    {link_start}Learn more about the verified " +"the course. {line_break}{link_start}Learn more about the verified " "{cert_name_long}{link_end}." msgstr "" -"É oficial. É facilmente compartilhável. É um motivador comprovado para " -"completar o curso.
    {link_start} Mais informações sobre o verificado " -"{cert_name_long}{link_end}." #: lms/templates/dashboard/_dashboard_course_listing.html msgid "Upgrade to Verified" @@ -15612,6 +16141,32 @@ msgstr "" msgid "Reason" msgstr "Razão" +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is checked, users who have not yet registered for " +"{platform_name} will be automatically enrolled." +msgstr "" +"Se esta opção estiver marcada, os usuários ainda não registrados no" +" {platform_name} serão inscritos automaticamente." + +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is left unchecked, users who have not yet registered" +" for {platform_name} will not be enrolled, but will be allowed to enroll " +"once they make an account." +msgstr "" +"Se esta opção for deixada desmarcada, os usuários ainda não " +"registrados no {platform_name} não serão inscritos, mas terão permissão para" +" se inscrever assim que tiverem uma conta." + +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is checked, users will receive an email " +"notification." +msgstr "" +"Se esta opção estiver marcada, os usuários receberão uma " +"notificação por e-mail." + #: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "Register/Enroll Students" msgstr "Inscrição de alunos" @@ -17192,15 +17747,11 @@ msgstr "Requisitos técnicos" #: lms/templates/verify_student/pay_and_verify.html msgid "" -"Please make sure your browser is updated to the {a_start}most recent version" -" possible{a_end}. Also, please make sure your webcam is plugged in, " -"turned on, and allowed to function in your web browser (commonly adjustable " -"in your browser settings)." +"Please make sure your browser is updated to the {strong_start}{a_start}most " +"recent version possible{a_end}{strong_end}. Also, please make sure your " +"{strong_start}webcam is plugged in, turned on, and allowed to function in " +"your web browser (commonly adjustable in your browser settings).{strong_end}" msgstr "" -"Verifique se o seu navegador está atualizado para a {a_start}versão mais " -"recente possível{a_end}. Além disso, verifique se a sua webcam está " -"conectada, ligada, e tem permissão para funcionar no seu navegador " -"(geralmente ajustável nas configurações do seu navegador)." #: lms/templates/verify_student/reverify.html msgid "Re-Verification" @@ -17282,6 +17833,15 @@ msgid "" "edX and Open EdX logos are registered trademarks or trademarks of edX Inc." msgstr "" +#: themes/edx.org/lms/templates/header.html +#: themes/red-theme/lms/templates/header.html +msgid "" +"Warning: Your browser is not fully supported. We strongly " +"recommend using {chrome_link} or {ff_link}." +msgstr "" +"Aviso: Seu navegador não é totalmente suportado. " +"Recomendamos o uso do {chrome_link} ou {ff_link}." + #: themes/edx.org/lms/templates/course_modes/choose.html msgid "" "{b_start}Support our Mission: {b_end} EdX, a non-profit, relies on verified " @@ -19332,10 +19892,6 @@ msgstr "" msgid "Libraries" msgstr "Bibliotecas" -#: cms/templates/index.html cms/templates/widgets/header.html -msgid "Programs" -msgstr "Programas" - #: cms/templates/index.html msgid "Re-run Course" msgstr "Reprisar o curso" diff --git a/conf/locale/pt_BR/LC_MESSAGES/djangojs.mo b/conf/locale/pt_BR/LC_MESSAGES/djangojs.mo index 0fc4467d5f376e53c0692035ae681fa9d61e86e7..22b8979cb942dc4f2da67072e6e94f0c92616ee8 100644 GIT binary patch delta 35076 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
    5Or)H?k-A{3oC_TZ(FUE&AhL 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 delta 38092 zcmbu|2Y6M*!tU|4H$C*;VbeqJy#@%q_aY^b00ELf3SBovI!GsqB3%)r2tw!xNN>`c zAXPz{f`}C5{@*pj`8emh^||Z0%iqkbS<`3sPRRN0-3b93mInB*Wk@{F;p&&vadP2% z}LsJIsXHr<;bALNzD~3*vIr`-f5Q zJ0Cet2PluFaS8@fzq5@%W)g0p4_}}flw*eD?`7&c2EM^^m1*qTonm|qb0n=fcS&q{L^I`z@$FUfPdGRkSjM-*8PD`wf z?QjNaYHp)CPerANKA%f zQTeB!^3OqaTk@L(q&ugQ~X^wio2Wn9d#GE+UK3{>Ei6_jb*~)O71kLfUm=#mUJ5E(B zgetHHY6J#j5gdjZ(#4nr_o5np2vzYZR8Oy=I(QE?($8%A8_Y;N!2hwym-GnJBFk06URx5Q&1HwKvlfl#@FH3#JA!S?6bge*kDfbPsxM+xdf^Z zsQQ_yC>nDUpMe_cHJA-|VFtW_W$;(jh~!-8IQ20<_Q$@c2A;-1^n7m4g<@EPcu#DD z3vsBH&2I#>TKg?>oM2prs^}i}#@AR3doDIkMeXm+m>aL48uS9ypkj1Wi?l3iB&woD zs6J{9wX@HA;TSF3{siK9@Br2FUQ0Q2a27Vg-KYj6UuK?{#}dkiZE*%R#aq|_OEa#0 zaR{!&Yp9ARu5g@lI1kI=fG;?VsNeaVKqfqm8tPwAi^loV^e7c-ZZl#s%#B)hK(;k z!s3`}tvQgYpw?CpX2%Yg5(l9gm6qT?m}e@{>JpQ4W=a?hpBPAjnBa(#FwEe_zKmqZK%25gR1BNssmS0Bl|O|VQ;XU z_J7I^W~geR3TlX|uoJ2w{ZMNn4z)(6qE_`HR0F<8Rd@u|fRm{A&Z8>6g=)wno1SQ+ z8L@Oy`#%Q(t=@vD7M4Jrh{3429*r4r8LA<}?a5rxQ>O{Twsl7nmNmqk4WEbKqH2&mW^k z@+E4G1Z*}VlL_@a-)6>Nb6SD~RaDJpXl?C|nMogj8j&$JeFtj$9Y$6B3#yz)s0O{p zESM(2G_(*#6R(DaaSbZp*#yQvD}kR$(475)88PJ+lb#nf#FeoMHo`(U236sgsFB!& z+3*Nzaos|d_ZZdl*O&;CZZ#tqfGRhGpMVxm0o0HLTFavfs%7I%P(#@sH3eaq4I@w^ zFafLMben$IdJ|R7D^!D%Z8P;`My&zAkAPa*AGN54q88B{%!Qj#Lv_Y_2eT7@j+&bE z+s)!Cf|H4tK`rWS*Z`~TFyDH|pgOo0)u7{;M_Dh~2Y;bPBGFFM)8wdCpAGe5ag4%B zs0M$58q$rZ1}0#0JdCP1>n<~u-BF7>8jIluERI*PubP@-w;960SdRz8P}^k(=EeP} z3h$s!$R{>E%XemtRKlF3x4_ESAIsrV)Rdh=HSi9q+~=q@;p|}z_%VQh7FABv2n3;q zr~&GQHkbyx;s)%GtuXgq$GL=&)<*lx`}w~&-tOlAriZbp5gmbQ z_$*XImZ5gp4}JoD2|UHmvFj1@;3aCc=00i`Wh1OYd>U56{a72FV`j0{LG>sGi{K5^ zqD*nzd?PA^D~T^eHK@S}Q=Y#Y0nOQb9Du8EEoM1s3fhl4;U3~b^!{L;FUC>CTb|-a zay*8WF!Z!3_)|h#@t7KCU{dOL7TSd6N+7-gm2oSk#C@oqp0v*| zqYA!Z<4-Ud@fWC`c`lgubD$>Srl%=yn1*IRt%cl}1`D7XP!2Vf!I)F~zaxQMB*b8L zoQWEmRjBQ^8P(HcHvS{#CjJC9wCQddv!X^K59&N9jT*svHoX&SH-w|gAL6Dn|6>WL zMRRP16{rd~*!W)i{3NP^8#ev~H6@8}ne?=%hWSv7v=*wO_NWmEu@1s~#Qk`Z`kf^N z)RV!tO~u1di*1sP&qgiErRc>~SQgiy7Vl4}hTOIBr?`svYt$5cdB-$p4Qd3wx1K`3 zT6&FudiD%!VbY(?_6x=`#KW*3&PNse236szU(9=(Ffs81sKt8}_56}ezm2N+9%^L& zwDF{OnSUi@ylV<5fLaTIm<)q40-Ix2+>RQVGpL4LMa^}Zdu9srqZU~ORKA8-5L=@< zHUw4fCRDvU?=k)g94A4Gw$r@@MgqpHZ zsO{;;#`rOI!kbFaqN#r040&hFL3}u>!nv3fm!qa?HEJ>K#XNWlwM%}(08IM8e6T%JsJ*ke@(DRF6hrAw9716_|whDolmzQ3dQoRd4_`0w+-KpGM`s zfSR(a_yImcH8l32`7PQMq=SBED*+X77}dk$sO@+g)#5)<6?z|;2BbtyRW{U+mPGZi z0jdG5(T5#S4H$}=vKg2L7u)o8n4bEbg9J3^mr#r6A*w>>vH7l+0##8ZRK+b(6^3Gc zjKbFVtxZq*oB8UM9yLWJQ5|ZAsj)k%p#w2M`+qQjU>s#L?9~I}KVT}nf_mXD4#J0+ z0=xfihPodrUnHu6k*JZIjOy4tRL8zTjqnaszBB08>byZf-o|?P3pT*wPiQ4ZV+H&P z)sRe2&Em|CD!3?WsB55(@OG#Xi?s2Hs71X5)$kpt1|N9J_`5A3LA&4vYVo{5jX;t= zOi$9GUd)A>n!>1xN@GTBjIFR6>ixB-a=%4&U@xY{($CCVsEs;jT0LX@)$#}u^x}Bb zs-9{y%t2MS9y8%q%#0^cJ-Ur*z#A-p8UHkkxiV^dRYy%lUDU|6Ky|FGP4Dg}ke7u1 z*aW9wXFP``vGjBE(`q*iB0d>?cofUx18j(S{xTmbeXtPmNvLhT7B#Y`umV2DVp#Bn z`FihfNkAEg+JptDq1lVQ@h9wy^|*Z6X7(QJ`=TAmZ1t1rr;H3$FzT&DJzQU zh?hf6T|LwkcS7asjw!VNhY?6a!dP5}v#>Z;{KssU5LA2^YEdo6T(|+N<4M$9r+i}? zlmRs&Ij|g-N9FH>>gYJs2+YUyegaDfXpwEiF1Q0#U{=TDng4a)%2x@8vpgJ@HE8-NJ{#_!!$Ne$-BnjzxkT$WYARlTm zRzwYXb5uim+IR$NPDi5_*+Nv$)?yYsh{}Hr_5OWSzJE|7oHmKa{m1Csegf)QEb74s zRL>@%cEJo(Pv)R{vJln7uTgWp$+`_y;cn|O>m^iqKcgD_5Va-(lA3z`nF%OEPE-Z? zQ3aJnO+_u7g$+INfm}_Q2Oz4&O`Vadbq_z|43GYvV6i z7>lGfBiaJH5$}NRzyEzpK-=an=Eh`c%yub+n)}vR5WAv!Fd8-YGf~@f9yY*LSOsK`q8PsESshp07up4+*HGw~ZkbI%VW{{3)MAT4 z6+8-6z&O-mnvWXFb=Iw@k=TcN{{;5L^Qg5^Ig9CFe=J7)ODu_}{RB!AaI$)wNGOA0 zxCqx^l58IRGqAG})#I+&&FYUv_51_Ws{atRCg$1n1*irsMy;9Er~_@g^$g}E?!QmK zM<8Vm)6){D9+XE7VRh6RX^iS|dmHb88j%60Mf(A2>OMm?^efbR-=WGmhL!L#YSE_8 z>2}=j6eggabik?j9;%|ds2)8*_2fCKC*EA9zznE@e5mbP5yxOl>^l^N@h{chLeK_YVn4yqqa1Yd4I)Yl|FHs-U)e3v`vy3wr+vA5t%<8|4{t6@{3N%Al1=YefSOiC5 zLtKt(=mU(yfkjQeo7jtZs$w4JJ&eL69_AX=kkiFYMcxu7e{pO>dVAC^SXqMopO3&9 z5*p((?1Z&TniKG2)KGno8i^-Z2P>5_Jsyg6iQhy$FI3u0O*mE~J|FYrDb#-d12xjQ z%a{YLZW+JFSwO-F5{hHyvgT7O2vzZP)Cg@yt%2XLDi$eczHo$~3Y?AF1qs*)&!OJS zQ{Ll#i*AdB^c*MRRV;&H{tD*opN~~Y*n~PT9-$hPuc9fqIrbzz09DX2)DS6pKg z>G^uph+aiC>Uojs9%qPN zM6L28mub z`+)CgHO&E3098>SYR*ca8qy6lgd;F9eu$}YGOEIO`+Pa-vt+F`0hRwdOr~wMpMcKh zq?i(jG^O|sgi!V;)eToYA5G^)Vim>0*RPRqeiBDU9*atqNb=jDt#DgPG_PLKJ#$2kt#4Ww9c&JkkMRSZU%?RU(!k8!4(lFNPY?1qg$N7j_zNz}xg{Q;;JwL`tw57m?DsFu$| zAAXLia5rYdpHV-Czrh+hn(fsR>l2ScHRN0Dj>X!UA08*8rsg^_l+GR05I?{?=xuMNEFWqO zwZacE3_Iel=r2j2ZU-|*gD{ZzDAXcZftr%lsKvD#^>KRywXITjG@s)+(MP-iY6SYC z4y0wMh8)Cs_%ja2QJp;QA1?pdiTz)Kga)0>3o)p1O;o-pRD&0wKBf=iIedwA@P{78^gYdIMH?(j`Z(0oZo)Zu54G0b_lKBIx9?H= zKYcH=x{Kme;;nEP{)oM>eQz^_TQGunxlj+k*KwT1sF772iQK;k$WGt`n?0p;% zG`~VMAYhQGFe|D9`B4=VM^#wY+72rb?}Iv`7h+~ygZ_L3_Spw_kU4Rlp&F8Yu=&`` zi&``VP@h_Xs0LLxIFQH>lQ#u!m;)cQOfA#c75>&x$)aUd) z^x{L*kp5=luTZP@A5>4WM%(X-sD`yg9XO$=j*Ub2Aj4qdtFblyj+&Z!G36M3@?fU^XCw>@pa%LT2 zc1d%rPka_uMgMsM+V|;3dYl#*j2f!BsGeR%AKt-Qm~@oK{X2kQEJQp3tKe1CIg;gl zvxb_W4xT=!51-u_glAFpW%V;y{hb+OJEv&hDwdb$o( z;9b;E{*CT-8|!iZXFBar=fMS3L!V<9<{f7~q{gGB>LJ$F{;%+%In!fN+u{+bA=$>8 zeO?~5`0AjxT{F~n>VO)Na8!@Sq896ys9m+z#y6w#@5IUY18VnlnZW+n5cMaZf`_A8 zJ`R;(8S0?eXyb=b-)=9VDtd|<(wC^7rkrRFpz^3Ay$Pz~Uf3ApQ048mo}0-2R{{4) zPyw$|M{dDMre{H@x$T1b93PG)aVe_DKcH6mGt`LHn`}m^JC-KiAN56K0cu7IO>H)SPZ+M8ZsW+;zlft$)=jsT?*?E?~UVd zIcm)WPBSA`6IEUdzYX-nbtFXNA9&jZ^QYRdbTNWIcitjLRDON zj#<2wu`Ka#PzB#Ym78;}u_kI8_dqSqX~<`X-_E-c3H%r@;yfHY z&-5hOeDf8o1!@Y$piZ=NSP|34o9`3B*oydQY>B5(9n1Hzezar%#S*wd!c)}8>bXxm z&QrXJT14j;m>wnl)U57Ws72Wxl|L4f;26}}nTXmQb5L`>0JXN(p*~&rqNeH^7T5m& zgMdyl-)H8a>4VxXvr!+fKcWh_gDT)JR0Ww9nu>FxhBO~)N{XVs2UJ7lZ;fhT1ggO? zsQjbRufQY%37qef&TD*po1+;71kyo_2i zxfYp&~fO>oxRp2kEA%BIM%amW3?N=1H z65oqUanzTlp?O!Dk*kP$zc*^+hT8ZPR0BS@=_^ocZi~_Hd`CcYb_g{Bx6y~sP*aoT zEAug15Y?k_)LMx~4dql+2bQ8nZXK!t`>_yS#6$uU!&gJfok}1RDm~9BlZBb z*j}MVCea2{Zei4#DT!K~z5F&X3H9PyR1bHe8gLX_;YFKXbfaldWmLf(P-|s4Y6|D0 zw&7Q(#k>l(Vw8i}PD+pC_ z0%}Bdpr$JIRx=WrP!(3j!dMSAb^TEtn2bemIabGGSV{Xo`8LzC+Ng{jP;)yNHKb#$ z^ROE6m8hw?g&L9HP;>tZwHA_W_c*sP2S(x>%;dYo`^L@C}Gd7ytd`Wkk11JNk;>xJ)6lCp)TBH%EMfN^wO)Nu=SORJ)cA;Mh z=WK=_t-oOx(i4AYKd(_0^+k7NPz@Yw(`TX<*#gw6-;7$6yHJbt3aSDBpgNdgkD2O1 zd)WV)s~8gG0@M)i!Gic2Ct|+6W+=Zxop9OqnSERZ6>p8|(O_(ZlTbr{3iWAM=X=wT zP}JI)h&m@Oe(yJnD#w1a2=k&o^{S$d){a;lXWFIe~R;npT?5d&wtodFdwIouot&r^CPB5NspReFyuy^T;Vtu$KnRe zddw7j1ohl=+~e%U9QX}h#R)j$gvb5g`)4_6zH4r``aM6Gv$>(QIqKkOi`p&`sJWbn zT7(;H{1mDok5D5u?vyEKCu$e$Lru*^)LQuqwMdhmHftaka)kSx(gZZuLH0o()SL}R zRk#qfEq9<6*9Fw-{t5M2@ffxE+Mh8$7YxR-#J8Zf=dY+m`wVqZB|U4_S{`(N{tqUg z#nTei!ak@~I?6f&bs{cBt>V?FU9;P!A3*i+B+?`2DypH6ZTz{7r#NTINsk(#9GF`B zzcc~$s3xk#%~2;^CrpCfP!;w@4QYSt6s$*l6>6j&p*}-WpEpyO3w^{ZVKMB8wQ($} z{JrQ`%MTLJi|0`L{5Gn`k5D~%ZheE=9my`3h7`g;;=x!BBT*x`#6C|zHT(i z&rlsrd6E6EqcqD!bEFoqma*2fHnDa@RS=3g2}hs`nt+;`S*Y?>ST|UATaQ^US%1FB z{#QXyNl;7Q;3Z6Y$;{DpbQcfiQ~G7IHUd$*qB?5ZbwV{@FluhcqZ+yZ_5OO)+Sr5I zU1x0iLq7qn%73sFX1QW22u3gQPS_5+q7IDpr~~L4?!*s&G)HOOs~+bB@tHUpdtCE4 zF?b!9W4oU`?*9Pk1!_uZ()QQNYqjYpw|dKN1G z=cqNb1vS?PQ6qK@wU(Tlrs5Q+kw}k}?{^9i(2!NN4_crK>WQi#%03^3?i}0aE3DsI z_n{hm8kO&^jlV`M>I}EcXFx72NW3;?*5`jH0WG2tsEWsb!T%cfBO2a;u?sTVvFScf{@5|J`juj-Sm*mk-r|8mNL>*z{1V zA6t;V0CgVR!^)WA7xV9XL3o1r0aS(a?wU2V4Ap_nsB(9sUqgJ3fDW3QsJXjqeS=!P zS?-y&Q3O>$WpqDQQ9TaD2#iAQhO4L^|B0nB$**ROR7CfrMIG6Fer5lwg=0x5gEO%` z?m-ot^}bmf`B5)cMpe)Pb>j6!Exrl%`C`<_C7|*hMxAswQ62mRwbmY5y${&`8j7qB z%$$`(eb|)29@rGaa5d_LOaIVVAC+$?YJ_H^=5!hQa22YeqgVp3qw=SIWOhX$Y7sW^ z6VQH)LiKnkst03Ht9CA`2cKh6TxR3PQ6qL5l`qj_lP@)D=rf=`#PXr0xB@1^AXIt5 zR(}%$TE#7KD)vUb_!#xg$NQU^`%KQR>-MU@kT zjjFp$ZCpVO|)DT5OY1A0|stQ}R7( z5gkR%`B~Hm{)Xyd@|R}l^P}FYj2imRSOgOm;KwEj2-<1lrRz1(=}KV4`3iB z{>M~Y5*6==rEoNAPS@d3+>h^L%{S)Xc($X?hhSEY${&J0{0vq8PVA2UR|GT^T|8cQ zRfeDn9)=o`k5JDSqlWlP%#FKI2g+5{YQBM5tbd`VCYjgke%VZi`d-lr^_NxbgIX=7A_!cl8sBx-j|KozhA!*LaAQDsVMMko-=5igCJ z%3i3E8Hp-yHfpUcx9MM_`+xsqAAuA+IE(r58fq7Kl6l>qWHMnf;tfze8jPxVCaQwv zs0MCFo%QEY<=w)5_z+cbhvZ&&4RuE!@rmfyP^~1O7q_B@^Z=@&r>OHFLkiQQ(x`$P zp+=?+>iur0DT=hu-$zZ!MAV2aLal+7SP{3_^hYVY=KucRa}w0!L;cuZnbG8Y!NY9`Oax$6&B_oa`S{2{NO{h=F z@|nC&2+lz*zGqk;i)U8(e*P!51e%jD4fSbt88zfdvzQlCV;SO6sKv9`x*JOozlQ2* z>a6Dd?5NNEVAR^^f?AwCu``auU_6J(so%+&&Ge`s4kq3j)#H7r0#4cZ1=Psg!CCkm zFX80u<}B}>!xX$1wLO#P^g7>RM%1D`i<+8WQETlby1)NRl*_a@0F@yxYEhN8@ye*} z*AN@wEK~z8<7&K%TXAk~^InTQrlB2B=RiNyh>o^SM2*l#dD#D|Xc-CW>1tF4-{4J>6^c`wsj@a~bdHr7Ze^Pyw1g+v0 zKCk-&$ZXWXao3tFpIJPua4hK)a6G2S?{)Uz4BU>b3z+jGbwRTxil7=?9<^<&+4R<^ z-PFxbKrQNTjYF;O(bhFsi1=kJhE5@`qp#t`Q3aGi?eChX6R$PuT z8uAsYBm40qypKMx)q&8q#hsHyk{HXuXJVqW)uyWI;ziJwFtRw!;7)*goukH&F$ zA1h;239tLp@t0Vd_@CGc3zszCCx+ro;-6wu?f(*`%nQR%`|}{GrTI#mqqrez)eppc zxCsa11#E%!%b49U2dfjmiduZx%X*z&SOc}T7GX!ch1yNk%kjNK`+q!v_wXQ=^YGU% z<-P7tDjh4BgJ%O))r+Vp$z9Q`k!l!7yf3POGf^ksC7g{NE1CCy#c<*|E1QOoM~2>c zf_|NN8LOJ1t&Qq=PmI6`s3H6Vi(sD?Rm z`(SJ0t5J*j?;7m?Dg**+n(YyST5Q8mL%kZy;&I%DZ%{+It(Mp6iT|K_-lMkH{S)q$ z*pm2DY>4&hn30=`>cD<1fR8Z*GY0w1*&i3=b$`va4@>eOTV1nA8emQ07f?f;xt^K3 zTBx2+LKVCfb<*9!9{38?!>;wsnwWrVi0?&pXi%_OTTA@}v@Z{$w#g%FKm$`?VboDu z3-uw>47JTVVFnCCy*~^!b&F6RO8Zd__yhH+nYW?YzBR4EsFT*;oIr8{y)gy{Vp$f) zb^MTchQ?m^kI&<=EAiA#%o+&C3dA?zWc(HTVQf<~Qddz8PTI^ISQ$|DWX1I8GjYFD zjzAI;s-t=ugj($_QEOu|>g)7g)QeY8AEysdA6Chmn+mdFBI3ERHs(W3SqP@UDX0d_ zMU}G<-QWMMBcKy&Kc>UWs3Y_~>co4A8gg$7Gn8qqB~d+WifVXA%#LBG{C-r$)36cF zM=kE3P*aqlCFN`X2N6&KjZrUjM9obI>O*5FYOX&*wR{Oy!i}geB)_6QB~!FAA2#(- z9chXc@jX<&+30?{q8fS--T(W)Hwb8vJixxpeL!oos-xSOGyF5`%=7iARUXjR6qFwa z5U+x&U^%LR`%sJd9BS%*M@>mUJM&@J1l7Ry?b!dC!#*Tv$cLcja6D>`C*vwyj>%|P z%k~_Z*s+5d!cRJyeSZiwk{LUB-9K8NgIZHbJDWLAg&M)ksEPxz2v+UP{@0L)kkAbW zpw_}+)ZAY~eTw~z8ljh{DaqEwSQ>TKH?Z+=)V3Rqs$ey0M9!dw{0^$aZ&2l@^>;Nx znH2*_D2ZBBRWK>mM~y^N)S~KxDli7su<_UqKS90!2(>L=pn6*BJ=62rSb}&PR73oz z5%+&$AFQ+q=THa9ZB#`8-AqGrVHe^BP;>eL7RPwhQ13%E_%Q1IA5g3PPt*Zbw7WS; zTVXTe9~u456$08Gfj!LGJs5+D@4?oXtf#5CGpeWGT2q9WGrl{{CH)I*gVlR^ox1oD z>ci+1>SH&sx7YoP$kC|p|GTlSR!!ni^97+HHsQg?sE^}Yn2W_$CyZS|yjvg6eB%32 z1^n69%w_d{rr@SHh4d+?FD#kEO#??@V&Z#IBXkh87*Ajkt=by|ieifXW-XM*Plz|h zFuaBOV$pbjd2u|JCjK#M5go!z_yg)3xq}*kr>H5cG|+sgH9{ZpAy^ON(fz;wdxe0$ zSU3@0XEEf)@wf|nV*N;SB(K1d#DB7;jxvj_I+h`Q5UQa|P;2EXZon#oOu6?lmiV;6 z<_8l`H2YsI+#78QK8q^I8)K%RJZh26#Dcg3HBvWF4Ne(rwqGE&Al?+U*cM<}+=J!u zDIUclab^)dMddF$g#BNEz~~{ShnrA6c#ONT_)v55-A66b;9=%#^GB$Lt;H|#GV0TF z>~OF9&+UJr7UlaR%vZ7uBfZXP;xkbl>^;hi&|E(OEtbbP1lzrDzM~yQEtV=Dn4`5e zYUsP83YdmEuy&%}%SlJ_;%rnyH{c?Cg%|PD(Pji=$C!?Of{#e|pCJ%PVDDH{(S7Vn zJYbyps?-N{08K%id@HaO?!fDq`a?4%kFWsoY~#%dSOax3_QlmW1)F1~3FfQahggXE zoi7L!{M!Y{}r+#M+fpoYA^?AL^#{WQlUMHDihB7BAUJLVKJ5&WjP@kF~q7Ir#sD?~O zjno&Y90 z4gFM`z7(}v)}uP`BbLG^Q`!GoH2J2Pf`YLj@n)#~ITtm=w@?+_xA7M??wM{*w6v&( zltE2ZWz>+@LrrN5)QQ*&Rn7`jxf`dmJv3C?ZNgb>PW(sIh!p$CEUFr)&;Jhi0%LIm zM$Rz1ghox{h)u=9xYT@7Oe@2a`uv z4)nL6FkO)pw2Vy2i9f>^yjYI=68AMSrXszxErb)A&uALQJ0YakqhW_^IaA5Mf$(ac zeM6p_Hhmu+;Qp1gOxz2(x%|#K3h&5ES9qZnDQ(zpi2A)m4|WiV*&ZXH89#bC>t;bH@;G!SgMIRlj=$k&*8d4kxbDl!ANn@&ht# zC4AWys*L-K)MW#7*Oc`4muzyB_&+@}5q+M>rAlk-nJp-MmxEmh%N^n+bow zy^DJ=`9dhCHR%tz{kLodb~*KN{%=lNdLwcO@aIMqAhJiIrGvgVO*zTakk ziqmOnBWy&Ws|c^<=1Z+JpZGTJdc;%XZcIt~Z}#1#R4|tN3(|U$wu?Ip6^tjZzU{Q8 z!nap)!YO&4j=Z08`}?aUWYpE#;N+o#T0Fc=M*b4Zy+TP#LHzBtiSSC&O4)ZCTNjab zi+2;-_YT^0y?4mIJcv9ad4ITm|F5eAk-cQpZs<*T2kQFOzWkUM-d=+#c=Fo_mZwLV zc;^^-=kx3mc`w-fgD6K|IJfhBi!D>H>RXqtqx}7evyaS;-x;DA#2Zmi6*BcF(;VUx zxV`qJmV|vatltyNr0^9K-k5h@@J!cV)?BvIf3OzM3scWmy!##D8_J{pzvgbhgWY60 zMR*Mv4)d@V;f=O{-wEqy{y^dx-)ZbT;&;gJwQ2W>r?=s634cjNmw8WLMs>w=kEX$D z|EK7V|5!5BRv}o5#DZ9ZyAlQHN=#!q^L#z=SNMzVoq5W?ij)44O*_T=x;$8tGR~T) zQ-(&pM_NkN%*CGyIdAk^yK5xAq=3gbn|mS!P3Ga->x>Pgp@2QS+?e=a98JD^0I~D#&zK@9i^iJBJyc10M6-k@UdvO~7sU%jSfEW@J@ls8~ z%Slg3E8Fv|GHJR3NDnqa=df*LCgS~UxE6V*anB_GUzF8}u&!M^?`F%mNZK)*-h@2< zwe~?*3LnFRO1$t1X@z*{Fd1gq=Sg|q%)WSo^crr_{Lo3h$)sN+Us^myql?+0zC)fj zgwOG;GVjm9J@%PipQruLuY8;{6u5;u6&ZdYLniL_+zG^g#-F&~yYI^#dk_G&jT4&cFlGR-G*7H(aWxIeae6z@P! zzPItu$=if@N$#fne}# z{{P%2m}Gw1QD$C>p|Z~iSL4Mv)K!eIu2d8pOP&-qzJs(2lyiZ1I^a3d)01`=19^9= z&9{NHBRmfKl83G{Sr&pLmO9kratj}1irJ0scgj$RS@a=_ux^47jx^% zX!HF;zI?=w+s5cw1Hy~AKec6?P$E|~o2Myd-M8f&R+!uW6B)L1|4yb}BrL!tdW)+J zl~v`1s-%BOxEa0rnDhw3oA5HvDv+k~li@4^yKDtNkk*#8ZMHGr;1u2~&GR&bPn&eV z(~Xz5sRXV;JY2|wx#M(@WC~PFp2H7}4_v%UB`rPW& z0xF$E!A-f}UN;FW;?7KlPi*7$tUu+HB`q0wck{l#5rM|sy~%Wu3>8R>=6;WOdn!+c zD~RhlU~v8W1{YVbMpK)&po!X2b5Wb@Bq@^z5KtB=_(JWQ%ID3vY(bMvW-yE*F3Ak z%eibt9eKW)JBVjnNn2wJZDHTJWb>7^&b80$l7BXN`q^}%ey1`8^|h_+iC2j0Nrxv6-~4#J|Hol#wgJ<||J6 zQat2JT&&%}1}LN)u6es4eAW-3nFI9~dW$}%x*O5R8~3+dOn+mg_L zv}X3*{XBbM-)%!Uo^WP5_%mT$>$wx#=Wc@LzpEXR5oC(61r4>s+>=~WdESo7NATiS zn|CG8vys-B=bzel&f0fu!A=Fz({lSr{}4Z;{Hm1knlip2e#UJS^Iwj@3?4MLh1ay! zAT7#<%k#oE;^~Q(Bs`IK^3#B7#H(_jC9NM7-68!vE%=eN4#Zz@FLf(o#CZP^@prEY z+W(!nk8pROkfyv?#b&BV1-jZ2KgHdIXS!~4=b^Alw%`b!b>}W_^T+Y5fSZ$pi8B8p zUpAfxa<3%b5ZhALN96JECn1zTClZ?53Z{@j*B$E&@)V%Zq_~E{Mx(Aeq>bdAjV9_W zCccCCY~BmAjkAwj^snbr2({(?(&o9}>1Qk5Vk>J$h8%igf@s}%`lh>YTH zZ(q*9^XztBm)W%5#A_3-jepS4Xzpp`J8sMBg0*bp3KRaCaxZX?Cmc!HDY)}+f5UtJ z`UHA&ALoU_+;z#QtGTW0J<`Itbrt1>{g{M2afIKH=Xd)oko28YkeB!%(o@s8*W{T- zydvqJaQ{eLS31&a6X)_f+sOR(r=ad`8U@>oitgpkK!xGv1!tda*w=W^R<3-T$kWTl z+wp8PcTLg~+tE{=ZnliSZ5gNa`@e5&L>Y8NQh785-LRP}Q^@b!y2@J9;4G8mj3i%H z;>mcYk}c~gt|9&-dG-?SLwGg$rjhS2TW)T`E!FcUWNM`zlkpk!CBrE00=)DK@eKGC z@gnv`lH9-VEJx4cY=xhbN7paJ`%>@?o1Tlb_um=K&q%LMS`Rxa{!_ddOTj)otrEC~ zaE~UfGWSIaOUFwE-zh|Sz9K%Jcdp<;@_o!bguKb|B+rlGB;s$cJ;bX~&L6g6Hr?-h zY+J5`q!g9|bCX$DQl2Hlf)w-~FSg=dN1j@=ehcaGwy<10uWl>*TrYBkl26yKl<^_= z2i(O}KJUIy`F(k|Ui<&B&6t-5$!s_a;cp2SB-1NfNfzRVC`8u~3dlq;Z!>*Jcmj!6dAS-bZfRRN2Fuv+ zBc4sP4OW?*NH4|vlWe0iD3LtpNKb^{6YarWf_szA6G(a(<8j2BC+Q#BxYEL?d;$3~V@}E{z_XLY!wBEz&Ok+-Z5_*bR+RWj@_tC3 z-TL`Y*AGOZNPI%ZON4dxCG%3^jR>EnQeC0sna-`N49|ygpS6W6Ei?Jfk`_TYClxIr zT-d&Qka9mIeKhxM%GgOftv-Ablc^$Rz^Oc}!HdsvI|cV3tvdHYo_}vEUdS_D8EwIb zY9vvoBAwFPtKyt{KG7+q5M# zs3vKtZQdK0o@YrIsmHdl?o0fq3F-N%U^*To-}iXb=1D<%*MG~;{ClV{J1_RYp4=ha zy|{aGm*Ith+zsqYJIPm`bY1I6ugkrPXScb>+Qwz%SxYM2!n2Bm*YfNp@6cBFN=v zr{wtp(ysEX9_hsizrAwovY|h1uZEMM7-`!*8`niyX8h%n!vsPM?xQoeRkzL){wgM6|7s;z{tulwGh=&&K- zQE@SDU8S6$-m&2uOU*u*#ZzeG{gsQ0ZyazoJayg3zHuRa!>ajOQGASBRr^-Hkm%^B zp}qlO!&QA)WNcWp`($8<$?b~>i;OFwq)1;}OnjNtoQ)Yk91!DXj1HsKk?xd5`G$l=hxZx&whN3vwf`t6erI-1p@h-dJ(;qk2@CDy8yFT6 z9m&{-$HcE~<0+glqqL`AQvbgOD~=@*8EZOH!WR=ZFsyg%|7IB7r4k!5AdKY~#oXB; z__sG{uQL3{1e9`EWN%v^zpbJtReZ`yo_`XaRr2)oChr>^63X;N#edY!lQrZ2WPB3Z zRP`)Mp7FmAoD)B*ohMVmZ$X|-soSxZ+{x_|qM2pU{y!{`USR`SuPhU{^=>il^d>B6 z>8YNmPFQ4g)WCt71q%K5xpO*4#j)JOSmpnf=fBO%nKqt~vdR@VNWE1_ZYAa=c0;VX z{hzNTly2)Om#La&T}y|R?u&^HiPeT=%ST0p`r;yE!w1qLcWiB*hCFDm^rA8Go%?z| z&l4Kz?hY|$$E_ng_ar=+9%koCzMZ4fOrqdB|p>)Ug-{dsg zm(oH)qe?jqIm<)C;&WZ~}R{!%W|zeH?gE(UF>s`0cg5xiT`e|7{zO%d?vwN zfpH-Nbq0jRr|;#>?7$+b_B(=ErwPe|yrmN*3sT#{N5s$S?ah}# z^Yib6mQb<2w`M@Gcc&w}|qK@-LN5!z%-YzMvr`~3nn~(kf z!$9~#dWD1!d%IWN<@Jo{gNBK$qv`#cq&K=!2Bw>Z943?HF?jPT}7 P^#Af9kp2U2$0Yv)k@Ve0 diff --git a/conf/locale/pt_BR/LC_MESSAGES/djangojs.po b/conf/locale/pt_BR/LC_MESSAGES/djangojs.po index 1d7675cdca..36217385f8 100644 --- a/conf/locale/pt_BR/LC_MESSAGES/djangojs.po +++ b/conf/locale/pt_BR/LC_MESSAGES/djangojs.po @@ -172,8 +172,8 @@ msgid "" msgstr "" "Project-Id-Version: edx-platform\n" "Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" -"POT-Creation-Date: 2016-03-30 19:38+0000\n" -"PO-Revision-Date: 2016-03-30 19:43+0000\n" +"POT-Creation-Date: 2016-04-15 11:04+0000\n" +"PO-Revision-Date: 2016-04-15 11:07+0000\n" "Last-Translator: Ned Batchelder \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/open-edx/edx-platform/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -340,6 +340,7 @@ msgstr "Avançado" #: common/lib/xmodule/xmodule/js/src/html/edit.js #: common/static/common/templates/image-modal.underscore #: common/static/common/templates/discussion/forum-action-close.underscore +#: lms/templates/student_profile/share_modal.underscore msgid "Close" msgstr "Fechar" @@ -1899,38 +1900,37 @@ msgid "Do not show again" msgstr "Não exibir novamente." #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Turn on closed captioning" -msgstr "Ativar as legendas ocultas" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Turn off transcript" -msgstr "Desativar transcrições" +msgid "Transcript will be displayed when you start playing the video." +msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "" -"Language: Press the UP arrow key to enter the language menu, then use UP and" -" DOWN arrow keys to navigate language options. Press ENTER to change to the " +"Activating a link in this group will skip to the corresponding point in the " +"video." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Video transcript" +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Start of transcript. Skip to the end." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "End of transcript. Skip to the start." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "" +"Language: Press the UP arrow key to enter the language menu then use UP and " +"DOWN arrow keys to navigate language options. Press ENTER to change to the " "selected language." msgstr "" -"Idioma: Pressione a tecla UP para entrar no menu de idioma, então pressione " -"as teclas UP e DOWN para navegar nas opções de idioma. Pressione ENTER para " -"mudar para o idioma selecionado." #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Open language menu" -msgstr "Abrir menu de idiomas" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "" -"Activating an item in this group will spool the video to the corresponding " -"time point. To skip transcript, go to previous item." +msgid "Open language menu." msgstr "" -"Ativar um item nesse grupo vai mover o vídeo para o ponto no tempo " -"correspondente. Para pular a transcrição, vá até o item anterior." - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "
  • Transcript will be displayed when " -msgstr "
  • Transcrição será exibida quando" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "Hide closed captions" @@ -1940,6 +1940,10 @@ msgstr "Ocultar legendas ocultas" msgid "(Caption will be displayed when you start playing the video.)" msgstr "(A legenda aparecerá quando você reproduzir o vídeo.)" +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Turn on closed captioning" +msgstr "Ativar as legendas ocultas" + #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "Turn on transcripts" msgstr "Ativar legendas" @@ -2232,6 +2236,17 @@ msgstr "Por favor, não utilize espaços neste campo." msgid "Please do not use any spaces or special characters in this field." msgstr "Por favor, não utilize espaço ou caracteres especiais neste campo. " +#: common/static/common/js/components/views/paginated_view.js +#: common/static/common/js/components/views/paging_footer.js +msgid "Pagination" +msgstr "" + +#: common/static/common/js/components/views/paginated_view.js +msgid "" +"Your request could not be completed. Reload the page and try again. If the " +"issue persists, click the Help tab to report the problem." +msgstr "" + #: common/static/common/js/components/views/paging_header.js msgid "Showing %(first_index)s out of %(num_items)s total" msgstr "Exibindo %(first_index)s de um total de %(num_items)s" @@ -2528,6 +2543,7 @@ msgstr "Slots abertos" #: lms/djangoapps/teams/static/teams/js/collections/topic.js #: lms/templates/edxnotes/tab-item.underscore +#: lms/templates/learner_dashboard/program_card.underscore msgid "name" msgstr "nome" @@ -2537,6 +2553,11 @@ msgstr "nome" msgid "team count" msgstr "Contagem de equipes" +#: lms/djangoapps/teams/static/teams/js/teams_tab_factory.js +#: lms/djangoapps/teams/static/teams/js/views/teams_tab.js +msgid "Teams" +msgstr "Equipes" + #: lms/djangoapps/teams/static/teams/js/views/edit_team.js #: cms/templates/js/certificate-editor.underscore #: cms/templates/js/content-group-editor.underscore @@ -2730,14 +2751,14 @@ msgstr[1] "%(memberCount)s / %(maxMemberCount)s membros" msgid "All teams" msgstr "Todas as equipes" +#: lms/djangoapps/teams/static/teams/js/views/teams.js +msgid "Teams Pagination" +msgstr "" + #: lms/djangoapps/teams/static/teams/js/views/teams_tab.js msgid "Topics" msgstr "Tópicos" -#: lms/djangoapps/teams/static/teams/js/views/teams_tab.js -msgid "Teams" -msgstr "Equipes" - #: lms/djangoapps/teams/static/teams/js/views/teams_tab.js msgid "" "See all teams in your course, organized by topic. Join a team to collaborate" @@ -4364,6 +4385,10 @@ msgstr "Vinculando" msgid "Successfully unlinked." msgstr "Desvinculado com sucesso." +#: lms/static/js/student_profile/views/badge_list_container.js +msgid "Accomplishments Pagination" +msgstr "" + #: lms/static/js/student_profile/views/learner_profile_factory.js msgid "{platform_name} learners can see my:" msgstr "Estudantes do {platform_name} podem visualizar meu:" @@ -4427,6 +4452,18 @@ msgstr "Imagem do perfil" msgid "Profile image for {username}" msgstr "Imagem do perfil de {username}" +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "About Me" +msgstr "" + +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "Accomplishments" +msgstr "" + +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "Profile" +msgstr "" + #: lms/static/js/verify_student/views/image_input_view.js msgid "Image Upload Error" msgstr "Erro ao carregar a imagem" @@ -4946,6 +4983,10 @@ msgstr "variável_ativa é obrigatória" msgid "You must specify a name" msgstr "Você deve especificar um nome " +#: cms/static/js/models/course_update.js +msgid "Action required: Enter a valid date." +msgstr "" + #: cms/static/js/models/group.js msgid "Group name is required" msgstr "O nome do grupo é obrigatório" @@ -5782,6 +5823,11 @@ msgstr "Não agendado" msgid "Date" msgstr "Data" +#: cms/templates/js/edit-chapter.underscore +#: lms/templates/ccx/schedule.underscore +msgid "gettext(" +msgstr "gettext(" + #: cms/templates/js/paging-header.underscore #: common/static/common/templates/components/paging-footer.underscore #: common/static/common/templates/discussion/pagination.underscore @@ -5807,8 +5853,9 @@ msgid "Zoom Out" msgstr "Diminuir a tela" #: common/static/common/templates/components/paging-footer.underscore -msgid "Page number" -msgstr "Número da página" +#, python-format +msgid "Page number out of %(total_pages)s" +msgstr "" #: common/static/common/templates/components/paging-footer.underscore msgid "Enter the page number you'd like to quickly navigate to." @@ -6484,10 +6531,6 @@ msgstr "Prazo de Entrega" msgid "remove all" msgstr "remover todos" -#: lms/templates/ccx/schedule.underscore -msgid "gettext(" -msgstr "gettext(" - #: lms/templates/ccx/schedule.underscore msgid "Section" msgstr "Seção" @@ -6830,16 +6873,10 @@ msgid "Generate Exception Certificates" msgstr "Gerar certificados de exceção" #: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "Generate a Certificate for all " -msgstr "Gerar um Certificado para todos" - -#: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "New" -msgstr "Novo" - -#: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "additions to the Exception list" -msgstr "adições à lista de exceção" +msgid "" +"Generate certificates for all users on the Exception list for whom " +"certificates have not yet been run" +msgstr "" #: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore msgid "Generate a Certificate for all users on the Exception list" @@ -7081,6 +7118,24 @@ msgstr "Usado" msgid "Valid" msgstr "Válido" +#: lms/templates/learner_dashboard/explore_new_programs.underscore +msgid "" +"Browse recently launched courses and see what\\'s new in your favorite " +"subjects" +msgstr "" + +#: lms/templates/learner_dashboard/explore_new_programs.underscore +msgid "Explore New XSeries" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore +msgid "org.display_name" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore +msgid "type" +msgstr "" + #: lms/templates/search/course_search_results.underscore #: lms/templates/search/dashboard_search_results.underscore #, python-format @@ -7125,7 +7180,6 @@ msgid "section.title" msgstr "section.title" #: lms/templates/student_account/account_settings.underscore -#: lms/templates/student_profile/learner_profile.underscore msgid "An error occurred. Please reload the page." msgstr "Um erro ocorreu. Por favor, recarregue a página." @@ -7312,14 +7366,69 @@ msgstr "Campo obrigatório" msgid "Already have an account?" msgstr "Já possui uma conta?" +#: lms/templates/student_profile/badge.underscore +#, python-format +msgid "Share your \"%(display_name)s\" award" +msgstr "" + +#: lms/templates/student_profile/badge.underscore +msgid "Share" +msgstr "" + +#: lms/templates/student_profile/badge.underscore +#, python-format +msgid "Earned %(created)s." +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "What's Your Next Accomplishment?" +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "Start working toward your next learning goal." +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "Find a course" +msgstr "" + #: lms/templates/student_profile/learner_profile.underscore +msgid "An error occurred. Try loading the page again." +msgstr "" + +#: lms/templates/student_profile/section_two.underscore msgid "You are currently sharing a limited profile." msgstr "Você está compartilhando um perfil limitado no momento." -#: lms/templates/student_profile/learner_profile.underscore -msgid "This edX learner is currently sharing a limited profile." +#: lms/templates/student_profile/section_two.underscore +msgid "This learner is currently sharing a limited profile." +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +msgid "Share on Mozilla Backpack" +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +msgid "" +"To share your certificate on Mozilla Backpack, you must first have a " +"Backpack account. Complete the following steps to add your certificate to " +"Backpack." +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +#, python-format +msgid "" +"Create a %(link_start)sMozilla Backpack%(link_end)s account, or log in to " +"your existing account" +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +#, python-format +msgid "" +"%(download_link_start)sDownload this image (right-click or option-click, " +"save as)%(link_end)s and then %(upload_link_start)supload%(link_end)s it to " +"your backpack.
  • " msgstr "" -"Este estudante da edX está atualmente compartilhando um perfil limitado." #: lms/templates/verify_student/enrollment_confirmation_step.underscore #, python-format @@ -7410,13 +7519,10 @@ msgid "Take Your Photo" msgstr "Tirar foto" #: lms/templates/verify_student/face_photo_step.underscore -#, python-format msgid "" -"When your face is in position, use the camera button %(icon)s below to take " +"When your face is in position, use the camera button {icon} below to take " "your photo." msgstr "" -"Quando seu rosto estiver posicionado, use o %(icon)s do botão da câmera " -"abaixo para tirar sua foto." #: lms/templates/verify_student/face_photo_step.underscore msgid "To take a successful photo, make sure that:" @@ -7435,13 +7541,10 @@ msgid "The photo of your face matches the photo on your ID." msgstr "A foto do seu rosto corresponde à foto no seu documento." #: lms/templates/verify_student/face_photo_step.underscore -#, python-format msgid "" -"To use the current photo, select the camera button %(icon)s. To take another" -" photo, select the retake button %(icon)s." +"To use the current photo, select the camera button {icon}. To take another " +"photo, select the retake button {icon}." msgstr "" -"Para usar a foto atual, selecione o %(icon)s do botão da câmera. Para tirar " -"outra foto, selecione o %(icon)s do botão tirar novamente." #: lms/templates/verify_student/face_photo_step.underscore #: lms/templates/verify_student/id_photo_step.underscore @@ -7535,11 +7638,8 @@ msgid "Make sure your ID is well-lit" msgstr "Certifique-se que o documento esteja bem iluminado" #: lms/templates/verify_student/id_photo_step.underscore -#, python-format -msgid "Once in position, use the camera button %(icon)s to capture your ID" +msgid "Once in position, use the camera button {icon} to capture your ID" msgstr "" -"Uma vez em posição, utilize o botão da câmera %(icon)s para tirar a foto da " -"sua identidade." #: lms/templates/verify_student/id_photo_step.underscore #: lms/templates/verify_student/incourse_reverify.underscore @@ -7574,11 +7674,8 @@ msgid "Be sure your entire face is inside the frame" msgstr "Certifique-se que o seu rosto todo esteja dentro dos limites da borda" #: lms/templates/verify_student/incourse_reverify.underscore -#, python-format -msgid "Once in position, use the camera button %(icon)s to capture your photo" +msgid "Once in position, use the camera button {icon} to capture your photo" msgstr "" -"Quando estiver na posição, use o botão da câmera %(icon)s para capturar a " -"sua foto" #: lms/templates/verify_student/incourse_reverify.underscore msgid "Can we match the photo you took with the one on your ID?" @@ -7587,10 +7684,8 @@ msgstr "" "identificação?" #: lms/templates/verify_student/intro_step.underscore -#, python-format -msgid "Thanks for returning to verify your ID in: %(courseName)s" +msgid "Thanks for returning to verify your ID in: {courseName}" msgstr "" -"Obrigado por retornar para verificar sua identidade em: %(courseName)s" #: lms/templates/verify_student/intro_step.underscore #: lms/templates/verify_student/make_payment_step.underscore @@ -7629,14 +7724,13 @@ msgstr "" "oficial com o seu nome e foto" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "You are enrolling in: %(courseName)s" -msgstr "Você está se inscrevendo em: %(courseName)s" +#: lms/templates/verify_student/make_payment_step_ab_testing.underscore +msgid "You are enrolling in: {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "You are upgrading your enrollment for: %(courseName)s" -msgstr "Você está atualizando sua matrícula para: %(courseName)s" +msgid "You are upgrading your enrollment for: {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step.underscore msgid "" @@ -7689,9 +7783,8 @@ msgid "You have already verified your ID!" msgstr "Você já verificou a sua identificação" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "Your verification status is good until %(verificationGoodUntil)s." -msgstr "Seu status de verificação é válido até %(verificationGoodUntil)s." +msgid "Your verification status is good until {verificationGoodUntil}." +msgstr "" #: lms/templates/verify_student/make_payment_step.underscore msgid "price" @@ -7702,14 +7795,8 @@ msgid "Account Not Activated" msgstr "Conta não ativada" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "You are enrolling in %(courseName)s" -msgstr "Você está se matriculando em %(courseName)s" - -#: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Upgrade to a Verified Certificate for %(courseName)s" -msgstr "Atualizar para um Certificado Verificado de %(courseName)s" +msgid "Upgrade to a Verified Certificate for {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore msgid "" @@ -7722,14 +7809,12 @@ msgid "Check your email for an activation message." msgstr "Verifique o e-mail recebido com uma mensagem de ativação." #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Professional Certificate for %(courseName)s" -msgstr "Certificado profissional para %(courseName)s" +msgid "Professional Certificate for {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Verified Certificate for %(courseName)s" -msgstr "Certificado verificado para %(courseName)s" +msgid "Verified Certificate for {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore #, python-format @@ -7768,9 +7853,8 @@ msgstr "" " com foto emitido pelo governo." #: lms/templates/verify_student/payment_confirmation_step.underscore -#, python-format -msgid "Thank you! We have received your payment for %(courseName)s." -msgstr "Obrigado! Nós recebemos o seu pagamento para o curso %(courseName)s." +msgid "Thank you! We have received your payment for {courseName}." +msgstr "" #: lms/templates/verify_student/payment_confirmation_step.underscore msgid "Next Step: Confirm your identity" @@ -8358,11 +8442,6 @@ msgstr "Limpar data limite para avaliação" msgid "Chapter Name" msgstr "Nome do Capítulo" -#: cms/templates/js/edit-chapter.underscore -#, python-format -msgid "Chapter %s" -msgstr "Capítulo %s" - #: cms/templates/js/edit-chapter.underscore msgid "provide the title/name of the chapter that will be used in navigating" msgstr "forneça o título/nome do capítulo que será utilizado na navegação" @@ -8371,11 +8450,6 @@ msgstr "forneça o título/nome do capítulo que será utilizado na navegação" msgid "Chapter Asset" msgstr "Ativo do Capítulo" -#: cms/templates/js/edit-chapter.underscore -#, python-format -msgid "path/to/introductionToCookieBaking-CH%d.pdf" -msgstr "path/to/introductionToCookieBaking-CH%d.pdf" - #: cms/templates/js/edit-chapter.underscore msgid "upload a PDF file or provide the path to a Studio asset file" msgstr "" diff --git a/conf/locale/rtl/LC_MESSAGES/django.mo b/conf/locale/rtl/LC_MESSAGES/django.mo index ae32242c3e654f6dc34e740f53e91eec51e6f8a3..e29903239ea8e16f023cea534d96534f50be3511 100644 GIT binary patch delta 83330 zcmXWkb$}IB8^`gvwX}3e?b6+yOLup7cO!M_kZzieAixDLO^4h?)x z0-xigY3Oq@W9~*iCk{4jY&UM(#OI9UxR_0SPENK@#5UaD+0o4B^k7HQ<~}C}j=_Go z8CP>)R12Tur+&Pp&q;_UF)7}_*!Ub{;0M%kfmS|;)0_y@{+L(*6JrXjjJdE4rsn?6 zbPCCEBj&~R~R=N|=p$YmAGN zQRmM`b!2HfU)V`ZVH+D3;g6_bYTMrDe2EbqY^Z0Udbkc1gqN@#R_*9>4&x?_#9p0z zP9L0s3(@K9a}vQ<*b6s#^;BJKs&jV<+YOqrAuk8?!7R8EiAU!YYHCt+GxOj~>Xk4O zuVP002Q~C*y8E1h*ad6jQq)xaiRy8(9+nL`@GSK!VG6q8>Yg^#XHY$Sh8ns~z3c)r zF^c*g?29+CF4pYra~9)rB%PcReF!SNf%)mcThv@t$JLk;_n~6qGN!^is4Vz^nJ{60pOYSo;A3otI!{-%q8k1db>X;!?ZW9$*^~=4Vl^-wHo}-V z$TN(eDgP%?&`>VW2K*KyaX;!pw>&?hf-Th$o5N^S!)kc-me`4USDcI&P$Spu3u|yM z)bS&6D9*s}Uld{wwV{0HnQ$08*q#j)%^OhpdmFVtJwXN8=fiDIi=Y}>6?I-0RFD5a z9T#(ijZ`Moh!pp%FoOJ7k880(w)E_Q3dUimp&gByv$2IzqNXD5NNZ3O z?x0=(6%&786SCns=A&M9l#Rf!QRIIOHvG*7?I=Im=ZwICs2jgRWk8SgJ_ft@hE~6Hr zN2oPA;Z!pPYKYUJf+r7_$7no;<8U`to#u1OqHnq_VCAs@^}QI4e_>(FGsE(~6Sh_U z&!(`99j{SCIcKJ=c;8@W>OW&KEHTT1Zy;&`S%Z1;0;)m2**>Q_Rzy83W?^aEkGk#$ zoR5j-_?%L>0cR*&A5u8YhQV_!I?K(oC9?*q$Bj`7O&3)9jqR8ana3Z9FosDFx) z==;jjEj_AU26bK=)Z=;pZp7Kz?;}q2Ir* zvKgoz&qGD?CJf?L)SUi`y6|&UFug-vC+Aul$s(xZ%i=?Ur@8Bd}*@(deboNsLbYlDi7 z&Zr&_!ooNYlPmwvQqYO_QBmn^wv{U%>cEaz2A7~3@+&Hs{)aX3FVq56a*K_~Ago6{ zjCymrgu3xl)MGx*clK@=g~_?U)0cvRa5Acgt57}Mj!}3TGvHIqi3zsa`cMkTP~V1X zK%s3uX9@PkOc-~&<$Zo^O1%z_#BWdwTDBeJzoNA)1uYP@P%B&ye2=qG&w{BtZT}op zkG7&3dd_EsJ%i&q1Ad zAC-pBup-9(-scp-I#?Vhp&D=$6`bc$bA1mL6ECnFrr2Z0HAkgiXVeG`-V?UZdNbJ2 zo(=xJ7F3;37aW2*a0;sDt5H2afJ(0`s0Q3bJ#HVOM)VE7ME^dY^F(!=fp_=Y)bu@I z9bOQoP>>yuP$#DS!Frqnb%9ElAB!EdnCOAksE@@-cn%eujStz=asgJQ{s~K9)x&oE z@u;5f#r&k-Y0QD)e~;K)WIJYaod>&fU}01bS78lYhnkYts679KijBm_Z7Kd7HOF~8 zi=d*tjAujCNOkx24@Raw?1U*O+BcyVl%uG0Ig1*RCs>n~{)6g4r4x4HMyT_8pq>R| zz3mH8=WRw!$v)I|Poc8t66*SYV_fBb(vvns>9ICD8l!r;4t0ZVcneRV8nEt^jlgbH z56_@_eis!pk5Fm+5w#G-J8e_c4%M(#SQoco5#_({jL(^e#c&y($1T|Fti6<`{mCv| z2ekmTN8PX|s-Xi>*)R$ftoywEKcgCS6O|Qzp*rv{w#Inp$p69=dQ#93twHtpTd#f$ zb;F-f>2wu!Tol!S(x?$=g!!;DX2-8E8joQP3|%1q^H9il!P2TN z>V%C%pr1p<4a~HFtlbS|0I>)sv$xl*OwTLN%}=YU)~{j_=~t zzd$u$Eb6@QObWW;GStv)N45B%cffVjjURfxMGbk3%XWM=)CCKnMzEY`1Jn&Vp+;~3 zs-v?|Z%Qky9(ImW&!=Zaf*Jw6PARtHV*=%W77DshQPfaXK=q(4s^xvL9!|tHcms8#@O3+G8D^or z8TI(Sf=ag!sD@;|VcScg8qyBcfWhd#|IeVHo-IS=`8L$TaUC^RPtk4hP5TIz1&gyJ zH^Q;(pY%NFEkIRKJL-A$E|`gW zUo3(PQ2Bfw)u5}WV0?y(frP)=NTx=maaPoEc~Em+*|Ux37r%vVj%KqV4+pG4UGNvw z-2aUlnc!W!KnhfLYGu=pF|Dyuc#4tfqFwqa?j^9#=KY=Cxs~}C@!Eb zd6FdtTU=yM9;Ak>S=Ce)m7MfGq$mdCTG9wzw1uA2+h z^OC4%L`}?veO<}FtapWd8HE zCwOcPNQ(;IJg6xuB9;Hq6f~q&Q5S5Bn)}|UIUa_(;9N}abDXbHX?N<0eOXoWsl8mD z!8UAf{-;I%e$+@F^}L3W)c-_{#Aknz|BBZ96x8xcsD?B|4Rudc5UoZvXb-9f$Gz=8 zp&I-<>bw`Iw2Sr3<~RYW0VPojQ(e?`24OlJ^Njp2LSYpfG{iSh7kG`j(FfED7I^M+ zCgA6o7gyqFyo8$j1~2T{&;gZh3s7%Fdr@=!1{J&+UfR?)L7ms}CHb!#3}i!QoQevT z?Wo{7hWYV4Y6|?X%p|Ch%Z!SN;;8)YiaKvRDhOwy&ifXtGIa-09gX$IrZz*Eg7UDW zXLHn$4n+<9B&^Pf%TPo1_-{Kg_FHRs22{g~qeiSPDtNo18ZZcTojIsj+JFV{2u5M} zZwgr`r1-~r5{-Is=#3hQFEA&5iOp~~YKjuQv;8SiH^`2}p+;f{ zDkgqJf-vmd^bYuhx?$4ywiIW^Na~F|2V)`X3sFOT&fESNHG*+ISP*AN4RJBdhxJj< zknz|OH)1i2^-u3amL>&I7ijD`0u@xNQBi*pwX!|JXiWc~ z#YTHnRt?5ToPcWhI_!u?(S85V_R0Is78RB2Q47TPo`+F4I*l5kd#J2=#oFQ_zi{?tyO(~cTO9i=B7Dn2>YOJ^d*+XBUsJH)6nmC zMq%xM-~AwQA?SC0W`Ew0-wobigx}doJrSP6lc9<5z`-bTR4{u z3ZAv7mLEYi>@sRZenUn7b6kN5V%c$9QNef&%i|f0#Q3qT19>q-y&5X3>Ui5*p{8a? z?6BWav`%D$Zu|`n!2_u6h2!|$U}=h~&q3w=E^LRVQ4Px#*Y8GmO;mcdMs;WossZ1j zI(;CqD9{JE#CIasD`{nbtL&`e)n7M z?5Oj*U}2n&3c};4^&)(if?Dx3UXm~tcGgPK-4-i4f7~0k5bSQ`U*9)pC>Z&pjNO7sHavt)CGHa`={V(>MO7| zc28`vvJV?le}hW9>PhUp4ydQ#Xe@_cV`J{`Jfbj~bSj(F@4iePP3CuU`1u+wx!--b z6iw-OqN#VrogBYDm0h4!YQHmy^H$D?#j0%((k@O-NipRFFMNazT#y| z&s1|<1q^Gh>SnN^>5G-APez?^5uf7TjDB}TT$jo3J}WMw7La$SC3azEzx!A|jnULU z;8rY|#qTV~zpxZe&+2#P;#vFx+h!yG$I+6T+5GMj+=gz~V8>c4i7#<9=E-Rb&{ovY zy+S?T3+J+-?u&}@6F3?F#5OoMx8MB@h-(;0y;2^#erHTieMcVhUn|{JHgv`pI31hj zwF~}%n#<4f+0=BvYSh2QNc;yEV#@q}r#@~&ogY!a@4m3i!?n~?7xcToV{!!VQO{Gz z?|$EyC|ua@ex@6Q>S?MXe)s#krC5pjL!6Jfi~8L!n~$SLCUG%qNFD4)eKFR;&x+er zw#16m2clNKeW=&_Q>dW4k4Z87F9oGv;u4m(8LMxq!hR?1=| z9!AaSJ#YUbRP4OK#u%z&S=AC1+*?skzl*4bJwlC0_>;FGOVoT#Pb$uN)LgzoHS}N94T6nqNaNyX)YGHpHXkY`YGGDv?QNfg!>O;uc$(An zjV-P6q8d^fHAjt54eEiK+bO6tTJF_%pcayos2<-yHQ)|v3jac_2XUKNhw`DWTLE>S zW*DA8p&tbW;XBma#cFC#vBtQH`u|Wpo!rcBGz%4^^RX$eLN)LsR>lO)ElZl9uDc&K z_h(TH*i}@6Z#MVd|9@kHhWrJpN5K|0BFRuEW<<3(52{C%J$qn%>a*}1KEV9Aqov*8 zA?o<2s3}X>%H}==szYg8k^gE*W^YFh)D82YhN>iLEw6`~)9$Dha1v(0`IrNLK&^C- zu`0erHKc57oBIK%5nGCS`fWf3@y#%WLKNb(@lL>z)CZu3@)Z`t5^e3dKhSdP;v?JDZB?s3BjAdKm3Qb>J*&1Rr2hKf#L{fpFrE*5g#Dm%_|AfE@)o*$Avh&G8SY zm&+8L{mww@X}kE{--MitYG9_W_I}VBdr@DAUto-G7E`0~ck1VH3vTc3*RSn{o%TKa z&MY>h?&){N;AU)u`Fhzq;Up|W{U=nm#Ov*Me;;@nUZp;)kKY-O_50FO8h9N$QGeOb z@7%27|1HXR$OpJ|FCNzv*a-KT_X;y5O)OerFrr z!@qIf7xp$gbto$$H;x)+Z@aaJ+cV@DuHd+`BWxYGhYIpns34CRNrTm+6ciMl`A`c? zQLkRkvnuvsdmYrA9!5R?uc3nKE`Ck}{>0wYV~(d3?^gSxtk6;mejA}soiS}tZ2P*&9pcbs}QP;VOIq?lD z4bxAu<0@lC>dhyS|LG{KWP?WFFzR7(618;xj(Q(>jp})V$rjyNP(3SxYG?)2%2*q9 zUI$!)1F3*jL zX25zl3Uz^>QNi>K6x0b-EC0&WB(goR1ozA5k%O8#Mxdp++h&+g(xl{Vxi7YGp;; zpa^Ehs+bk~pn~u#)ZDK2+<{u6kE3pI6LtO*Y>EG(Vx##STPZtXb?OtbGX9KtmH(;c zS`5^{*6i4Ux*2#hDKyK6s z6-70y5vJn)PFo6!{t>8H7>By>Y*f@Q!VqpnMeS}>-XHQji@L!z)D7;T=GIwgBbyF2 z^tn+FvGS+}v_bdte|HKxaSCR_4XEfnk9zZYiOSz(Us=5bs@@tE1LII>yT;pp5F@Go z?rje)vMEZ3TiBilb=^CQ$bZdQV6n|zQdIh6LG`!^#HG|Tqq5+bxBVh2*8b=DW(oPPAPO$E13$-()U%)(G7abAN>q>)US`klN~jwS z!I?M;BQfD}YjA$llomlvS!q;{WJLDy%>~Jt`(TqlS1YDy9~rvS1IYBl|tiB2yoBezk)07peiyYJ2>~ zLrp~&)D6#}V&M*|XZKMJdyiUZ(yph|A}fyoUiT188Di9KFp2%Fc$ZB zR#MQAZ$t&fHq?a=pqAdV=r(YjMSnVsW_x}tiv3YBu?aQD4^hGS9M$uGQ0FIHZw<+d z+FlyN8luJ&)ZziC9?wR#{Cm`pUqGF385N{|q0%qq2CrwRg(@Fvq^e*(?1Gtb5o*K^ zqpo`u%j2^Rt(2^*p3>h z1E|>f88s63P%Gv`ul^o&-A}0V!m&5o5G6t7X(QAHnxanZg6iQg&l#v2ulDwT?`=PW z8nHX5IreR_$9GB$`1pWP$TmJ6-05i+CwQn zs;3Q6FD%_r`&VIBJcVlTOU#22+iZJbtVq2zR>HNIQu+UsLZlAdZav6?8uF^B3%19y zI28-wIn;%NJ1p7@qSCMds^Qa6``2SjyoRl@@J@@d`KYN`qq_2c0|m{=Zq(c#LEY#) zmcr03dv`03i>MF6KA3Q~y||1)_2@BX#C+d-YdtDRTcd)zBWmROqegZzhSlP)C}=hl_n2S2fp+6$J%3QnHfv7y%cKdhGTKufr^1=s3}Rf*WUk&VixKhQByMwH5DuO zlK)z%92MsCGz)GP0|3%y6BSNa3?gU1|rN#~)0_tFpcz5iXT zO}+L(`+2}}Y)joaWLebi5c#jUJIe;G;i1EphS^ZTRS^^V=pib4rysF~?)5y4TJvw9 zme?n#5r}=%u9Fj$W>s(`*2DaG5$j_xe9V^ICa5_aiIwrVSC4nxJ_j^F#llk5P~Sw& zZL%M2Zd0R1Bs=Pc1yHe63N^LWP*dF*6$@ifBOjhgK?g2G9k>>i-$zhca1|8`FT8r- zgk2yFDwuMhrmif$!Mdn4u6)w(EWp;7nh|`9GpHvy?RWo-cMZ}2e*fc)U8oEyI2xjQ z))m#0-l!ITfw^!ZDt&gM8on2`lVXh)XU&j<^OF8>ha8< zY#msO8p!|x~*zp^% zD)o3b?I)d$Q9Y0Kt97I`YW5;Y7ZsFaP;))ab0sRBcY20TP|&N^byT!IN5w>( zyOx%8_yC>mSsOQr)wW%Y%xUQmBQdChGi#sPhJ5Qsw^w3fb83 zEh^ftqSELoY6{+<)`P(BcH>y6ph}JE$sW{kXD|}4qi*;fl~w-xR!@k^l9Z?*%GlR2?~nN52zLH43sI=~gLvbdC)#5mhY>vyKf@&0MF26;Mz+u!}{^EJx+x{ApvOUIQYe*W@R1`$r zupDZx+oC!+7B!WNaTl(9O#UnHn>_KpfWRiyH+XgbQ(I~yF%8>`qk^ajY6OO$ZZsN| zUMo;b?0$^EWPjR-r9m~UIO^F^1@(EM=AU7E$kb(nde|Iwq3);?CSnSlhsAI+YEJ(^ z^(g8u3&LWksi=ufvD?*r%}*?a|A15+!r>q^-#gs z92Fy7P{FqhH6r`)I{t#{`R12462~z!^{Za}KU9wsyt3m`pw^i@$Owm>Y8156H9_^H z1FB~Oz3szM>%t^dP%cIFU@NL2r%*kq`39cH;4)pw{NJ&(HaJ=Bf<#!MJ`V|kqeb-@;>hV@0QBa=}e+DAjlV_>={`J+S5QH?@E>o=P%Gs= zjKrT%Q}!3SzyBM0XBS9`yV+3?b>XL|5%ImZ3&g^b)Kj6RstGE1yP|p;Mh)>K)X2?8 zbzlQ(s&=7X$h*i_UvnMzgIzE&>Vg?DHx@@-uq!Gn2BUg95tYZQP*bxG)uVl= z<1e9Z{2OX2{zNq}$46^eLDcb;Ka&4iP+GA;HyDZP@pSLN`KTLgKn>{uRD+Ltp7!=% zM2*M;ul_eGzhnPv=V$aRikgZVs0OwQQ_zjOV;3BT8iD)R5Z|L7uXX;jq3e%o;6jYV z6{s5@Mg`|3Y=(F71(y6|KmE$hdRL8lEMLHlwFanQ43DR9mcmvnh$H<0H{Z9T^8FF2 z#Swvk(+*RhreGMlbBw*HZ$LF9MbOU6hAXL8!tMA6=E5bRfcx}3jRbkv@kaz4Jr>)d z-dM(a&cuz>7kl-}F#_(xq#i1m2B4k^(@=A}5!Ij_s1ZEjc?)Ave}y{kUwn)aG1Xx5 z{{;o*yFXUIIfPNDA-snhuvF}T``CPlxMqZ+l@1!PArYuUKtfLwNVWjhl=_Y z7>RpP$K6DY)bFU6dW*{cBnbjxH@b5supPBg>DU9?;8ZMve`0sclrZ4_EO!>FM?Df* z49r0d^;T35kDzXR2{p1ePz%}}ul^cyQh%2yY(3AM*m_t9)xuh+6T0IC9EDo>>Lv-e z-|0-pLe!t)b4;H!;Qnh@iIWAKf2hC5PxvZ%Kz~l|yh;&p*5Ino1CD-*UO9EZX@E7u zX#!3Q?MNGNe}C^&x`6w8fVCp6XBV&l7y1je0Hu$zEXj&Bs29KrI11JC)f$7t%!GX~sGNJ~(kh^}H?w)-;& z+%>%cX7=+j9jmZ?Mb?1(EO~_asjtiyaDO%P7d%G2Rdz;3`JW+2!2Qg23DwgiIjyHv zP-#^Q)xc(+-SIs2;iw+e$Yl-afLcE$qn6gWsGwfy`5o%`gIEl&VrJ!k!rTG(VNevc zw%0~2AdOH%-UD@^e%|)csPtNZT39w7|1n143)EC3&SOh$D$Gc|GAg!uU0uqIB$>!|$hl;0MT#i*X`_52mJ9{h*ZF-8H)^ZM97M2a({-da&zJe|B7Usngh3tksP}f_4 z>fkEW2ya7OXD@0*eSDC|*emuJov$RYr|KYg~)nPz^{>%C4UcbzV3(1x0yzRLiTPUX5C!=5zomNDtu{ zj4o}*9YqcKRaBbBEMq~J1Qm3dP_a@T(_u%wLKel$AYMau0W;XQ_O`K$_AWiSQisBvUl)n>aWUKgBF$7Qcu_RQqTpj zqFQzj^+NI<_4rI%!D6EnYR=oBvSJu2CceW+{2mqM*HOn6u4utn7iZFd;n<4p@hS)0 zm)jngO+&kwLKZxZIq*-^kfp3*Jt~GrnfyLDmhA;=*u&?0RM7r~v$;XSn)U*-rk1^` zb*vq5Rq?;3^4JZm zfu*oH^_JKe_n&!ASo9F6SRP^S_3uMII9+fe1g1Js+KMkHC2 zfcvl8l}7#f+zr&il(AXB{ZeWxW~crf2Vkn^wzkj2a@0>_G{$RT!B-2bQXhgExg#yY z){+No$jpYNEo}sjp`!IUmcY+j1>8@^jZpc&1oPl=)Om049j0z=4NKO>dfE^*GDEQ@ zUcyL>Y#VSkVc9SRMe$#_9-FnZ1t-wnZcrNQvAq|T#lxru1v&)Wp8=J@D%8J2HRK(B zhmjov?#~G?qUt3&*@E^IJ5ev#*%rR=VhVlOa1Ezp)h;&l*H9O9y4u2#1vR(P7>xt4 z2=4Uie_|!-xw{42-)4C&Kg6!L6W3Bt`vtFV%Ku{&PGYQ~cH$+}96iM-tUt_xZXoK-Wf>}+u3*KO12|*c3G-3sF73gAFm$$bfSMhhbQ0P?{{zlGzrOb~CUe?#8Z|W|ZagMC?WV zH{6M}M_ZbO#@KmPPz~>clOccz2=h_i`-xpP54BxPbdRpOvu;^<}77 zxQ(ST?|9aJ=C(I#Y5ih?1>;<-O#LKkDiTbz<6EG5z8GuZJ=FS;XHvlZYne5uv`jvk z9%^oTPqrIw_Y8d*aDQIc7}e4%sFf}_#ipPQs^N<;B@H`_E2!U`YEQ-C)68#C=if$U zL)_^$_uWxbnJ_%VhO|0vWy4<7lG$UX_3SImP5mww!UVJI;Zq5BQy+$tvB2zra}f_< zZJaU3((Mjv1fu3zF!sW+)X!ivhHKBW{GRE#0oBqYsF%s8`L@IsK}}6N)MIuPY6PyM zM$lPcD_#Xu&$^Ut%Me6Lnlu)b_7YOZElS@y=4+FU&U-6j+IzuBf43htc>8 zsv$|2aRKJIDk@F;FSqR_S6I~d!K`dwi0bKKoPeoU2HfA2UXAIfr(9+47sW6o^|~0v z{hjU<6xGvEEnbhx>o;CK%WAv80Mw1uq~&)X)yYvUnIv zVqk-vAC1~R7&R4pHjw|{PdkQ=F2?1UaFcD{ zii(jJcnNcUYg76O)$p8~Z6unYf_L3!@;?=Yb8M)Dk5NOKZ;QRfj>i$yS7Ta?`py~@ zjau8=U~fEtilJOv1Mc4uc1KOs&!`4}M5S@bZT23}9W~{9!W0@&_ysj5Ikwx7mcuCO zQ*kkFOy6gZ>+3j~dfffI;gBu!@ki>r57?ZK{J|bR zhp;W%lO1%I?65P0!dGlKhU2i+AzN^M#|6|sI~;I-1@mj1M7_k3fb*}8M_uU1QR`{O zV;1dAP$RY&8)Ek3wlIxCHE=D?#ymd;9G@@D1t@f6!?6?gLXrKXeWg+d+pv8emd3v& zJuh^MPdowMfX>)DG3uOs+C7Ylq0Hy)gG^7>S3=@EYpI4>1~@ixv}QQO7mLY}gCK`6(=< z5Esv&UXiY$=Kc*TZDL=tAuf!%KsU^Uqfrf9hh6a?s;Ak0ww{(i#ZC{@4f}g8#Te92 z{7n9*qi~)L3chEk74S9c;Zyb(>rrD=x^%*!I2zaDM~p+Tt-5RmMu_uF(&mIm>wIV zVqyrY0kd%;-bMAi>uno}UKmfup{_RpGvF+*9^Oeob8!f@Qk_HvQOr9wcga!pv=|F> zdE1L%9O|V}F;ES)lD0$jcqD41=AjyX1QiQsFcDrtVugSIlY&OzEvg|Yf3vkY3gc6+ zf(fvRXIIpXhGKS{kII_Es93s;>ggMAyK~nXngrF6NYr)n;1_!Sm!Y5=>_PSDw0FQ2 zul_$&&tD=x`g1;_g7L+DJ1_17i=i~QlI@jnHU5ExaO(d8?nCYfUZCFdAx}?&vh*K( z+ZLuU=#jk|`JY&Hw!XqB^RB?XV5@M|JcU46A3qQP9voMh(qN)Oz55VF$)Xtp}-4LzovcVj0wm*8%l( z+=%M&X)KP;OPksfsPkK*7PfwBYs{8zM(W`kZ7Hlotz56pxAp@Jp%E1TQ0s0O#i z+Sna+!F`w+52HHp2S(yQsGg^M&6>~DWk+xh{A~?B^mo`!yu$`vDB`VMI4(v}Z-Lct zBr3{Jp&ED>Bk`?QPw|fhVQy6PmqX=wQ&hSQMvc&7)C#*7H3C<|6coL`c?Z1qO#IH) z@cgI|sE&&2R;Ur^in>65RKtg(dO8M`9dl3(*@7C8A5q6&K~3Qu)bZiJyaPU=9vboA z+k%l56-0$m3rz{s95zIq*bR03FjO$jMUBh~RP5~XwjV{^@VvMEwpV|GG%)PE_jV-w zU_DEVdWd92U8p!}ges#N(A={Rs)yrI4O)VlvTsqrc^>oPYix*_K3YSDd47rR-~WF_ zLC^OKs5y)OuiYpYYR=1{Zq&@H_eJIZWYmx_1cUAu8oRJ5^>m@26K+J|3kr?#0&3{8Mg-jk)x<;82V;IL8YAd7 zpgR_(o+)O~?P&{~L4678v6?eh(2a>^xQTivoQR2I2i@-v7UOQ}vEu~8?%(epi4%0c zn;jfC=oF*HY2yXmzi4doSf98Vc#7b=E&gQ<(%ur;b-r!f-mqoyX5-o2nx9JSz7N3Dd-P;);B z6&o{9OYj1Wr|16;x4;_;2H0@{X_@m2>Ov2Y&yUV))DW)99CR8`zmK(uonriL?M5Fx z%^7rRu)SbzMv(gGe3nJ)^V?KiLUk-yz@{uCPU8MfT?z&82I_#%3fhq8#@y7KVJ4i6 zb#V)3MPDI{?(C=@*7EF(YUn78#3Psof5$?YxG>p51FK^AF&pX>3A*3cl_(l?f9?J- zszH5<1>HY5Sc6(H$`rQ-eT9EeKZ%2IYYA&u){?e948@^rFIXz*{-yL5{6PKd(n0t8 zf>mXL?zd@A%aH%?*ij|g7Kn0XEnQBdR>VBztfx)!3+iKVEPli$II6sj%yn!>{S&su zb`^r|tJpCdPrXw`OUI`eMLkU=%ce4w!WOkZv!M|?e3k8jO|U5Sk*I}YH!8X>;Usjb z1l^D0lQBKjd{u+)H>V9yX*wL0ehI1t-LLm6V{_`;Q6n3_deHr?oAO}_x>14}*3zn| zd_Iqh@FR}E1vPC7lGd^w_QqmtzliE#oZ6Ppvv45w%cv2lUMJ}6#m%VL>RQ*bXELfG z;nfrrTvxFM{);8BT0L_DmZN?IA7H4y&E*sPMEzldp!=tm4;u#EFC@k{vg_q(Yz=IP z>d*{S5bnpa_!JqTu#>xqe^GNisHnomXF<#Etqp~YwZ;P>(7)gCLD(JWOCjWJz>ugYun)b0dn~xf@gP0xfqno#V?Uk!M>LHS` zU(o%ssVpk^E}+hf)8EoDFE*q;0JU(PMx|%10T#^1!W4cYm@*BtA$v8*(rw~kTj5UQ zHcrSe#BO*6t5JW2>S5_GY)Kx8iivM=E7!Y-dMzJ2%;tIqMzei0s)5gj+j-$6BkZwQ z9s}&Cj*(a!6(oI7OYscUy08cJ9`FX0HL*w9yJ3G+uzu}%*z;GcpG2LPajczJ2z9^m=zjm# zh=N|3T3|99pdB~`b)i|FOHt{x0b}ApY=$RM4a_jk(kch4UKEub(WnO2L%kbz!t%Hb z!v!haqoBD>KHjpRzUNHTtJzPeIlGFw@Jm#W-lG~4XM$}{f)UhHqtY}3#>Fx?8f&0N z?40NI3FN;HxbJOvf$H%`RPe=|XnC3iqo~*P?2YND&q6IgTTwkdjT+itQ6u;amFI6z zuX3p-*>TxX9Vt19U{Z@Kut7bkjykacD&L!VPDj1P9zosc5^4nQd-XS{;EXZZf-EDp zq}~~WcpMcor%?^Lh6=)mVG0`J%wL*$Q5PzXdImJc8rT=r&>v7OKaOhXPpAg{jOzIV zZ~H%}8~ulBc)Tfgej3#FjHoFM7oeaatc9AJ&Zq|ULrukS)D%rZHDI3S64bh|8g<@J zs1dw|8kxJOhP^}uUvR3K0@cu*NW;QT87nxoQ75)WwXhHB#4zfFIjHpd8WkJ+Ja3?4 z;T`JzA>}l)GUlN^5ETP!z3pdEBm54dl>f=5+tOJSHCHWAL)O--_eG7!AkR_gr~ak4 zf0|dHjq1QWRL{RgHT-*2N6w(8?2fnp0Vd)8&RYsfzqm7OZmXb%vJNU}ntIziqtdFk zw|@$1=;wO%<)|rJ@6~spZg>FIp`)md{EX`8EeyAzaF2rKw){+sg=(k++M~92!NJ%Y zb%TefAbf=r@dK(MV`tejWIAeHnT@*63Dk?nS+D*Kb^PmDKzt{xZ&kwpkQQhyED!d@* z{+~{VqGBPm(DHsf>VnI?`W@6%yu-Zcd}Te)=h+13vN?>3nIwyBxSYuNLEN>Zg|2=YjQ0gYNJB zS6UWye!Bsr_Vk7E{uob>Qy$94;rQ;d%ITS9D&^u63I&rNnAm5-yD6L4B-Ey*C!XgQ)a< zg=$d5_vC+F3Q^w^RP?An#>0_&_$~;i?&ax+r}qWjfAcN*0qa5N2m4gK1$ADogVyt+ zhl1`enKVLmU>8=#%c!Sln!^@j-EcnjF^9uJ_lM6Zj|83XxX^a2gB_097YI9#^X(Y* z#y>Jt`1%A(C=NIkbpP6YF>o!@Ecj2nD+!~Xs^d2h!JzXqL?ceOpvMqG@VfJi@99QjMzNo|=sHJ`%Ho)I8to$wdA0M;*d}E24itD^K z$WN$W7|!Gixi`$=54m~X87HuR1GdJzfsiu}XQJjhY0%DZiTOEyEcV4+p^&>?WQ`GW zN4jqeKK~r$gl%k4&gkp!cF6rV9@k+M7d#XvBWJQVt& zqJ0%==zl~#?Vh62C~ne_`!#$%98SF@>H;?~KR!Z@Sn6aUHz*sTt~VUDWUoNIlyFne)2(`obxWsc4 z>U#T8*STW#u=6hkosc}G^`NfjmspaAMk<)v8k`N) zkxF<6JEDFKzhW92$t!6k`R`8`a=*>ajnN#KJTm0Ih%`YppbsklcVHAgLJf7CsF3?T zVFfHnJ$?F+`@C&jUYro=1(qZ=UZZ_ji(HuxQMUnzLf4U~7r9aR}-{aWaP7 zr8qTe2#cc{)E2AJv$3d{IF~8p)FvBlVN>e4vWDDWP@agRsdvp5a=%r3g5i5?D4*S; zHFJ)T`zBKvwdRjO1>XwPtJ!hX%6ALzV~m`({VBE$@t%+?p`q!&hu*PY+JubIehQ1qM?W3AsOTTwT<9+Ok;4{W)P6OLJc4 z;vx4L&=D2Yf1sYCz7iq#JKh{6&3>r#-h*n;|F9~?DMkM4({002W;;~Rd!vG98V@tEzLrOUzQ2+<5!|MI^_N;b+xh~_j|s0s z{peUV5Uf{UWEqZ=xSrlZ#Kv!4D2Hn&AluiY(C|M1XUyn$OAT2@VMY_7xF%Ksx2 zrg1`|CN=^qJP%h*)MxjP5Cq`loR8aQB6SxT#!~>ey)O~1f3s-{{ zHZt8Xk@9~Sg(#fv`5h|FE@32oM9pcMmR2v1S|2)~wuez8u@=YSP1HKjrj;#Ry-`oQ zHJBT>pze1Y!-{sNwGDAvRFCRl92Ss1m=uS%4LR%S$?W#_j4093R?3m6b>Sd3Xa7~y zjSF50&L(V1|k`lEf|JcnIqCj^G<|J}G{~l+3TkA!ppKh^dRp$py!Z^qVB}z1z*b`_>ffQ#_bj%>&=4E) z&X}M2T-3r8K0%=-g=AlZ+@E4~z=71ypk5ft4z)S0kIIsE*bSefrlk2WH;sE%YFVGXH^#9G)HNg)S2mZ8$;G%5ySjpV6@HSi}~fRC{wQ>L$2 z>WreNK3*uWBK2#dE$`Eg3Auky&=4Q6{WU7sZj7~OM2vAZGLcwO`QMbnS6pa0>RC{1 zg1ymHLJjdq%!OM}bA1angs)H!k<1fGN6znqitZ_sY{ZtMI8 zO~QWEM}KAS1+P*2H!ljgzZqF*amfAJeHEr=JOA2*6WhEaMcAMozQ@5BSZPB&43+0IP_eNC^=@|<pn~XERP2=AYwJc=)C#!>b;F-f z!TA6+HUFWq>hpc%zb;s2pWUD%YL3IG{GEf!g73WgIaEWQc-uq!EqgMc9#(bHec|xx zqfrf*gF0^`s$<7dBlC1W`Jb19|A4iy0O|rYJiB2T>XT3>oJ747-o_|=gOQm02fIO0 z)Ckr?y`oLRvbY-6^9QKw`wrUi>B1CrU@=rn8=wy8feM;0u^3)P4Qc#CUKXIzwh`+1 z?x-G4MlD3Ez3pc)H}%J;>!&Xa?ejG;P7Ss@5K=t@7Dz*|IwdcmsH7@uQKAKw8VvmxDc z+%EVG_1KN`qpffaQQ5N)wL<<6l^qFASg=+`HJ~SIq`yL~6Fbm-{$Hbzo(*YFTH2LG zU1$t8#!Xn*&!^i{A?F$O5@$k=pL&k7A@{f6a-XvojI~&h{g+Tv7vsD&upVkk=3y!P z0hOj7(f#-T<6N+O&4QKLQ50L?DAa+sP;W3#u{5TG(SMMF^7A=r&SU*-X_XuGcy8f26~|HE@9i)9iw$LOR2t7gHE<8= zy8qx(%y!vcQcs{_qS_U^Zl^2c{~Ym8HHVu} zE8PXul-)(G8*#2%kY+`K%&Ck;a0Du7ccMD>?0VQPlRP)XcLxYD9-4Bf$Uv zn}RNQ6m{e47>P0OhuoiBWWy)av;EJ$#Y*}x-S7X7Q_xVqK;>zLCth0NXVk}{w$Db***?^IaT(Raf3OyYp4uBy z11wK{IBJ9rVKKaloiO2_*3lstH_V206m+8b&@`ZRj&%6!q#@j}@{fY8^QAxApi1Y9u1xT0@$>CI2;~tTE>NHq)UCA9@A$i`s{+={y1XCG~at&SS0IUmE8 zmyg(>DE^4$F!jIo)oW|i9KS?2$}y69y8rA((HKp=3u=McfQps77>Thz*~sKTUAG=; z|2)+7eh5=gn%%|{SjdTR?ThWGe~ao_0$+st@TiCy!m+3*K7bnH>!^oLY`-1f5Z6=x z5*2g>0uko`M#ff3Yl94Mn&uoq`pqpF?Fwl86X*NIRp}iMiMX zpP^!-NepYyNYvwY5vt)o;vW2fYRJx*5qjx%QpbwWLKb$GP|yOg2jk;u)CF#!qBkOT zgwqkzqV|tNjlf*gl6npm-FHzV@(FWesyKGtYM9Q)l8stHhsBL>f3;%QlYQ_u;A zQ8#*ygRxP(2&cK98{l@#o*=^gYnI!IBHaJ`^_0XB?o%^v(g>#}H^_uTv464%_s{bF zN*>`H({)os{GY400JpOE{gF;djn7QRop31Wqfjm`nbyvM-Y`gdCDf|=!sUMr<(cQOAWV|Z zXEw0PFm#2CE<`kY%cu95cxV^;{~G z?a2_>m-G^-Nt+x6eu_nd@TLUxj6&0<|!24#1^38_rUwdM9BD_yv24eGX;FZ%`Xf#(X|+ z1zZNTs>JJUp6E%IBS-V(ijB zZx6gsmW_q-@fCdLE?KUU&wM3g5!7S%3Lo25ai+4*`?G11fl^I;=A^R`4kSIVsn0ymi`&d+9=VQ# zi^zWhE5RwveddD%-$9*(j<@i6U&1~u?fy}qmCyW~Uw2rR{1;FgU9nGn=HvLCV91Y! zSz7zdi6w6vpZUp!zHkhJ!L~m0>}ERDhLpUW?NMDgmvo2rK7K+0*TR2Ezv(~&r2p>d z^Nx~^?CkRvkp3O+Bt5Jvt|y(Zo9$?`?yP?`RJn)Gd~WY7)K@F2_4Juf#Wn0@dwv5- zu6l3g2D|{L!sUJJYRTQ#)^7r}^Id_uD?WwlamIdj)zpPL9S?s{1e#Y(2TWj+ zHX*%zxV>EmN3fbmcYxYCcR+1Gp~pm$6N!f>l#v<6g%zMSn%Xc691OJ;FN1RNNvJLR zH<$+oNBYc5s$x(b=?wLnaw3d?E1`D8ub}4A6^P!Dmw1$IxENG}jbJ1UK_6TRbw1bt zW!QeGA@~|fQQFbg#f_o%{&i4t51=~s5~hF&$5>{E>PR_QRqMYKk>_M=gWB6SjI}*D z0oBvnPzR59FdmFQ&hC(D;Q`VGpyFfR3CPq!USJcIQ=2Z6jqG^xH4*`Z!R-6RUmW~+t6;6bJ5_{>YMM^HU`HrIM2 z@jN?p5m1I!gMQcoR)ig35x5a@=JS4ox(&aX$NHB`;?K7k8KGQU7~X^xpgfT|%8qGc zC{MMAx+(R8%isbS1&c1Qr{@b$chNWt?cK2`EJnHw)Erv`HEEA8WcI4(Psvb^b1bsQ z?7px#>20t9{1cXkWf$8q90jFt9vlJB!@{uU5<7&Wp*pt1@oT6#bQMm7e?m>texapy z7LSDL`9a4sa6aiPumbG4%x<~cp*E_@%Wb{7P_CW|Rev7T2Mkt2?R>jeSozy9HR;DN zHw><{9SjvEqMfS`G(CdlNS}uq%LJ>er5T}IpAYK5Q3h(YbcULwW1-glZde^&hVn?{ zYM=KbYy`EM@~p9}0x=}ywIQN0nGR*ZUZ@S{3Dgdle66*-42&e*6spI=pbQubwVYN! zdFl#Ohf=Sz%dia8M%4jcf-|8eVf*#E$FTlJ5%F+Y+zmeO4+`RKv^{+W)liI0?nDGv zk&c8i@C4NI{S)qnT|c*zIN}TIv4Su*`DLN>d<^BGS}-H*2_vLn77@8-2h^nb7E162 z)P3IDZ22)T#xB1#G{67fjYxJ1 zLQs=q11tnD!{jiq-EOTBuqNq_Q2D#yVE7HJ3oGrgC#U%^8R?rY{Tyl^sIb#+)#G7l z(wBF#{_he=vdf;|U&C6Yd+xTk-@}dx_gKT)!OoP=gd^cgsGHW%y|(8Ipjp>Y9eE1* z9Xl`mKI?&92d#&X!wY!u%E6GG6zdP$Sv~BC&-`}FT6htGYG3-yKbcN*%x6Ai_6)W_ z@q@4ItJ!MDecmzB+u&)~_k_?U`)7@X-~M)F_XvO|&X50)qCWl)p%=p8%DZ$J%E%)53=j)Xc1)r3sSkk^z* zTrxU44uEpaXsFrT;GVsGhM*?ZOc(yE&b@H$Ki z|ApEagRiZt3&QmDv>seeexEm-Az`Ao_GYvRssmS{JoXnn0XMy4E@<8NdT+PN1+WI` zFQL|RTrb?*Y+AwGq`Sbea6V-0cvTc`dYBWICtU|NgtK8Jya&~RV2p6nvFuPAT??pX zIxq(R|7;48HDpL}{+PC4H(XEp7Sw%xN~~~mGszS?+>0RH1ZoQ%0`tNpFa`VuYVW@V z8^Lg&)z=DYE=`5q;9l4cW(p65oAo>)JlwnvxDD%5P{D5-nh(uQ36>=P3G5GZ2g1z( zVfSQD#K~28Tp=SLBSOE_{gwmTowH>m)j&oop+V^%5QICIues~LN(mjBhwAwEY`3oP|Ir()Yu<|GUP7Q z+<5^tWbw1wIZzJDQ$w?|{xutClOZmHh2SQrN%AYyGEAP$mKT9Cs65o6a~ssL`mRgI z$Zl6baVQU#aclu2NDp;f3}wKf5RuhHet>)7;2gGM{+!lzwV=kVF{}VbLT$yzp@!gz zOJ~Ssmsbs_{83O_?KT(*&%#dd0o2@TklPv%nnpxDTnn`Uoq(FPXl_)%Wla9cQl^k?uB_&3zDEuGKKmD(_=?*A=_XqNVY_24up*WQ4d z{VDR>y}AT!LV6jj1D``}OjQfmInV^E=bfMonh)iH3s770eJH&t3R>2JX8n&NBA0#( zHCtaoRfti@Zl(F5w$`3d3P(YCWHFSdPC!lG_pl7CTiBM*g!0IKI28T?H78mZ2{(t> z5ipn5|6L;5`I3BOE0%^@E*+tIIMk&l!?>iE!PxL~D1)~{dF}v|%i|TbLp26!h?c>I z@CejuOIj@4oG0o+^ZS2YiIkUTF0YM zp11}zmu|bXSIX)QKux}MP#($$b+cMqiuJDwo5;{)`x>gD`;PHT+a0SA)G})9(nDZL z(o3Pn_-9xR#xBD~#SU2;YLaFyXNO<_WVUj~Tlt5gj)52K$#4bk#yc4!X3 zl%$VC&7JFzp$~aah^Qg|C*kIs4P9Y#3Bbg-vRL(S^RqeCYuJ-Z%9{3|atdlkEL+P? zzR^%Oo!L+gFNN~lKB#4P1L_{|4iD90^4AiwQ>CS`&4tpCr5Y;JEea(1w%)pf8R`8hh;$+r}0Y@b1G z!SA3poRppHeLg$XK2jWN%YK)J3RRD%PdHjtT6JKIgD9{vfn<;Lh^XL(A;LQsa(f--anl-^ZP zXT!~~EIixSo|J<9?Q#y~Cz24s?l27;4s|zN2tS2iL#^|y1MC5#F_fWGp@v{N)EwFh z<*}P^1WYtA+*|KEE(PnL#`p!)MwEP5 zxOwZeFHBDQER@_$xEL1t3=iPi3s9~O8^IwIre|)+fR9Jo9j^oIOL_=w2_L{#AtIlQ zvX*ZYsrV(FLjL8^cKx>*gR9A34|TKIJJ#;?x8NYsImg+JXBE`F;a@1ZlH=_x?*w(z zSq68)7!&LkzXyiulMyk|E|dQ7HVsXK5wP#%aP!b;&J?>WD^JA(-;Vm8oTCmtZVzgU8Il0 zW^nLayU|>Ny+|jTXAiBT99O_3!Ap+Mp@tyMe7nV$ggHpJfSR=9=QBn_i0mUn z%cfwIy%{x!Is+btQur4v3ll7`TW4*kNi-AcX0r$C-fht6mS5sUb{1!XTDPTPB&-Ve!>%r!d9jtN3`>&V8mhr1P|NCbmp%o}DuJ5J zk6b$L5-XP(wjw`Nj)*pzfX=*wubv*RhW92opkMB1JZk-dKPE7 zUGGg`MbbN9JNO^etZ%l$F2{Y4tvTfVLPQq+2Q{gZuCzT`12v0x!UXU)mwpW8u{5i~ z&AaBgq0$SX8r%fs`bV%l%)UC@{90~T*qU^eHTE^+23TJ==2UB~MLnR-fU}_t+U)f{pgT zu?ni$H>kN01+|R!LiO+_)Z}{rk3s(yYtUJ!$$154 zf_I=i7~E<-RcI^gU#{*?MtV3KO3`+x<#Z0VhJQl!u=+M@Koh8;8Vn`B7`B6Zp_XNu z?RE~7hw9KU*cfhvBVpK%aP!8+=p7;JlGkKtxy0RR4;-1HZaPC@UbqSlVGJ+AoTRJo zwyR?xEJ=C+jDSBt_4r>XxmbJbMw1U}uC#&L=!QXga#o0ldbZsa9Dy2=AE549uc3Mn zvDX?>3#!M%p&D8UKY<&dmftfd7nj>-8|(t5Zw!=&H#wexsvo*XM9bwlluHZjw=Qe| z)zDC=o63Ax9bR|k*$>z`Q498#9Mt6c3(9kEU>%tGpxq}1K&}7NuqMoU$UHX;dHsn@ zA>#zpB&>7T8q@`9mam4Ya0RL-S&rD7OAXk9AqhcE!s}n!*?$*CkWPElzS=DfH55ak zJh~RLz$GxF?Fa)Yc%b?`X zKuz9Tunl|-H54tswjJpS&CLpG|JVbyx*o!iCPDC&6-)&sSQ5&mZJ;J+cgG=628@U5 z!RJstKMV80M=qWIwAEJu%5&|Z3>*u!+?T*F;epevf6dmRXY65dH7rNE{8{U|(NG4S zf*P|Qp&AbV#_n)g;abVV&CG?na4MX4F5H_ye#Q%S-EV@mNXPh&*O-*og{?>*zsUM; zEy3^Y7CZ*Z;{9+b{28iegD%+~t%s*bpMf%D)(>{lZG)Lm{0FQ613%ikVvQ^I?zs|f zLf-e2?cjE(1Iynb7xDefUQfl;PzCj`+S%I)YDm_=!tgAVN8Up%*Z9|Lc>$?F#3)86lkK#lzfs2yxI zjDY(cuR=BO8Wx4Af47sfo?~~YAE_A+HJO*)GI~PZdLr6b4m$>J+ey+8<|V(MORs|3 z4~{~e3;uzc{SkjyLrTD6q?^Mka4ytjyAI`vS5Te}-m!Bhy&>zbIFaxeoN!<~1X|p) z3cEs8oC1}<7-}Qh2<3_AP(zURzBRNglw41!Rq+|rhP47}PMw09#CKhO%0Ibx(7soe z$QN)JY!9>l6>dIIFb%fCWfdRTo6M?*)&svnxjOM9+rt7-bD}nsYg<9hnNBV}4b~w& zA8Jd#3-iF3k6Hgkh!h|qOFO}CG&mjhCjIJ(J_nyLkUWa>^$iMTBRYv*%=5>Z?V*1U4im|c%A@2?iCHDEvBbS%3 z1?ha@e)AQ}sZe7!A5Mmw;AgOi-*3it2b9adgX7_^uoLVM@SC}D4$dHb7itS06!e>+ zSOce%J`oK0&BLYoas1|t77^EP9uRhn=QmHmuEQi)Tsgkqyg}J4q2D}o`VD>;lYJwR z-+cb>SyI1Oik@~&W;?Jxx!-$51F=&0y|(1Phk7@?Z7RPxc&tqAHycpuP#VA4YKK5A ztFcgHyU1}r)cg8BLG_?cI%~jiD9;>)s`mrbneR`iRS`SA->i}hunXzxurk~YwJP2~ zZSA4d8T@8aWP{rCE4p+osI9pxjDT~XUia^U?cgaW1-T;p<`qscsG%4LwM@stif|v) zYIy_uz{p6ynXGf*FxvN45s}5|Gy2U|TMVkFona)L2Q_Q=y8KH}@?IuuU}~u4RS|0A zX$RHA#V)-c%AluEcfBl`{bqSqfUkA_??~i51#PqV?Por-`pt9w-LNeAPaN}S^PAgh zZ;0jID5!P*7Vd_T+5KkcyaLye&X&V(w&L?pLv+KX|8w-`#Bkd8QWMdGg%U6!tP8bK zw1sM54wS3+!VT~QtO0xE@|#yU2cQlfZ=iafD7STSJ}5n9pgh_Oc7RJ@85koEzkgPa zNO>Zo;Aq$e#>#6IbcAYX0MyInub|HT|3DdD^EUJ%(Bhsfzi{ zO(qXik3TN%H~RZRO~PSNlY9l#4*7ZUkXS-*KVELhHO4w>!XGx9gUvtf*JdGx_f6|G^zD%n-A3rg=jsJm$B zHIec}vVCkPOBbkFzX;}oSK+5HSlO=cu246R!BDe&9gKuEtN6Wguov9V7;l3cNq7Ck zu8O49{pL2`9_seI4c6BBe?g=K8C7erRl+fFJcEA+-X`6nzTayN>ou?&%}#ih2A;xZ z^zcw)zc~Y@XzKTFA$J&RIj(Hx_ij+$xVhgvfGpP1Z@$Db8+NC>Vk;AN(-yB9)!Nws9o)VEus&)384NqUF^nmp_^T|7rNVuMSA$nCmF}WuGDMN z({CPB9*6x%XXs^JJqL~?{TtL|Y~34!Xm2_EnDos)tp8d>vh}sIdm!vU`WPIf{C=!c zxE$(;b|036Mf%fY6!n39Ne2hIn-W|>`Y4bAbUEF7u-+PLJUGN!PH^)xeMf2>I`w;F#KJ9$JdF}We)Xgep zlrM-z>Y-HV-U7e*P-)&p)>WtB5GssWjHU1`{2O*z;`b)N7E5t06>mdr&7GFp z{h<5`yE=NoCFCbtY4z=ZxsdO%%FdOAtNmVm(s9?AdLgg%TEF==%5+$YiZ#~RWituN zfN$XEu;_Zb-GWcyqMde?OxR#|1wua5l@%n%Y2jL6SPtW_kj->y*V0%*c zqMa+Z;3&##e{Z+si|_&Iu9xhwyzvkAthmeZhaXt~a{WJKWP=kf+n#KN{Yk%t+JO50 zXvgk*sM~MKD|V93g1Sdsg4!Q){bc9PC@2qP`q|Ejb5P&3N_CaHCCqru?xdAM*R5qE z;e0Cm0>{JtzgU;OhLcHm_|@h=fx}4;`pqi-7itSHf5WbZnXo$PlsEn6t=IN&1nGlN z_ka?=+c`D_%JZT7L^NpPEc0hT7ZV<+FByLN0Z!%vXUaL>+>uJAw7 z3Ge&Ov)}MP?Fr}%)X692Uv^{43rmx33G>6nkdB4CZ;3P_qwxd3c@DS*>IhZhq3ub3 zC`Cu1ZnJ;Eu5j!ly9yq|9;639wmaP&s12;`6YJUQFbC=4PyObhQ#;t1bf&-kym7($ zn@U6*#Z9;g_Izefy{Z1OCzp;;cf~z$EKK{aEnf+x=n-rW8~MZb1!2nwSCO znTGHjX)jj57{R|4HKp%uB3K;srcE3Kl^v+tsiY{00_*IpdS2 zeru?s+?NRgW)7uI6fmdkDp2*CC*t!@K_czR$P9bIIB+h!1XsY3u~?3Y1Lo%PZ*tqS z9w`FeUCNKZ2Q;uQrEO?V>VSD3@FY#Zd~mr_+JN~q%zHQq`OWD9UToxxrVp6IYUxmh zfLX7R5drfR${z3@g6$#$=079V$QUq>SjuM#n8WA&%rr##j4alm2T-@?_E`hwHr_Z} zz})4Y!k6S1%ua`BFn11y4i?K9Fef5k?tpoa5jsXh2ZUI8tfeDiXVQ7|20Z=^tQQ4q z#OAXh1p{VByj(QkZJ_*2Xl^l9@1* z*8de(@EYc#z*jP0Hi&{S3F&rFV>$@thMS@GgR3wNj9tn$90}!_I#6?BGt3SzyYhEX zb0kmcfO!}_6`KG5xrT@;T!XwK@nV(yiene@&uz4ei+FfJ%P^6T^BgzXQ}P?+Y~vC&9vS z57Zp_3)X=t8d<|TL(PRDFe4lfBj84;4xNQEvVWFl1l5||7ggX+i?m=->Rzrut~t^UVQa-jsxtUwm1j0#XaZvvaM z?z=%v##5gL%oC57P;(+>Yt}E5u`SF7$G2hfk-w#_-KzcV7-RCwv}Z1Ho;cVcV7~qS zPba(2?Cl!RDLCYH=w>HVSa)VA6*|JpC_309U=9?sda|>TU%wZ#6+Y}8@LE&eqp#iJ z&O^1?7Xve%2Y(#o1ECzjp0_OHz76wRnfC*tQSQCzfZQ*&CP3ynFV7pZ|g^{GU zLrtzrP!{`#1k4#QHPp>&EvyK)L5=M{uoO%*)b_j<GDF& zokmdkJ)xG}SeL)TrT0O3?gy9u4r*wVhbGvKAv=_!YA_RQ17*NC$1k81T!QM!Tc{yR zJJGtlIc!XNIh+KaLm4t^lI`G9sI7f3>+2mpj=!F zY6~3&HHPzHC3pz7fniev=H+@j*n{*1s2#BMG`rJ%0#lN13QNMiHb3NTAySu&!>|)f zFx~F)gJ5CSdte4Vf@Nm1Pr%c&=o!p2$KKzo&9%4dzVI^n-@!BJSvNo6ZG^p}0_G)N z>IDIBCh5(PjmImqP&+E??<$dMWTaaZ@JgVd6Vy(&YBB4Z^c&cMbj_vKz)diW{KU)b zZ8hm~>zOW4PqjwCXUK0^5irk&R;^?ekl%F`TRB|0n#l?;uVEt!#Xxc$f@H+sU|sv; zMh=x^zk$2q{Y~7@DPR7%o&D>+u&&(>brU%PHH7D&?iGK-NSJlAU7l5;=2U+en=O3- zRQa+Utbfh^qePm)t5D0P$j*Ry)%!8jBw7pe!DCQ6-&4nkU3L=HhE2#H2Y0|nmaKOAZ)9DB|BPw+I zGGJa>9fvJRCqHTrCjFtd)T{6<^-3QLn3w4#kK04*E;yL-94FZGDPIM38$Wt7WM}ci zlh!2#zYds}(+!|px*BR3o_6WSE}it0HKZie#xosi|JV=H!LOi}^9`6CzJOY`k*Dp3 zRu1+iT|Y#m1d$U^72iWGlXPe7-R~oqpY#h@8s<1_PqCe#Hm0wkhUgBIOJjUvdsYPM zF4q=n3+@f2cfI3L=p!BanTXc=4Oj3Q&ZZ>kxAv9H`tNZmlP3Ko8jQt;^K-y^$D}Rw z3(JW7k~f(Bq_6y8SJ8vJ_OAHRJ-f$GfOXLSCHw~_yl*`m`%iNk4tWiTXtGR)4dJh_ zJS_YdFTLPEsJqs4SPqtZV0$gKZr_JmhqF<9-PZE&>XC3uN3&-^Iht%ffi+gD6W zo?>7a>wm`Ib~2rMMo$pP@=w4#|10sY9pme87Ww)9vj>x7&+Ud1^#a4m&-pT7{)x@d zR{`_m^JQKKyglUq^(J7R7p!_0Fb}n}y$^Wf$Ug{=VQBfVptpwhy_hkA=61LNYOHR+ z>o7&kpxFohfvZU0jAiA<#txeAa2|r2$?xV1dYMt2Dm-X@ptOuXXqIE%K+v2ECP1yG z6R;lg7lT3bh&FSapckr0#xWutVC=X-v%b4QZOMz^J@^1>XS*CPXl^>O6IjKS;GdL_ zf;s_pPZ%`M368_*q(CjlClLXDH=U7RDA@kDeLDHZ(&lgMDRD7Je)6R9_tm%Z#%XD z%E06W?3`%>l@28+$XH`QGm(rh3I)wGns;yy=_Q4kjFi_e5;R{@$zRmEx@)nZxkn@} z9yI5GzEF43y>KrKD?vH+_QQrSRjHu)@%dh*t!K)V3F?R!^5ziHI$jU8Ctq@DuWZn) z_uQ~N`8}Y{id$hOcpvKK6|Y>-?4a3TWzub-#&{zv2OmP|&09WbK2zQtYM)40A;@P> zSbx=sj3Xm|#h`h$x(5~|{QwSxnJWd&2D2DSQSjrScN!LjYS613^kUJ&Do`)uYg7rE zk5=`Eb4j1C8Z@sR+f@siUs4zf^--^4)#;elf1euG^*iBG(y?n=16IQVq_4p{FkY>o z+4KK_@>tT^LGylJIXHmyF4z&~tP?a(I%dIAq@TbFFi+i}cOUkKyg-OqB7&H&5PQq@a4>q!jvo*G!>I!F&e-mm0>(eA?erTXp z)1Y}rG)c3d7Z#H_0)MA`e@oVX7a~hq12+=G`IrFpewC|<}@3xjh)p|Q1^>bzuX70lBghQYXjf`VGC)Ff@z9g_aEhh?Zek*s8NftBG*7$07N8Q>kL zW#;Q?T^s?kkS+o>+ndAWa14xsi=a+A1$za}fuk zc1+aUHjoV_B)>LP1FfM9d;wFy@IE%30m|UKQ2RqIs7c%x_J`lYhOkOsyA>~m?X~{j zn+T6k`vuKwvNKReu4_;Y#qDnur-3r0BvgJ47#B8&I(B!4GH40B3wJ>s!Ilg#JDs-) zCLnzTs{VQ9)4ul$k)rS^tORomw3DzW)Yiq^I;4`QOlMc29XM*ZTe#rdiBtoPPtO2E9Db$$%4&~A}P-B{Qh)tJ-T2{?rcQ_NS zgm0lAE+1;^Z-6?Seg*r$UtuCxXIRj@tZzGv^{<`{AR`a_0#1fkp1k{*(16AQV zlwp5Cx%!=BAq!8GZrP!;7x`I@A!ngFRrHF{Yy- zZxRvpd;!#?+h_~C<4`^S-j#=swPThNN0Y8Tt zs#fDP=U9K;h)7@|RKY6v6Wj{bz{K%(NS4EEq_;p#p2-vJ&@G3pNw0&_6FxC$K0%cb zDqROkzNuqRD7|A;uJyl&NOrgy%5~qu-0&%kfaxdM9+!n5ldc0LHy_H-gHYceo;%rg z;QSQJYfzrL=h81-+Bem9Cn-jIYQvnQTe9l^5#E5iVU=l? zZ{b$bJEsTDqt|vb?7r~Iammb}`SGeUv+SWZ&urGeZaxoY+hcc z9q&12nj179tUQYr0vdzNbg<%z|PyI>^gb5KXG$FKn`yTNX)bD<2_ z3TwbW;1gJIqxD3lO-xceHXBNBx6MIs1fCiT%fw*)#oWqi6^klt51MB?q5P^de|h z+c9~7_4h3iO`7*mJ6PtgtgEX)ZAimlZ#WMQgudfJb7&n73y{7Gr7+crpn1Jt0oEsd z3TkN6oV1g(Ae>0L3H$~_Zo-RtM`QCTdPWaJXE9TNMdUv@XD8K^3$|xFzvI<0 z`F$_iqWX71}L0GzGM738UIZkT1AnjT4Ka_ z*ki))G{yf@FyWCiX*A{0;TS$RO8ziZuAy!xuFcfpH`u&`Jl8N)_%DU^2xCBWe5P>sAXBzU%G!g_ee z75;?&AJDBIe6EC}##6SKFO-;v^vO}W0@L~$@&-fO^Gk3W3`WmS3u#1p&@BLLgNiWxI9;V z8jcS4iSR8JFOn-IJ&7WH5Bb{|pa($FfnCj;=e#hQ`d`pkcXS>>Us=*K5d2o2)(u@@ zA6Gcmk3+G-Q?6cId_&c{&rq!4iiy$~RNBln3MF@4gPYwHRXqhCjVWZt3kumt&vm`F zIlQRH=+fvj^RAHdz!$-&r~WYWBBLSgDe(X1z0BD4{DaOZzXW-uuwyK8JjnEVqyH5) z#Zx4I= zv3-v9$;*ynJ*`yOgfXM2%j*hn2ue4Sm&y(OU<~4}?D35|uRdktaoS?aR&kZ4-eB^c zP`9W49sDs0AJdz!QSdd5-NJxHR8+`GIzA55uhR3iJ+CR1k5K-Cyd=bH(gXfiycYoj zG?>I0tGe&>$A#gvQ3SbWG_3Fp*?M%QF+XzZ-KJ6-GW8&tPth=(knCG@6pDJ;aOnB<)%UY7TOqf?#(fnF$8xa(^1sZ(|j zlV#pG%R~M^L2M&DVqZwBi3kOJwv0T1ImIpze>z+(h{}H!S=Ht5?L$ zu+zv6LGB6$r=ZbQl+CBzF2v0)na7R!*EBX3q3T$jAEo+?(<>_ePW%RCHL-jkMsT(^ zpJmg#!U_>^hLlpToijccd09wrpq|18;zx-$BmOCRQqpE2UiNqiot23x>`FteY2XIJ z{M@a_CsMuBxb_g1t{}b-<$dVkJmMT(kl^6hjKpG?X5v+ z9pv~(_5VUUWca~g^B;!RAy<_Ku2Q-L9p&iE9Qe$6_7CDC$UEga6iK}tl<@{9zwgE$ zz5n?=4L3ocIE{RVF*B&d2ZaBh&<&%?ldteO2I+t3uB6@`l&>J~A3UTmn|yvF+$(}S z|2>U22yMRpt|L$3wUsq1-YbRhIuz?2b5;!wSIUG@#JbRc;M8A5DNq7O1ta08!K@ftbRE2ta8P5TRO40$GF zLLh2X432(9sg?t=(p3GK9yG=J*i;FjVwmgEE6DGSn|D4`ca<9j#f#D0R#e`=VUsaM zAq~3DlUEXEM^_LTeslW&2{qBVmj5s3^h*Bm z+kpOfA(XF0ahMyW1{m`#mqI^0kk2(foE~JSp%$cvQqhn69TZM*Udl)Ba?q$ABr1G@ zJU@JH!dvwHMOixJOF{*{W8l5x3I$Qv0E=Ftv@jWUU4u)BD~zU5g_+2#qc^SKW7mVu z$h@blf$P}~8j4GNksAV@QJF9V;}S9yjnEyB&SrE*P}tT8)aGw>3eQkEEtS4PXexQd zU~i}VCwkKd#nmx15<`X~mm8T|G}@Z{$~4e}IFEC@>=^h6IfcqmePT1u!?E=@s(r7v zDM~W5o9usIY*V7wO;e(q{$0U0E3#hz>FikY`sx3O z=0|CC=!r23dPbce%RdZBQC6M?k8%Brl0}p!ciy{8!}W+CMy4v>*+xZvy2k5BBVUn@ z4o{q6(P?jfAS_mPQe9Bk3*i|kspSmnj4`ROSl>}n_&q8|AS^?uf^&wlQlYy8ViTR+ zv9N74@fRv2Tte+bWP+&V<5k{3>{Cd@{F{!Pk0!sTi8x&U|4@Rw-;s}p4&VPdI_gv) zEMDjlmCGP-`h$uuF^o4PyrDQFC;i}GZFtF1z%zdO$uW%<+I`>*HF%5s4qRuE`^9xa z`Fxku`-^_Jz`*Emowf#G%tUP)Wr^@#PD~i;9MldaWu5c*DHd7~?7;YRE-=`OU>hIX51*(N394N6Y9Dex7_&!TWJ zLiez`7siaEtT?V#I7-D`FL($M(R}KDhi&|q6|a`-NG8Z z_qvYvcWv*bb2YJP4>~4uUBK3I*q4a-XyT`_qbT)qq9>6Ss6mCp04B20a$8^emMt%#j(P6*Kua02~BdA+|hCb#}_zcz{ z?}$r3&;zR(cxWh@3U^U>3NA!x8XEl1d9SJKd3y|KjO;*I@KXNVlV00yS*XgW|ClZ863_$rrD*fnO6C3OH(9j$Vc)_(6qZAU8R}sZ^ocniu zp!lilc^t|MQoj#6b5U*>cp64*IO>H_jmCwWrP<%BxbRbNrIbO*b+Pu<{KBeBs`NB2@f@ zibcp9V6)8M40w7bbsj{uOc0hSv={O7PXB(YOv1K|@H?k=r{jOHq8rqB*su^eg?`8? zd`($7m#1_`>{BR6zfuwJh> z0u=_s6mFYcK;>Ojo=#&mP`b&An-6*Jb3Oclp0}mE8jV*V-W|Ee$UQ}u!bLn(89pI@ zy36ZCycO5*5S9KxpfwE*GvXZJX;5LI>tR1E)o-y>L9V9D`^m`+LP;gclDVE|CSBIW zOVL;|(udJC5&naxW>B`8p_t%?JapMDy!7;Vuj|oX=c;y8yiJc3CQ;$Av)<-#Qz9=3 z$}YgJD1Hlnq0mR2HRLO##n5YX?kktxOegddX18r4s}X8X;v-_2D5!;!;u!LgGlI8I zz4K9#iNlfv_}IU<16^C}`zd@A+-rkmUf2$)78GY9t}o0gydloV*uAf5S|6IfO+3K$ zjq@R2VKHIr2Yb&gTCdHe(7^dP3a+G`G_Kwxt3Tug5KMq$qeDT`?_J}{t4R76`rDO? zEimR3M&5Mt>nXcM{w^BdNSz|iKPjD21sIR=H2e^`#*}?T`Uvse)cFdXW1?SdBy-kZ za@MNh83^omij@9=#ueJS0bD`ZQF^4X8Mff+PTm!Cd;^bRWC^bS7z4g3;C;)Ligs#X zXjAG8L0{pdDBJIPGtQ{uQ9;zrB;2@{P(BtLwz%R%uKf;FX~PvkCzhe}6Lij}Y7g?R zV?%Q%pV>J>?~_-?rp|6IoJCJxZ1^75#~B}n`sBSNue+WrkD_EO3RAn$XiP(6X>=eB zq~MxGd15>|!Wkw-YcS$5jkQKLI!s`;4I+I3L!!f88sS?G-cj_8LVlZTBLX9TN6!45 zxrE!J{34k-=uJNaqr*H5Q^2MYb4MeBwjN zFN>VQ3KX`);1YP@F0#d(caEd8up5Gm$nLh{-Xpviisu^W;e=x&mCnJ9*dHN56mq<^?K!uoeEFaf+>hP~ry^-jtOMG5j z#y=B^KO%Du*D@O8pTv1Bu`&kvyHPL`r4LcMn7lny+R8PDysOA%#ZZO%&iFVq5*_YQ zU!fs7kGk?K=vYa*J_f&_{JR+3RDK~t;Um}Md?+vD;>xcGN;U*@ag6QMQQAJ)ry<^*;=G$q$fcZmMBeSRZ#P zR6@ajRJ=o_b6kEJQHVo)up9rZlq3vo16-fe%RUIDB>x|*U5%nn8 z8sukDJ{&5v#n8uepgEU9GxYW}ar(aiC2#4`SZDb&;svP?MZ;%MQj3OPpm-kfJyfns zFZgJcch-4q3G%yWbUN}=(a{*iEs=ZX^qt3uIFu`VN<5aEv`SCXAz+QO>KkY6?=+T~ z%B{!`LwU)lS*h5m%ejuLUVrR+M5oUZ|AuQa@z}JlkOaHxU|)3DL;OCrD-_{6M?4*Q zF;Ja|dePx6I)~8g5z7A~KMw63#%_HU>|i`Er&o;zVqWeYEK;BH!7r6)_@3m8|)MM<6;~H1` zTbxr7<(FN<$<$XA=$CCz(Wly~*o>MH#8!62p4 zi7=iMP+?Ol+@>*Q@x@gW7CD3RlG;zaEXoHFKS}(#?S(f0rQ_(~5c1B$dbX-}lK5G! zmgqeK6?$S|ZU&_b?JUp(0|h>E>3vS++jyW1mKUP&*7Qc<7W{)s3SUsxpPr0|xt-w+ zouLWgT&_XrdCHX;xhpi93fZhQ))Ib1c_XKHIz~kuO&^vpG>KOEac2_}@wW?p9YbDz zTD|1D7~gRgavjN!N$usda*b9hp}iE^-;oZIo=jPKdNhc56D%lC{xhfFwqpNY0XOv2 zXg3P3VcIJyM2F>=*%Tvkl93+;ak(10@ zI{==&K)QD-Lctj-HRW84AS*g@G&J%LO};SR1&2%dsx$!mw=D$+_wj5`nDjg%i4 zr2OC2d$)uVA*1lCBWn2WtjYS{pS`4O({MWsm`wa{bcU{BZCZvPJq?yrEf>B<5nrJ( zA%mMW8L3bi`63@EUPHY))K@6wjLD7s9InmIlPdcgV>3~=Hk~Vq0ZDD0kQYv)ed+m2 zu60}r8R+Q-6!$gk6@EAzt!-VT@9#Zdw!QTPRw*Q2}) z`4za5V(2*xC{N{vPVs%$SRV3{(8vX@pQyjjl|Pa)LMim*Mduv&f;v^{SQg?V^$1lz zbx@zo|6m^!EmRG>|Jr%)PmH^}~gF_kc?pQZ(6y~s;VU4?ERbfg_R_fS5b z#?#Z_Tc>A&>Jj?VzIPC7GjQET`7;C+Dp9co1{`to>oLQfh3jwR%G20V6jUdD8-*E= zRp>=oQLYjg@{s&m=_d1v%0A+Xi;JdWKymmp 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 fDekOiTZU?a{CN&hI||kCE8#zHYb) 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 F`G3ibS~>s# diff --git a/conf/locale/rtl/LC_MESSAGES/django.po b/conf/locale/rtl/LC_MESSAGES/django.po index 7c5dfef2e5..cfa55eab4b 100644 --- a/conf/locale/rtl/LC_MESSAGES/django.po +++ b/conf/locale/rtl/LC_MESSAGES/django.po @@ -37,8 +37,8 @@ msgid "" msgstr "" "Project-Id-Version: 0.1a\n" "Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" -"POT-Creation-Date: 2016-04-14 20:37+0000\n" -"PO-Revision-Date: 2016-04-14 20:37:16.796179\n" +"POT-Creation-Date: 2016-04-21 10:27+0000\n" +"PO-Revision-Date: 2016-04-21 10:27:36.618229\n" "Last-Translator: \n" "Language-Team: openedx-translation \n" "MIME-Version: 1.0\n" @@ -9312,7 +9312,6 @@ msgstr "فاث ثوشهم شييقثسس غخع عسثي فخ قثلهسفثق #: lms/templates/login.html lms/templates/provider_login.html #: lms/templates/register-form.html lms/templates/signup_modal.html #: lms/templates/sysadmin_dashboard.html -#: themes/red-theme/cms/templates/login.html #: themes/stanford-style/lms/templates/register-form.html msgid "Password" msgstr "حشسسصخقي" @@ -9908,11 +9907,7 @@ msgstr "" msgid "Incorrect format for field '{name}'. {detailed_message}" msgstr "هرذخققثذف بخقوشف بخق بهثمي '{name}'. {detailed_message}" -#: cms/lib/xblock/tagging.py -msgid "Difficulty" -msgstr "يهببهذعمفغ" - -#: cms/lib/xblock/tagging.py +#: cms/lib/xblock/tagging/tagging.py msgid "Dictionary with the available tags" msgstr "يهذفهخرشقغ صهفا فاث شدشهمشزمث فشلس" @@ -9989,28 +9984,10 @@ msgstr "ذخعقسثس" msgid "Programs" msgstr "حقخلقشوس" -#: cms/templates/login.html cms/templates/widgets/header.html -#: themes/red-theme/cms/templates/login.html -msgid "Sign In" -msgstr "سهلر هر" - -#: cms/templates/login.html themes/red-theme/cms/templates/login.html -msgid "Sign In to {studio_name}" -msgstr "سهلر هر فخ {studio_name}" - -#: cms/templates/login.html themes/red-theme/cms/templates/login.html -msgid "Don't have a {studio_name} Account? Sign up!" -msgstr "يخر'ف اشدث ش {studio_name} شذذخعرف? سهلر عح!" - -#: cms/templates/login.html themes/red-theme/cms/templates/login.html -msgid "Required Information to Sign In to {studio_name}" -msgstr "قثضعهقثي هربخقوشفهخر فخ سهلر هر فخ {studio_name}" - #: cms/templates/login.html cms/templates/register.html #: lms/templates/help_modal.html lms/templates/login.html #: lms/templates/provider_login.html lms/templates/register-form.html #: lms/templates/register-shib.html lms/templates/signup_modal.html -#: themes/red-theme/cms/templates/login.html #: themes/stanford-style/lms/templates/register-form.html #: themes/stanford-style/lms/templates/register-shib.html msgid "E-mail" @@ -10022,14 +9999,13 @@ msgstr "ث-وشهم" #: cms/templates/login.html cms/templates/manage_users.html #: cms/templates/manage_users_lib.html cms/templates/register.html #: lms/templates/login.html lms/templates/register-form.html -#: lms/templates/register-shib.html themes/red-theme/cms/templates/login.html +#: lms/templates/register-shib.html #: themes/stanford-style/lms/templates/register-form.html #: themes/stanford-style/lms/templates/register-shib.html msgid "example: username@domain.com" msgstr "ثطشوحمث: عسثقرشوث@يخوشهر.ذخو" #: cms/templates/login.html lms/templates/login.html -#: themes/red-theme/cms/templates/login.html msgid "Forgot password?" msgstr "بخقلخف حشسسصخقي?" @@ -10253,12 +10229,13 @@ msgid "My Courses" msgstr "وغ ذخعقسثس" #: lms/templates/dashboard.html themes/edx.org/lms/templates/dashboard.html -msgid "Looks like you haven't enrolled in any courses yet." -msgstr "مخخنس مهنث غخع اشدثر'ف ثرقخممثي هر شرغ ذخعقسثس غثف." +msgid "You are not enrolled in any courses yet." +msgstr "غخع شقث رخف ثرقخممثي هر شرغ ذخعقسثس غثف." -#: lms/templates/dashboard.html themes/edx.org/lms/templates/dashboard.html -msgid "Find courses now!" -msgstr "بهري ذخعقسثس رخص!" +#: lms/templates/dashboard.html lms/templates/navigation.html +#: themes/edx.org/lms/templates/dashboard.html +msgid "Explore courses" +msgstr "ثطحمخقث ذخعقسثس" #: lms/templates/dashboard.html themes/edx.org/lms/templates/dashboard.html msgid "Course-loading errors" @@ -10839,8 +10816,7 @@ msgstr "{platform_name} اخوث حشلث" msgid "How it Works" msgstr "اخص هف صخقنس" -#: lms/templates/navigation-edx.html lms/templates/navigation.html -#: themes/edx.org/lms/templates/header.html +#: lms/templates/navigation-edx.html themes/edx.org/lms/templates/header.html #: themes/red-theme/lms/templates/header.html msgid "Find Courses" msgstr "بهري ذخعقسثس" @@ -20041,6 +20017,22 @@ msgstr "" msgid "Learn more about content libraries" msgstr "مثشقر وخقث شزخعف ذخرفثرف مهزقشقهثس" +#: cms/templates/login.html cms/templates/widgets/header.html +msgid "Sign In" +msgstr "سهلر هر" + +#: cms/templates/login.html +msgid "Sign In to {studio_name}" +msgstr "سهلر هر فخ {studio_name}" + +#: cms/templates/login.html +msgid "Don't have a {studio_name} Account? Sign up!" +msgstr "يخر'ف اشدث ش {studio_name} شذذخعرف? سهلر عح!" + +#: cms/templates/login.html +msgid "Required Information to Sign In to {studio_name}" +msgstr "قثضعهقثي هربخقوشفهخر فخ سهلر هر فخ {studio_name}" + #: cms/templates/manage_users.html msgid "Course Team Settings" msgstr "ذخعقسث فثشو سثففهرلس" diff --git a/conf/locale/ru/LC_MESSAGES/django.mo b/conf/locale/ru/LC_MESSAGES/django.mo index f213a188dc1d1f861daff19bc7e675e764aa25e0..1ef23519ce7a7d69cd6728e5cc1c2c3e5038fa70 100644 GIT binary patch delta 80914 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%0D}$ z#b5!-X5fUvawpRaCr`M%l*qTX#pW-+!tC)1h!@&OYZjnu63$`e`Y4tK3ju_ICzK^jr)UQDAydqs1hiakUw4cW@-YHipKkS6T z6cG&QI$#I}vN^4nG5Ej@kKXT`iK3yD={g`h?8Fg;+UOcUFYGH zptrZ{wLd8j4*_i1;KqL!N`0=yIce!Mr>HoUhM**3_#g*Skd{`xr+k$&kP4x?&dAp= zJNa+Pn@DT(M`%O?9IlJbOp=xTx(M(?_Fe`u5+T_Cf8J3@_{7*vrhJZ5uDpuG8{zOc zl+_}=g?KU?`cG86Akc@^g*PvT6-g8X&lUHfgO{+_2GJ4&j#@k>lA`{95- z`KUwBG$g+{iu2%rJ|%7H6#8&{4#v7s&c(5}m~-Md1jJE7ZM@4MNEK z2hXw~*wuCU031+=M>?4mGQU#vno1*`G5%M@|H29sD)dA4ka_?IY9gDIV+eT{oa{|x z{z7*~r(bo}gzx|Q?}R*s{a?sK{FCdlX(+jl(qr_(NhA)q?k(-)e?{&$4Ch8BFD#D1 zb;!*nev-0s?(~?$r zjFF?x*}9ZhpnM>!BnuA2z}Pc%RJWq${ZU2#CT}$j;*%e5uzr6l8HrX1=WtGpa;+_i zBe76EixzmUH6>hGE9DUup{yJYnB&U7$FaAhV>&th|Fj9a(H|c8#wO7k zV@ar}FbCzgVJ42%2FRjO^l3{Q@*3jEb)3r9J+haR6~ zr{XeO?&YUK2b>BIaU;alK`p4fhT}QLmtsI6jv7I|=EV1rchTf>F@mv9u4iTvAK`j< z5DcxP(sR7bjX(;Hn^vLUkw{gdHdjvE|) z?C1xq!tI-C6%gW|5}9zH!pp9Em7!lYSC~X^@l8$d7-a=0Rshbb}X46sHX>vJhe0bL;gqN3a{iG zvK~D$8eR9%Q5wC`$a_qk@;d+jfRbtyu7};JFacu&Q4|A5Qd1#3>_EvK%Da;v9{9yY zFE90Y4Zs^DLoWP^Y*r^X$K^FahBr671~{CGdM~kQ=6`-7{M#*XIJk&PAKrBm)-;%>EQCCA-5Y{M_vT+@Z*a;VI38bZK84rm! zr>i&8yWt@zE!W%Chsj7ue!LKWDx)+==0Ozopwc`X;T-|Tf2kaD;Mwhdduc)E5VSq}~L|TfuYW zHAH_goLfcRW>$a5>xw{oDz~DtLLY?gVdM}_EuvBZ;tLU8OGW)Z#}SlopsWjVg{7p| zx|Z<}{ePh)M);nAHx|8_vGK^21<|#KqZ4%o>---c4&ZSN_K+ zoTFo0NevW7adngxg>+5yD2(9v0Vifq$GrPNI;X2&gE|v*{TD!SFIuF>bxu_w-dN}VR%C>6e8k{x4h0_ld$p*{qyPVfsjgyXn3>jmOW9aTW6`S0 z7#U8wDd{Vu+o2~X^|iaEC!GOf3fq~m^+_*q>5dxz85HcI8@Et6kK-x^icv8bVN4UF zEG0(I(5l_Yc83W##yXj^)KeJd8qgww5 zM4>N+6b6t#p9;+=+eP{tj5I}FJvyB-z2lRD^5|rYf>n?!O3Q|#xH0?_qy5nppL%!5 zTgy>}`WIr=ZW46mnA52faJdlN&oZ zI27KJcLjfvQtu5%b!;ibpu7%s29aLwZ0p)rZ|9Xp?mYe<#Q!BxnG%DXK#+`DPH`g| zlE`(;O`J(VLn=}6M+_=tL^h3+t%KsT#G}GrF)#+%yvQodCoi*UwN1aku)+q8bjB`I zqC1{O44Eh>#Ie8`;5W0q00!fu{1eKM4==S)k=BD
    Kg0gUJ);ZS1Q#;xc`!^?YL-|Q+lX@FL;5ddSll}$;L0A#TzQIU6 z@^`ux9*14XYljo%Fglj>@5pAu!A{iMOwVj0-GBxuoTE3!Q(wVH{#fcAr9SQF5)h#^ zRLqK^)MRxBMd3hg))vbfeYro5n2xQHHXfPus0HFLfBnsg?Prs(>QdebS> zN5u+VTs@Oe`ztlz)ICRI6(ZqKC@BRK@w66)LK(&~9|Dox^1DanSqSO_Z-v?s9IET;jHEm&^2w=J z8w2Mtu5gj`2V~}=V;A-L->6<0=loR4K5P8j(u%ZHo=8`>Lf`~~yzS-fBYg)&%@I^6 zOxLdA;MG*G96iCe`pjp`D%*ksIZ+%S&jjl5n!^7tTt_A)4lQwx$Bj<^Z=upwC%Vv8 z>g~ocHD&8juJDhA`5Po}FJ=8Ow1qlTXh20AOUcm`r|Z#>Tj9=7<2lD$jJ~CDv2eaM z@*j~KA5z!-A5X{ppL83PDm>-5ih^s@`5qp?$$7*VaYPIosQmplCmt$BK{*6kpkyZk3cM3*{`u7`(m&8by)GIV4nUS){xR>RZoz@*917blyfB9B zPiMFzafRv_DMU-3kRCYBNk zoXWTGI6J~8QG5}Dqnz>z$V?@#FWgHxFYKCd6QjdvZ322?J+k{SHVv6q*l16>C+YC8 zN0)?sFp`NDe#H@k%8y(Z?n2>aDs^!Nr(h%`1Se{BXP?U&D={YiD zY%Wyr<7G;mE9Df&rNtMB&&RQ=)KO3?>XKj04Z*jr?oOA^4}V2|C=KLoA#X7H6)y5G z3Ha@Ko8a9SkMBO4H*3ndisfik8fW+uc`0!wJp4$0O!7vPae*GF3md@^3 zIC2HqVH}rGUJ`wLW59$Ujts?^!Xu~e1?9^)LO5i`|2RUeTm=b!g~6W@C`W!2@^7P{ zINT&7IFbwJKEeeU>xA*ya3w==0hy&Z)QjUBMR@ddCE<-fW*{fOtr z>E`HMi!+nZr|?)`3Cu%A2@1cVqP~%%&;-FkD7-^A@4?d+C@e>LZOYGc_?!ZM9n=K= z5xduiV;eFGlU?~6WV_Lmoyi*jBZh?7b?vv=dtK>aoQdXo;vNd-k)BOU5~E!YJTRL&`r=rz-gea3B`(+~_)j zjUJS*F}9rj@12ok6nsbP>*MKclq&F}d?uuJEsX8h2o^==F7kh%JUk3Vz5xd3;p7Ha zHyTdvrPbG6I=SnKt-Ag%NXw^FSP2a~@M?+ch5wwPWhh&M0)-418tdXp^P7lXCFC{} z|I!WBHspK#pWcW=y*1c4?l+;V%dT%0SDUsP6K}Q|(`bS9b;3p|e=xN~v zG0HznH(zFQS>9v}F2i6{D*oeoqpX}o_JI?sf}tMdohAKQJ%ORtl*gmqC|BpRdWl|$ zLpr^4{Doc#YDZ>XTJRVF1^%Iq$D5zteH^I<71q;BOQ_f$g*z#qih{Qo>_C1rwFqMh zcPzZE)cYB^uaFONOvFKjanz}fo-)+WLw;yFfBLzJlZg05jP6BgUzGBdB(E^SQ*i76 zc?!EwbcFO0oAk0F-yfM&yo3f#(0j)TNq5-7C5S)Utvg9dz$#EWoH|e2G%BS*3^7c7{lF30mg_+cSM}B`C z*ofX3U2ll4?BY8if_XWpe&A&<%bf?mPPFZ{Bxs;{Bdxawy&O`an^u`#DwK&kj z^@z&TQU5A>E}*nEa;vEK8GehgJT&Sm&YvXS8a?Zg4MTPZ>Cj>dE0P$Gvgc$dTqkcQ zoQWfe-2^-k!Kra5`H%E;#V={6fvYdQ3a@Z%yK_9RUI}k0>&KtsBWmmQj!;6vc=@j&WQ8-#7I~BwEXr;mq4EThHY zVJhiVl)o{Jb?bi^tr+H3fdqfSP$F09M=G4g!M!M-job(f{zZ=|tRnAg*8@sdK*zs| z5SpOlH)NAj_X1SdNBkCsqq}q$+5f~*fK2^rUOZ=XAe`ZZ{&uaBf~|Nynd1(!wQ=G* z;(t=UlK4n80o@7JmJAi^N%kchKUh zv?f0SZBhK6Ysr^5w3__$PH|<*%2U=GV=a+YsP2qagC!~JgRblh#}4AD$eTs|%@Lfq zL)x^zG(tb3a5O?^oH7+{qIGd`Y%<46S~d%r%*6ZBTYnM%fKxR|D>O&PPtMsTl&|OL z!qFOo39N|u+YY$}9B;7oz3Qs}dy%2=1mV(nwS|fbcM($f5@SbD9*@>4gdx|KvduU! z(B*B!*@3iJzv}aZe1#V1ZGx`I)Lls4DfG;9I;{luqf>Agh3^p@jzCWoE_SW@7%m0> zKqfroCce=bQC@W?A6~AW9fhtQ^x7c!7v-05B0IXT5I;@%7~5NXB@h9HI22wYp4cfq zheI{dl$=)N!eB|#@64ESVL`kqb?ReaE-h*V6%wJN7sm{zGw53DBTr!r`4iBWnj;6t z_k1PASIPSH!(($sFAthZIYqsaYCS$Z5hf|CIp zDoI1uQtw-wFHcz}(k0P+vMF6&40P)`(?IgRpnNcO);b-bOC(C;eJqTOpjE3#M+}RVpsQ9p zCoW;MBnG}#4^VF|igv=Il$Sy-GsZ5F*NuksL1Z|F!$V`@H7E}c|Ak-ww?=6IB?@uy z`Wa4iwMN!EsO_2ex}|~9La{0iIM9`d10LW8vRpX zF?3eo$U>dldL^(f0=H3C$T=WGnV1Vv@wOj%Bk}kTXIN#UP+FX_5>9>?d4H1k7(FeZ z!ZQr@gZi?KLQ&E$(fJF`mBhLK1+D+acsiGgO(-}-E0Q938)f?TN;E3O#krku3uR|H zD!AGYodd}zd(F{{dM6_|T7`P`(0P~!wB#tjaUDD3s8@ip862S(Waz6sBk7Xoc&U&C zWeR=W*mb8|Ar%ISPoP3YOO2&_Wz7xM0Lgon1|6(A8C z#jB||iJm$|{0;dE6)n8cl*OX#A2&)J(eb;0xqri*C>vR z&Sx~_EcLRGHy?u$Ls6&q`|uC9{=tEm924;{359h~IL9d;Pu_oKtk|qju5f|l4CSL> z0($NXXFy-Xi|yviP~v(&X*#UodMyby?vbr9g8K9HzH7vg&{d8?;qNH@lU5AJKwOtE z*}KGhph)32*UgH*;W$X0=#=TVP89CKUF5w(-v^u@OGCaQ|CH;oCz@QH=~9JVC~iPO z4zo0qhVD_Jxmw{ucBfQHe(c|ihJ04_7D|6`J<|i3*W~4b0gj@`JdIGVANFcdHwrSH zXqaxUI}=ZVgR!AP3~V;mt3U&(*bRqX*?jMJ1O`%hpG!wYc>yX$3_hpi7nE$GV4R!S z>u~TFj*qTL+rye5R#yNfmolmK6re;nj)d2pD z6GiYit?Ra^2=yZUfQqeL3$j!8EiH-|22!4z{MXcf?RxPh2Dg)cjh=W**>f8CrEA1- ztKTk-3{LShGG|h0zVq@NEltW${6u;VO4m{L6X}O;c#@NrzHg8_i;e{JST*wIVsHv| z9#HrjRypD?UKb_1V zT6z?NSzv7B^V2$oE*MElcX!~pOx^M16{M^Uy3!%5(4KnhXzVGqKZ;X$8s*`k9F+%A zDHj>rsW^>_8A$))9Fbgg;t#3&1moSDj_~^JP`;VtIgOYA71rR)(Fit_7g|lXG(pj8 zl=s2tLFmW359B>{-j1T;J1W+uEH^TKsF0exdTt(M!hsT$ouE#996E*G0TQC_55%9K zGh%3L6Cv**O14tD1sMZT+{zhMc`owfx%98deMS6`Gf1bHkQQSPU7j*(Vk|sd!{`^3 zZA9i5;)kd-m4;15S4HGH>Z@o03VV}iAw#ey0%I}UkBaAEC%SJYl?zj8DS3w|FXdV@ zoVs7p#p`f9m+NL3&pH<$YiDNcNkT;<7}FLMYrE2{=oakD42k74TNHo9)sco#H*v|GL=^%8%FnK zCT|pmGGXK~>4;%H&bFfL6?$^Jf=lRHPyItQY7I6XxjM7-xr0JQxXw8;*R}FDjHX9f zA1Wl}xNb$w-;*eONuHlWVL$a}Q!hX92RL1ux(e5*Kg)G{UFs;b#*xmhmqMj5It+m! zR49kC?@^SABN4}b1gBEI94gE}rmKsWqXpGzeJtu^amw-%ze)MGIFbj$<0yX$Z{Sc# zc+oZR5qkC@lTz=UWu#I!*Bv#fuoVTdNZ-ZaCdwMYNibqK!npS(;~n|^kROb)^wjy9 zhE(Th=2{xDjvtu^)SKv>XoK7oy^8oB3U*WZA6Jltg28xO10{3u)JIQrLepb6ITt%; z;^1s04uz=5m8U!n^`4@yJTeVw^;UH5b@CgLYmS|T^wwYK{D=Hcx-?QKOy(ApwLwwD z(3t!(px8;aJd3YG>dgeX7p`i1R z*Fj^0*V#B4Qm}-|A2Co7;anIv%%RYN{2H#}D%WybV*j>9PhxZwbB#KVY%?5~iUU8n zdSwy)#Z?-wuc9j?p;Z|is6w0IL1MG++sW8@_vWVdt@@JV7E1V;bLwJ`0p#xM*=OjN+c>&5Nkw26Q z%ZRsk6(n+%Ix%VGHS(LfNvr(A49^qtHc=Ma4Nqdy50H6*t~kgHqO1vx%mIg!4rQff zMKS({jOY=JNMSn+wWVx26~3Z87fO!1v8_p2H56xZ=~&2jMK&1*6OsQr@(PP+z!$_X z!;0vcfJ|NL+{D52(HZ~z7~MnSiIw+0pm;RtlCDdWQJ$J~AzC+{%6Ew?G$p?S!!U)s zY#2R=(XPl0#>pZuJPe{NE_J#&N0r|fN7f@#SMQxHN6~eR{eYmtNt6~sSuF(qqSAFL zFNVKUb_eAOPiRp;Hu3oJ)fNg)>ej9lTB14x8;gM^+&Y za_P`nADv5G4~3@NGVd2xxi{YRLMUP=iBnstu#6Tcl;JpuTvd9mn=`KbA2GTCnT8y( zDZ7H9X0)=UYt(P(Es0E3@|vNqm-hb&PU(*njwD`HEpiq1VI(|cLtz3chatC-;|+$J z{6AHi4@}in6vuf#;L(GgZo(iUwE~H;m@pt4jbbrT5+#TXMUer#FK?>Oub~QA%srT%!KI#7G~0#(QCTK97TN&owvQtc6RSQ=X<{Ad(VZZ1IVB9 znO-#K7vZP_D;7Cy$?~cHt-M^ zb2F*G8RB>UgNG$5uF(lVJ2YXPw+)V1vj(YziS>TLN(y zaj_A2vShTZDJ(m+*(99N?EBz!;rCJ>rhV@5{{K%1mXR1>{RSVD0QLmJ!f84eZ=iUL z1|v*tFHHxSPzCq$Yw!S;T*#Sw47<|Fd_9ZJ;)r{5cx;asG(L zZ>vxNJLT`r^0;BWzQ+Rgfslq%_%4N)*-z z`H`5|0rE~RvxxjOwY$6`Wd7X*&Jrl%?V_22KW8^Wyf(yb@8E06+jKILyTf@K;=I4R zS`WF{Ru!Dh{u;4jaBYYbD`g)Ge*paB2%UX@Nn8L}t)Lr#5@^(^Q>ldTFMa1iav!R= z65?@?e6P4)$whegG)dun28@d-!DDr*XO2T|AqWQ zm_j;4HXUCvU%C%8cRtdRE?d)@mU>`#(N$2Y04 z2o;nMrkTA<8|~A$)Yl-S7W^wT81!i(xtq$p8u8(rue0VNxE!7a`FQ-CjZK?LK|eS5 z=ois_I%*fU?q_e|T@Y>ulR@ke$P9j(eKD~v#_OQAT}5Q8*yBQs<#ApJrjD8-YG&`> zi-=H?$GOo{tXC;+(|4-j9D&c#+h#y;1<%xx4zN!IyIdQlfIA4e*q1cOMC@DSTZy|_ z*W*3Jg1K;OpkJonT2wnBS)ezT!corEjPwk^Q`-1>8Y}~o4StD!tq3;iZd00Ob8IzR zj@rgz%^M@O$~;q-V08zZf=8|20!-oK)yX`SskY)XOy^O{ z?KFk`){*$SHItTEGwJ`5D>x+~DfRxOq_o6Tb7^%z)r5H_Jur5qIawe0X@}XCWVgba zZe=<`%@0fM%?{(tv*%|SPm}#}h)Hg@Hw2i}!}eTf(}l?3NHb{c2e+G&^q|rxGh7(- SMN!?nV?p>`X5KN!Zu2j)eeu8m delta 83671 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 diff --git a/conf/locale/ru/LC_MESSAGES/django.po b/conf/locale/ru/LC_MESSAGES/django.po index b0062993a4..cc5ee3dbdb 100644 --- a/conf/locale/ru/LC_MESSAGES/django.po +++ b/conf/locale/ru/LC_MESSAGES/django.po @@ -89,6 +89,7 @@ # Dmitriy , 2014 # Dmitry Ganchev , 2014 # Dmitry Oshkalo , 2015 +# Dzmitryi Halyava, 2016 # Евгений Козлов , 2014 # Gubin Pavel , 2013 # Gubin Pavel , 2013 @@ -193,7 +194,7 @@ msgid "" msgstr "" "Project-Id-Version: edx-platform\n" "Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" -"POT-Creation-Date: 2016-03-30 19:39+0000\n" +"POT-Creation-Date: 2016-04-15 11:05+0000\n" "PO-Revision-Date: 2016-02-29 15:22+0000\n" "Last-Translator: Liubov Fomicheva \n" "Language-Team: Russian (http://www.transifex.com/open-edx/edx-platform/language/ru/)\n" @@ -455,6 +456,10 @@ msgstr "" "В режимах профессионального образования не разрешается иметь установленным " "expiration_datetime." +#: common/djangoapps/course_modes/models.py +msgid "Verified modes cannot be free." +msgstr "" + #: common/djangoapps/course_modes/models.py msgid "" "The time period before a course ends in which a course mode will expire" @@ -497,6 +502,7 @@ msgid "Student" msgstr "Обучающийся" #: common/djangoapps/embargo/forms.py +#: lms/djangoapps/verified_track_content/forms.py msgid "COURSE NOT FOUND. Please check that the course ID is valid." msgstr "КУРС НЕ НАЙДЕН. Убедитесь, что идентификатор курса указан правильно." @@ -4508,6 +4514,83 @@ msgstr "Все слова, добавленные обучающимися." msgid "Top num_top_words words for word cloud." msgstr "Наиболее часто встречающиеся num_top_words слов для облака." +#: lms/djangoapps/badges/events/course_complete.py +msgid "" +"Completed the course \"{course_name}\" ({course_mode}, {start_date} - " +"{end_date})" +msgstr "" +"Окончил/а курс «{course_name}» ({course_mode}, {start_date} – {end_date})" + +#: lms/djangoapps/badges/events/course_complete.py +msgid "Completed the course \"{course_name}\" ({course_mode})" +msgstr "Окончен курс «{course_name}» ({course_mode})" + +#: lms/djangoapps/badges/models.py +msgid "The badge image must be square." +msgstr "Изображение значка должно быть квадратным." + +#: lms/djangoapps/badges/models.py +msgid "The badge image file size must be less than 250KB." +msgstr "Размер изображения не должен превышать 250 КБ." + +#: lms/djangoapps/badges/models.py +msgid "This value must be all lowercase." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The course mode for this badge image. For example, \"verified\" or \"honor\"." +msgstr "" +"Статус сертификата для значка. Например, «Подтверждённый сертификат» или " +"«Сертификат Кодекса чести»." + +#: lms/djangoapps/badges/models.py +msgid "" +"Badge images must be square PNG files. The file size should be under 250KB." +msgstr "" +"Загрузите квадратное изображение в формате PNG. Его размер не должен " +"превышать 250 КБ." + +#: lms/djangoapps/badges/models.py +msgid "" +"Set this value to True if you want this image to be the default image for " +"any course modes that do not have a specified badge image. You can have only" +" one default image." +msgstr "" +"Если вы хотите, чтобы это изображение использовалось для курсов без " +"специальных значков, установите значение true. Значок по умолчанию может " +"быть только один." + +#: lms/djangoapps/badges/models.py +msgid "There can be only one default image." +msgstr "Может использоваться только одно изображение по умолчанию." + +#: lms/djangoapps/badges/models.py +msgid "" +"On each line, put the number of completed courses to award a badge for, a " +"comma, and the slug of a badge class you have created that has the issuing " +"component 'openedx__course'. For example: 3,enrolled_3_courses" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"On each line, put the number of enrolled courses to award a badge for, a " +"comma, and the slug of a badge class you have created that has the issuing " +"component 'openedx__course'. For example: 3,enrolled_3_courses" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Each line is a comma-separated list. The first item in each line is the slug" +" of a badge class you have created that has an issuing component of " +"'openedx__course'. The remaining items in each line are the course keys the " +"learner needs to complete to be awarded the badge. For example: " +"slug_for_compsci_courses_group_badge,course-v1:CompSci+Course+First,course-v1:CompsSci+Course+Second" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "Please check the syntax of your entry." +msgstr "" + #. Translators: 'EdX', 'edX', and 'Open edX' are trademarks of 'edX Inc.'. #. Please do not translate any of these trademarks and company names. #: lms/djangoapps/branding/api.py @@ -4637,17 +4720,6 @@ msgstr "" "Невозможно создать CCX на основе курса с устаревшим идентификатором. " "Перезапустите курс в edX Studio." -#: lms/djangoapps/certificates/badge_handler.py -msgid "" -"Completed the course \"{course_name}\" ({course_mode}, {start_date} - " -"{end_date})" -msgstr "" -"Окончил/а курс «{course_name}» ({course_mode}, {start_date} – {end_date})" - -#: lms/djangoapps/certificates/badge_handler.py -msgid "Completed the course \"{course_name}\" ({course_mode})" -msgstr "Окончен курс «{course_name}» ({course_mode})" - #: lms/djangoapps/certificates/models.py wiki/admin.py wiki/models/article.py msgid "created" msgstr "создано" @@ -4723,41 +4795,6 @@ msgstr "Причина ошибки, произошедшей во время в msgid "The download URL for the generated certificate." msgstr "Ссылка для скачивания сертификата" -#: lms/djangoapps/certificates/models.py -msgid "The badge image must be square." -msgstr "Изображение значка должно быть квадратным." - -#: lms/djangoapps/certificates/models.py -msgid "The badge image file size must be less than 250KB." -msgstr "Размер изображения не должен превышать 250 КБ." - -#: lms/djangoapps/certificates/models.py -msgid "The course mode for this badge image. For example, \"verified\" or \"honor\"." -msgstr "" -"Статус сертификата для значка. Например, «Подтверждённый сертификат» или " -"«Сертификат Кодекса чести»." - -#: lms/djangoapps/certificates/models.py -msgid "" -"Badge images must be square PNG files. The file size should be under 250KB." -msgstr "" -"Загрузите квадратное изображение в формате PNG. Его размер не должен " -"превышать 250 КБ." - -#: lms/djangoapps/certificates/models.py -msgid "" -"Set this value to True if you want this image to be the default image for " -"any course modes that do not have a specified badge image. You can have only" -" one default image." -msgstr "" -"Если вы хотите, чтобы это изображение использовалось для курсов без " -"специальных значков, установите значение true. Значок по умолчанию может " -"быть только один." - -#: lms/djangoapps/certificates/models.py -msgid "There can be only one default image." -msgstr "Может использоваться только одно изображение по умолчанию." - #: lms/djangoapps/certificates/models.py msgid "Name of template." msgstr "Название шаблона." @@ -5266,6 +5303,10 @@ msgstr "" "Для получения сертификата вам необходимо выполнить все требования к " "указанному сроку." +#: lms/djangoapps/courseware/date_summary.py +msgid "After this date, course content will be archived." +msgstr "" + #: lms/djangoapps/courseware/date_summary.py msgid "" "This course is archived, which means you can review course content but it is" @@ -6309,12 +6350,8 @@ msgstr "" "повторите попытку." #: lms/djangoapps/instructor/views/api.py -msgid "Invalid Json data, Please refresh the page and then try again." -msgstr "Получены неверные JSON-данные. Пожалуйста обновите страницу." - -#: lms/djangoapps/instructor/views/api.py -msgid "Invalid data, user_id must be present for all certificate exceptions." -msgstr "Неверные данные, user_id должен присутствовать в списке исключений." +msgid "Invalid data, generate_for must be \"new\" or \"all\"." +msgstr "" #: lms/djangoapps/instructor/views/api.py msgid "Certificate generation started for white listed students." @@ -6675,6 +6712,7 @@ msgid "Last Name" msgstr "Фамилия" #: lms/djangoapps/instructor_task/tasks_helper.py +#: openedx/core/djangoapps/api_admin/forms.py #: lms/templates/shoppingcart/receipt.html msgid "Company Name" msgstr "Наименование компании" @@ -8250,6 +8288,10 @@ msgstr "" "Пользователь {username} не зарегистрирован на курс, связанный с этой " "командой." +#: lms/djangoapps/verified_track_content/models.py +msgid "The course key for the course we would like to be auto-cohorted." +msgstr "" + #: lms/djangoapps/verify_student/models.py msgid "Your {platform_name} verification has expired." msgstr "Срок действия вашей верификации {platform_name} истёк." @@ -9075,6 +9117,26 @@ msgstr "Эта версия была удалена." msgid "Restoring to this revision will mark the article as deleted." msgstr "Если восстановить эту версию, статья будет помечена как удалённая." +#: openedx/core/djangoapps/api_admin/forms.py +msgid "Company Address" +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "Describe what your application does." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The URL of your company's website." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The name of your company." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The contact address of your company." +msgstr "" + #: openedx/core/djangoapps/api_admin/models.py cms/templates/index.html msgid "Denied" msgstr "Отказано" @@ -9095,6 +9157,27 @@ msgstr "" msgid "The reason this user wants to access the API." msgstr "" +#: openedx/core/djangoapps/api_admin/models.py +msgid "API access request from {company}" +msgstr "" + +#: openedx/core/djangoapps/api_admin/models.py +msgid "API access request" +msgstr "" + +#: openedx/core/djangoapps/api_admin/views.py +msgid "TODO" +msgstr "" + +#. Translators: link_start and link_end are HTML tags for a link to the terms +#. of service. +#. platform_name is the name of this Open edX installation. +#: openedx/core/djangoapps/api_admin/widgets.py +msgid "" +"I, and my company, accept the {link_start}{platform_name} API Terms of " +"Service{link_end}." +msgstr "" + #: openedx/core/djangoapps/bookmarks/views.py msgid "An error has occurred. Please try again." msgstr "Возникла ошибка. Пожалуйста, попробуйте ещё раз." @@ -9127,6 +9210,10 @@ msgstr "" msgid "Bookmark with usage_id: {usage_id} does not exist." msgstr "Закладки с usage_id: {usage_id} не существует." +#: openedx/core/djangoapps/course_groups/cohorts.py +msgid "Default Group" +msgstr "" + #: openedx/core/djangoapps/course_groups/cohorts.py msgid "You cannot create two cohorts with the same name" msgstr "Две группы с одинаковыми именами не могут быть зарегистрированы" @@ -9395,6 +9482,14 @@ msgstr "" "Это максимальное количество попыток повторной обработки запроса о получении " "сертификата при неуспешном завершении предыдущего запроса." +#: openedx/core/djangoapps/programs/models.py +msgid "Do we want to show xseries program advertising" +msgstr "" + +#: openedx/core/djangoapps/programs/models.py +msgid "Do we want to show program listing page" +msgstr "" + #: openedx/core/djangoapps/self_paced/models.py msgid "Enable course home page improvements." msgstr "Разрешить улучшенную страницу курса." @@ -10135,10 +10230,18 @@ msgstr "Номер курса:" #: lms/templates/sysadmin_dashboard.html #: lms/templates/sysadmin_dashboard_gitlogs.html #: lms/templates/courseware/courses.html +#: themes/edx.org/lms/templates/header.html #: themes/red-theme/lms/templates/header.html msgid "Courses" msgstr "Курсы" +#: cms/templates/index.html cms/templates/widgets/header.html +#: lms/templates/navigation.html lms/templates/learner_dashboard/programs.html +#: themes/edx.org/lms/templates/header.html +#: themes/red-theme/lms/templates/header.html +msgid "Programs" +msgstr "" + #: cms/templates/login.html cms/templates/widgets/header.html #: themes/red-theme/cms/templates/login.html msgid "Sign In" @@ -10572,31 +10675,23 @@ msgstr "Помощь {platform_name}" #: lms/templates/help_modal.html msgid "" -"For questions on course lectures, homework, tools, or materials for " -"this course, post in the {link_start}course discussion " -"forum{link_end}." +"For {strong_start}questions on course lectures, homework, tools, or " +"materials for this course{strong_end}, post in the {link_start}course " +"discussion forum{link_end}." msgstr "" -"Если у вас есть вопросы о лекциях курса, домашних заданиях, " -"инструментах или материалах, напишите об этом на {link_start}форуме" -" обсуждений курса{link_end}." #: lms/templates/help_modal.html msgid "" -"Have general questions about {platform_name}? You can find " -"lots of helpful information in the {platform_name} " +"Have {strong_start}general questions about {platform_name}{strong_end}? You " +"can find lots of helpful information in the {platform_name} " "{link_start}FAQ{link_end}." msgstr "" -"Появились общие вопросы о {platform_name}? Вы можете найти " -"много полезной информации в разделе {link_start}Вопросы и ответы{link_end} " -"{platform_name}." #: lms/templates/help_modal.html msgid "" -"Have a question about something specific? You can contact " -"the {platform_name} general support team directly:" +"Have a {strong_start}question about something specific{strong_end}? You can " +"contact the {platform_name} general support team directly:" msgstr "" -"Есть вопросы о чём-то конкретном? Свяжитесь с командой " -"поддержки {platform_name} напрямую." #: lms/templates/help_modal.html msgid "Report a problem" @@ -10670,14 +10765,10 @@ msgid "Brief description of the problem" msgstr "Краткое описание проблемы" #: lms/templates/help_modal.html -msgid "Details of the problem you are encountering" -msgstr "Подробное описание возникшей проблемы" - -#: lms/templates/help_modal.html -msgid "Include error messages, steps which lead to the issue, etc." +msgid "" +"Details of the problem you are encountering{asterisk}{begin_span}Include " +"error messages, steps which lead to the issue, etc.{end_span}" msgstr "" -"Включите текст сообщения об ошибке, действия, которые привели к проблеме и " -"т.д." #: lms/templates/help_modal.html msgid "suggestion" @@ -10886,8 +10977,6 @@ msgstr "" msgid "Account Preferences" msgstr "Настройки учётной записи" -#. Translators: provider_name is the name of an external, third-party user -#. authentication provider (like Google or LinkedIn). #: lms/templates/login.html msgid "Sign in with {provider_name}" msgstr "Войти с помощью {provider_name}" @@ -11064,14 +11153,10 @@ msgid "Register" msgstr "Регистрация" #: lms/templates/navigation-edx.html lms/templates/navigation.html -#: themes/edx.org/lms/templates/header.html -#: themes/red-theme/lms/templates/header.html msgid "" -"Warning: Your browser is not fully supported. We strongly " -"recommend using {chrome_link} or {ff_link}." +"{begin_strong}Warning:{end_strong} Your browser is not fully supported. We " +"strongly recommend using {chrome_link} or {ff_link}." msgstr "" -"Предупреждение. Ваш браузер поддерживается не полностью. Мы" -" настоятельно рекомендуем использовать {chrome_link} или {ff_link}." #: lms/templates/navigation.html themes/red-theme/lms/templates/header.html msgid "Global" @@ -11152,8 +11237,6 @@ msgstr "" msgid "The following errors occurred while processing your registration:" msgstr "При обработки вашей заявки на регистрацию произошли следующие ошибки:" -#. Translators: provider_name is the name of an external, third-party user -#. authentication service (like Google or LinkedIn). #: lms/templates/register-form.html #: themes/stanford-style/lms/templates/register-form.html msgid "Sign up with {provider_name}" @@ -11766,10 +11849,6 @@ msgstr "" "Чтобы изменить размер шрифта, используйте настройки браузера. В Google " "Chrome это можно сделать одновременным нажатием Ctrl и + или Ctrl и -." -#: lms/templates/video.html -msgid "Skip to a navigable version of this video's transcript." -msgstr "Перейти к управляемой версии текста видео." - #: lms/templates/video.html msgid "Loading video player" msgstr "Загрузка видеоплеера" @@ -11782,14 +11861,6 @@ msgstr "Просмотреть видео" msgid "No playable video sources found." msgstr "Воспроизводимых видеоматериалов не найдено." -#: lms/templates/video.html -msgid "Skip to end of transcript." -msgstr "Перейти к концу стенограммы." - -#: lms/templates/video.html -msgid "Go back to start of transcript." -msgstr "Вернуться к началу стенограммы." - #: lms/templates/video.html msgid "Download video" msgstr "Скачать видео" @@ -11810,6 +11881,476 @@ msgstr "Ваши слова:" msgid "Total number of words:" msgstr "Общее количество слов:" +#: lms/templates/api_admin/api_access_request_form.html +msgid "API Access Request" +msgstr "" + +#: lms/templates/api_admin/api_access_request_form.html +#: lms/templates/api_admin/status.html +msgid "{platform_name} API Access Request" +msgstr "" + +#: lms/templates/api_admin/api_access_request_form.html +msgid "Request API Access" +msgstr "" + +#. Translators: "platform_name" is the name of this Open edX installation. +#. "link_start" and "link_end" are the HTML for a link to the API +#. documentation. "api_support_email_link" is HTML for a link to email the API +#. support staff. +#: lms/templates/api_admin/status.html +msgid "" +"Your request to access the {platform_name} Course Catalog API is being " +"processed. You will receive a message at the email address in your profile " +"when processing is complete. You can also return to this page to see the " +"status of your API access request. To learn more about the {platform_name} " +"Course Catalog API, visit {link_start}our API documentation page{link_end}. " +"For questions about using this API, visit our FAQ page or contact " +"{api_support_email_link}." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Terms of Service for {platform_name} APIs" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Effective Date: April 12th, 2016" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Welcome to {platform_name}. Thank you for using {platform_name}'s Course " +"Discovery API and any additional APIs that we may offer from time to time " +"(collectively, the \"APIs\"). Please read these Terms of Service prior to " +"accessing or using the APIs. These Terms of Service, any additional terms " +"within accompanying API documentation, and any applicable policies and " +"guidelines that {platform_name} makes available and/or updates from time to " +"time are agreements (collectively, the \"Terms\") between you and " +"{platform_name}. By accessing or using the APIs, you accept and agree to be " +"legally bound by the Terms, whether or not you are a registered user. If you" +" do not understand or do not wish to be bound by the Terms, you should not " +"use the APIs." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "API Access" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To access the APIs, you will need to create an {platform_name} user account " +"for your application (not for personal use). This account will provide you " +"with access to our API request page at {request_url}. On that page, you must" +" complete the API request form including a description of your proposed uses" +" for the APIs. Any account and registration information that you provide to " +"{platform_name} must be accurate and up to date, and you agree to inform us " +"promptly of any changes. {platform_name} will review your API request form " +"and, upon approval in {platform_name}'s sole discretion, will provide you " +"with instructions for obtaining your API shared secret and client ID." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Permissible Use" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to use the APIs solely for the purpose of delivering content that " +"is accessed through the APIs (the \"API Content\") to your own website, " +"mobile site, app, blog, email distribution list, or social media property or" +" for another commercial use that you described in your request for access " +"and that {platform_name} has approved on a case-by-case basis. " +"{platform_name} may monitor your use of the APIs for compliance with the " +"Terms and may deny your access or shut down your integration if you try to " +"go around or exceed the requirements and limitations set by {platform_name}." +" Your Application or other approved use of the API or the API Content must " +"not prompt your end users to provide their {platform_name} username, " +"password or other {platform_name} user credentials anywhere other than the " +"{platform_name} website at {platform_url}." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Prohibited Uses and Activities" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} shall have the sole right to determine whether or not any " +"given use of the APIs is acceptable, and {platform_name} reserves the right " +"to revoke API access for any use that {platform_name} determines at any " +"time, in its sole discretion, does not benefit or serve the best interests " +"of {platform_name}, its users and its partners." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The following activities are not acceptable when using the APIs (this is not" +" an exhaustive list):" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"collecting or storing the names, passwords, or other credentials of " +"{platform_name} users;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"scraping or similar techniques to aggregate or otherwise create permanent " +"copies of API Content;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"violating, misappropriating or infringing any copyright, trademark rights, " +"rights of privacy or publicity, confidential information or any other right " +"of any third party;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"altering or removing any trademark, copyright or other proprietary or legal " +"notices contained in, or appearing on, the APIs or any API Content;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "altering or editing any content or graphics in the API Content" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"sublicensing, re-distributing, renting, selling or leasing access to the " +"APIs or your client secret to any third party;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"distributing any virus, Trojan horse, spyware, adware, malware, bot, time " +"bomb, worm, or other harmful or malicious component; or" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"using the APIs for any purpose which or might overburden, impair or disrupt " +"the {platform_name} platform, servers or networks." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Usage and Quotas" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} reserves the right, in its discretion, to impose " +"restrictions and limitations on the number and frequency of calls made by " +"you or your Application to the APIs. You must not attempt to circumvent any " +"restrictions or limitations that we impose." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Compliance" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to comply with all applicable law, regulation, and third party " +"rights (including without limitation laws regarding the import or export of " +"data or software, privacy, copyright, and local laws). You will not use the " +"APIs to encourage or promote illegal activity or violation of third party " +"rights. You will not violate any other terms of service with " +"{platform_name}. You will only access (or attempt to access) an API by the " +"means described in the documentation of that API. You will not misrepresent " +"or mask either your identity or yourApplication's identity when using the " +"APIs." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Ownership" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You acknowledge and agree that the APIs and all API Content contain valuable" +" intellectual property of {platform_name} and its partners. The APIs and all" +" API Content are protected by United States and foreign copyright, " +"trademark, and other laws. All rights in the APIs and the API Content, if " +"not expressly granted, are reserved. By using the APIs or any API Content, " +"you do not acquire ownership of any rights in the APIs or API Content. You " +"must not claim or attempt to claim ownership in the APIs or any API Content " +"or misrepresent yourself or your company or your Application as being the " +"source of any API Content. You may not modify, create derivative works of, " +"or attempt to use, license, or in any way exploit any API Content in whole " +"or in part on your own behalf or on behalf of any third party. You may not " +"distribute or modify the APIs or any API Content (including adaptation, " +"editing, excerpting, or creating derivative works)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"All names, logos and seals (\"Trademarks\") that appear in the APIs, API " +"Content, or on or through the services made available on or through the " +"APIs, if any, are the property of their respective owners. You may not " +"remove, alter, or obscure any copyright, Trademark, or other proprietary " +"rightrs notices incorporated in or accompanying the API Content. If any " +"third party revokes access to API Content owned or controlled by that third " +"party, including without limitation any Trademarks, you must ensure that all" +" API Content pertaining to that third party is deleted from your app, " +"networks, systems and servers as soon as reasonably possible. If you stop " +"using the APIs altogether or if your API access is revoked, you must delete " +"all API Content in the same way." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To the extent that you submit any content to {platform_name} in connection " +"with your use of the APIs or any API Content, you hereby grant to " +"{platform_name} a worldwide, non-exclusive, transferable, assignable, sub " +"licensable, 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 such " +"content, in whole or in part, in any form and in any media formats and " +"through any media channels (now known or hereafter developed)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Privacy" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to comply with all applicable privacy laws and regulations and to " +"be transparent with respect to any collection and use of end user data. You " +"will provide and adhere to a privacy policy for your Application that " +"clearly and accurately describes to your end users what user information you" +" collect and how you may use and share such information (including for " +"advertising) with {platform_name} and other third parties." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Right to Charge" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} reserves the right to modify the Terms at any time without " +"advance notice. Any changes to the Terms will be effective immediately upon " +"posting on this page, with an updated effective date. By accessing or using " +"the APIs after any changes have been made, you signify your agreement on a " +"prospective basis to the modified Terms and all of the changes. Be sure to " +"return to this page periodically to ensure familiarity with the most current" +" version of the Terms." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} may also update or modify the APIs from time to time without" +" advance notice. These changes may affect your use of the APIs or the way " +"your integration interacts with the API. If we make a change that is " +"unacceptable to you, you should stop using the APIs. Continued use of the " +"APIs means you accept the change." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Confidentiality" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Your credentials (such as client secret and IDs) are intended to be used " +"solely by you. You will keep your credentials confidential and discourage " +"others from using your credentials. Your credentials may not be embedded in " +"open source projects." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"In the event that {platform_name} provides you with access to information " +"specific to {platform_name} and/or the APIs that is either marked as " +"\"Confidential\" or which a reasonable person would assume to be " +"confidential or proprietary given the terms of its disclosure " +"(\"Confidential Information\"), you agree to use this information only to " +"use and build with the APIs. You may not disclose the Confidential " +"Information to anyone without {platform_name}'s prior written consent, and " +"you agree to protect the Confidential Information from unauthorized use and " +"disclosure in the same way that you would protect your own confidential " +"information. Confidential information does not include information that you " +"independently developed, that was rightfully given to you by a third party " +"without confidentiality obligation, or that becomes public through no fault " +"of your own. You may disclose Confidential Information when compelled to do " +"so by law if you provide {platform_name} with reasonable prior notice, " +"unless a court orders that {platform_name} not receive notice." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Disclaimer of Warranty / Limitation of Liabilities" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"THE APIS AND ANY INFORMATION, API CONTENT OR SERVICES MADE AVAILABLE ON OR " +"THROUGH THE APIS 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." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} AND THE {platform_name} PARTICIPANTS (AS HERINAFTER DEFINED)" +" DO NOT WARRANT THAT THE APIS WILL OPERATE IN AN UNINTERRUPTED OR ERROR-FREE" +" MANNER, THAT THE APIS ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS, OR " +"THAT THE APIS OR API CONTENT PROVIDED WILL MEET YOUR NEEDS OR EXPECTATIONS. " +"{platform_name} AND THE {platform_name} PARTICIPANTS ALSO MAKE NO WARRANTY " +"ABOUT THE ACCURACY, COMPLETENESS, TIMELINESS, OR QUALITY OF THE APIS OR ANY " +"API CONTENT, OR THAT ANY PARTICULAR API CONTENT WILL CONTINUE TO BE MADE " +"AVAILABLE. \"{platform_name} PARTICIPANTS\" MEANS MIT, HARVARD, THE OTHER " +"MEMBERS, THE ENTITIES PROVIDING INFORMATION, API CONTENT OR SERVICES FOR THE" +" APIS, THE COURSE INSTRUCTORS AND THEIR STAFFS." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"USE OF THE APIS, AND THE API CONTENT AND ANY SERVICES OBTAINED FROM OR " +"THROUGH THE APIS, IS AT YOUR OWN RISK. YOUR ACCESS TO OR DOWNLOAD OF " +"INFORMATION, MATERIALS OR DATA THROUGH THE APIS 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, UNLESS OTHERWISE EXPRESSLY " +"PROVIDED FOR IN THE {platform_name} PRIVACY POLICY." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, YOU AGREE THAT NEITHER " +"{platform_name} NOR ANY OF THE {platform_name} PARTICIPANTS WILL BE LIABLE " +"TO YOU FOR ANY LOSS OR DAMAGES, EITHER ACTUAL OR CONSEQUENTIAL, ARISING OUT " +"OF OR RELATING TO THESE TERMS, OR YOUR (OR ANY THIRD PARTY'S) USE OF OR " +"INABILITY TO USE THE APIS OR ANY API CONTENT, OR YOUR RELIANCE UPON " +"INFORMATION OBTAINED FROM OR THROUGH THE APIS, WHETHER YOUR CLAIM IS BASED " +"IN CONTRACT, TORT, STATUTORY OR OTHER LAW." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"IN PARTICULAR, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER " +"{platform_name} NOR ANY OF THE {platform_name} PARTICIPANTS WILL HAVE ANY " +"LIABILITY FOR ANY CONSEQUENTIAL, INDIRECT, PUNITIVE, SPECIAL, EXEMPLARY OR " +"INCIDENTAL DAMAGES, WHETHER FORESEEABLE OR UNFORESEEABLE AND WHETHER OR NOT " +"{platform_name} OR ANY OF THE {platform_name} 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)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"CERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE " +"EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME" +" OR ALL OF THE ABOVE DISCLAIMERS, EXCLUSIONS, OR LIMITATIONS MAY NOT APPLY " +"TO YOU, AND YOU MIGHT HAVE ADDITIONAL RIGHTS." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The APIs and API Content may include hyperlinks to sites maintained or " +"controlled by others. {platform_name} and the {platform_name} 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 " +"websites, you do so at your own risk." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To the maximum extent permitted by applicable law, you agree to defend, hold" +" harmless and indemnify {platform_name} and the {platform_name} " +"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 APIs and any API " +"Content, 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, " +"{platform_name} or one of the {platform_name} Participants will provide you " +"with written notice of such claim, suit or action." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "General Legal Terms" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The Terms constitute the entire agreement between you and {platform_name} " +"with respect to your use of the APIs and API Content, superseding any prior " +"agreements between you and {platform_name} regarding your use of the APIs " +"and API Content. The failure of {platform_name} to exercise or enforce any " +"right or provision of the Terms shall not constitute a waiver of such right " +"or provision. If any provision of the Terms 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 the Terms shall remain in full " +"force and effect. The Terms do not create any third party beneficiary rights" +" or any agency, partnership, or joint venture. For any notice provided to " +"you by {platform_name} under these Terms, {platform_name} may notify you via" +" the email address associated with your {platform_name} account." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree that the Terms, the APIs, and any claim or dispute arising out of " +"or relating to the Terms or the APIs 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). Notwithstanding the foregoing, you agree that {platform_name} shall " +"still be allowed to apply to injunctive remedies (or an equivalent type of " +"urgent legal relief) in any jursdiction." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Termination" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You may stop using the APIs at any time. You agree that {platform_name}, in " +"its sole discretion and at any time, may terminate your use of the APIs or " +"any API Content for any reason or no reason, without prior notice or " +"liabiliy." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} and the {platform_name} Participants reserve the right at " +"any time in their sole discretion to cancel, delay, reschedule or alter the " +"format of any API or API Content offered through {platform_name}, or to " +"cease providing any part or all of the APIs or API Content or related " +"services, and you agree that neither {platform_name} nor any of the " +"{platform_name} Participants will have any liability to you for such an " +"action." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Upon any termination of the Terms or discontinuation of your access to an " +"API for any reason, your right to use any API and API Content will " +"immediately cease. You will immediately stop using the APIs and delete any " +"cached or stored API Content. All provisions of the Terms that by their " +"nature should survive termination shall survive termination, including, " +"without limitation, ownership provisions, warranty disclaimers, and " +"limitation of liability. Termination of your access to and use of the APIs " +"and API Content shall not relieve you of any obligations arising or " +"accrusing prior to such termination or limit any liability that you " +"otherwise may have to {platform_name}, including without limitation any " +"indemnification obligations contained herein." +msgstr "" + #: lms/templates/calculator/toggle_calculator.html msgid "Open Calculator" msgstr "Открыть калькулятор" @@ -12038,24 +12579,17 @@ msgid "Auto Enroll" msgstr "Автоматически вносить в список" #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is checked, users who have not yet registered for " -"{platform_name} will be automatically enrolled." +"If this option is {em_start}checked{em_end}, users who have not yet " +"registered for {platform_name} will be automatically enrolled." msgstr "" -"Если эта опция отмечена, пользователи, не зарегистрированные в " -"{platform_name}, будут автоматически зачислены на курс." #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is left unchecked, users who have not yet registered" -" for {platform_name} will not be enrolled, but will be allowed to enroll " -"once they make an account." +"If this option is left {em_start}unchecked{em_end}, users who have not yet " +"registered for {platform_name} will not be enrolled, but will be allowed to " +"enroll once they make an account." msgstr "" -"Если эта опция не отмечена, пользователи, не зарегистрированные в " -"{platform_name} не будут зачислены на курс. Однако они смогут записать на " -"него, создав учетную запись." #: lms/templates/ccx/enrollment.html #: lms/templates/instructor/instructor_dashboard_2/membership.html @@ -12070,13 +12604,10 @@ msgid "Notify users by email" msgstr "Уведомить слушателей по электронной почте" #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is checked, users will receive an email " +"If this option is {em_start}checked{em_end}, users will receive an email " "notification." msgstr "" -"Если эта опция отмечена, пользователи будут получать уведомления по" -" электронной почте." #: lms/templates/ccx/enrollment.html #: lms/templates/courseware/course_about.html @@ -12505,6 +13036,10 @@ msgstr "" msgid "{chapter} current chapter" msgstr "{chapter} текущая глава" +#: lms/templates/courseware/accordion.html +msgid "{span_start}current section{span_end}" +msgstr "" + #: lms/templates/courseware/accordion.html #: lms/templates/courseware/progress.html msgid "due {date}" @@ -12931,8 +13466,8 @@ msgid "Verification Declined" msgstr "Подтверждение отклонено" #: lms/templates/courseware/progress.html -msgid "Completed" -msgstr "Завершено" +msgid "Completed by" +msgstr "" #: lms/templates/courseware/progress.html msgid "Upcoming" @@ -13319,12 +13854,9 @@ msgstr "" #: lms/templates/dashboard/_dashboard_course_listing.html msgid "" "It's official. It's easily shareable. It's a proven motivator to complete " -"the course.
    {link_start}Learn more about the verified " +"the course. {line_break}{link_start}Learn more about the verified " "{cert_name_long}{link_end}." msgstr "" -"Это официальный сертификат. О нём легко рассказать. Стремление получить его " -"мотивирует закончить курс.
    {link_start}Узнать больше про подтверждённый " -"{cert_name_long}{link_end}." #: lms/templates/dashboard/_dashboard_course_listing.html msgid "Upgrade to Verified" @@ -15604,6 +16136,32 @@ msgstr "Поэтому, пожалуйста, подробно опишите, msgid "Reason" msgstr "Причина" +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is checked, users who have not yet registered for " +"{platform_name} will be automatically enrolled." +msgstr "" +"Если эта опция отмечена, пользователи, не зарегистрированные в " +"{platform_name}, будут автоматически зачислены на курс." + +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is left unchecked, users who have not yet registered" +" for {platform_name} will not be enrolled, but will be allowed to enroll " +"once they make an account." +msgstr "" +"Если эта опция не отмечена, пользователи, не зарегистрированные в " +"{platform_name} не будут зачислены на курс. Однако они смогут записать на " +"него, создав учетную запись." + +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is checked, users will receive an email " +"notification." +msgstr "" +"Если эта опция отмечена, пользователи будут получать уведомления по" +" электронной почте." + #: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "Register/Enroll Students" msgstr "Зарегистрировать/зачислить слушателей" @@ -17182,15 +17740,11 @@ msgstr "Необходимые технические приспособлени #: lms/templates/verify_student/pay_and_verify.html msgid "" -"Please make sure your browser is updated to the {a_start}most recent version" -" possible{a_end}. Also, please make sure your webcam is plugged in, " -"turned on, and allowed to function in your web browser (commonly adjustable " -"in your browser settings)." +"Please make sure your browser is updated to the {strong_start}{a_start}most " +"recent version possible{a_end}{strong_end}. Also, please make sure your " +"{strong_start}webcam is plugged in, turned on, and allowed to function in " +"your web browser (commonly adjustable in your browser settings).{strong_end}" msgstr "" -"Пожалуйста, убедитесь, что ваш браузер обновлен до {a_start} последней " -"возможной версии{a_end}. Также пожалуйста убедитесь, что ваша веб-" -"камера подключена к сети, включена, и позволяет функционировать в вашем веб-" -"браузере (обычно регулируется в настройках вашего браузера)." #: lms/templates/verify_student/reverify.html msgid "Re-Verification" @@ -17275,6 +17829,15 @@ msgstr "" "Open edX и их логотипы являются зарегистрированными товарными знаками edX " "Inc." +#: themes/edx.org/lms/templates/header.html +#: themes/red-theme/lms/templates/header.html +msgid "" +"Warning: Your browser is not fully supported. We strongly " +"recommend using {chrome_link} or {ff_link}." +msgstr "" +"Предупреждение. Ваш браузер поддерживается не полностью. Мы" +" настоятельно рекомендуем использовать {chrome_link} или {ff_link}." + #: themes/edx.org/lms/templates/course_modes/choose.html msgid "" "{b_start}Support our Mission: {b_end} EdX, a non-profit, relies on verified " @@ -19332,10 +19895,6 @@ msgstr "" msgid "Libraries" msgstr "Библиотеки" -#: cms/templates/index.html cms/templates/widgets/header.html -msgid "Programs" -msgstr "Программы" - #: cms/templates/index.html msgid "Re-run Course" msgstr "Перезапустить курс" diff --git a/conf/locale/ru/LC_MESSAGES/djangojs.mo b/conf/locale/ru/LC_MESSAGES/djangojs.mo index 31d1b8c77d5fa3c0fed63e3fd35b67b62421bf98..c62ffff5208fc8a9cbd5090cf2295636c73facbf 100644 GIT binary patch delta 36133 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 M91%Lg_c7Z40lx4Ku>b%7 delta 39326 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 ZX54YH4^o5bUYLAgHnjGfRlxk43jk=Cc|rgH diff --git a/conf/locale/ru/LC_MESSAGES/djangojs.po b/conf/locale/ru/LC_MESSAGES/djangojs.po index 9aaeb817f7..9b10032254 100644 --- a/conf/locale/ru/LC_MESSAGES/djangojs.po +++ b/conf/locale/ru/LC_MESSAGES/djangojs.po @@ -115,9 +115,9 @@ msgid "" msgstr "" "Project-Id-Version: edx-platform\n" "Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" -"POT-Creation-Date: 2016-03-30 19:38+0000\n" -"PO-Revision-Date: 2016-04-07 16:58+0000\n" -"Last-Translator: Liubov Fomicheva \n" +"POT-Creation-Date: 2016-04-15 11:04+0000\n" +"PO-Revision-Date: 2016-04-15 11:07+0000\n" +"Last-Translator: Ned Batchelder \n" "Language-Team: Russian (http://www.transifex.com/open-edx/edx-platform/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -284,6 +284,7 @@ msgstr "Дополнительно" #: common/lib/xmodule/xmodule/js/src/html/edit.js #: common/static/common/templates/image-modal.underscore #: common/static/common/templates/discussion/forum-action-close.underscore +#: lms/templates/student_profile/share_modal.underscore msgid "Close" msgstr "Закрыть" @@ -1856,39 +1857,37 @@ msgid "Do not show again" msgstr "Не показывать снова" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Turn on closed captioning" -msgstr "Включить субтитры" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Turn off transcript" -msgstr "Отключить транскрипт" +msgid "Transcript will be displayed when you start playing the video." +msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "" -"Language: Press the UP arrow key to enter the language menu, then use UP and" -" DOWN arrow keys to navigate language options. Press ENTER to change to the " +"Activating a link in this group will skip to the corresponding point in the " +"video." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Video transcript" +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Start of transcript. Skip to the end." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "End of transcript. Skip to the start." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "" +"Language: Press the UP arrow key to enter the language menu then use UP and " +"DOWN arrow keys to navigate language options. Press ENTER to change to the " "selected language." msgstr "" -"Язык: нажмите кнопку со стрелкой вверх для выбора языка, затем используйте " -"стрелки вверх и вниз для навигации по меню. Нажмите ENTER для изменения " -"языка." #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Open language menu" -msgstr "Выбор языка" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "" -"Activating an item in this group will spool the video to the corresponding " -"time point. To skip transcript, go to previous item." +msgid "Open language menu." msgstr "" -"При активации пункта в этой группе произойдёт перемотка видео к " -"соответствующей точке. Для того, чтобы пропустить титры, перейдите к " -"предыдущему пункту." - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "
  • Transcript will be displayed when " -msgstr "
  • Оценки будут показаны, когда" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "Hide closed captions" @@ -1898,6 +1897,10 @@ msgstr "Спрятать субтитры" msgid "(Caption will be displayed when you start playing the video.)" msgstr "(Субтитры будут показаны, когда вы начнете проигрывать видео)" +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Turn on closed captioning" +msgstr "Включить субтитры" + #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "Turn on transcripts" msgstr "Включить транскрипты" @@ -2212,6 +2215,17 @@ msgid "Please do not use any spaces or special characters in this field." msgstr "" "Пожалуйста, в этом поле не используйте пробелов или специальных символов." +#: common/static/common/js/components/views/paginated_view.js +#: common/static/common/js/components/views/paging_footer.js +msgid "Pagination" +msgstr "" + +#: common/static/common/js/components/views/paginated_view.js +msgid "" +"Your request could not be completed. Reload the page and try again. If the " +"issue persists, click the Help tab to report the problem." +msgstr "" + #: common/static/common/js/components/views/paging_header.js msgid "Showing %(first_index)s out of %(num_items)s total" msgstr "Отображается %(first_index)s из %(num_items)s total " @@ -2521,6 +2535,7 @@ msgstr "вакантные места" #: lms/djangoapps/teams/static/teams/js/collections/topic.js #: lms/templates/edxnotes/tab-item.underscore +#: lms/templates/learner_dashboard/program_card.underscore msgid "name" msgstr "имя" @@ -2530,6 +2545,11 @@ msgstr "имя" msgid "team count" msgstr "количество команд" +#: lms/djangoapps/teams/static/teams/js/teams_tab_factory.js +#: lms/djangoapps/teams/static/teams/js/views/teams_tab.js +msgid "Teams" +msgstr "Команды" + #: lms/djangoapps/teams/static/teams/js/views/edit_team.js #: cms/templates/js/certificate-editor.underscore #: cms/templates/js/content-group-editor.underscore @@ -2728,14 +2748,14 @@ msgstr[3] "%(memberCount)s из %(maxMemberCount)s участников" msgid "All teams" msgstr "Все команды" +#: lms/djangoapps/teams/static/teams/js/views/teams.js +msgid "Teams Pagination" +msgstr "" + #: lms/djangoapps/teams/static/teams/js/views/teams_tab.js msgid "Topics" msgstr "Темы" -#: lms/djangoapps/teams/static/teams/js/views/teams_tab.js -msgid "Teams" -msgstr "Команды" - #: lms/djangoapps/teams/static/teams/js/views/teams_tab.js msgid "" "See all teams in your course, organized by topic. Join a team to collaborate" @@ -4389,6 +4409,10 @@ msgstr "Привязка к учётной записи" msgid "Successfully unlinked." msgstr "Удалено." +#: lms/static/js/student_profile/views/badge_list_container.js +msgid "Accomplishments Pagination" +msgstr "" + #: lms/static/js/student_profile/views/learner_profile_factory.js msgid "{platform_name} learners can see my:" msgstr "Слушатели {platform_name} видят мой:" @@ -4450,6 +4474,18 @@ msgstr "Фотография" msgid "Profile image for {username}" msgstr "Фото {username}" +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "About Me" +msgstr "" + +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "Accomplishments" +msgstr "" + +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "Profile" +msgstr "" + #: lms/static/js/verify_student/views/image_input_view.js msgid "Image Upload Error" msgstr "Ошибка загрузки изображения" @@ -4976,6 +5012,10 @@ msgstr "Требуется путь к ресурсу" msgid "You must specify a name" msgstr "Вы должны указать имя" +#: cms/static/js/models/course_update.js +msgid "Action required: Enter a valid date." +msgstr "" + #: cms/static/js/models/group.js msgid "Group name is required" msgstr "Требуется название группы" @@ -5816,6 +5856,11 @@ msgstr "Дата выпуска не задана" msgid "Date" msgstr "Дата" +#: cms/templates/js/edit-chapter.underscore +#: lms/templates/ccx/schedule.underscore +msgid "gettext(" +msgstr "gettext(" + #: cms/templates/js/paging-header.underscore #: common/static/common/templates/components/paging-footer.underscore #: common/static/common/templates/discussion/pagination.underscore @@ -5841,8 +5886,9 @@ msgid "Zoom Out" msgstr "Отдалить" #: common/static/common/templates/components/paging-footer.underscore -msgid "Page number" -msgstr "Номер страницы" +#, python-format +msgid "Page number out of %(total_pages)s" +msgstr "" #: common/static/common/templates/components/paging-footer.underscore msgid "Enter the page number you'd like to quickly navigate to." @@ -6519,10 +6565,6 @@ msgstr "Срок сдачи" msgid "remove all" msgstr "удалить всё" -#: lms/templates/ccx/schedule.underscore -msgid "gettext(" -msgstr "gettext(" - #: lms/templates/ccx/schedule.underscore msgid "Section" msgstr "Раздел" @@ -6865,16 +6907,10 @@ msgid "Generate Exception Certificates" msgstr "Создать сертификаты для исключительных случаев" #: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "Generate a Certificate for all " -msgstr "Создать сертификаты для всех" - -#: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "New" -msgstr "Новый" - -#: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "additions to the Exception list" -msgstr "добавленных в список исключений" +msgid "" +"Generate certificates for all users on the Exception list for whom " +"certificates have not yet been run" +msgstr "" #: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore msgid "Generate a Certificate for all users on the Exception list" @@ -7122,6 +7158,24 @@ msgstr "Использовано" msgid "Valid" msgstr "Данные действительны" +#: lms/templates/learner_dashboard/explore_new_programs.underscore +msgid "" +"Browse recently launched courses and see what\\'s new in your favorite " +"subjects" +msgstr "" + +#: lms/templates/learner_dashboard/explore_new_programs.underscore +msgid "Explore New XSeries" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore +msgid "org.display_name" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore +msgid "type" +msgstr "" + #: lms/templates/search/course_search_results.underscore #: lms/templates/search/dashboard_search_results.underscore #, python-format @@ -7168,7 +7222,6 @@ msgid "section.title" msgstr "section.title" #: lms/templates/student_account/account_settings.underscore -#: lms/templates/student_profile/learner_profile.underscore msgid "An error occurred. Please reload the page." msgstr "Произошла ошибка. Перезагрузите страницу." @@ -7353,13 +7406,69 @@ msgstr "Обязательное поле" msgid "Already have an account?" msgstr "Уже есть учётная запись?" +#: lms/templates/student_profile/badge.underscore +#, python-format +msgid "Share your \"%(display_name)s\" award" +msgstr "" + +#: lms/templates/student_profile/badge.underscore +msgid "Share" +msgstr "" + +#: lms/templates/student_profile/badge.underscore +#, python-format +msgid "Earned %(created)s." +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "What's Your Next Accomplishment?" +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "Start working toward your next learning goal." +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "Find a course" +msgstr "" + #: lms/templates/student_profile/learner_profile.underscore +msgid "An error occurred. Try loading the page again." +msgstr "" + +#: lms/templates/student_profile/section_two.underscore msgid "You are currently sharing a limited profile." msgstr "Сейчас сокурсникам разрешен ограниченный доступ к вашему профилю." -#: lms/templates/student_profile/learner_profile.underscore -msgid "This edX learner is currently sharing a limited profile." -msgstr "Пользователь ограничил доступ к своему профилю." +#: lms/templates/student_profile/section_two.underscore +msgid "This learner is currently sharing a limited profile." +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +msgid "Share on Mozilla Backpack" +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +msgid "" +"To share your certificate on Mozilla Backpack, you must first have a " +"Backpack account. Complete the following steps to add your certificate to " +"Backpack." +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +#, python-format +msgid "" +"Create a %(link_start)sMozilla Backpack%(link_end)s account, or log in to " +"your existing account" +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +#, python-format +msgid "" +"%(download_link_start)sDownload this image (right-click or option-click, " +"save as)%(link_end)s and then %(upload_link_start)supload%(link_end)s it to " +"your backpack.
  • " +msgstr "" #: lms/templates/verify_student/enrollment_confirmation_step.underscore #, python-format @@ -7450,13 +7559,10 @@ msgid "Take Your Photo" msgstr "Сфотографируйте себя" #: lms/templates/verify_student/face_photo_step.underscore -#, python-format msgid "" -"When your face is in position, use the camera button %(icon)s below to take " +"When your face is in position, use the camera button {icon} below to take " "your photo." msgstr "" -"Когда ваше лицо полностью попадёт в кадр, нажмите расположенную ниже кнопку " -"с изображением камеры %(icon)s, чтобы сделать снимок." #: lms/templates/verify_student/face_photo_step.underscore msgid "To take a successful photo, make sure that:" @@ -7475,14 +7581,10 @@ msgid "The photo of your face matches the photo on your ID." msgstr "Фото вашего лица соответствует фото в вашем документе." #: lms/templates/verify_student/face_photo_step.underscore -#, python-format msgid "" -"To use the current photo, select the camera button %(icon)s. To take another" -" photo, select the retake button %(icon)s." +"To use the current photo, select the camera button {icon}. To take another " +"photo, select the retake button {icon}." msgstr "" -"Чтобы использовать текущую фотографию, нажмите кнопку с изображением камеры " -"%(icon)s. Чтобы сделать другую фотографию, нажмите кнопку пересъёмки " -"%(icon)s." #: lms/templates/verify_student/face_photo_step.underscore #: lms/templates/verify_student/id_photo_step.underscore @@ -7576,11 +7678,8 @@ msgid "Make sure your ID is well-lit" msgstr "Убедитесь, что ваш документ хорошо освещён" #: lms/templates/verify_student/id_photo_step.underscore -#, python-format -msgid "Once in position, use the camera button %(icon)s to capture your ID" +msgid "Once in position, use the camera button {icon} to capture your ID" msgstr "" -"Когда будете готовы, используйте кнопку камеры %(icon)s, чтобы сделать " -"снимок своего удостоверения личности" #: lms/templates/verify_student/id_photo_step.underscore #: lms/templates/verify_student/incourse_reverify.underscore @@ -7613,11 +7712,8 @@ msgid "Be sure your entire face is inside the frame" msgstr "Убедитесь, что всё ваше лицо находится внутри рамки" #: lms/templates/verify_student/incourse_reverify.underscore -#, python-format -msgid "Once in position, use the camera button %(icon)s to capture your photo" +msgid "Once in position, use the camera button {icon} to capture your photo" msgstr "" -"Когда будете готовы, используйте кнопку камеры %(icon)s, чтобы сделать " -"снимок" #: lms/templates/verify_student/incourse_reverify.underscore msgid "Can we match the photo you took with the one on your ID?" @@ -7625,11 +7721,8 @@ msgstr "" "Можем ли мы сопоставить снимок, сделанный вами, с фото в вашем документе?" #: lms/templates/verify_student/intro_step.underscore -#, python-format -msgid "Thanks for returning to verify your ID in: %(courseName)s" +msgid "Thanks for returning to verify your ID in: {courseName}" msgstr "" -"Благодарим за то, что вы вернулись и подтвердили свои данные на курсе: " -"%(courseName)s" #: lms/templates/verify_student/intro_step.underscore #: lms/templates/verify_student/make_payment_step.underscore @@ -7668,14 +7761,13 @@ msgstr "" "образца с вашими именем и фотографией" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "You are enrolling in: %(courseName)s" -msgstr "Вы записываетесь на курс: %(courseName)s" +#: lms/templates/verify_student/make_payment_step_ab_testing.underscore +msgid "You are enrolling in: {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "You are upgrading your enrollment for: %(courseName)s" -msgstr "Вы меняете форму записи на курс: %(courseName)s" +msgid "You are upgrading your enrollment for: {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step.underscore msgid "" @@ -7725,9 +7817,8 @@ msgid "You have already verified your ID!" msgstr "Вы уже подтвердили документ, удостоверяющий личность." #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "Your verification status is good until %(verificationGoodUntil)s." -msgstr "Ваш подтверждённый статус действует до %(verificationGoodUntil)s." +msgid "Your verification status is good until {verificationGoodUntil}." +msgstr "" #: lms/templates/verify_student/make_payment_step.underscore msgid "price" @@ -7738,14 +7829,8 @@ msgid "Account Not Activated" msgstr "Учётная запись не активирована" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "You are enrolling in %(courseName)s" -msgstr "Вы записываетесь на курс: %(courseName)s" - -#: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Upgrade to a Verified Certificate for %(courseName)s" -msgstr "Повысьте до подтверждённого сертификата %(courseName)s" +msgid "Upgrade to a Verified Certificate for {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore msgid "" @@ -7759,14 +7844,12 @@ msgid "Check your email for an activation message." msgstr "Пожалуйста, проверьте почту - вам отправлена ссылка для активации." #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Professional Certificate for %(courseName)s" -msgstr "Сертификат повышения квалификации %(courseName)s" +msgid "Professional Certificate for {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Verified Certificate for %(courseName)s" -msgstr "Подтверждённый сертификат %(courseName)s" +msgid "Verified Certificate for {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore #, python-format @@ -7804,9 +7887,8 @@ msgstr "" "личности: паспорта или иного документа с фотографией." #: lms/templates/verify_student/payment_confirmation_step.underscore -#, python-format -msgid "Thank you! We have received your payment for %(courseName)s." -msgstr "Благодарим вас! Ваш платёж за курс %(courseName)s получен." +msgid "Thank you! We have received your payment for {courseName}." +msgstr "" #: lms/templates/verify_student/payment_confirmation_step.underscore msgid "Next Step: Confirm your identity" @@ -8408,11 +8490,6 @@ msgstr "Очистить срок сдачи на оценку" msgid "Chapter Name" msgstr "Название главы" -#: cms/templates/js/edit-chapter.underscore -#, python-format -msgid "Chapter %s" -msgstr "Глава %s" - #: cms/templates/js/edit-chapter.underscore msgid "provide the title/name of the chapter that will be used in navigating" msgstr "укажите название/заголовок главы для перемещения между главами" @@ -8421,11 +8498,6 @@ msgstr "укажите название/заголовок главы для п msgid "Chapter Asset" msgstr "Актив главы" -#: cms/templates/js/edit-chapter.underscore -#, python-format -msgid "path/to/introductionToCookieBaking-CH%d.pdf" -msgstr "путь/к/вводнаяПоСозданиюCookie-ГЛ%d.pdf" - #: cms/templates/js/edit-chapter.underscore msgid "upload a PDF file or provide the path to a Studio asset file" msgstr "загрузите PDF-файл или укажите путь к загруженному через Студию файлу" diff --git a/conf/locale/zh_CN/LC_MESSAGES/django.mo b/conf/locale/zh_CN/LC_MESSAGES/django.mo index e80fc53d91d58313c3c8972a1be3e75537dab7f5..9f437a0fe7d71e5c92ba7938ccef1f0f7d9895e8 100644 GIT binary patch delta 32956 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 z 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 delta 34236 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, 2015 # 沈世奇 , 2013 # vingte <411029240@qq.com>, 2014 +# Wang Mengmeng , 2016 # wendiyan420 , 2015 # wendiyan420 , 2015 # Wentao Han , 2013 @@ -339,7 +340,7 @@ msgid "" msgstr "" "Project-Id-Version: edx-platform\n" "Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" -"POT-Creation-Date: 2016-03-30 19:39+0000\n" +"POT-Creation-Date: 2016-04-15 11:05+0000\n" "PO-Revision-Date: 2015-12-13 04:46+0000\n" "Last-Translator: riceball \n" "Language-Team: Chinese (China) (http://www.transifex.com/open-edx/edx-platform/language/zh_CN/)\n" @@ -562,6 +563,10 @@ msgid "" "set." msgstr "" +#: common/djangoapps/course_modes/models.py +msgid "Verified modes cannot be free." +msgstr "" + #: common/djangoapps/course_modes/models.py msgid "" "The time period before a course ends in which a course mode will expire" @@ -600,6 +605,7 @@ msgid "Student" msgstr "学生" #: common/djangoapps/embargo/forms.py +#: lms/djangoapps/verified_track_content/forms.py msgid "COURSE NOT FOUND. Please check that the course ID is valid." msgstr "" @@ -4054,6 +4060,75 @@ msgstr "" msgid "Top num_top_words words for word cloud." msgstr "" +#: lms/djangoapps/badges/events/course_complete.py +msgid "" +"Completed the course \"{course_name}\" ({course_mode}, {start_date} - " +"{end_date})" +msgstr "" + +#: lms/djangoapps/badges/events/course_complete.py +msgid "Completed the course \"{course_name}\" ({course_mode})" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The badge image must be square." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The badge image file size must be less than 250KB." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "This value must be all lowercase." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The course mode for this badge image. For example, \"verified\" or \"honor\"." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Badge images must be square PNG files. The file size should be under 250KB." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Set this value to True if you want this image to be the default image for " +"any course modes that do not have a specified badge image. You can have only" +" one default image." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "There can be only one default image." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"On each line, put the number of completed courses to award a badge for, a " +"comma, and the slug of a badge class you have created that has the issuing " +"component 'openedx__course'. For example: 3,enrolled_3_courses" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"On each line, put the number of enrolled courses to award a badge for, a " +"comma, and the slug of a badge class you have created that has the issuing " +"component 'openedx__course'. For example: 3,enrolled_3_courses" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Each line is a comma-separated list. The first item in each line is the slug" +" of a badge class you have created that has an issuing component of " +"'openedx__course'. The remaining items in each line are the course keys the " +"learner needs to complete to be awarded the badge. For example: " +"slug_for_compsci_courses_group_badge,course-v1:CompSci+Course+First,course-v1:CompsSci+Course+Second" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "Please check the syntax of your entry." +msgstr "" + #. Translators: 'EdX', 'edX', and 'Open edX' are trademarks of 'edX Inc.'. #. Please do not translate any of these trademarks and company names. #: lms/djangoapps/branding/api.py @@ -4166,16 +4241,6 @@ msgid "" " rerun of this course in the studio to allow this action." msgstr "" -#: lms/djangoapps/certificates/badge_handler.py -msgid "" -"Completed the course \"{course_name}\" ({course_mode}, {start_date} - " -"{end_date})" -msgstr "" - -#: lms/djangoapps/certificates/badge_handler.py -msgid "Completed the course \"{course_name}\" ({course_mode})" -msgstr "" - #: wiki/admin.py wiki/models/article.py msgid "created" msgstr "创建" @@ -4244,34 +4309,6 @@ msgstr "" msgid "The download URL for the generated certificate." msgstr "" -#: lms/djangoapps/certificates/models.py -msgid "The badge image must be square." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "The badge image file size must be less than 250KB." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "The course mode for this badge image. For example, \"verified\" or \"honor\"." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "" -"Badge images must be square PNG files. The file size should be under 250KB." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "" -"Set this value to True if you want this image to be the default image for " -"any course modes that do not have a specified badge image. You can have only" -" one default image." -msgstr "" - -#: lms/djangoapps/certificates/models.py -msgid "There can be only one default image." -msgstr "" - #: lms/djangoapps/certificates/models.py msgid "Name of template." msgstr "" @@ -4738,6 +4775,10 @@ msgid "" "To earn a certificate, you must complete all requirements before this date." msgstr "" +#: lms/djangoapps/courseware/date_summary.py +msgid "After this date, course content will be archived." +msgstr "" + #: lms/djangoapps/courseware/date_summary.py msgid "" "This course is archived, which means you can review course content but it is" @@ -5665,11 +5706,7 @@ msgid "" msgstr "" #: lms/djangoapps/instructor/views/api.py -msgid "Invalid Json data, Please refresh the page and then try again." -msgstr "" - -#: lms/djangoapps/instructor/views/api.py -msgid "Invalid data, user_id must be present for all certificate exceptions." +msgid "Invalid data, generate_for must be \"new\" or \"all\"." msgstr "" #: lms/djangoapps/instructor/views/api.py @@ -5999,6 +6036,7 @@ msgid "Last Name" msgstr "" #: lms/djangoapps/instructor_task/tasks_helper.py +#: openedx/core/djangoapps/api_admin/forms.py #: lms/templates/shoppingcart/receipt.html msgid "Company Name" msgstr "" @@ -7318,6 +7356,10 @@ msgid "" "The user {username} is not enrolled in the course associated with this team." msgstr "" +#: lms/djangoapps/verified_track_content/models.py +msgid "The course key for the course we would like to be auto-cohorted." +msgstr "" + #: lms/djangoapps/verify_student/models.py msgid "Your {platform_name} verification has expired." msgstr "" @@ -8108,6 +8150,26 @@ msgstr "该修订已被删除。" msgid "Restoring to this revision will mark the article as deleted." msgstr "恢复该修订将标记本文章为已删除状态。" +#: openedx/core/djangoapps/api_admin/forms.py +msgid "Company Address" +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "Describe what your application does." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The URL of your company's website." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The name of your company." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The contact address of your company." +msgstr "" + #: cms/templates/index.html msgid "Denied" msgstr "拒绝" @@ -8128,6 +8190,27 @@ msgstr "" msgid "The reason this user wants to access the API." msgstr "" +#: openedx/core/djangoapps/api_admin/models.py +msgid "API access request from {company}" +msgstr "" + +#: openedx/core/djangoapps/api_admin/models.py +msgid "API access request" +msgstr "" + +#: openedx/core/djangoapps/api_admin/views.py +msgid "TODO" +msgstr "" + +#. Translators: link_start and link_end are HTML tags for a link to the terms +#. of service. +#. platform_name is the name of this Open edX installation. +#: openedx/core/djangoapps/api_admin/widgets.py +msgid "" +"I, and my company, accept the {link_start}{platform_name} API Terms of " +"Service{link_end}." +msgstr "" + #: openedx/core/djangoapps/bookmarks/views.py msgid "An error has occurred. Please try again." msgstr "" @@ -8158,6 +8241,10 @@ msgstr "" msgid "Bookmark with usage_id: {usage_id} does not exist." msgstr "" +#: openedx/core/djangoapps/course_groups/cohorts.py +msgid "Default Group" +msgstr "" + #: openedx/core/djangoapps/course_groups/cohorts.py msgid "You cannot create two cohorts with the same name" msgstr "" @@ -8394,6 +8481,14 @@ msgid "" "to retry a failing request." msgstr "" +#: openedx/core/djangoapps/programs/models.py +msgid "Do we want to show xseries program advertising" +msgstr "" + +#: openedx/core/djangoapps/programs/models.py +msgid "Do we want to show program listing page" +msgstr "" + #: openedx/core/djangoapps/self_paced/models.py msgid "Enable course home page improvements." msgstr "" @@ -9078,10 +9173,18 @@ msgstr "课程代码:" #: lms/templates/sysadmin_dashboard.html #: lms/templates/sysadmin_dashboard_gitlogs.html #: lms/templates/courseware/courses.html +#: themes/edx.org/lms/templates/header.html #: themes/red-theme/lms/templates/header.html msgid "Courses" msgstr "课程" +#: cms/templates/index.html cms/templates/widgets/header.html +#: lms/templates/navigation.html lms/templates/learner_dashboard/programs.html +#: themes/edx.org/lms/templates/header.html +#: themes/red-theme/lms/templates/header.html +msgid "Programs" +msgstr "" + #: cms/templates/login.html cms/templates/widgets/header.html #: themes/red-theme/cms/templates/login.html msgid "Sign In" @@ -9509,27 +9612,23 @@ msgstr "{platform_name} 帮助" #: lms/templates/help_modal.html msgid "" -"For questions on course lectures, homework, tools, or materials for " -"this course, post in the {link_start}course discussion " -"forum{link_end}." +"For {strong_start}questions on course lectures, homework, tools, or " +"materials for this course{strong_end}, post in the {link_start}course " +"discussion forum{link_end}." msgstr "" -"有关本课程的课程内容,家庭作业,工具或资料等方面的问题,请发帖到 " -"{link_start}课程论坛{link_end}。" #: lms/templates/help_modal.html msgid "" -"Have general questions about {platform_name}? You can find " -"lots of helpful information in the {platform_name} " +"Have {strong_start}general questions about {platform_name}{strong_end}? You " +"can find lots of helpful information in the {platform_name} " "{link_start}FAQ{link_end}." msgstr "" -"对于 {platform_name} 有常见的疑问 ?你可以在{platform_name} " -"的{link_start}FAQ{link_end}上获得一些有用的信息。" #: lms/templates/help_modal.html msgid "" -"Have a question about something specific? You can contact " -"the {platform_name} general support team directly:" -msgstr "有关平台技术方面的问题? 请直接联络 {platform_name} 支持团队:" +"Have a {strong_start}question about something specific{strong_end}? You can " +"contact the {platform_name} general support team directly:" +msgstr "" #: lms/templates/help_modal.html msgid "Report a problem" @@ -9597,12 +9696,10 @@ msgid "Brief description of the problem" msgstr "简述此问题" #: lms/templates/help_modal.html -msgid "Details of the problem you are encountering" -msgstr "你遇到的问题的细节" - -#: lms/templates/help_modal.html -msgid "Include error messages, steps which lead to the issue, etc." -msgstr "附上错误消息以及导致错误的步骤等" +msgid "" +"Details of the problem you are encountering{asterisk}{begin_span}Include " +"error messages, steps which lead to the issue, etc.{end_span}" +msgstr "" #: lms/templates/help_modal.html msgid "suggestion" @@ -9786,8 +9883,6 @@ msgstr "" msgid "Account Preferences" msgstr "账户参数" -#. Translators: provider_name is the name of an external, third-party user -#. authentication provider (like Google or LinkedIn). #: lms/templates/login.html msgid "Sign in with {provider_name}" msgstr "以 {provider_name}登陆" @@ -9960,12 +10055,10 @@ msgid "Register" msgstr "注册" #: lms/templates/navigation-edx.html lms/templates/navigation.html -#: themes/edx.org/lms/templates/header.html -#: themes/red-theme/lms/templates/header.html msgid "" -"Warning: Your browser is not fully supported. We strongly " -"recommend using {chrome_link} or {ff_link}." -msgstr "警告:您的浏览器不支持全部功能,我们强烈推荐您使用 {chrome_link}或 {ff_link}。" +"{begin_strong}Warning:{end_strong} Your browser is not fully supported. We " +"strongly recommend using {chrome_link} or {ff_link}." +msgstr "" #: lms/templates/navigation.html themes/red-theme/lms/templates/header.html msgid "Global" @@ -10039,8 +10132,6 @@ msgstr "" msgid "The following errors occurred while processing your registration:" msgstr "在你注册时发生了下列错误:" -#. Translators: provider_name is the name of an external, third-party user -#. authentication service (like Google or LinkedIn). #: lms/templates/register-form.html #: themes/stanford-style/lms/templates/register-form.html msgid "Sign up with {provider_name}" @@ -10626,10 +10717,6 @@ msgstr "" "如果您需要改变字体大小,请使用浏览器设置实现缩放。以Google " "Chrome浏览器为例,可以通过按键“Ctrl”和“+”,“Ctrl”和“-”来使用放大和缩小功能。" -#: lms/templates/video.html -msgid "Skip to a navigable version of this video's transcript." -msgstr "跳到视频字幕的导航版本。" - #: lms/templates/video.html msgid "Loading video player" msgstr "正在加载视频播放器" @@ -10642,14 +10729,6 @@ msgstr "播放视频" msgid "No playable video sources found." msgstr "" -#: lms/templates/video.html -msgid "Skip to end of transcript." -msgstr "跳到字幕结尾。" - -#: lms/templates/video.html -msgid "Go back to start of transcript." -msgstr "回到字幕起始点。" - #: lms/templates/video.html msgid "Download video" msgstr "下载视频" @@ -10670,6 +10749,476 @@ msgstr "您的话:" msgid "Total number of words:" msgstr "总字数:" +#: lms/templates/api_admin/api_access_request_form.html +msgid "API Access Request" +msgstr "" + +#: lms/templates/api_admin/api_access_request_form.html +#: lms/templates/api_admin/status.html +msgid "{platform_name} API Access Request" +msgstr "" + +#: lms/templates/api_admin/api_access_request_form.html +msgid "Request API Access" +msgstr "" + +#. Translators: "platform_name" is the name of this Open edX installation. +#. "link_start" and "link_end" are the HTML for a link to the API +#. documentation. "api_support_email_link" is HTML for a link to email the API +#. support staff. +#: lms/templates/api_admin/status.html +msgid "" +"Your request to access the {platform_name} Course Catalog API is being " +"processed. You will receive a message at the email address in your profile " +"when processing is complete. You can also return to this page to see the " +"status of your API access request. To learn more about the {platform_name} " +"Course Catalog API, visit {link_start}our API documentation page{link_end}. " +"For questions about using this API, visit our FAQ page or contact " +"{api_support_email_link}." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Terms of Service for {platform_name} APIs" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Effective Date: April 12th, 2016" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Welcome to {platform_name}. Thank you for using {platform_name}'s Course " +"Discovery API and any additional APIs that we may offer from time to time " +"(collectively, the \"APIs\"). Please read these Terms of Service prior to " +"accessing or using the APIs. These Terms of Service, any additional terms " +"within accompanying API documentation, and any applicable policies and " +"guidelines that {platform_name} makes available and/or updates from time to " +"time are agreements (collectively, the \"Terms\") between you and " +"{platform_name}. By accessing or using the APIs, you accept and agree to be " +"legally bound by the Terms, whether or not you are a registered user. If you" +" do not understand or do not wish to be bound by the Terms, you should not " +"use the APIs." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "API Access" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To access the APIs, you will need to create an {platform_name} user account " +"for your application (not for personal use). This account will provide you " +"with access to our API request page at {request_url}. On that page, you must" +" complete the API request form including a description of your proposed uses" +" for the APIs. Any account and registration information that you provide to " +"{platform_name} must be accurate and up to date, and you agree to inform us " +"promptly of any changes. {platform_name} will review your API request form " +"and, upon approval in {platform_name}'s sole discretion, will provide you " +"with instructions for obtaining your API shared secret and client ID." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Permissible Use" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to use the APIs solely for the purpose of delivering content that " +"is accessed through the APIs (the \"API Content\") to your own website, " +"mobile site, app, blog, email distribution list, or social media property or" +" for another commercial use that you described in your request for access " +"and that {platform_name} has approved on a case-by-case basis. " +"{platform_name} may monitor your use of the APIs for compliance with the " +"Terms and may deny your access or shut down your integration if you try to " +"go around or exceed the requirements and limitations set by {platform_name}." +" Your Application or other approved use of the API or the API Content must " +"not prompt your end users to provide their {platform_name} username, " +"password or other {platform_name} user credentials anywhere other than the " +"{platform_name} website at {platform_url}." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Prohibited Uses and Activities" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} shall have the sole right to determine whether or not any " +"given use of the APIs is acceptable, and {platform_name} reserves the right " +"to revoke API access for any use that {platform_name} determines at any " +"time, in its sole discretion, does not benefit or serve the best interests " +"of {platform_name}, its users and its partners." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The following activities are not acceptable when using the APIs (this is not" +" an exhaustive list):" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"collecting or storing the names, passwords, or other credentials of " +"{platform_name} users;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"scraping or similar techniques to aggregate or otherwise create permanent " +"copies of API Content;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"violating, misappropriating or infringing any copyright, trademark rights, " +"rights of privacy or publicity, confidential information or any other right " +"of any third party;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"altering or removing any trademark, copyright or other proprietary or legal " +"notices contained in, or appearing on, the APIs or any API Content;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "altering or editing any content or graphics in the API Content" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"sublicensing, re-distributing, renting, selling or leasing access to the " +"APIs or your client secret to any third party;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"distributing any virus, Trojan horse, spyware, adware, malware, bot, time " +"bomb, worm, or other harmful or malicious component; or" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"using the APIs for any purpose which or might overburden, impair or disrupt " +"the {platform_name} platform, servers or networks." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Usage and Quotas" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} reserves the right, in its discretion, to impose " +"restrictions and limitations on the number and frequency of calls made by " +"you or your Application to the APIs. You must not attempt to circumvent any " +"restrictions or limitations that we impose." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Compliance" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to comply with all applicable law, regulation, and third party " +"rights (including without limitation laws regarding the import or export of " +"data or software, privacy, copyright, and local laws). You will not use the " +"APIs to encourage or promote illegal activity or violation of third party " +"rights. You will not violate any other terms of service with " +"{platform_name}. You will only access (or attempt to access) an API by the " +"means described in the documentation of that API. You will not misrepresent " +"or mask either your identity or yourApplication's identity when using the " +"APIs." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Ownership" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You acknowledge and agree that the APIs and all API Content contain valuable" +" intellectual property of {platform_name} and its partners. The APIs and all" +" API Content are protected by United States and foreign copyright, " +"trademark, and other laws. All rights in the APIs and the API Content, if " +"not expressly granted, are reserved. By using the APIs or any API Content, " +"you do not acquire ownership of any rights in the APIs or API Content. You " +"must not claim or attempt to claim ownership in the APIs or any API Content " +"or misrepresent yourself or your company or your Application as being the " +"source of any API Content. You may not modify, create derivative works of, " +"or attempt to use, license, or in any way exploit any API Content in whole " +"or in part on your own behalf or on behalf of any third party. You may not " +"distribute or modify the APIs or any API Content (including adaptation, " +"editing, excerpting, or creating derivative works)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"All names, logos and seals (\"Trademarks\") that appear in the APIs, API " +"Content, or on or through the services made available on or through the " +"APIs, if any, are the property of their respective owners. You may not " +"remove, alter, or obscure any copyright, Trademark, or other proprietary " +"rightrs notices incorporated in or accompanying the API Content. If any " +"third party revokes access to API Content owned or controlled by that third " +"party, including without limitation any Trademarks, you must ensure that all" +" API Content pertaining to that third party is deleted from your app, " +"networks, systems and servers as soon as reasonably possible. If you stop " +"using the APIs altogether or if your API access is revoked, you must delete " +"all API Content in the same way." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To the extent that you submit any content to {platform_name} in connection " +"with your use of the APIs or any API Content, you hereby grant to " +"{platform_name} a worldwide, non-exclusive, transferable, assignable, sub " +"licensable, 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 such " +"content, in whole or in part, in any form and in any media formats and " +"through any media channels (now known or hereafter developed)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Privacy" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to comply with all applicable privacy laws and regulations and to " +"be transparent with respect to any collection and use of end user data. You " +"will provide and adhere to a privacy policy for your Application that " +"clearly and accurately describes to your end users what user information you" +" collect and how you may use and share such information (including for " +"advertising) with {platform_name} and other third parties." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Right to Charge" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} reserves the right to modify the Terms at any time without " +"advance notice. Any changes to the Terms will be effective immediately upon " +"posting on this page, with an updated effective date. By accessing or using " +"the APIs after any changes have been made, you signify your agreement on a " +"prospective basis to the modified Terms and all of the changes. Be sure to " +"return to this page periodically to ensure familiarity with the most current" +" version of the Terms." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} may also update or modify the APIs from time to time without" +" advance notice. These changes may affect your use of the APIs or the way " +"your integration interacts with the API. If we make a change that is " +"unacceptable to you, you should stop using the APIs. Continued use of the " +"APIs means you accept the change." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Confidentiality" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Your credentials (such as client secret and IDs) are intended to be used " +"solely by you. You will keep your credentials confidential and discourage " +"others from using your credentials. Your credentials may not be embedded in " +"open source projects." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"In the event that {platform_name} provides you with access to information " +"specific to {platform_name} and/or the APIs that is either marked as " +"\"Confidential\" or which a reasonable person would assume to be " +"confidential or proprietary given the terms of its disclosure " +"(\"Confidential Information\"), you agree to use this information only to " +"use and build with the APIs. You may not disclose the Confidential " +"Information to anyone without {platform_name}'s prior written consent, and " +"you agree to protect the Confidential Information from unauthorized use and " +"disclosure in the same way that you would protect your own confidential " +"information. Confidential information does not include information that you " +"independently developed, that was rightfully given to you by a third party " +"without confidentiality obligation, or that becomes public through no fault " +"of your own. You may disclose Confidential Information when compelled to do " +"so by law if you provide {platform_name} with reasonable prior notice, " +"unless a court orders that {platform_name} not receive notice." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Disclaimer of Warranty / Limitation of Liabilities" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"THE APIS AND ANY INFORMATION, API CONTENT OR SERVICES MADE AVAILABLE ON OR " +"THROUGH THE APIS 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." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} AND THE {platform_name} PARTICIPANTS (AS HERINAFTER DEFINED)" +" DO NOT WARRANT THAT THE APIS WILL OPERATE IN AN UNINTERRUPTED OR ERROR-FREE" +" MANNER, THAT THE APIS ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS, OR " +"THAT THE APIS OR API CONTENT PROVIDED WILL MEET YOUR NEEDS OR EXPECTATIONS. " +"{platform_name} AND THE {platform_name} PARTICIPANTS ALSO MAKE NO WARRANTY " +"ABOUT THE ACCURACY, COMPLETENESS, TIMELINESS, OR QUALITY OF THE APIS OR ANY " +"API CONTENT, OR THAT ANY PARTICULAR API CONTENT WILL CONTINUE TO BE MADE " +"AVAILABLE. \"{platform_name} PARTICIPANTS\" MEANS MIT, HARVARD, THE OTHER " +"MEMBERS, THE ENTITIES PROVIDING INFORMATION, API CONTENT OR SERVICES FOR THE" +" APIS, THE COURSE INSTRUCTORS AND THEIR STAFFS." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"USE OF THE APIS, AND THE API CONTENT AND ANY SERVICES OBTAINED FROM OR " +"THROUGH THE APIS, IS AT YOUR OWN RISK. YOUR ACCESS TO OR DOWNLOAD OF " +"INFORMATION, MATERIALS OR DATA THROUGH THE APIS 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, UNLESS OTHERWISE EXPRESSLY " +"PROVIDED FOR IN THE {platform_name} PRIVACY POLICY." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, YOU AGREE THAT NEITHER " +"{platform_name} NOR ANY OF THE {platform_name} PARTICIPANTS WILL BE LIABLE " +"TO YOU FOR ANY LOSS OR DAMAGES, EITHER ACTUAL OR CONSEQUENTIAL, ARISING OUT " +"OF OR RELATING TO THESE TERMS, OR YOUR (OR ANY THIRD PARTY'S) USE OF OR " +"INABILITY TO USE THE APIS OR ANY API CONTENT, OR YOUR RELIANCE UPON " +"INFORMATION OBTAINED FROM OR THROUGH THE APIS, WHETHER YOUR CLAIM IS BASED " +"IN CONTRACT, TORT, STATUTORY OR OTHER LAW." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"IN PARTICULAR, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER " +"{platform_name} NOR ANY OF THE {platform_name} PARTICIPANTS WILL HAVE ANY " +"LIABILITY FOR ANY CONSEQUENTIAL, INDIRECT, PUNITIVE, SPECIAL, EXEMPLARY OR " +"INCIDENTAL DAMAGES, WHETHER FORESEEABLE OR UNFORESEEABLE AND WHETHER OR NOT " +"{platform_name} OR ANY OF THE {platform_name} 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)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"CERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE " +"EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME" +" OR ALL OF THE ABOVE DISCLAIMERS, EXCLUSIONS, OR LIMITATIONS MAY NOT APPLY " +"TO YOU, AND YOU MIGHT HAVE ADDITIONAL RIGHTS." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The APIs and API Content may include hyperlinks to sites maintained or " +"controlled by others. {platform_name} and the {platform_name} 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 " +"websites, you do so at your own risk." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To the maximum extent permitted by applicable law, you agree to defend, hold" +" harmless and indemnify {platform_name} and the {platform_name} " +"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 APIs and any API " +"Content, 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, " +"{platform_name} or one of the {platform_name} Participants will provide you " +"with written notice of such claim, suit or action." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "General Legal Terms" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The Terms constitute the entire agreement between you and {platform_name} " +"with respect to your use of the APIs and API Content, superseding any prior " +"agreements between you and {platform_name} regarding your use of the APIs " +"and API Content. The failure of {platform_name} to exercise or enforce any " +"right or provision of the Terms shall not constitute a waiver of such right " +"or provision. If any provision of the Terms 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 the Terms shall remain in full " +"force and effect. The Terms do not create any third party beneficiary rights" +" or any agency, partnership, or joint venture. For any notice provided to " +"you by {platform_name} under these Terms, {platform_name} may notify you via" +" the email address associated with your {platform_name} account." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree that the Terms, the APIs, and any claim or dispute arising out of " +"or relating to the Terms or the APIs 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). Notwithstanding the foregoing, you agree that {platform_name} shall " +"still be allowed to apply to injunctive remedies (or an equivalent type of " +"urgent legal relief) in any jursdiction." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Termination" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You may stop using the APIs at any time. You agree that {platform_name}, in " +"its sole discretion and at any time, may terminate your use of the APIs or " +"any API Content for any reason or no reason, without prior notice or " +"liabiliy." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} and the {platform_name} Participants reserve the right at " +"any time in their sole discretion to cancel, delay, reschedule or alter the " +"format of any API or API Content offered through {platform_name}, or to " +"cease providing any part or all of the APIs or API Content or related " +"services, and you agree that neither {platform_name} nor any of the " +"{platform_name} Participants will have any liability to you for such an " +"action." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Upon any termination of the Terms or discontinuation of your access to an " +"API for any reason, your right to use any API and API Content will " +"immediately cease. You will immediately stop using the APIs and delete any " +"cached or stored API Content. All provisions of the Terms that by their " +"nature should survive termination shall survive termination, including, " +"without limitation, ownership provisions, warranty disclaimers, and " +"limitation of liability. Termination of your access to and use of the APIs " +"and API Content shall not relieve you of any obligations arising or " +"accrusing prior to such termination or limit any liability that you " +"otherwise may have to {platform_name}, including without limitation any " +"indemnification obligations contained herein." +msgstr "" + #: lms/templates/calculator/toggle_calculator.html msgid "Open Calculator" msgstr "开启计算器" @@ -10885,19 +11434,17 @@ msgid "Auto Enroll" msgstr "自动选修" #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is checked, users who have not yet registered for " -"{platform_name} will be automatically enrolled." -msgstr "如果 勾选了该选项,即使未在{platform_name}平台注册的用户也会自动选修本课程。" +"If this option is {em_start}checked{em_end}, users who have not yet " +"registered for {platform_name} will be automatically enrolled." +msgstr "" #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is left unchecked, users who have not yet registered" -" for {platform_name} will not be enrolled, but will be allowed to enroll " -"once they make an account." -msgstr "如果没有勾选该选项,未在{platform_name}平台注册的用户不能选课。当然,一旦用户注册后,就随时可以选课。" +"If this option is left {em_start}unchecked{em_end}, users who have not yet " +"registered for {platform_name} will not be enrolled, but will be allowed to " +"enroll once they make an account." +msgstr "" #: lms/templates/ccx/enrollment.html #: lms/templates/instructor/instructor_dashboard_2/membership.html @@ -10910,11 +11457,10 @@ msgid "Notify users by email" msgstr "通过邮件通知用户" #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is checked, users will receive an email " +"If this option is {em_start}checked{em_end}, users will receive an email " "notification." -msgstr "如果 勾选该选项,用户将受到一封通知邮件。" +msgstr "" #: lms/templates/ccx/enrollment.html #: lms/templates/courseware/course_about.html @@ -11289,6 +11835,10 @@ msgstr "" msgid "{chapter} current chapter" msgstr "" +#: lms/templates/courseware/accordion.html +msgid "{span_start}current section{span_end}" +msgstr "" + #: lms/templates/courseware/accordion.html #: lms/templates/courseware/progress.html msgid "due {date}" @@ -11691,7 +12241,7 @@ msgid "Verification Declined" msgstr "" #: lms/templates/courseware/progress.html -msgid "Completed" +msgid "Completed by" msgstr "" #: lms/templates/courseware/progress.html @@ -12029,7 +12579,7 @@ msgstr "" #: lms/templates/dashboard/_dashboard_course_listing.html msgid "" "It's official. It's easily shareable. It's a proven motivator to complete " -"the course.
    {link_start}Learn more about the verified " +"the course. {line_break}{link_start}Learn more about the verified " "{cert_name_long}{link_end}." msgstr "" @@ -14029,6 +14579,25 @@ msgstr "" msgid "Reason" msgstr "" +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is checked, users who have not yet registered for " +"{platform_name} will be automatically enrolled." +msgstr "如果 勾选了该选项,即使未在{platform_name}平台注册的用户也会自动选修本课程。" + +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is left unchecked, users who have not yet registered" +" for {platform_name} will not be enrolled, but will be allowed to enroll " +"once they make an account." +msgstr "如果没有勾选该选项,未在{platform_name}平台注册的用户不能选课。当然,一旦用户注册后,就随时可以选课。" + +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is checked, users will receive an email " +"notification." +msgstr "如果 勾选该选项,用户将受到一封通知邮件。" + #: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "Register/Enroll Students" msgstr "" @@ -15420,10 +15989,10 @@ msgstr "技术要求" #: lms/templates/verify_student/pay_and_verify.html msgid "" -"Please make sure your browser is updated to the {a_start}most recent version" -" possible{a_end}. Also, please make sure your webcam is plugged in, " -"turned on, and allowed to function in your web browser (commonly adjustable " -"in your browser settings)." +"Please make sure your browser is updated to the {strong_start}{a_start}most " +"recent version possible{a_end}{strong_end}. Also, please make sure your " +"{strong_start}webcam is plugged in, turned on, and allowed to function in " +"your web browser (commonly adjustable in your browser settings).{strong_end}" msgstr "" #: lms/templates/verify_student/reverify.html @@ -15499,6 +16068,13 @@ msgid "" "edX and Open EdX logos are registered trademarks or trademarks of edX Inc." msgstr "" +#: themes/edx.org/lms/templates/header.html +#: themes/red-theme/lms/templates/header.html +msgid "" +"Warning: Your browser is not fully supported. We strongly " +"recommend using {chrome_link} or {ff_link}." +msgstr "警告:您的浏览器不支持全部功能,我们强烈推荐您使用 {chrome_link}或 {ff_link}。" + #: themes/edx.org/lms/templates/course_modes/choose.html msgid "" "{b_start}Support our Mission: {b_end} EdX, a non-profit, relies on verified " @@ -17277,10 +17853,6 @@ msgstr "在处理您的课程过程中发生了系统错误。请回到原始课 msgid "Libraries" msgstr "知识库" -#: cms/templates/index.html cms/templates/widgets/header.html -msgid "Programs" -msgstr "" - #: cms/templates/index.html msgid "Re-run Course" msgstr "重启课程" diff --git a/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo b/conf/locale/zh_CN/LC_MESSAGES/djangojs.mo index d64f38ff9ab4a63b8b67127794a7313ba0a899e5..84218165cd43cd6b573deb2a1e233e9763cce898 100644 GIT binary patch delta 19254 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 delta 20181 zcmbu`cXUAsNj)!h6_tA4_NJbf0(W2zJb*>;3f93FSOIG_^Spu>iK3j?Uqv#P$c(_`?c4x9>_a>si{Vq$K>1j|RH3fU2K~8F3kEuWdt}&v%)O zPH+pgoA0AKJi^Qv(B1Q9VOCs%t8og}eA9M6s{I+%6@7>5_akbLJi+Yf^>8bb19j`d zFomA~&SW$|IBG^Qm<1=IZpC8M#5SW&uoE@my{MHtf;!Pz)QWwLy5~P)HN1-&uRu?? zB2`i2bjQqk{=>;I6K^gkjhd)!`k~ruqPNg0-kCjYrdi&~i*=6%#SPf#lz(3^`@#|&h21vyYF5NcLMT|ryaK)p~aGYB=2-IyOwpk7P~ zm;(cOd1%Q)P%B#wb)nUNpNRei7+uEyec9{b~8s0;1gk8@&VKc=O7v4sN7^eAdVpJQ6Qf=TffYRT_f z`R|yIIDk<#!2%eBl`t9B#CG_G#fwn=m!rmAhdSRL9~oWAQLKocU0s3l83$Sq-Y z)QLx9F1&{$Fxg=DN*;?kQ6U=X4ObJjiH9Riy&1R_pJHKL6XiDZIb2SB6RG!kj|SOfdTxc;j#1Mx=G#12_}5%Ut? zME~<280!kMp_aTdY8SUf-TT3q5{F_<9E}BWKc>bXQ0*R|9=}Isz%bV@Bc`D|1a)D> zEG~<|dMs*_Nrla0i zo^jpk=BNwoh)mq)4J4x_8)FUTpdPO!SPPG!Ch`I`v1DW2%49(eR1DR>7HUFmP;b-33Fq$aqfN48FLbkM4fm6>YlAe-P4VzB|L^%@hobh zH&G|Pk6N*(sD3X|uizlgsfiYqB(D@dw28{2I#g8!)dJ zFU3$?iCXgGsC#}5wLmnn40XcF zsCG5XMyLt4#Ua?!;)|#~avgOc4^R{Oa{}wHD@--fHOPm7#HG!0sL$z&*bqnIU_6Eu zu;e6nYkFf2;uzE>n}wR#`xbwMy7En^cDqn}=lmp=qBWVD6!>q!WH*tjs1r3p-TPgr zrTi2_@GDgN-%*&dp8?(E7oB%+=)8Tzo;b+p5rEz$qd10%EK&v54B<| zP~&gMU_6ex<>%(G{^`ghQji9pT7#r>-2~F3CQuCZBC3db^|nFXlK!ZPtV3PlHq_Iw z8zb>DY6WV}b0@Bknow(Og1zUl{*}pWra%MSMxF4!`2;n9H{aDKH`AcnWkRh;9$bRO zaUXt$8F1VJ*KaOrocB?iZ#n9MclgK@A#)TpfxD*Fr^Z2}eWOQXQuD}~(@if#4=c7)v z2z8=W_&4rEUFlZVy(&Jya18svITiH^zGo&~>i!Cr7e`V)154=nPqNHCw`EWRwm`iB zXJB4A* zTHYnZ^-#C^BI=fYyO#COM<#)SWSE>CDAQmP%w%yktVo<2lVUs61UjPzoNna{P@8Kp z>akpFdIdbshIVh|Dh(6vW4R7N=&iI_0Ndvp9?c#J`6@*MKbD87aL(~)QJ~kFfK<8yusXW<)=|A z^%ZL6zDG?cV6!`6N(?2=h}p3`>S=0@HEj6+QpCceoREM9pj&HoEb4Ag<*T#631a_;t#MQox&$b0?gJdj5A{F}z~F zM4u{(?RPV7fhCB?pgv4CU>*G4%zeNueGkk=`5G*QhjA3%#<#G?K~9EWU}qe6$nAk| zP%HQdD`3IHtbYudE{EMN{sL?VF$8a6TJ%0~&wDyd zO_oXXQ;$Pe&(Ag*`C^4)l@9N+uRF;0$vaRwCYt=`g{3g1W+FpW1Vb zI$=f3h_x{(w#7i~gxRqxYMfZq#3rF8;+sK6GkXuUOP5>4224u43;W@I49C#Vm_1HJ z-Rql}1Y4ivkqY3S*ia{^^trpRnpl*$J?6!6m;+ZJ6Y_cc$mFEpbMqFe!@sC|R^+tX z%?-^?n1=EJs1psxlsML$YUT4RUW~d$t56rX4K?mT%&X`B8X4Ww=U4z!oN>Pem%#SK z<50WyG8V?gPK@o)Kca_owy0=3TC0&FTu3967>{p!(fcJ`lD8V(&DdB<9=^(qK}O3 z$uF20_0OBlAPedQ;pPBT$7s}*jWVa3OUw zN7OBtf|}4K)N^_SHNaKWiT^}RB>6XPf*DXJ%#P|8hU2jc&cgjT8XI19?N6Y_IqhPf zca4m${72NlPcRFPZ{2`JF*|V?)I^)0CfW{LU?ghO?!}^b4b?u$cWz}u%+ja{)R_DM`G`~8@Chc4cZrV!LzRO{O2UIl>*K5 zG-`lr*b8rARjmJmdj*d}O<Ye`H{8eiXjJ>dH@N>@ z)sX_7DC|c!!=4yPJQa1q-%xMFXQ*3K>nArrdovvM@g0R~KOXfSn2MUv0@STqYw-!x z#J}>9(M)b&4g483K+&7dGN}5>7S}hMpO`k3zGnvh?CNvjXzD9q4SoJ^Clf@$FQ|L_7*k`aU!2)cylOIo2;A__I|WK4_mP!nB=DR7;+-P~`UFwdG- z9%+Ul>OUN8x$6$^XfCR!R5*G5gOi7WSc9m(i%>W9s7 zB4)u0s16CJd-f1@r751e`dp}i%3=|$g?X{Rl}|;rUx*rSoyCXEix{Nm{}vf-miwpy zf3*gGn`!@aSC9|eP+t~X;w03Y@JrMS=P%TWLY}#C%Ar=MHfF|#s9V+zv*RH2fBsLl zig~Cj{s`4^6Y8YP^T26@H1DaFV}W`}BXa z{_2>Mf{|Dd)nPfR;TH3Nc?z|ZS1i7VTB)bz3v5c9^dI*(o>n-5cqVGoCVAn;FN?W| z>*}9Eb)q*Z&_o8J;$f(PCs@O2sLk{-cEY_@pYC5bU{)MWc_H*aj^=LE-uN6f-hJ~o z)CxWGk0=lw=T4MUQ;6Bj_mH7tI^;_hZ2%u4-0tb!9zCp>`d@f7L= zA^go<<%Lk=l}GKJYN!`hD}TL@zgAg;LH+`k8a05=%BNfTTr5NRa;raY{vF4W_7 z1a+k+to*cj+3K%b{ZFWI@1jqcCuB6!z!a_`3u>VJW>G6IgSwKM7Pmw7>xJ4gv8aBt zPxc<6zW;V$Jd9Z1itRi{s5>sDaO+Ciab$|AM)R z|FZJzsoW+ng_>X|RKFgnd;$K)XaEJ;JhM?tdD9vsq9*hR8{-SqSS3?cl0`+CGlhuzkCz~_P z`Kb0wEM9GH#Qv1;Kt0C39BBjmpV!q<1*0)9F1PqF>R#S3!_o!tGU3w;=VNesH{liL z8q}3;ws=2kBF8K~gIcLe$P3Kp{X|ChE+~V$$04YDR1x*vuLf$s24-8cr#Tqaev~=h z%BP}MZXsU7byyuIWOVP1!>IrM+V1J@Gd2Ce%B6ZZO-d$s$DAgE1ciemqN9#ZgET01$9HUi$G0au#0`(JgZoY z+GHQ1R^m8T#p|d|nyrAlhs{u%YPiKK%+sjN`PeL8(0wuKZLUF$cNYg^{xFTh^EZc# zmUOS_6>@PC)D_N0?eZ^C17t7kY>TR&WqyIJh*K8{@Xld()CCnQ>h?-=)SqA?P`^K{ z$CRAk`;&|wpMYZSIWLJ?>Nl_ywnp81AEv=csDbC9e%Xx2Vc4L!dygEzP~x;D+;d(U z%MtfNtTAojy*%0?bi1z#nfxtw6GJu46{j3#SySeJ9jowhi@M zpT}r?j%zToyz7^)g1dm?c%Jg^s8@RNimrY{MW4$opg_;-Hr#|qt-+v5?nJHSQL3FKS}G<76~}OXgM7mEJJ_wes9m-M|G=o3X6L z6)moZ8mA%l!xpH`y9;&eZeayXUCs5civjxlfBne9$lnCIl63edEmBi<2$Ntts%lYQ z$Jzu^zKZk-@da$6nQ`cf_gWjpyUG7T{aw6?!$>;5VgGrzt>GC8TQR^7*uVzr>)QE$ zjRzVdqoum`Cv`CZhdpzmyJQ-<=9#8G(5%3jfy@|!*?-Y2yt;D7$(Uw*cD zm8b3z11~_m1uxo*Zg6KGHa#-m^>PuU`ueF^)eH&6Kl5YY(UeaJQDJS_? zM<|&&7R;i&H>o=_tV8N&GfhSrzgc_yGVDLTvlHATx=eb9_ySg^osORL`_A&Ng!>;) zL2?>~V09YY*C2L+uP7T%ill5K=>%yG@eNW&Yr_{=Zy@ua#A1CuYuhE-ZZ{TP@fb+dP>93NSR3Es0+p`bnHQ0G4g527s18EI@*!XPP>{m zxXQXxR)Dhhq@m<>95X+s-C*(;ajWjX4!vdvQ_v7cU<*2KN7WyqY!3PH(&*Kp=k^3;!${wg zA5C3p+CCGMf=x}iZ

    t3PL|%~-vE&QNfY)cmzxTP#1B!3LAB zVx9CxOCY_ZJo#$_ZKdot%J^dIKX}>szc0S^TAS6Br6=A&I!S(@+H(H?IP{B#j)62P z$IRb$p%+8rN$S8chVmx(Cus`lCz6gqr0cYKkG|Px(}DaQ${v%}THk2$P02SSr6TWZ zK_)4wAW27YIzJ&5V}RL|MN)PSf5AbNZMJsZ$nzVO|M-aZ-;v8n`iQbvSM2}!CO-?) zHW~hE?QfI+nLZC*UB5n)S5nZ1hM$n1PQ!5G7NmT{ua2z5I`j$nA^9Et$o*&xLtl%> zF-9ih(WGaz{T-)Jwh#LgXT~gg|Lb^4g^mGcO4R=&J{d{JC&cfQ3K93lbqvse^2+{N z_u~i4?>2u%K0N*Zq0)NV>nQ2)ex!U4`K~(2_f%fC2C5%HK0OVt;K#(z$RAb(wj%vR zilwfD$~g8B>qz17+Edq_`~lKND@(_Da*%40I#QNMoB62UKm7mqxd_asfv9K+8&Jnm zTuAu_^5<30@dA&KI$9f*eN4WM)t9yMqIie0hgLp}c1bBaW%Yb{_4&W~rqu`>RhXUb zNGs9-8r`ynA(U4oKTeG}o{`R5-6-;W|MVu1I@9jevCU4J8jDl@hsCq78jYUQf1=+1 zGpu5b^~^!VQt~%QpHg?0l!`LGad~erkiOmMNK4ry?1eh`?&;;V2~;PpPOM`%cC@_W zWwak)?Uw8PzMRT6xSCX-iW*qW8jPauYvRAK8!4K+j_KHkHnlBIY1X4G$nyWvzCEcC z@yD3j%H0U=r|%aE2T`db8gG%Zlh%;7Q1^zb^8O&-l>AuAE0BNFCOFnqv!a%dq+Z89 z+++D)iBI}V`PGYd-%?&v?|&V$3Dz<2PV#xE97+x9q}-GzFlYnH zT9G~=zsOGPZ^Vyglt;hTzXti=t<7obKOhyNO&7`n(SQB#;xY>Owax#Rs!%#bk^hXO z-|@?050Vc3TBc(saRLL}BdxSLSL6N_UHQ_K7b0b4yt6tP2frA3Gs*A8!sx5z%KbmL zQrLyYV~CnkS%Ng&>NkfnSNsTOSO8ZwwK{CJ5rzc}prF;|d zBGL}xQ<#goYvldwf0fKcZ^_SNi~!n|B{i{rna%msttYLcT|c}_>P!mI{Xa^k2uVkroj460M^Y9=9Evks zwRec}KBQihkHU6%kh&69|2b}>Tt`FdiePs2VT@yT4%J=P5C6gQKbMN;G`dGY9a3#l zW;$1+Y!!JOHArs||4rK@7)ia3Q1WfCG386hcg4aa{(Rs~BTi1;3)FFm)SC1zae54= zO)t*xrPWMH8z>k;JeCG=(P9Jld=$ zUk*RTm89B~*CEv<)g$@d;75JZo1~?rZZvL(Iu?;%>$2WK@;_7l7wY&Mf3W;8CNPxr zfyF;zH`mPn-vE^-9!0&52aNGPR&p`F|55M-4Sbk_bkqiU+q`3{^LFyVvi>SP0z zVbC8HqmB`z)5Hac{~%w<+Pz1-g8UF0?;dec>YtKygj1dlgZ2Cmq2VP`1sYwzl$1Rt zpN$3ui4T*XM(Ro2kXVO^B8{*UsH`!CVVDi~;%H1oKONIaHOQB=SY~+RAL=Zi0`|s_m&M*m-uT^HR6F*x8Ld%o+I@pT~WZ%#l}*84}X93u2ay1 znPj$352<)S+22@+vc7hOU5LLTE`&8n&B>?4ezZ+xZSIqAY2#4k%_Z(k3ZSgJ3SK)( z(x;;TmwpPb(dZ@V)scrxKH||ddYjIP#Je!e2CqzAUFrs4(j@VPnoh6m>k|cj6%i92+Bi^ofWZ9?{pG zZbUjzzkmKLi*Ng?yW3YiJTxJ3 z+PvEbH@jgH7w$=zwq2uc+y9^U@y-X6Zy#KoxcSJf@e{qo$sf{J&6ciUO1JkN_|L}o zHgXLUsHfNK*Xi9ovLNA|HI#N}yZ4850qJw(PM96fV%!@){r1tV4-b9tpW`gLUnHPn z>BKFo6PB(2UnfbJJ@w9kb?zkezq{?oogD`gR?OU+t7yQQR5j`Hf4y0^_s>k2K09&Z hdS>G0dS}L-#PJjEO*)*oY\n" "Language-Team: Chinese (China) (http://www.transifex.com/open-edx/edx-platform/language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -1820,32 +1820,36 @@ msgid "Do not show again" msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Turn on closed captioning" -msgstr "" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Turn off transcript" +msgid "Transcript will be displayed when you start playing the video." msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "" -"Language: Press the UP arrow key to enter the language menu, then use UP and" -" DOWN arrow keys to navigate language options. Press ENTER to change to the " +"Activating a link in this group will skip to the corresponding point in the " +"video." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Video transcript" +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Start of transcript. Skip to the end." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "End of transcript. Skip to the start." +msgstr "" + +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "" +"Language: Press the UP arrow key to enter the language menu then use UP and " +"DOWN arrow keys to navigate language options. Press ENTER to change to the " "selected language." msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "Open language menu" -msgstr "" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "" -"Activating an item in this group will spool the video to the corresponding " -"time point. To skip transcript, go to previous item." -msgstr "" - -#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js -msgid "

  • Transcript will be displayed when " +msgid "Open language menu." msgstr "" #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js @@ -1856,6 +1860,10 @@ msgstr "" msgid "(Caption will be displayed when you start playing the video.)" msgstr "" +#: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js +msgid "Turn on closed captioning" +msgstr "" + #: common/lib/xmodule/xmodule/js/src/video/09_video_caption.js msgid "Turn on transcripts" msgstr "" @@ -2110,6 +2118,17 @@ msgstr "" msgid "Please do not use any spaces or special characters in this field." msgstr "" +#: common/static/common/js/components/views/paginated_view.js +#: common/static/common/js/components/views/paging_footer.js +msgid "Pagination" +msgstr "" + +#: common/static/common/js/components/views/paginated_view.js +msgid "" +"Your request could not be completed. Reload the page and try again. If the " +"issue persists, click the Help tab to report the problem." +msgstr "" + #: common/static/common/js/components/views/paging_header.js msgid "Showing %(first_index)s out of %(num_items)s total" msgstr "" @@ -2383,6 +2402,7 @@ msgid "open slots" msgstr "" #: lms/templates/edxnotes/tab-item.underscore +#: lms/templates/learner_dashboard/program_card.underscore msgid "name" msgstr "名称" @@ -2392,6 +2412,11 @@ msgstr "名称" msgid "team count" msgstr "" +#: lms/djangoapps/teams/static/teams/js/teams_tab_factory.js +#: lms/djangoapps/teams/static/teams/js/views/teams_tab.js +msgid "Teams" +msgstr "" + #: lms/djangoapps/teams/static/teams/js/views/edit_team.js #: cms/templates/js/certificate-editor.underscore #: cms/templates/js/content-group-editor.underscore @@ -2574,12 +2599,12 @@ msgstr[0] "" msgid "All teams" msgstr "" -#: lms/djangoapps/teams/static/teams/js/views/teams_tab.js -msgid "Topics" +#: lms/djangoapps/teams/static/teams/js/views/teams.js +msgid "Teams Pagination" msgstr "" #: lms/djangoapps/teams/static/teams/js/views/teams_tab.js -msgid "Teams" +msgid "Topics" msgstr "" #: lms/djangoapps/teams/static/teams/js/views/teams_tab.js @@ -4052,6 +4077,10 @@ msgstr "" msgid "Successfully unlinked." msgstr "" +#: lms/static/js/student_profile/views/badge_list_container.js +msgid "Accomplishments Pagination" +msgstr "" + #: lms/static/js/student_profile/views/learner_profile_factory.js msgid "{platform_name} learners can see my:" msgstr "" @@ -4106,6 +4135,18 @@ msgstr "" msgid "Profile image for {username}" msgstr "" +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "About Me" +msgstr "" + +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "Accomplishments" +msgstr "" + +#: lms/static/js/student_profile/views/learner_profile_view.js +msgid "Profile" +msgstr "" + #: lms/static/js/verify_student/views/image_input_view.js msgid "Image Upload Error" msgstr "图片上传错误" @@ -4588,6 +4629,10 @@ msgstr "" msgid "You must specify a name" msgstr "您必须指定一个名称" +#: cms/static/js/models/course_update.js +msgid "Action required: Enter a valid date." +msgstr "" + #: cms/static/js/models/group.js msgid "Group name is required" msgstr "组名称是必需的" @@ -5352,6 +5397,11 @@ msgstr "" msgid "Date" msgstr "日期" +#: cms/templates/js/edit-chapter.underscore +#: lms/templates/ccx/schedule.underscore +msgid "gettext(" +msgstr "" + #: cms/templates/js/paging-header.underscore #: common/static/common/templates/components/paging-footer.underscore #: common/static/common/templates/discussion/pagination.underscore @@ -5377,7 +5427,8 @@ msgid "Zoom Out" msgstr "" #: common/static/common/templates/components/paging-footer.underscore -msgid "Page number" +#, python-format +msgid "Page number out of %(total_pages)s" msgstr "" #: common/static/common/templates/components/paging-footer.underscore @@ -6030,10 +6081,6 @@ msgstr "截止日期" msgid "remove all" msgstr "全部移除" -#: lms/templates/ccx/schedule.underscore -msgid "gettext(" -msgstr "" - #: lms/templates/ccx/schedule.underscore msgid "Section" msgstr "" @@ -6352,15 +6399,9 @@ msgid "Generate Exception Certificates" msgstr "" #: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "Generate a Certificate for all " -msgstr "" - -#: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "New" -msgstr "" - -#: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore -msgid "additions to the Exception list" +msgid "" +"Generate certificates for all users on the Exception list for whom " +"certificates have not yet been run" msgstr "" #: lms/templates/instructor/instructor_dashboard_2/certificate-white-list.underscore @@ -6589,6 +6630,24 @@ msgstr "" msgid "Valid" msgstr "" +#: lms/templates/learner_dashboard/explore_new_programs.underscore +msgid "" +"Browse recently launched courses and see what\\'s new in your favorite " +"subjects" +msgstr "" + +#: lms/templates/learner_dashboard/explore_new_programs.underscore +msgid "Explore New XSeries" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore +msgid "org.display_name" +msgstr "" + +#: lms/templates/learner_dashboard/program_card.underscore +msgid "type" +msgstr "" + #: lms/templates/search/course_search_results.underscore #: lms/templates/search/dashboard_search_results.underscore #, python-format @@ -6629,7 +6688,6 @@ msgid "section.title" msgstr "" #: lms/templates/student_account/account_settings.underscore -#: lms/templates/student_profile/learner_profile.underscore msgid "An error occurred. Please reload the page." msgstr "" @@ -6806,12 +6864,68 @@ msgstr "必填字段" msgid "Already have an account?" msgstr "已经有账户了?" -#: lms/templates/student_profile/learner_profile.underscore -msgid "You are currently sharing a limited profile." +#: lms/templates/student_profile/badge.underscore +#, python-format +msgid "Share your \"%(display_name)s\" award" +msgstr "" + +#: lms/templates/student_profile/badge.underscore +msgid "Share" +msgstr "" + +#: lms/templates/student_profile/badge.underscore +#, python-format +msgid "Earned %(created)s." +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "What's Your Next Accomplishment?" +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "Start working toward your next learning goal." +msgstr "" + +#: lms/templates/student_profile/badge_placeholder.underscore +msgid "Find a course" msgstr "" #: lms/templates/student_profile/learner_profile.underscore -msgid "This edX learner is currently sharing a limited profile." +msgid "An error occurred. Try loading the page again." +msgstr "" + +#: lms/templates/student_profile/section_two.underscore +msgid "You are currently sharing a limited profile." +msgstr "" + +#: lms/templates/student_profile/section_two.underscore +msgid "This learner is currently sharing a limited profile." +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +msgid "Share on Mozilla Backpack" +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +msgid "" +"To share your certificate on Mozilla Backpack, you must first have a " +"Backpack account. Complete the following steps to add your certificate to " +"Backpack." +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +#, python-format +msgid "" +"Create a %(link_start)sMozilla Backpack%(link_end)s account, or log in to " +"your existing account" +msgstr "" + +#: lms/templates/student_profile/share_modal.underscore +#, python-format +msgid "" +"%(download_link_start)sDownload this image (right-click or option-click, " +"save as)%(link_end)s and then %(upload_link_start)supload%(link_end)s it to " +"your backpack.
  • " msgstr "" #: lms/templates/verify_student/enrollment_confirmation_step.underscore @@ -6896,9 +7010,8 @@ msgid "Take Your Photo" msgstr "给自己拍照" #: lms/templates/verify_student/face_photo_step.underscore -#, python-format msgid "" -"When your face is in position, use the camera button %(icon)s below to take " +"When your face is in position, use the camera button {icon} below to take " "your photo." msgstr "" @@ -6919,10 +7032,9 @@ msgid "The photo of your face matches the photo on your ID." msgstr "" #: lms/templates/verify_student/face_photo_step.underscore -#, python-format msgid "" -"To use the current photo, select the camera button %(icon)s. To take another" -" photo, select the retake button %(icon)s." +"To use the current photo, select the camera button {icon}. To take another " +"photo, select the retake button {icon}." msgstr "" #: lms/templates/verify_student/face_photo_step.underscore @@ -7005,9 +7117,8 @@ msgid "Make sure your ID is well-lit" msgstr "请确保你的身份证件光线充足" #: lms/templates/verify_student/id_photo_step.underscore -#, python-format -msgid "Once in position, use the camera button %(icon)s to capture your ID" -msgstr "一旦你将身份证件摆放妥当,请用相机按钮%(icon)s来拍照" +msgid "Once in position, use the camera button {icon} to capture your ID" +msgstr "" #: lms/templates/verify_student/id_photo_step.underscore #: lms/templates/verify_student/incourse_reverify.underscore @@ -7037,18 +7148,16 @@ msgid "Be sure your entire face is inside the frame" msgstr "请确保你的整张脸都在方框以内" #: lms/templates/verify_student/incourse_reverify.underscore -#, python-format -msgid "Once in position, use the camera button %(icon)s to capture your photo" -msgstr "一但你已经就位,请用相机按钮%(icon)s来拍照" +msgid "Once in position, use the camera button {icon} to capture your photo" +msgstr "" #: lms/templates/verify_student/incourse_reverify.underscore msgid "Can we match the photo you took with the one on your ID?" msgstr "我们能否将你拍的照片与你身份证件上的照片进行比对?" #: lms/templates/verify_student/intro_step.underscore -#, python-format -msgid "Thanks for returning to verify your ID in: %(courseName)s" -msgstr "感谢你回来为%(courseName)s验证你的身份证件" +msgid "Thanks for returning to verify your ID in: {courseName}" +msgstr "" #: lms/templates/verify_student/intro_step.underscore #: lms/templates/verify_student/make_payment_step.underscore @@ -7082,14 +7191,13 @@ msgid "" msgstr "驾照、护照或者其他由政府签发的带有你姓名和照片的身份证件" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "You are enrolling in: %(courseName)s" -msgstr "你即将选修:%(courseName)s" +#: lms/templates/verify_student/make_payment_step_ab_testing.underscore +msgid "You are enrolling in: {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "You are upgrading your enrollment for: %(courseName)s" -msgstr "你正在为%(courseName)s升级你的选课类型" +msgid "You are upgrading your enrollment for: {courseName}" +msgstr "" #: lms/templates/verify_student/make_payment_step.underscore msgid "" @@ -7130,9 +7238,8 @@ msgid "You have already verified your ID!" msgstr "您已经成功验证了您的身份证件!" #: lms/templates/verify_student/make_payment_step.underscore -#, python-format -msgid "Your verification status is good until %(verificationGoodUntil)s." -msgstr "在%(verificationGoodUntil)s之前您的验证状态都有效。" +msgid "Your verification status is good until {verificationGoodUntil}." +msgstr "" #: lms/templates/verify_student/make_payment_step.underscore msgid "price" @@ -7143,13 +7250,7 @@ msgid "Account Not Activated" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "You are enrolling in %(courseName)s" -msgstr "" - -#: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Upgrade to a Verified Certificate for %(courseName)s" +msgid "Upgrade to a Verified Certificate for {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore @@ -7162,13 +7263,11 @@ msgid "Check your email for an activation message." msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Professional Certificate for %(courseName)s" +msgid "Professional Certificate for {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore -#, python-format -msgid "Verified Certificate for %(courseName)s" +msgid "Verified Certificate for {courseName}" msgstr "" #: lms/templates/verify_student/make_payment_step_ab_testing.underscore @@ -7199,9 +7298,8 @@ msgid "" msgstr "" #: lms/templates/verify_student/payment_confirmation_step.underscore -#, python-format -msgid "Thank you! We have received your payment for %(courseName)s." -msgstr "谢谢!我们已经收到你对%(courseName)s的付款。" +msgid "Thank you! We have received your payment for {courseName}." +msgstr "" #: lms/templates/verify_student/payment_confirmation_step.underscore msgid "Next Step: Confirm your identity" @@ -7765,11 +7863,6 @@ msgstr "" msgid "Chapter Name" msgstr "" -#: cms/templates/js/edit-chapter.underscore -#, python-format -msgid "Chapter %s" -msgstr "" - #: cms/templates/js/edit-chapter.underscore msgid "provide the title/name of the chapter that will be used in navigating" msgstr "" @@ -7778,11 +7871,6 @@ msgstr "" msgid "Chapter Asset" msgstr "" -#: cms/templates/js/edit-chapter.underscore -#, python-format -msgid "path/to/introductionToCookieBaking-CH%d.pdf" -msgstr "" - #: cms/templates/js/edit-chapter.underscore msgid "upload a PDF file or provide the path to a Studio asset file" msgstr "" diff --git a/lms/static/js/i18n/ar/djangojs.js b/lms/static/js/i18n/ar/djangojs.js index aa8da85114..a367edc0c4 100644 --- a/lms/static/js/i18n/ar/djangojs.js +++ b/lms/static/js/i18n/ar/djangojs.js @@ -219,7 +219,6 @@ "<%= user %> has been successfully added to the exception list. Click Generate Exception Certificate below to send the certificate.": "\u0623\u064f\u064f\u0636\u064a\u0641 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 <%= user %> \u0628\u0646\u062c\u0627\u062d \u0625\u0644\u0649 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0633\u062a\u062b\u0646\u0627\u0621. \u0627\u0646\u0642\u0631 \u0639\u0644\u0649 \u2019\u0625\u0646\u0634\u0627\u0621 \u0634\u0647\u0627\u062f\u0629 \u0627\u0633\u062a\u062b\u0646\u0627\u0621\u2018 \u0623\u062f\u0646\u0627\u0647 \u0644\u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0634\u0647\u0627\u062f\u0629.", "": "", "%s": "%s", - "
  • Transcript will be displayed when ": "
  • \u0633\u064a\u064f\u0639\u0631\u0636 \u0646\u0635 \u0627\u0644\u0639\u0646\u0627\u0648\u064a\u0646 \u0627\u0644\u0641\u0631\u0639\u064a\u0651\u0629 \u0639\u0646\u062f\u0645\u0627", "A driver's license, passport, or government-issued ID with your name and photo.": "\u0631\u062e\u0635\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629\u060c \u0623\u0648 \u062c\u0648\u0627\u0632 \u0627\u0644\u0633\u0641\u0631\u060c \u0623\u0648 \u0628\u0637\u0627\u0642\u0629 \u0634\u062e\u0635\u064a\u0629 \u0635\u0627\u062f\u0631\u0629 \u0639\u0646 \u0627\u0644\u062d\u0643\u0648\u0645\u0629\u060c \u0628\u062d\u064a\u062b \u062a\u062d\u0645\u0644 \u0623\u064a \u0648\u0627\u062d\u062f\u0629 \u0645\u0646 \u0647\u0630\u0647 \u0627\u0644\u0648\u062b\u0627\u0626\u0642 \u0627\u0633\u0645\u0643 \u0648\u0635\u0648\u0631\u062a\u0643 ", "A driver's license, passport, or other government-issued ID with your name and photo": "\u0631\u062e\u0635\u0629 \u0627\u0644\u0642\u064a\u0627\u062f\u0629\u060c \u0623\u0648 \u062c\u0648\u0627\u0632 \u0627\u0644\u0633\u0641\u0631\u060c \u0623\u0648 \u0628\u0637\u0627\u0642\u0629 \u0634\u062e\u0635\u064a\u0629 \u0635\u0627\u062f\u0631\u0629 \u0639\u0646 \u0627\u0644\u062d\u0643\u0648\u0645\u0629\u060c \u0628\u062d\u064a\u062b \u062a\u062d\u0645\u0644 \u0623\u064a \u0648\u0627\u062d\u062f\u0629 \u0645\u0646 \u0647\u0630\u0647 \u0627\u0644\u0648\u062b\u0627\u0626\u0642 \u0627\u0633\u0645\u0643 \u0648\u0635\u0648\u0631\u062a\u0643 ", "A list of courses you have just enrolled in as a verified student": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0633\u0627\u0642\u0627\u062a \u0627\u0644\u062a\u064a \u0633\u062c\u0651\u0644\u062a \u0641\u064a\u0647\u0627 \u0644\u062a\u0648\u0651\u0643 \u0643\u0637\u0627\u0644\u0628 \u0645\u0648\u062b\u0651\u064e\u0642 ", @@ -238,7 +237,6 @@ "Actions": "\u0627\u0644\u0625\u062c\u0631\u0627\u0621\u0627\u062a", "Activate": "\u062a\u0641\u0639\u064a\u0644", "Activate Your Account": "\u0642\u0645 \u0628\u062a\u0641\u0639\u064a\u0644 \u062d\u0633\u0627\u0628\u0643 ", - "Activating an item in this group will spool the video to the corresponding time point. To skip transcript, go to previous item.": "\u0633\u064a\u0624\u062f\u0651\u064a \u062a\u0641\u0639\u064a\u0644 \u0623\u062d\u062f \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0641\u064a \u0647\u0630\u0647 \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629 \u0625\u0644\u0649 \u062a\u062d\u0631\u064a\u0643 \u0627\u0644\u0641\u064a\u062f\u064a\u0648 \u0646\u062d\u0648 \u0627\u0644\u0646\u0642\u0637\u0629 \u0627\u0644\u0632\u0645\u0646\u064a\u0629 \u0627\u0644\u0645\u0648\u0627\u0641\u0642\u0629. \u0648\u0644\u062a\u062e\u0637\u0651\u064a \u0627\u0644\u0646\u0635\u060c \u064a\u064f\u0631\u062c\u0649 \u0627\u0644\u0630\u0647\u0627\u0628 \u0625\u0644\u0649 \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u0633\u0627\u0628\u0642.", "Active Threads": "\u0627\u0644\u0645\u0648\u0627\u0636\u064a\u0639 \u0627\u0644\u0646\u0634\u0637\u0629", "Active Uploads": "\u0627\u0644\u062a\u062d\u0645\u064a\u0644\u0627\u062a \u0627\u0644\u0646\u0634\u0637\u0629", "Add": "\u0625\u0636\u0627\u0641\u0629", @@ -406,7 +404,6 @@ "Change My Email Address": "\u062a\u063a\u064a\u064a\u0631 \u0639\u0646\u0648\u0627\u0646 \u0628\u0631\u064a\u062f\u064a \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a", "Change image": "\u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u0635\u0648\u0631\u0629", "Change the settings for %(display_name)s": "\u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0640 %(display_name)s ", - "Chapter %s": "\u0627\u0644\u0641\u0635\u0644 %s", "Chapter Asset": "\u0645\u0627\u062f\u0629 \u0645\u0644\u062d\u0642\u0629 \u0628\u0641\u0635\u0644", "Chapter Name": "\u0627\u0633\u0645 \u0627\u0644\u0641\u0635\u0644", "Chapter information": "\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0639\u0646 \u0627\u0644\u0641\u0635\u0644", @@ -775,7 +772,6 @@ "General": "\u0639\u0627\u0645", "Generate": "\u0625\u0646\u0634\u0627\u0621", "Generate Exception Certificates": "\u0625\u0646\u0634\u0627\u0621 \u0634\u0647\u0627\u062f\u0627\u062a \u0627\u0633\u062a\u062b\u0646\u0627\u0626\u064a\u0629", - "Generate a Certificate for all ": "\u0625\u0646\u0634\u0627\u0621 \u0634\u0647\u0627\u062f\u0629 \u0644\u0644\u062c\u0645\u064a\u0639", "Generate a Certificate for all users on the Exception list": "\u0625\u0646\u0634\u0627\u0621 \u0634\u0647\u0627\u062f\u0629 \u0644\u062c\u0645\u064a\u0639 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646 \u0627\u0644\u0645\u062f\u0631\u062c\u0629 \u0627\u0633\u0645\u0627\u0624\u0647\u0645 \u0639\u0644\u0649 \u0644\u0627\u0626\u062d\u0629 \u0627\u0644\u0627\u0633\u062a\u062b\u0646\u0627\u0621\u0627\u062a", "Generate the user's certificate": "\u0625\u0646\u0634\u0627\u0621 \u0634\u0647\u0627\u062f\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645", "Get Credit": "\u0627\u062d\u0635\u0644 \u0639\u0644\u0649 \u0645\u0627\u062f\u0651\u0629 \u062f\u0631\u0627\u0633\u064a\u0629", @@ -898,7 +894,6 @@ "Keywords": "\u0643\u0644\u0645\u0627\u062a \u0645\u0641\u062a\u0627\u062d\u064a\u0629", "LEARN MORE": "\u0627\u0639\u0631\u0641 \u0627\u0644\u0645\u0632\u064a\u062f", "Language": "\u0627\u0644\u0644\u063a\u0629", - "Language: Press the UP arrow key to enter the language menu, then use UP and DOWN arrow keys to navigate language options. Press ENTER to change to the selected language.": "\u0627\u0644\u0644\u063a\u0629: \u0627\u0644\u0636\u063a\u0637 \u0639\u0644\u0649 \u0632\u0631 \u0627\u0644\u0633\u0647\u0645 \"\u0623\u0639\u0644\u0649\" \u0644\u0644\u062f\u062e\u0648\u0644 \u0625\u0644\u0649 \u0642\u0627\u0626\u0645\u0629 \u0636\u0628\u0637 \u0627\u0644\u0644\u063a\u0629 \u0648\u0645\u0646 \u062b\u0645 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0632\u0631\u064a\u0651 \u0627\u0644\u0623\u0633\u0647\u0645 \"\u0623\u0639\u0644\u0649\" \u0648\"\u0623\u0633\u0641\u0644\" \u0644\u0644\u0627\u0646\u062a\u0642\u0627\u0644 \u0628\u064a\u0646 \u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u0644\u063a\u0627\u062a \u0627\u0644\u0645\u062e\u062a\u0644\u0641\u0629 \u0648\u0645\u0646 \u062b\u0645 \u0627\u0644\u0636\u063a\u0637 \u0639\u0644\u0649 \u0632\u0631 \"Enter\" \u0644\u0627\u0639\u062a\u0645\u0627\u062f \u0627\u0644\u0644\u063a\u0629 \u0627\u0644\u0645\u062e\u062a\u0627\u0631\u0629.", "Large": "\u0643\u0628\u064a\u0631 ", "Last Activity %(date)s": "\u0627\u0644\u0646\u0634\u0627\u0637 \u0627\u0644\u0623\u062e\u064a\u0631 \u0628\u062a\u0627\u0631\u064a\u062e %(date)s", "Last Edited:": "\u0622\u062e\u0631 \u0645\u0631\u0627\u062c\u0639\u0629 \u0641\u064a:", @@ -994,7 +989,6 @@ "Name of the signatory": "\u0627\u0633\u0645 \u0627\u0644\u0645\u0648\u0642\u0651\u0650\u0639", "Name or short description of the configuration": "\u0627\u0633\u0645 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0623\u0648 \u0648\u0635\u0641 \u0645\u0648\u062c\u064e\u0632 \u0639\u0646\u0647\u0627", "Never published": "\u0644\u0645 \u062a\u064f\u0646\u0634\u064e\u0631 \u0642\u0637\u0651", - "New": "\u062c\u062f\u064a\u062f", "New %(component_type)s": "\u0625\u0636\u0627\u0641\u0629 %(component_type)s", "New %(item_type)s": "%(item_type)s \u062c\u062f\u064a\u062f", "New Address": "\u0639\u0646\u0648\u0627\u0646 \u062c\u062f\u064a\u062f", @@ -1045,13 +1039,10 @@ "Numbered list": "\u0644\u0627\u0626\u062d\u0629 \u0645\u0631\u0642\u0651\u0645\u0629", "OK": "\u0645\u0648\u0627\u0641\u0642", "Ok": "\u0645\u0648\u0627\u0641\u0642", - "Once in position, use the camera button %(icon)s to capture your ID": "\u062d\u0627\u0644\u0645\u0627 \u062a\u0636\u0628\u0637 \u0648\u0636\u0639\u064a\u0629 \u0628\u0637\u0627\u0642\u062a\u0643 \u0627\u0644\u0634\u062e\u0635\u064a\u0629\u060c \u0627\u0633\u062a\u062e\u062f\u0645 \u0632\u0631 \u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0627 %(icon)s \u0644\u0627\u0644\u062a\u0642\u0627\u0637 \u0635\u0648\u0631\u0629 \u0644\u0647\u0627. ", - "Once in position, use the camera button %(icon)s to capture your photo": "\u062d\u0627\u0644\u0645\u0627 \u062a\u062a\u0651\u062e\u0630 \u0648\u0636\u0639\u064a\u0629 \u0627\u0644\u062c\u0644\u0648\u0633 \u0627\u0644\u0645\u0646\u0627\u0633\u0628\u0629\u060c \u064a\u064f\u0631\u062c\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0632\u0631 \u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0627 %(icon)s \u0644\u062a\u0644\u062a\u0642\u0637 \u0635\u0648\u0631\u0643. ", "Only <%= fileTypes %> files can be uploaded. Please select a file ending in <%= fileExtensions %> to upload.": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u062a\u062d\u0645\u064a\u0644 \u0633\u0648\u0649 \u0627\u0644\u0645\u0644\u0641\u0651\u0627\u062a <%= fileTypes %>. \u0644\u0630\u0627 \u064a\u064f\u0631\u062c\u0649 \u0627\u062e\u062a\u064a\u0627\u0631 \u0645\u0644\u0641 \u064a\u0646\u062a\u0647\u064a \u0628\u0640 <%= fileExtensions %> \u0644\u062a\u062d\u0645\u064a\u0644\u0647. ", "Only properly formatted .csv files will be accepted.": "\u0644\u0646 \u062a\u064f\u0642\u0628\u0644 \u0633\u0648\u0649 \u0645\u0644\u0641\u0651\u0627\u062a .csv \u0627\u0644\u0645\u0646\u0633\u0651\u0642\u0629 \u062a\u0646\u0633\u064a\u0642\u064b\u0627 \u0635\u062d\u064a\u062d\u064b\u0627. ", "Open": "\u0641\u062a\u062d", "Open Calculator": "\u0641\u062a\u062d \u0627\u0644\u0622\u0644\u0629 \u0627\u0644\u062d\u0627\u0633\u0628\u0629 ", - "Open language menu": "\u0641\u062a\u062d \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0644\u063a\u0627\u062a \u0627\u0644\u0645\u062a\u0648\u0641\u0631\u0629", "Open/download this file": "\u0641\u062a\u062d/\u062a\u0646\u0632\u064a\u0644 \u0647\u0630\u0627 \u0627\u0644\u0645\u0644\u0641\u0651", "OpenAssessment Save Error": "\u0646\u0623\u0633\u0641 \u0644\u062d\u062f\u0648\u062b \u062e\u0637\u0623 \u0641\u064a \u062d\u0641\u0638 \u0627\u0644\u062a\u0642\u064a\u064a\u0645 \u0627\u0644\u0645\u0641\u062a\u0648\u062d.", "Optional Characteristics": "\u0627\u0644\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0627\u062e\u062a\u064a\u0627\u0631\u064a\u0629", @@ -1063,7 +1054,6 @@ "Organization of the signatory": "\u0645\u0624\u0633\u0651\u0633\u0629 \u0627\u0644\u0645\u0648\u0642\u0651\u0650\u0639", "Other": "\u063a\u064a\u0631 \u0630\u0644\u0643", "Page break": "\u0641\u0627\u0635\u0644 \u0627\u0644\u0635\u0641\u062d\u0629", - "Page number": "\u0631\u0642\u0645 \u0627\u0644\u0635\u0641\u062d\u0629", "Paragraph": "\u0641\u0642\u0631\u0629", "Password": "\u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631", "Password Reset Email Sent": "\u0644\u0642\u062f \u0623\u0631\u0633\u0644\u0646\u0627 \u0628\u0631\u064a\u062f\u0627\u064b \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a\u0627\u064b \u0644\u0643 \u0644\u062a\u063a\u064a\u064a\u0631 \u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631.", @@ -1146,7 +1136,6 @@ "Proctored": "\u0645\u064f\u0631\u0627\u0642\u0628", "Proctored Exam": "\u0627\u0645\u062a\u062d\u0627\u0646 \u0645\u0631\u0627\u0642\u064e\u0628", "Proctored exams are timed and they record video of each learner taking the exam. The videos are then reviewed to ensure that learners follow all examination rules.": "\u0627\u0644\u0627\u0645\u062a\u062d\u0627\u0646\u0627\u062a \u0627\u0644\u0645\u0631\u0627\u0642\u0628\u0629 \u0645\u062d\u062f\u0651\u062f\u0629 \u0627\u0644\u062a\u0648\u0642\u064a\u062a\u060c \u0648\u0633\u064a\u064f\u0633\u062c\u0651\u0644 \u0645\u0642\u0637\u0639 \u0641\u064a\u062f\u064a\u0648 \u0644\u0643\u0644 \u0645\u062a\u0639\u0644\u0651\u0645 \u064a\u064f\u062c\u0631\u064a \u0627\u0645\u062a\u062d\u0627\u0646\u064b\u0627 \u0644\u062a\u064f\u0631\u0627\u062c\u0639 \u0645\u0642\u0627\u0637\u0639 \u0627\u0644\u0641\u064a\u062f\u064a\u0648 \u0647\u0630\u0647 \u0628\u0639\u062f \u0630\u0644\u0643 \u0628\u0647\u062f\u0641 \u0636\u0645\u0627\u0646 \u0627\u0644\u062a\u0632\u0627\u0645 \u0627\u0644\u0645\u062a\u0639\u0644\u0651\u0645\u064a\u0646 \u0628\u062c\u0645\u064a\u0639 \u0627\u0644\u0642\u0648\u0627\u0639\u062f \u0627\u0644\u0627\u0645\u062a\u062d\u0627\u0646\u064a\u0629.", - "Professional Certificate for %(courseName)s": "\u0634\u0647\u0627\u062f\u0629 \u0645\u0647\u0646\u064a\u0651\u0629 \u0644\u0644\u0645\u0633\u0627\u0642 %(courseName)s", "Professional Education": "\u0627\u0644\u062a\u0639\u0644\u064a\u0645 \u0627\u0644\u0645\u0647\u0646\u064a", "Professional Education Verified Certificate": "\u0634\u0647\u0627\u062f\u0629 \u0645\u0648\u062b\u0651\u0642\u0629 \u0644\u0644\u062a\u0639\u0644\u064a\u0645 \u0627\u0644\u0645\u0647\u0646\u064a", "Profile Image": "\u0635\u0648\u0631\u0629 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0634\u062e\u0635\u064a", @@ -1413,9 +1402,7 @@ "Textbook name is required": "\u0627\u0633\u0645 \u0627\u0644\u0643\u062a\u0627\u0628 \u0645\u0637\u0644\u0648\u0628", "Thank you for submitting your financial assistance application for {course_name}! You can expect a response in 2-4 business days.": "\u0646\u0634\u0643\u0631\u0643 \u0644\u062a\u0642\u062f\u064a\u0645\u0643 \u0637\u0644\u0628 \u062f\u0639\u0645 \u0645\u0627\u0644\u064a \u0644\u0644\u0645\u0633\u0627\u0642 {course_name}! \u064a\u0645\u0643\u0646\u0643 \u0623\u0646 \u062a\u062a\u0648\u0642\u0639 \u0627\u0633\u062a\u0644\u0627\u0645 \u0627\u0644\u0631\u062f\u0651 \u062e\u0644\u0627\u0644 2-4 \u0623\u064a\u0627\u0645 \u0639\u0645\u0644.", "Thank you for submitting your photos. We will review them shortly. You can now sign up for any %(platformName)s course that offers verified certificates. Verification is good for one year. After one year, you must submit photos for verification again.": "\u0634\u0643\u0631\u064b\u0627 \u0644\u0643 \u0639\u0644\u0649 \u062a\u0642\u062f\u064a\u0645 \u0635\u0648\u0631\u0643. \u0633\u0646\u0631\u0627\u062c\u0639\u0647\u0627 \u0642\u0631\u064a\u0628\u064b\u0627. \u0648\u064a\u0645\u0643\u0646\u0643 \u0627\u0644\u0622\u0646 \u062a\u0633\u062c\u064a\u0644 \u0639\u0636\u0648\u064a\u062a\u0643 \u0641\u064a \u0623\u064a\u064b \u0645\u0646 \u0645\u0633\u0627\u0642\u0627\u062a %(platformName)s \u0627\u0644\u062a\u064a \u062a\u0645\u0646\u062d \u0634\u0647\u0627\u062f\u0627\u062a \u0645\u0648\u062b\u0651\u0651\u064e\u0642\u0629. \u0648\u0628\u064a\u0646\u0645\u0627 \u064a\u0633\u0631\u064a \u0645\u0641\u0639\u0648\u0644 \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u062a\u062d\u0642\u0651\u0642 \u0644\u0645\u062f\u0651\u0629 \u0639\u0627\u0645\u060c \u064a\u062c\u0628 \u0623\u0646 \u062a\u0642\u062f\u0651\u0645 \u0627\u0644\u0635\u0648\u0631 \u0644\u0644\u062a\u062d\u0642\u0651\u0642 \u0645\u0646\u0647\u0627 \u0645\u062c\u062f\u0651\u062f\u064b\u0627 \u0628\u0639\u062f \u0627\u0646\u0642\u0636\u0627\u0621 \u0627\u0644\u0639\u0627\u0645. ", - "Thank you! We have received your payment for %(courseName)s.": "\u0634\u0643\u0631\u064b\u0627 \u062c\u0632\u064a\u0644\u064b\u0627! \u0644\u0642\u062f \u062a\u0644\u0642\u0651\u064a\u0646\u0627 \u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0630\u064a \u0633\u0627\u0647\u0645\u062a \u0628\u0647 \u0641\u064a %(courseName)s", "Thank you! We have received your payment for %(course_name)s.": "\u0634\u0643\u0631\u064b\u0627 \u062c\u0632\u064a\u0644\u064b\u0627! \u0644\u0642\u062f \u0627\u0633\u062a\u0644\u0645\u0646\u0627 \u0627\u0644\u0645\u0628\u0644\u063a \u0627\u0644\u0630\u064a \u0633\u062f\u062f\u062a\u0647 \u0644\u0642\u0627\u0621 \u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0629 \u0641\u064a %(course_name)s", - "Thanks for returning to verify your ID in: %(courseName)s": "\u0634\u0643\u0631\u064b\u0627 \u0644\u0643 \u0639\u0644\u0649 \u0627\u0644\u0639\u0648\u062f\u0629 \u0644\u062a\u0623\u0643\u064a\u062f \u0647\u0648\u064a\u0651\u062a\u0643 \u0641\u064a: %(courseName)s", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u064a\u0628\u062f\u0648 \u0623\u0646\u0651 \u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0630\u064a \u0623\u062f\u062e\u0644\u062a\u0647 \u0639\u0628\u0627\u0631\u0629 \u0639\u0646 \u0639\u0646\u0648\u0627\u0646 \u0628\u0631\u064a\u062f \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a\u060c \u0647\u0644 \u062a\u0631\u064a\u062f \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0628\u0627\u062f\u0626\u0629 \u2019\u0625\u0631\u0633\u0627\u0644 \u0625\u0644\u0649:\u2018 \u0627\u0644\u0644\u0627\u0632\u0645\u0629\u061f", "The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "\u064a\u0628\u062f\u0648 \u0623\u0646 \u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0630\u064a \u0623\u062f\u062e\u0644\u062a\u0647 \u0639\u0628\u0627\u0631\u0629 \u0639\u0646 \u0631\u0627\u0628\u0637 \u062e\u0627\u0631\u062c\u064a\u060c \u0647\u0644 \u062a\u0631\u064a\u062f \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0628\u0627\u062f\u0626\u0629 http:// \u0627\u0644\u0644\u0627\u0632\u0645\u0629\u061f", "The certificate for this learner has been re-validated and the system is re-running the grade for this learner.": "\u062c\u0631\u062a \u0625\u0639\u0627\u062f\u0629 \u062a\u0648\u062b\u064a\u0642 \u0634\u0647\u0627\u062f\u0629 \u0647\u0630\u0627 \u0627\u0644\u0645\u062a\u0639\u0644\u0651\u0645 \u0648\u064a\u0639\u0645\u0644 \u0627\u0644\u0646\u0638\u0627\u0645 \u0639\u0644\u0649 \u0625\u0639\u0627\u062f\u0629 \u0639\u0631\u0636 \u0639\u0644\u0627\u0645\u062a\u0647 \u0627\u0644\u0645\u0645\u0646\u0648\u062d\u0629.", @@ -1520,7 +1507,6 @@ "This content group is not in use. Add a content group to any unit from the {linkStart}Course Outline{linkEnd}.": "\u0625\u0646\u0651 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u062d\u062a\u0648\u0649 \u0647\u0630\u0647 \u0644\u064a\u0633\u062a \u0642\u064a\u062f \u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645. \u064a\u064f\u0631\u062c\u0649 \u0625\u0636\u0627\u0641\u0629 \u0645\u062c\u0645\u0648\u0639\u0629 \u0645\u062d\u062a\u0648\u0649 \u0625\u0644\u0649 \u0623\u064a \u0648\u062d\u062f\u0629 \u0645\u0646 \u062e\u0644\u0627\u0644 {linkStart}\u0646\u0628\u0630\u0629 \u0639\u0646 \u0627\u0644\u0645\u0633\u0627\u0642{linkEnd}.", "This content group is used in one or more units.": "\u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u062d\u062a\u0648\u0649 \u0647\u0630\u0647 \u0645\u0633\u062a\u062e\u062f\u0645\u0629 \u0641\u064a \u0648\u062d\u062f\u0629 \u0648\u0627\u062d\u062f\u0629 \u0623\u0648 \u0623\u0643\u062b\u0631.", "This content group is used in:": "\u062a\u064f\u0633\u062a\u062e\u062f\u064e\u0645 \u0645\u062c\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u062d\u062a\u0648\u0649 \u0647\u0630\u0647 \u0641\u064a:", - "This edX learner is currently sharing a limited profile.": "\u064a\u064f\u0634\u0627\u0631\u0643 \u062d\u0627\u0644\u064a\u064b\u0651\u0627 \u0647\u0630\u0627 \u0627\u0644\u0637\u0627\u0644\u0628 \u0644\u062f\u0649 edX \u0645\u0644\u0641\u0651\u064b\u0627 \u0634\u062e\u0635\u064a\u0651\u064b\u0627 \u0645\u062d\u062f\u0648\u062f\u064b\u0627.", "This image is for decorative purposes only and does not require a description.": "\u0627\u0633\u062a\u064f\u062e\u062f\u0645\u062a \u0647\u0630\u0647 \u0627\u0644\u0635\u0648\u0631\u0629 \u0644\u0623\u0647\u062f\u0627\u0641 \u062a\u0632\u064a\u0646\u064a\u0629 \u0641\u0642\u0637 \u0648\u0644\u0627 \u062a\u062a\u0637\u0644\u0651\u0628 \u062a\u0648\u0635\u064a\u0641\u064b\u0627.", "This is the Description of the Group Configuration": "\u0625\u0646\u0647 \u0648\u0635\u0641 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629", "This is the Name of the Group Configuration": "\u0625\u0646\u0647 \u0627\u0633\u0645 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0629", @@ -1558,7 +1544,6 @@ "To receive credit on a problem, you must click \"Check\" or \"Final Check\" on it before you select \"End My Exam\".": "\u064a\u062c\u0628 \u0627\u0644\u0646\u0642\u0631 \u0639\u0644\u0649 \u2019\u0645\u0631\u0627\u062c\u0639\u0629\u2018 \u0623\u0648 \u2019\u0645\u0631\u0627\u062c\u0639\u0629 \u0646\u0647\u0627\u0626\u064a\u0629\u2018 \u0639\u0644\u0649 \u0627\u0644\u0645\u0627\u062f\u0629 \u0627\u0644\u062f\u0631\u0627\u0633\u064a\u0629 \u0642\u0628\u0644 \u0627\u062e\u062a\u064a\u0627\u0631 \u2019\u0623\u0646\u0647\u064a \u0627\u0645\u062a\u062d\u0627\u0646\u064a\u2018 \u0644\u062a\u0644\u0642\u064a \u0645\u0627\u062f\u0629 \u062f\u0631\u0627\u0633\u064a\u0629 \u0644\u0628\u0631\u0646\u0627\u0645\u062c \u0645\u0639\u064a\u0651\u0646.", "To review student cohort assignments or see the results of uploading a CSV file, download course profile information or cohort results on {link_start} the Data Download page. {link_end}": "\u0644\u0645\u0631\u0627\u062c\u0639\u0629 \u0627\u0644\u0648\u0627\u062c\u0628\u0627\u062a \u0627\u0644\u0645\u0633\u0646\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0637\u0644\u0651\u0627\u0628 \u0641\u064a \u0643\u0644 \u0645\u062c\u0645\u0648\u0639\u0629 \u0623\u0648 \u0631\u0624\u064a\u0629 \u0646\u062a\u0627\u0626\u062c \u062a\u062d\u0645\u064a\u0644 \u0645\u0644\u0641 \u2019CSV\u2018\u060c \u064a\u064f\u0631\u062c\u0649 \u062a\u0646\u0632\u064a\u0644 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0645\u0644\u0641\u0651 \u0627\u0644\u0645\u0633\u0627\u0642 \u0623\u0648 \u0646\u062a\u0627\u0626\u062c \u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0627\u062a \u0639\u0646 \u0637\u0631\u064a\u0642 {link_start} \u0635\u0641\u062d\u0629 \u062a\u0646\u0632\u064a\u0644 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a. {link_end}", "To take a successful photo, make sure that:": "\u0644\u0627\u0644\u062a\u0642\u0627\u0637 \u0635\u0648\u0631\u0629 \u0646\u0627\u062c\u062d\u0629\u060c \u064a\u064f\u0631\u062c\u0649 \u0627\u0644\u062a\u0623\u0643\u0651\u062f \u0645\u0645\u0651\u0627 \u064a\u0644\u064a:", - "To use the current photo, select the camera button %(icon)s. To take another photo, select the retake button %(icon)s.": "\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629\u060c \u064a\u064f\u0631\u062c\u0649 \u0627\u062e\u062a\u064a\u0627\u0631 \u0632\u0631\u0651 \u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0627 %(icon)s. \u0648\u0644\u0627\u0644\u062a\u0642\u0627\u0637 \u0635\u0648\u0631\u0629 \u0623\u062e\u0631\u0649\u060c \u064a\u064f\u0631\u062c\u0649 \u0627\u062e\u062a\u064a\u0627\u0631 \u0632\u0631\u0651 \u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u062a\u0635\u0648\u064a\u0631 %(icon)s.", "To verify your identity, you need a webcam and a government-issued photo ID.": "\u0644\u062a\u0623\u0643\u064a\u062f \u0635\u062d\u0651\u0629 \u0647\u0648\u064a\u0651\u062a\u0643\u060c \u0623\u0646\u062a \u0628\u062d\u0627\u062c\u0629 \u0644\u0643\u0627\u0645\u064a\u0631\u0627 \u0648\u0628\u0637\u0627\u0642\u0629 \u0647\u0648\u064a\u0651\u0629 \u062d\u0643\u0648\u0645\u064a\u0629 \u062a\u062d\u0645\u0644 \u0635\u0648\u0631\u0629 \u0634\u062e\u0635\u064a\u0651\u0629.", "Toggle Notifications Setting": "\u062a\u0628\u062f\u064a\u0644 \u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0625\u0634\u0639\u0627\u0631\u0627\u062a ", "Tools": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a", @@ -1570,7 +1555,6 @@ "Total Number": "\u0627\u0644\u0639\u062f\u062f \u0627\u0644\u0625\u062c\u0645\u0627\u0644\u064a", "Try the transaction again in a few minutes.": "\u0627\u0644\u0631\u062c\u0627\u0621 \u0645\u0639\u0627\u0648\u062f\u0629 \u0637\u0644\u0628 \u0627\u0644\u0639\u0645\u0644\u064a\u0629 \u0645\u062c\u062f\u0651\u062f\u064b\u0627 \u0628\u0639\u062f \u0628\u0636\u0639 \u062f\u0642\u0627\u0626\u0642.", "Try using a different browser, such as Google Chrome.": "\u064a\u064f\u0631\u062c\u0649 \u0645\u062d\u0627\u0648\u0644\u0629 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0645\u062a\u0635\u0641\u0651\u062d \u0622\u062e\u0631\u060c \u0645\u062b\u0644 \u063a\u0648\u063a\u0644 \u0643\u0631\u0648\u0645.", - "Turn off transcript": "\u0625\u062e\u0641\u0627\u0621 \u0646\u0635 \u0627\u0644\u0643\u0644\u0627\u0645 \u0627\u0644\u0645\u062f\u0648\u0651\u0646", "Turn off transcripts": "\u0625\u062e\u0641\u0627\u0621 \u0627\u0644\u0646\u0635", "Turn on closed captioning": "\u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u0639\u0646\u0627\u0648\u064a\u0646 \u0627\u0644\u0641\u0631\u0639\u064a\u0629 \u0627\u0644\u0645\u063a\u0644\u0642\u0629", "Turn on transcripts": "\u0639\u0631\u0636 \u0646\u0635 \u0627\u0644\u0643\u0644\u0627\u0645 \u0627\u0644\u0645\u062f\u0648\u0651\u0646", @@ -1608,7 +1592,6 @@ "Updating Tags": "\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0634\u064e\u0627\u0631\u0627\u062a", "Updating with latest library content": "\u062c\u0627\u0631\u064a \u0627\u0644\u062a\u062d\u062f\u064a\u062b \u0645\u0639 \u0645\u0633\u062a\u062c\u062f\u0651\u0627\u062a \u0645\u062d\u062a\u0648\u0649 \u0627\u0644\u0645\u0643\u062a\u0628\u0629", "Upgrade Deadline": "\u0627\u0644\u0645\u0648\u0639\u062f \u0627\u0644\u0646\u0647\u0627\u0626\u064a \u0644\u0644\u062a\u062d\u062f\u064a\u062b ", - "Upgrade to a Verified Certificate for %(courseName)s": "\u0642\u0645 \u0628\u0627\u0644\u062a\u0631\u0642\u064a\u0629 \u0644\u062a\u062d\u0635\u0644 \u0639\u0644\u0649 \u0634\u0647\u0627\u062f\u0629 \u0645\u0648\u062b\u0651\u0642\u0629 \u0644\u0644\u0645\u0633\u0627\u0642 %(courseName)s", "Upload": "\u062a\u062d\u0645\u064a\u0644", "Upload File": "\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0644\u0641", "Upload File and Assign Students": "\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0644\u0641 \u0648\u0625\u0633\u0646\u0627\u062f \u0627\u0644\u0648\u0627\u062c\u0628\u0627\u062a \u0625\u0644\u0649 \u0627\u0644\u0637\u0644\u0651\u0627\u0628", @@ -1667,7 +1650,6 @@ "Verification Deadline": "\u0627\u0644\u0645\u0648\u0639\u062f \u0627\u0644\u0646\u0647\u0627\u0626\u064a \u0644\u0644\u062a\u062d\u0642\u0651\u0642", "Verification checkpoint to be completed": "\u064a\u062a\u0648\u062c\u0651\u0628 \u0625\u062a\u0645\u0627\u0645 \u0646\u0642\u0637\u0629 \u0627\u0644\u0627\u062e\u062a\u0628\u0627\u0631 \u0627\u0644\u062e\u0627\u0635\u0651\u0629 \u0628\u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u062a\u062d\u0642\u0651\u0642", "Verified Certificate": "\u0627\u0644\u0634\u0647\u0627\u062f\u0629 \u0627\u0644\u0645\u0648\u062b\u0651\u0642\u0629", - "Verified Certificate for %(courseName)s": "\u0634\u0647\u0627\u062f\u0629 \u0645\u0648\u062b\u0642\u0629 \u0644\u0644\u0645\u0633\u0627\u0642 %(courseName)s", "Verified Certificate upgrade": "\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0634\u0647\u0627\u062f\u0629 \u0627\u0644\u0645\u0648\u062b\u0642\u0629", "Verified Status": "\u062d\u0627\u0644\u0629 \u062c\u0631\u0649 \u0627\u0644\u062a\u062d\u0642\u0651\u0642 \u0645\u0646\u0647\u0627", "Verified mode price": "\u0633\u0639\u0631 \u0648\u0636\u0639 \u2019\u0634\u0647\u0627\u062f\u0629 \u0645\u0648\u062b\u0651\u0642\u0629\u2018", @@ -1748,7 +1730,6 @@ "What does %(platformName)s do with this photo?": "\u0645\u0627 \u0627\u0644\u0630\u064a \u062a\u0641\u0639\u0644\u0647 %(platformName)s \u0628\u0647\u0630\u0647 \u0627\u0644\u0635\u0648\u0631\u0629\u061f", "What does this mean?": "\u0645\u0627\u0630\u0627 \u064a\u0639\u0646\u064a \u0647\u0630\u0627\u061f", "When you click \"Reset Password\", a message will be sent to your email address. Click the link in the message to reset your password.": "\u0639\u0646\u062f\u0645\u0627 \u062a\u0646\u0642\u0631 \u0639\u0644\u0649 \"\u0625\u0639\u0627\u062f\u0629 \u0636\u0628\u0637 \u0643\u0644\u0645\u0629 \u0627\u0644\u0633\u0631\"\u060c \u0633\u062a\u0635\u0644 \u0631\u0633\u0627\u0644\u0629 \u0644\u0628\u0631\u064a\u062f\u0643 \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a. \u064a\u064f\u0631\u062c\u0649 \u0639\u0646\u062f\u0647\u0627 \u0627\u0644\u0646\u0642\u0631 \u0639\u0644\u0649 \u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0645\u0648\u062c\u0648\u062f \u0641\u064a \u0627\u0644\u0631\u0633\u0627\u0644\u0629 \u0644\u062a\u063a\u064a\u0651\u0631\u0647\u0627.", - "When your face is in position, use the camera button %(icon)s below to take your photo.": "\u062d\u0627\u0644\u0645\u0627 \u062a\u0636\u0628\u0637 \u0648\u0636\u0639\u064a\u0629 \u062c\u0644\u0648\u0633\u0643 \u0648\u0648\u062c\u0647\u0643\u060c \u064a\u064f\u0631\u062c\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0632\u0631\u0651 \u0627\u0644\u0643\u0627\u0645\u064a\u0631\u0627 %(icon)s \u0623\u062f\u0646\u0627\u0647 \u0644\u0627\u0644\u062a\u0642\u0627\u0637 \u0635\u0648\u0631\u062a\u0643. ", "Which timed transcript would you like to use?": "\u0645\u0627 \u0647\u0648 \u0627\u0644\u0646\u0635 \u0645\u062d\u062f\u0651\u064e\u062f \u0627\u0644\u062a\u0648\u0642\u064a\u062a \u0627\u0644\u0630\u064a \u062a\u0631\u063a\u0628 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u061f", "Whole words": "\u0643\u0644\u0645\u0627\u062a \u0643\u0627\u0645\u0644\u0629 ", "Why does %(platformName)s need my photo?": "\u0644\u0645\u0627\u0630\u0627 \u062a\u062d\u062a\u0627\u062c %(platformName)s \u0625\u0644\u0649 \u0635\u0648\u0631\u062a\u064a\u061f", @@ -1766,11 +1747,8 @@ "You are about to send an email titled '<%= subject %>' to everyone who is staff or instructor on this course. Is this OK?": "\u0623\u0646\u062a \u0639\u0644\u0649 \u0648\u0634\u0643 \u0625\u0631\u0633\u0627\u0644 \u0631\u0633\u0627\u0644\u0629 \u0628\u0631\u064a\u062f \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0628\u0639\u0646\u0648\u0627\u0646 \u2019<%= subject %>\u2018 \u0625\u0644\u0649 \u0643\u0644\u0651 \u0645\u0646 \u0647\u0648 \u0623\u0633\u062a\u0627\u0630 \u0641\u064a \u0647\u0630\u0627 \u0627\u0644\u0645\u0633\u0627\u0642 \u0623\u0648 \u0641\u0631\u062f \u0641\u064a \u0641\u0631\u064a\u0642 \u0639\u0645\u0644\u0647. \u0647\u0644 \u0623\u0646\u062a \u0648\u0627\u062b\u0642 \u0645\u0646 \u0647\u0630\u0627\u061f", "You are about to send an email titled '<%= subject %>' to yourself. Is this OK?": "\u0623\u0646\u062a \u0639\u0644\u0649 \u0648\u0634\u0643 \u0625\u0631\u0633\u0627\u0644 \u0631\u0633\u0627\u0644\u0629 \u0628\u0631\u064a\u062f \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u0628\u0639\u0646\u0648\u0627\u0646 \u2019<%= subject %>\u2018 \u0625\u0644\u0649 \u0646\u0641\u0633\u0643. \u0647\u0644 \u0623\u0646\u062a \u0648\u0627\u062b\u0642 \u0645\u0646 \u0647\u0630\u0627\u061f", "You are currently sharing a limited profile.": "\u0625\u0646\u0651\u0643 \u062d\u0627\u0644\u064a\u064b\u0651\u0627 \u062a\u0634\u0627\u0631\u0643 \u0645\u0644\u0641\u0651\u064b\u0627 \u0634\u062e\u0635\u064a\u0651\u064b\u0627 \u0645\u062d\u062f\u0648\u062f\u064b\u0627.", - "You are enrolling in %(courseName)s": "\u0623\u0646\u062a \u062a\u0633\u062c\u0651\u0644 \u0641\u064a %(courseName)s", - "You are enrolling in: %(courseName)s": "\u0625\u0646\u0651\u0643 \u062a\u0633\u062c\u0651\u0644 \u0641\u064a: %(courseName)s", "You are not currently a member of any team.": "\u062d\u0627\u0644\u064a\u064b\u0627\u060c \u0623\u0646\u062a \u0644\u0633\u062a \u0639\u0636\u0648\u064b\u0627 \u0641\u064a \u0623\u064a \u0641\u0631\u064a\u0642.", "You are now enrolled as a verified student for:": "\u0623\u0646\u062a \u0627\u0644\u0622\u0646 \u0645\u0633\u062c\u0651\u0650\u0644 \u0643\u0637\u0627\u0644\u0628 \u0645\u0648\u062b\u0651\u064e\u0642 \u0644\u062f\u0649: ", - "You are upgrading your enrollment for: %(courseName)s": "\u0625\u0646\u0651\u0643 \u062a\u062c\u062f\u0651\u062f \u062a\u0633\u062c\u064a\u0644\u0643 \u0641\u064a: %(courseName)s", "You can now enter your payment information and complete your enrollment.": "\u064a\u0645\u0643\u0646\u0643 \u0627\u0644\u0622\u0646 \u0625\u062f\u062e\u0627\u0644 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u0644\u062f\u0641\u0639 \u0648\u0627\u0633\u062a\u0643\u0645\u0627\u0644 \u062a\u0633\u062c\u064a\u0644\u0643. ", "You can pay now even if you don't have the following items available, but you will need to have these by %(date)s to qualify to earn a Verified Certificate.": "\u064a\u0645\u0643\u0646\u0643 \u0623\u0646 \u062a\u062f\u0641\u0639 \u0627\u0644\u0622\u0646 \u062d\u062a\u0649 \u0644\u0645 \u0644\u0645 \u062a\u062a\u0648\u0641\u0651\u0631 \u0644\u062f\u064a\u0643 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u062a\u0627\u0644\u064a\u0629\u060c \u0644\u0643\u0646 \u064a\u062c\u0628 \u0639\u0644\u064a\u0643 \u062a\u0648\u0641\u064a\u0631\u0647\u0627 \u0628\u062d\u0644\u0648\u0644 %(date)s \u0645\u0646 \u0623\u062c\u0644 \u0627\u0644\u062a\u0623\u0647\u0651\u0644 \u0644\u0646\u064a\u0644 \"\u0634\u0647\u0627\u062f\u0629 \u0645\u0648\u062b\u0651\u0642\u0629\". ", "You can pay now even if you don't have the following items available, but you will need to have these to qualify to earn a Verified Certificate.": "\u064a\u0645\u0643\u0646\u0643 \u0623\u0646 \u062a\u062f\u0641\u0639 \u0627\u0644\u0622\u0646 \u062d\u062a\u0649 \u0644\u0645 \u0644\u0645 \u062a\u062a\u0648\u0641\u0651\u0631 \u0644\u062f\u064a\u0643 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u062a\u0627\u0644\u064a\u0629\u060c \u0644\u0643\u0646 \u064a\u062c\u0628 \u0639\u0644\u064a\u0643 \u062a\u0648\u0641\u064a\u0631\u0647\u0627 \u0645\u0646 \u0623\u062c\u0644 \u0627\u0644\u062a\u0623\u0647\u0651\u0644 \u0644\u0646\u064a\u0644 \"\u0634\u0647\u0627\u062f\u0629 \u0645\u0648\u062b\u0651\u0642\u0629\". ", @@ -1842,7 +1820,6 @@ "Your team could not be updated.": "\u0639\u0630\u0631\u064b\u0627\u060c \u0644\u0645 \u0646\u062a\u0645\u0643\u0651\u0646 \u0645\u0646 \u062a\u062d\u062f\u064a\u062b \u0641\u0631\u064a\u0642\u0643.", "Your upload of '{file}' failed.": "\u0639\u0630\u0631\u064b\u0627\u060c \u0641\u0634\u0644 \u062a\u062d\u0645\u064a\u0644\u0643 \u0644\u0645\u0644\u0641 '{file}'. ", "Your upload of '{file}' succeeded.": "\u0646\u062c\u062d \u062a\u062d\u0645\u064a\u0644\u0643 \u0644\u0645\u0644\u0641 '{file}'. ", - "Your verification status is good until %(verificationGoodUntil)s.": "\u064a\u0633\u0631\u064a \u0645\u0641\u0639\u0648\u0644 \u0639\u0645\u0644\u064a\u0629 \u0627\u0644\u062a\u062d\u0642\u0651\u0642 \u0645\u0646 \u0647\u0648\u064a\u0651\u062a\u0643 \u062d\u062a\u0649 \u062a\u0627\u0631\u064a\u062e %(verificationGoodUntil)s.", "Your video uploads are not complete.": "\u0639\u0645\u0644\u064a\u0627\u062a \u062a\u062d\u0645\u064a\u0644 \u0645\u0644\u0641 \u0627\u0644\u0641\u064a\u062f\u064a\u0648 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643 \u063a\u064a\u0631 \u0645\u0643\u062a\u0645\u0644\u0629.", "Zoom In": "\u062a\u0643\u0628\u064a\u0631", "Zoom Out": "\u062a\u0635\u063a\u064a\u0631", @@ -1860,7 +1837,6 @@ "about a month": "\u062d\u0648\u0627\u0644\u064a \u0634\u0647\u0631", "about a year": "\u062d\u0648\u0627\u0644\u064a \u0633\u0646\u0629", "about an hour": "\u062d\u0648\u0627\u0644\u064a \u0633\u0627\u0639\u0629", - "additions to the Exception list": "\u0625\u0636\u0627\u0641\u0627\u062a \u0625\u0644\u0649 \u0644\u0627\u0626\u062d\u0629 \u0627\u0644\u0627\u0633\u062a\u062b\u0646\u0627\u0621\u0627\u062a", "and others": "\u0648\u0622\u062e\u0631\u064a\u0646", "anonymous": "\u0645\u062c\u0647\u0648\u0644", "answer": "\u0627\u0644\u0625\u062c\u0627\u0628\u0629", @@ -1910,7 +1886,6 @@ "or": "\u0623\u0648", "or create a new one here": "\u0623\u0648 \u0623\u0646\u0634\u0626 \u062d\u0633\u0627\u0628\u0627\u064b \u062c\u062f\u064a\u062f\u0627\u064b \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645", "or sign in with": "\u0623\u0648 \u0633\u062c\u0651\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 \u0628\u0627\u0633\u062a\u062e\u062f\u0627\u0645", - "path/to/introductionToCookieBaking-CH%d.pdf": "path/to/introductionToCookieBaking-CH%d.pdf", "post anonymously": "\u0627\u0646\u0634\u064f\u0631 \u0645\u0646 \u062f\u0648\u0646 \u0627\u0644\u0643\u0634\u0641 \u0639\u0646 \u0627\u0644\u0647\u0648\u064a\u0629 ", "post anonymously to classmates": "\u0627\u0646\u0634\u0631 \u0623\u0645\u0627\u0645 \u0627\u0644\u0632\u0645\u0644\u0627\u0621 \u0645\u0646 \u062f\u0648\u0646 \u0627\u0644\u0643\u0634\u0641 \u0639\u0646 \u0627\u0644\u0647\u0648\u064a\u0629 ", "posted %(time_ago)s by %(author)s": "\u0646\u064f\u0634\u0650\u0631 %(time_ago)s \u0645\u0646 \u0642\u0650\u0628\u0644 %(author)s", diff --git a/lms/static/js/i18n/es-419/djangojs.js b/lms/static/js/i18n/es-419/djangojs.js index e7a8949848..bb3b6636df 100644 --- a/lms/static/js/i18n/es-419/djangojs.js +++ b/lms/static/js/i18n/es-419/djangojs.js @@ -135,7 +135,6 @@ "<%= user %> has been successfully added to the exception list. Click Generate Exception Certificate below to send the certificate.": "<%= user %> ha sido a\u00f1adido a la lista de excepciones. Haga clic en Generar cerfificado de excepci\u00f3n para enviar este certificado.", "": "", "%s": "%s", - "
  • Transcript will be displayed when ": "
  • La transcripci\u00f3n se mostrar\u00e1 cuando", "A driver's license, passport, or government-issued ID with your name and photo.": "Una licencia de conducir, pasaporte, c\u00e9dula o otra identificaci\u00f3n oficial con su nombre y foto", "A driver's license, passport, or other government-issued ID with your name and photo": "Una licencia de conducir, pasaporte, c\u00e9dula o otra identificaci\u00f3n oficial con su nombre y foto", "A list of courses you have just enrolled in as a verified student": "Lista de cursos que te has inscrito como estudiante verificado", @@ -154,7 +153,6 @@ "Actions": "Acciones", "Activate": "Activar", "Activate Your Account": "Activar su cuenta", - "Activating an item in this group will spool the video to the corresponding time point. To skip transcript, go to previous item.": "Activar un \u00edtem en este grupo llevar\u00e1 el v\u00eddeo al momento correspondiente. Para saltar la transcripci\u00f3n, vaya al item anterior.", "Active Threads": "Hilos Activos", "Active Uploads": "Cargas activas", "Add": "A\u00f1adir", @@ -322,7 +320,6 @@ "Change My Email Address": "Cambiar mi direcci\u00f3n de correo electr\u00f3nico", "Change image": "Cambiar imagen", "Change the settings for %(display_name)s": "Cambiar la configuraci\u00f3n para %(display_name)s", - "Chapter %s": "Cap\u00edtulo %s", "Chapter Asset": "Recursos del cap\u00edtulo", "Chapter Name": "Nombre del cap\u00edtulo", "Chapter information": "Informaci\u00f3n del cap\u00edtulo", @@ -675,7 +672,6 @@ "General": "General", "Generate": "Generar", "Generate Exception Certificates": "Generar excepciones de certificados", - "Generate a Certificate for all ": "Generar certificado para todos", "Generate a Certificate for all users on the Exception list": "Generar un certificado para cada usuario en la lista de excepciones", "Generate the user's certificate": "Generar el certificado del usuario", "Get Credit": "Obtenga cr\u00e9ditos", @@ -798,7 +794,6 @@ "Keywords": "Palabras clave", "LEARN MORE": "APRENDER MAS", "Language": "Idioma", - "Language: Press the UP arrow key to enter the language menu, then use UP and DOWN arrow keys to navigate language options. Press ENTER to change to the selected language.": "Idioma: Presione la flecha ARRIBA para entrar al men\u00fa de idioma, luego use las flechas ARRIBA y ABAJO para navegar las opciones. Presione ENTRAR para cambiar al idioma seleccionado.", "Large": "Largo", "Last Activity %(date)s": "\u00daltima Actividad %(date)s", "Last Edited:": "\u00daltima modificaci\u00f3n:", @@ -890,7 +885,6 @@ "Name of the signatory": "Nombre del signatario", "Name or short description of the configuration": "Nombre o descripci\u00f3n corta de la configuraci\u00f3n", "Never published": "Nunca publicad", - "New": "Nuevo", "New %(component_type)s": "Nuevo %(component_type)s", "New %(item_type)s": "Nueva %(item_type)s", "New Address": "Nueva direcci\u00f3n ", @@ -940,13 +934,10 @@ "Numbered list": "Lista numerada", "OK": "Aceptar", "Ok": "Bien", - "Once in position, use the camera button %(icon)s to capture your ID": "Una vez en posici\u00f3n, usa el bot\u00f3n de la c\u00e1mara %(icon)s para capturar tu ID", - "Once in position, use the camera button %(icon)s to capture your photo": "Una vez en posici\u00f3n, use el bot\u00f3n de la c\u00e1mara %(icon)s para capturar su foto", "Only <%= fileTypes %> files can be uploaded. Please select a file ending in <%= fileExtensions %> to upload.": "S\u00f3lo pueden cargarse archivos de tipo <%= fileTypes %>. Por favor seleccione un archivo que termine en <%= fileExtensions %> para ser cargado.", "Only properly formatted .csv files will be accepted.": "Solo archivos .csv correctamente formateados pueden ser utilizados.", "Open": "Abrir", "Open Calculator": "Abrir Calculadora", - "Open language menu": "Abrir men\u00fa de lenguaje", "Open/download this file": "Abrir / descargar este archivo", "OpenAssessment Save Error": "Error al guardar en el servidor OpenAssessment", "Optional Characteristics": "Caracter\u00edsiticas Opcionales", @@ -958,7 +949,6 @@ "Organization of the signatory": "Organizaci\u00f3n del signatario", "Other": "Otro", "Page break": "Salto de p\u00e1gina", - "Page number": "N\u00famero de p\u00e1gina", "Paragraph": "P\u00e1rrafo", "Password": "Contrase\u00f1a", "Password Reset Email Sent": "El correo para restablecer contrase\u00f1a ha sido enviado.", @@ -1041,7 +1031,6 @@ "Proctored": "Supervisado", "Proctored Exam": "Examen supervisado", "Proctored exams are timed and they record video of each learner taking the exam. The videos are then reviewed to ensure that learners follow all examination rules.": "Los ex\u00e1menes supervisados son cronometrados y un software graba a cada estudiante que toma el examen. Los videos luego son revisados para garantizar que el estudiante cumpli\u00f3 con todas las reglas del examen.", - "Professional Certificate for %(courseName)s": "Certificado Verificado para %(courseName)s", "Professional Education": "Educaci\u00f3n profesional", "Professional Education Verified Certificate": "Certificado verificado", "Profile Image": "Foto de perfil", @@ -1300,9 +1289,7 @@ "Textbook name is required": "Se requiere el nombre del texto", "Thank you for submitting your financial assistance application for {course_name}! You can expect a response in 2-4 business days.": "Gracias por enviar tu aplicaci\u00f3n de financiamiento para {course_name}!. Espera una respuesta de 2-4 dias h\u00e1biles.", "Thank you for submitting your photos. We will review them shortly. You can now sign up for any %(platformName)s course that offers verified certificates. Verification is good for one year. After one year, you must submit photos for verification again.": "Gracias por enviar sus fotos. Las revisaremos pronto. Ahora puede registrarse para cualquier curso de %(platformName)s que ofrezca Certficados Verificados. La verificaci\u00f3n es v\u00e1lida por un a\u00f1o. Despu\u00e9s de este periodo, deber\u00e1 volver a enviar fotograf\u00edas para una nueva verificaci\u00f3n.", - "Thank you! We have received your payment for %(courseName)s.": "Gracias! Hemos recibido su pago para %(courseName)s.", "Thank you! We have received your payment for %(course_name)s.": "Gracias! Hemos recibido su pago para el curso %(course_name)s.", - "Thanks for returning to verify your ID in: %(courseName)s": "Gracias por volver a verificar su identificaci\u00f3n en: %(courseName)s", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "La URL que introdujo parece ser una direcci\u00f3n de correo electr\u00f3nico. \u00bfDesea agregarle el prefijo requerido mailto:?", "The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "La URL que introdujo parece ser un v\u00ednculo externo. \u00bfDesea agregarle el prefijo requerido http://?", "The certificate for this learner has been re-validated and the system is re-running the grade for this learner.": "El certificado para este estudiante ha sido revalidado y el sistema est\u00e1 computando nuevamente la calificaci\u00f3n.", @@ -1397,7 +1384,6 @@ "This content group is not in use. Add a content group to any unit from the {linkStart}Course Outline{linkEnd}.": "Este grupo de contenidos no est\u00e1 en uso. A\u00f1ada un grupo de contenidos a cualquier unidad de la {linkStart}Estructura del curso{linkEnd}.", "This content group is used in one or more units.": "Este contenido de grupo es usado en uno o mas unidades.", "This content group is used in:": "Este contenido de grupo es usado en:", - "This edX learner is currently sharing a limited profile.": "Este usuario est\u00e1 compartiendo un perfil limitado.", "This image is for decorative purposes only and does not require a description.": "Esta imagen es decorativa solamente y no requiere descripci\u00f3n.", "This is the Description of the Group Configuration": "Esta es la descripci\u00f3n de configuraci\u00f3n del grupo", "This is the Name of the Group Configuration": "Este es el nombre de la Configuraci\u00f3n del Grupo", @@ -1434,7 +1420,6 @@ "To receive a certificate, you must also verify your identity.": "Para recibir un certificado, tambi\u00e9n debe verificar su identidad.", "To receive credit on a problem, you must click \"Check\" or \"Final Check\" on it before you select \"End My Exam\".": "Para recibir cr\u00e9ditos para un problema, debe hacer clic en el bot\u00f3n de \"Revisar\" o \"Env\u00edo Final\" de dicho problema antes de seleccionar \"Terminar el examen\".", "To take a successful photo, make sure that:": "Para tomar la foto correctamente, aseg\u00farese de: ", - "To use the current photo, select the camera button %(icon)s. To take another photo, select the retake button %(icon)s.": "Para usar la foto actual, seleccione el bot\u00f3n con la camara %(icon)s. Para tomar una nueva foto, seleccione el bot\u00f3n de nueva toma %(icon)s.", "To verify your identity, you need a webcam and a government-issued photo ID.": "Para verificar su identidad, necesitar\u00e1 una c\u00e1mara web, y un documento de identificaci\u00f3n oficial con foto.", "Toggle Notifications Setting": "Cambiar las opciones de notificaci\u00f3n", "Tools": "Herramientas", @@ -1446,7 +1431,6 @@ "Total Number": "N\u00famero total", "Try the transaction again in a few minutes.": "Intente la transacci\u00f3n nuevamente en algunos minutos.", "Try using a different browser, such as Google Chrome.": "Intente usar otro navegador. Por ejemplo Google Chrome.", - "Turn off transcript": "Desactivar transcripci\u00f3n", "Turn off transcripts": "Desactivar transcripci\u00f3n", "Turn on closed captioning": "Activar subt\u00edtulos", "Turn on transcripts": "Activar transcripci\u00f3n", @@ -1484,7 +1468,6 @@ "Updating Tags": "Actualizando Etiquetas", "Updating with latest library content": "Actualizando con el m\u00e1s reciente contenido de la librer\u00eda", "Upgrade Deadline": "Actualizar la fecha l\u00edmite", - "Upgrade to a Verified Certificate for %(courseName)s": "Cambiar a Certificado Verificado para %(courseName)s", "Upload": "Subir", "Upload File": "Subir archivo", "Upload File and Assign Students": "Cargar archivo y asignar estudiantes", @@ -1535,7 +1518,6 @@ "Verification Deadline": "Fecha l\u00edmite de verificaci\u00f3n", "Verification checkpoint to be completed": "El punto de verificaci\u00f3n debe ser completado", "Verified Certificate": "Certificado verificado", - "Verified Certificate for %(courseName)s": "Certificado Verificado para %(courseName)s", "Verified Certificate upgrade": "Ascender a un Certificado verificado", "Verified Status": "Verificaci\u00f3n", "Verified mode price": "Precio del modo verificado", @@ -1612,7 +1594,6 @@ "What does %(platformName)s do with this photo?": "\u00bfQu\u00e9 hace %(platformName)s con esta imagen?", "What does this mean?": "\u00bfQu\u00e9 significa esto?", "When you click \"Reset Password\", a message will be sent to your email address. Click the link in the message to reset your password.": "Cuando realice clic en \"Restablecer Contrase\u00f1a\", se enviar\u00e1 un mensaje a su direcci\u00f3n de correo. Haga clic en el v\u00ednculo que encontrar\u00e1 en el mensaje para restablecer su contrase\u00f1a.", - "When your face is in position, use the camera button %(icon)s below to take your photo.": "Luego de colocar su rostro en posici\u00f3n, haga clic en el siguiente icono %(icon)s para tomar la foto.", "Which timed transcript would you like to use?": "\u00bfCu\u00e1l de las transcripciones desea utilizar?", "Whole words": "Palabras completas", "Why does %(platformName)s need my photo?": "Por qu\u00e9 %(platformName)s necesita mi foto ?", @@ -1630,11 +1611,8 @@ "You are about to send an email titled '<%= subject %>' to everyone who is staff or instructor on this course. Is this OK?": "Est\u00e1 a punto de enviarse un correo electr\u00f3nico con asunto '<%= subject %>' a todos los instructores y funcionarios del curso. \u00bfEst\u00e1 seguro de proceder?", "You are about to send an email titled '<%= subject %>' to yourself. Is this OK?": "Est\u00e1 a punto de enviarse un correo electr\u00f3nico con asunto '<%= subject %>' a usted mismo. \u00bfEst\u00e1 seguro de proceder?", "You are currently sharing a limited profile.": "Actualmente est\u00e1 compartiendo un perfil limitado.", - "You are enrolling in %(courseName)s": "Usted est\u00e1 inscribiendose a %(courseName)s", - "You are enrolling in: %(courseName)s": "Estas inscrito en: %(courseName)s", "You are not currently a member of any team.": "Usted no es actualmente miembro de ning\u00fan equipo.", "You are now enrolled as a verified student for:": "Ahora estas inscrito como estudiante verificado para:", - "You are upgrading your enrollment for: %(courseName)s": "Estas actualizando tu inscripci\u00f3n para: %(courseName)s", "You can now enter your payment information and complete your enrollment.": "Ahora puede agregar su informaci\u00f3n de pago, y completar su inscripci\u00f3n", "You can pay now even if you don't have the following items available, but you will need to have these by %(date)s to qualify to earn a Verified Certificate.": "Puede pagar ahora, incluso si no tiene los siguientes items disponibles, pero deber\u00e1 tenerlos antes del %(date)s para calificar para un Certificado Verificado.", "You can pay now even if you don't have the following items available, but you will need to have these to qualify to earn a Verified Certificate.": "Puede pagar ahora, incluso si no tiene los siguientes items disponibles, pero deber\u00e1 tenerlos para calificar para un Certificado Verificado.", @@ -1706,7 +1684,6 @@ "Your team could not be updated.": "Su equipo no pudo ser actualizado.", "Your upload of '{file}' failed.": "No se ha podido cargar el archivo '{file}'.", "Your upload of '{file}' succeeded.": "Se ha cargado el archivo '{file}' exitosamente.", - "Your verification status is good until %(verificationGoodUntil)s.": "Su estado de verificaci\u00f3n es v\u00e1lido hasta %(verificationGoodUntil)s.", "Your video uploads are not complete.": "Los archivos de v\u00eddeo no han terminado de cargar.", "Zoom In": "Acercar", "Zoom Out": "Alejar", @@ -1720,7 +1697,6 @@ "about a month": "cerca de un mes", "about a year": "cerca de un a\u00f1o", "about an hour": "cerca de una hora", - "additions to the Exception list": "adiciones a la lista de excepciones", "and others": "y otros", "anonymous": "an\u00f3nimo", "answer": "pregunta", @@ -1770,7 +1746,6 @@ "or": "o", "or create a new one here": "o crear una nueva aqu\u00ed", "or sign in with": "o inicie sesi\u00f3n con", - "path/to/introductionToCookieBaking-CH%d.pdf": "ruta/al/capitulo%d.pdf", "post anonymously": "escribir an\u00f3nimamente", "post anonymously to classmates": "publicar an\u00f3nimamente a mis compa\u00f1eros de curso", "posted %(time_ago)s by %(author)s": "publicado %(time_ago)s por %(author)s", diff --git a/lms/static/js/i18n/fake2/djangojs.js b/lms/static/js/i18n/fake2/djangojs.js index 0cd7c6fdc7..7535569bf1 100644 --- a/lms/static/js/i18n/fake2/djangojs.js +++ b/lms/static/js/i18n/fake2/djangojs.js @@ -163,6 +163,7 @@ "Active Uploads": "\u023a\u0254\u0287\u1d09\u028c\u01dd \u0244dl\u00f8\u0250ds", "Add": "\u023add", "Add Additional Signatory": "\u023add \u023add\u1d09\u0287\u1d09\u00f8n\u0250l S\u1d09\u0183n\u0250\u0287\u00f8\u0279\u028e", + "Add Allowance": "\u023add \u023all\u00f8\u028d\u0250n\u0254\u01dd", "Add Cohort": "\u023add \u023b\u00f8\u0265\u00f8\u0279\u0287", "Add Component:": "\u023add \u023b\u00f8\u026fd\u00f8n\u01ddn\u0287:", "Add Country": "\u023add \u023b\u00f8nn\u0287\u0279\u028e", @@ -171,6 +172,7 @@ "Add Students": "\u023add S\u0287nd\u01ddn\u0287s", "Add URLs for additional versions": "\u023add \u0244\u024c\u0141s \u025f\u00f8\u0279 \u0250dd\u1d09\u0287\u1d09\u00f8n\u0250l \u028c\u01dd\u0279s\u1d09\u00f8ns", "Add a Chapter": "\u023add \u0250 \u023b\u0265\u0250d\u0287\u01dd\u0279", + "Add a New Allowance": "\u023add \u0250 N\u01dd\u028d \u023all\u00f8\u028d\u0250n\u0254\u01dd", "Add a New Cohort": "\u023add \u0250 N\u01dd\u028d \u023b\u00f8\u0265\u00f8\u0279\u0287", "Add a Response": "\u023add \u0250 \u024c\u01ddsd\u00f8ns\u01dd", "Add a clear and descriptive title to encourage participation.": "\u023add \u0250 \u0254l\u01dd\u0250\u0279 \u0250nd d\u01dds\u0254\u0279\u1d09d\u0287\u1d09\u028c\u01dd \u0287\u1d09\u0287l\u01dd \u0287\u00f8 \u01ddn\u0254\u00f8n\u0279\u0250\u0183\u01dd d\u0250\u0279\u0287\u1d09\u0254\u1d09d\u0250\u0287\u1d09\u00f8n.", @@ -189,6 +191,7 @@ "Adding": "\u023add\u1d09n\u0183", "Adding the selected course to your cart": "\u023add\u1d09n\u0183 \u0287\u0265\u01dd s\u01ddl\u01dd\u0254\u0287\u01ddd \u0254\u00f8n\u0279s\u01dd \u0287\u00f8 \u028e\u00f8n\u0279 \u0254\u0250\u0279\u0287", "Additional Information (optional)": "\u023add\u1d09\u0287\u1d09\u00f8n\u0250l \u0197n\u025f\u00f8\u0279\u026f\u0250\u0287\u1d09\u00f8n (\u00f8d\u0287\u1d09\u00f8n\u0250l)", + "Additional Time (minutes)": "\u023add\u1d09\u0287\u1d09\u00f8n\u0250l \u0166\u1d09\u026f\u01dd (\u026f\u1d09nn\u0287\u01dds)", "Admin": "\u023ad\u026f\u1d09n", "Advanced": "\u023ad\u028c\u0250n\u0254\u01ddd", "Align center": "\u023al\u1d09\u0183n \u0254\u01ddn\u0287\u01dd\u0279", @@ -214,6 +217,9 @@ "Allow others to copy, distribute, display and perform your work - and derivative works based upon it - but for noncommercial purposes only.": "\u023all\u00f8\u028d \u00f8\u0287\u0265\u01dd\u0279s \u0287\u00f8 \u0254\u00f8d\u028e, d\u1d09s\u0287\u0279\u1d09bn\u0287\u01dd, d\u1d09sdl\u0250\u028e \u0250nd d\u01dd\u0279\u025f\u00f8\u0279\u026f \u028e\u00f8n\u0279 \u028d\u00f8\u0279\u029e - \u0250nd d\u01dd\u0279\u1d09\u028c\u0250\u0287\u1d09\u028c\u01dd \u028d\u00f8\u0279\u029es b\u0250s\u01ddd nd\u00f8n \u1d09\u0287 - bn\u0287 \u025f\u00f8\u0279 n\u00f8n\u0254\u00f8\u026f\u026f\u01dd\u0279\u0254\u1d09\u0250l dn\u0279d\u00f8s\u01dds \u00f8nl\u028e.", "Allow others to distribute derivative works only under a license identical to the license that governs your work. This option is incompatible with \"No Derivatives\".": "\u023all\u00f8\u028d \u00f8\u0287\u0265\u01dd\u0279s \u0287\u00f8 d\u1d09s\u0287\u0279\u1d09bn\u0287\u01dd d\u01dd\u0279\u1d09\u028c\u0250\u0287\u1d09\u028c\u01dd \u028d\u00f8\u0279\u029es \u00f8nl\u028e nnd\u01dd\u0279 \u0250 l\u1d09\u0254\u01ddns\u01dd \u1d09d\u01ddn\u0287\u1d09\u0254\u0250l \u0287\u00f8 \u0287\u0265\u01dd l\u1d09\u0254\u01ddns\u01dd \u0287\u0265\u0250\u0287 \u0183\u00f8\u028c\u01dd\u0279ns \u028e\u00f8n\u0279 \u028d\u00f8\u0279\u029e. \u0166\u0265\u1d09s \u00f8d\u0287\u1d09\u00f8n \u1d09s \u1d09n\u0254\u00f8\u026fd\u0250\u0287\u1d09bl\u01dd \u028d\u1d09\u0287\u0265 \"N\u00f8 \u0110\u01dd\u0279\u1d09\u028c\u0250\u0287\u1d09\u028c\u01dds\".", "Allow students to generate certificates for this course?": "\u023all\u00f8\u028d s\u0287nd\u01ddn\u0287s \u0287\u00f8 \u0183\u01ddn\u01dd\u0279\u0250\u0287\u01dd \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds \u025f\u00f8\u0279 \u0287\u0265\u1d09s \u0254\u00f8n\u0279s\u01dd?", + "Allowance Type": "\u023all\u00f8\u028d\u0250n\u0254\u01dd \u0166\u028ed\u01dd", + "Allowance Value": "\u023all\u00f8\u028d\u0250n\u0254\u01dd V\u0250ln\u01dd", + "Allowances": "\u023all\u00f8\u028d\u0250n\u0254\u01dds", "Already a course team member": "\u023al\u0279\u01dd\u0250d\u028e \u0250 \u0254\u00f8n\u0279s\u01dd \u0287\u01dd\u0250\u026f \u026f\u01dd\u026fb\u01dd\u0279", "Already a library team member": "\u023al\u0279\u01dd\u0250d\u028e \u0250 l\u1d09b\u0279\u0250\u0279\u028e \u0287\u01dd\u0250\u026f \u026f\u01dd\u026fb\u01dd\u0279", "Already a member": "\u023al\u0279\u01dd\u0250d\u028e \u0250 \u026f\u01dd\u026fb\u01dd\u0279", @@ -398,6 +404,7 @@ "Commentary": "\u023b\u00f8\u026f\u026f\u01ddn\u0287\u0250\u0279\u028e", "Common Problem Types": "\u023b\u00f8\u026f\u026f\u00f8n \u2c63\u0279\u00f8bl\u01dd\u026f \u0166\u028ed\u01dds", "Community TA": "\u023b\u00f8\u026f\u026fnn\u1d09\u0287\u028e \u0166\u023a", + "Completed At": "\u023b\u00f8\u026fdl\u01dd\u0287\u01ddd \u023a\u0287", "Component": "\u023b\u00f8\u026fd\u00f8n\u01ddn\u0287", "Configure": "\u023b\u00f8n\u025f\u1d09\u0183n\u0279\u01dd", "Confirm": "\u023b\u00f8n\u025f\u1d09\u0279\u026f", @@ -640,6 +647,8 @@ "Error: User '<%= username %>' has not yet activated their account. Users must create and activate their accounts before they can be assigned a role.": "\u0246\u0279\u0279\u00f8\u0279: \u0244s\u01dd\u0279 '<%= username %>' \u0265\u0250s n\u00f8\u0287 \u028e\u01dd\u0287 \u0250\u0254\u0287\u1d09\u028c\u0250\u0287\u01ddd \u0287\u0265\u01dd\u1d09\u0279 \u0250\u0254\u0254\u00f8nn\u0287. \u0244s\u01dd\u0279s \u026fns\u0287 \u0254\u0279\u01dd\u0250\u0287\u01dd \u0250nd \u0250\u0254\u0287\u1d09\u028c\u0250\u0287\u01dd \u0287\u0265\u01dd\u1d09\u0279 \u0250\u0254\u0254\u00f8nn\u0287s b\u01dd\u025f\u00f8\u0279\u01dd \u0287\u0265\u01dd\u028e \u0254\u0250n b\u01dd \u0250ss\u1d09\u0183n\u01ddd \u0250 \u0279\u00f8l\u01dd.", "Error: You cannot remove yourself from the Instructor group!": "\u0246\u0279\u0279\u00f8\u0279: \u024e\u00f8n \u0254\u0250nn\u00f8\u0287 \u0279\u01dd\u026f\u00f8\u028c\u01dd \u028e\u00f8n\u0279s\u01ddl\u025f \u025f\u0279\u00f8\u026f \u0287\u0265\u01dd \u0197ns\u0287\u0279n\u0254\u0287\u00f8\u0279 \u0183\u0279\u00f8nd!", "Errors": "\u0246\u0279\u0279\u00f8\u0279s", + "Exam Name": "\u0246x\u0250\u026f N\u0250\u026f\u01dd", + "Exam Type": "\u0246x\u0250\u026f \u0166\u028ed\u01dd", "Exception Granted": "\u0246x\u0254\u01ddd\u0287\u1d09\u00f8n \u01e4\u0279\u0250n\u0287\u01ddd", "Exit full browser": "\u0246x\u1d09\u0287 \u025fnll b\u0279\u00f8\u028ds\u01dd\u0279", "Expand All": "\u0246xd\u0250nd \u023all", @@ -649,6 +658,7 @@ "Explanation": "\u0246xdl\u0250n\u0250\u0287\u1d09\u00f8n", "Explicitly Hiding from Students": "\u0246xdl\u1d09\u0254\u1d09\u0287l\u028e \u0126\u1d09d\u1d09n\u0183 \u025f\u0279\u00f8\u026f S\u0287nd\u01ddn\u0287s", "Explore New XSeries": "\u0246xdl\u00f8\u0279\u01dd N\u01dd\u028d XS\u01dd\u0279\u1d09\u01dds", + "Explore XSeries Programs": "\u0246xdl\u00f8\u0279\u01dd XS\u01dd\u0279\u1d09\u01dds \u2c63\u0279\u00f8\u0183\u0279\u0250\u026fs", "Explore your course!": "\u0246xdl\u00f8\u0279\u01dd \u028e\u00f8n\u0279 \u0254\u00f8n\u0279s\u01dd!", "Failed to delete student state.": "F\u0250\u1d09l\u01ddd \u0287\u00f8 d\u01ddl\u01dd\u0287\u01dd s\u0287nd\u01ddn\u0287 s\u0287\u0250\u0287\u01dd.", "Failed to rescore problem.": "F\u0250\u1d09l\u01ddd \u0287\u00f8 \u0279\u01dds\u0254\u00f8\u0279\u01dd d\u0279\u00f8bl\u01dd\u026f.", @@ -691,6 +701,7 @@ "Generate Exception Certificates": "\u01e4\u01ddn\u01dd\u0279\u0250\u0287\u01dd \u0246x\u0254\u01ddd\u0287\u1d09\u00f8n \u023b\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds", "Generate a Certificate for all users on the Exception list": "\u01e4\u01ddn\u01dd\u0279\u0250\u0287\u01dd \u0250 \u023b\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd \u025f\u00f8\u0279 \u0250ll ns\u01dd\u0279s \u00f8n \u0287\u0265\u01dd \u0246x\u0254\u01ddd\u0287\u1d09\u00f8n l\u1d09s\u0287", "Generate certificates for all users on the Exception list for whom certificates have not yet been run": "\u01e4\u01ddn\u01dd\u0279\u0250\u0287\u01dd \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds \u025f\u00f8\u0279 \u0250ll ns\u01dd\u0279s \u00f8n \u0287\u0265\u01dd \u0246x\u0254\u01ddd\u0287\u1d09\u00f8n l\u1d09s\u0287 \u025f\u00f8\u0279 \u028d\u0265\u00f8\u026f \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds \u0265\u0250\u028c\u01dd n\u00f8\u0287 \u028e\u01dd\u0287 b\u01dd\u01ddn \u0279nn", + "Generate certificates for all users on the Exception list who do not yet have a certificate": "\u01e4\u01ddn\u01dd\u0279\u0250\u0287\u01dd \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds \u025f\u00f8\u0279 \u0250ll ns\u01dd\u0279s \u00f8n \u0287\u0265\u01dd \u0246x\u0254\u01ddd\u0287\u1d09\u00f8n l\u1d09s\u0287 \u028d\u0265\u00f8 d\u00f8 n\u00f8\u0287 \u028e\u01dd\u0287 \u0265\u0250\u028c\u01dd \u0250 \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd", "Generate the user's certificate": "\u01e4\u01ddn\u01dd\u0279\u0250\u0287\u01dd \u0287\u0265\u01dd ns\u01dd\u0279's \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd", "Get Credit": "\u01e4\u01dd\u0287 \u023b\u0279\u01ddd\u1d09\u0287", "Go to Dashboard": "\u01e4\u00f8 \u0287\u00f8 \u0110\u0250s\u0265b\u00f8\u0250\u0279d", @@ -1227,6 +1238,7 @@ "Sorted by": "S\u00f8\u0279\u0287\u01ddd b\u028e", "Source": "S\u00f8n\u0279\u0254\u01dd", "Source code": "S\u00f8n\u0279\u0254\u01dd \u0254\u00f8d\u01dd", + "Special Exam": "Sd\u01dd\u0254\u1d09\u0250l \u0246x\u0250\u026f", "Special character": "Sd\u01dd\u0254\u1d09\u0250l \u0254\u0265\u0250\u0279\u0250\u0254\u0287\u01dd\u0279", "Specify an alternative to the official course title to display on certificates. Leave blank to use the official course title.": "Sd\u01dd\u0254\u1d09\u025f\u028e \u0250n \u0250l\u0287\u01dd\u0279n\u0250\u0287\u1d09\u028c\u01dd \u0287\u00f8 \u0287\u0265\u01dd \u00f8\u025f\u025f\u1d09\u0254\u1d09\u0250l \u0254\u00f8n\u0279s\u01dd \u0287\u1d09\u0287l\u01dd \u0287\u00f8 d\u1d09sdl\u0250\u028e \u00f8n \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds. \u0141\u01dd\u0250\u028c\u01dd bl\u0250n\u029e \u0287\u00f8 ns\u01dd \u0287\u0265\u01dd \u00f8\u025f\u025f\u1d09\u0254\u1d09\u0250l \u0254\u00f8n\u0279s\u01dd \u0287\u1d09\u0287l\u01dd.", "Specify any additional rules or rule exceptions that the proctoring review team should enforce when reviewing the videos. For example, you could specify that calculators are allowed.": "Sd\u01dd\u0254\u1d09\u025f\u028e \u0250n\u028e \u0250dd\u1d09\u0287\u1d09\u00f8n\u0250l \u0279nl\u01dds \u00f8\u0279 \u0279nl\u01dd \u01ddx\u0254\u01ddd\u0287\u1d09\u00f8ns \u0287\u0265\u0250\u0287 \u0287\u0265\u01dd d\u0279\u00f8\u0254\u0287\u00f8\u0279\u1d09n\u0183 \u0279\u01dd\u028c\u1d09\u01dd\u028d \u0287\u01dd\u0250\u026f s\u0265\u00f8nld \u01ddn\u025f\u00f8\u0279\u0254\u01dd \u028d\u0265\u01ddn \u0279\u01dd\u028c\u1d09\u01dd\u028d\u1d09n\u0183 \u0287\u0265\u01dd \u028c\u1d09d\u01dd\u00f8s. F\u00f8\u0279 \u01ddx\u0250\u026fdl\u01dd, \u028e\u00f8n \u0254\u00f8nld sd\u01dd\u0254\u1d09\u025f\u028e \u0287\u0265\u0250\u0287 \u0254\u0250l\u0254nl\u0250\u0287\u00f8\u0279s \u0250\u0279\u01dd \u0250ll\u00f8\u028d\u01ddd.", @@ -1247,6 +1259,7 @@ "Start regenerating certificates for students in this course?": "S\u0287\u0250\u0279\u0287 \u0279\u01dd\u0183\u01ddn\u01dd\u0279\u0250\u0287\u1d09n\u0183 \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds \u025f\u00f8\u0279 s\u0287nd\u01ddn\u0287s \u1d09n \u0287\u0265\u1d09s \u0254\u00f8n\u0279s\u01dd?", "Start search": "S\u0287\u0250\u0279\u0287 s\u01dd\u0250\u0279\u0254\u0265", "Start working toward your next learning goal.": "S\u0287\u0250\u0279\u0287 \u028d\u00f8\u0279\u029e\u1d09n\u0183 \u0287\u00f8\u028d\u0250\u0279d \u028e\u00f8n\u0279 n\u01ddx\u0287 l\u01dd\u0250\u0279n\u1d09n\u0183 \u0183\u00f8\u0250l.", + "Started At": "S\u0287\u0250\u0279\u0287\u01ddd \u023a\u0287", "Started entrance exam rescore task for student '{student_id}'. Click the 'Show Background Task History for Student' button to see the status of the task.": "S\u0287\u0250\u0279\u0287\u01ddd \u01ddn\u0287\u0279\u0250n\u0254\u01dd \u01ddx\u0250\u026f \u0279\u01dds\u0254\u00f8\u0279\u01dd \u0287\u0250s\u029e \u025f\u00f8\u0279 s\u0287nd\u01ddn\u0287 '{student_id}'. \u023bl\u1d09\u0254\u029e \u0287\u0265\u01dd 'S\u0265\u00f8\u028d \u0243\u0250\u0254\u029e\u0183\u0279\u00f8nnd \u0166\u0250s\u029e \u0126\u1d09s\u0287\u00f8\u0279\u028e \u025f\u00f8\u0279 S\u0287nd\u01ddn\u0287' bn\u0287\u0287\u00f8n \u0287\u00f8 s\u01dd\u01dd \u0287\u0265\u01dd s\u0287\u0250\u0287ns \u00f8\u025f \u0287\u0265\u01dd \u0287\u0250s\u029e.", "Started rescore problem task for problem '<%= problem_id %>' and student '<%= student_id %>'. Click the 'Show Background Task History for Student' button to see the status of the task.": "S\u0287\u0250\u0279\u0287\u01ddd \u0279\u01dds\u0254\u00f8\u0279\u01dd d\u0279\u00f8bl\u01dd\u026f \u0287\u0250s\u029e \u025f\u00f8\u0279 d\u0279\u00f8bl\u01dd\u026f '<%= problem_id %>' \u0250nd s\u0287nd\u01ddn\u0287 '<%= student_id %>'. \u023bl\u1d09\u0254\u029e \u0287\u0265\u01dd 'S\u0265\u00f8\u028d \u0243\u0250\u0254\u029e\u0183\u0279\u00f8nnd \u0166\u0250s\u029e \u0126\u1d09s\u0287\u00f8\u0279\u028e \u025f\u00f8\u0279 S\u0287nd\u01ddn\u0287' bn\u0287\u0287\u00f8n \u0287\u00f8 s\u01dd\u01dd \u0287\u0265\u01dd s\u0287\u0250\u0287ns \u00f8\u025f \u0287\u0265\u01dd \u0287\u0250s\u029e.", "Starts": "S\u0287\u0250\u0279\u0287s", @@ -1437,6 +1450,7 @@ "This team is full.": "\u0166\u0265\u1d09s \u0287\u01dd\u0250\u026f \u1d09s \u025fnll.", "This thread is closed.": "\u0166\u0265\u1d09s \u0287\u0265\u0279\u01dd\u0250d \u1d09s \u0254l\u00f8s\u01ddd.", "Time Allotted (HH:MM):": "\u0166\u1d09\u026f\u01dd \u023all\u00f8\u0287\u0287\u01ddd (\u0126\u0126:MM):", + "Time Limit": "\u0166\u1d09\u026f\u01dd \u0141\u1d09\u026f\u1d09\u0287", "Time Sent": "\u0166\u1d09\u026f\u01dd S\u01ddn\u0287", "Time Sent:": "\u0166\u1d09\u026f\u01dd S\u01ddn\u0287:", "Timed": "\u0166\u1d09\u026f\u01ddd", @@ -1554,6 +1568,7 @@ "User": "\u0244s\u01dd\u0279", "User Email": "\u0244s\u01dd\u0279 \u0246\u026f\u0250\u1d09l", "Username": "\u0244s\u01dd\u0279n\u0250\u026f\u01dd", + "Username or Email": "\u0244s\u01dd\u0279n\u0250\u026f\u01dd \u00f8\u0279 \u0246\u026f\u0250\u1d09l", "Username or email address": "\u0244s\u01dd\u0279n\u0250\u026f\u01dd \u00f8\u0279 \u01dd\u026f\u0250\u1d09l \u0250dd\u0279\u01ddss", "Users": "\u0244s\u01dd\u0279s", "Users must create and activate their account before they can be promoted to beta tester.": "\u0244s\u01dd\u0279s \u026fns\u0287 \u0254\u0279\u01dd\u0250\u0287\u01dd \u0250nd \u0250\u0254\u0287\u1d09\u028c\u0250\u0287\u01dd \u0287\u0265\u01dd\u1d09\u0279 \u0250\u0254\u0254\u00f8nn\u0287 b\u01dd\u025f\u00f8\u0279\u01dd \u0287\u0265\u01dd\u028e \u0254\u0250n b\u01dd d\u0279\u00f8\u026f\u00f8\u0287\u01ddd \u0287\u00f8 b\u01dd\u0287\u0250 \u0287\u01dds\u0287\u01dd\u0279.", @@ -1561,6 +1576,7 @@ "Valid": "V\u0250l\u1d09d", "Validation Error": "V\u0250l\u1d09d\u0250\u0287\u1d09\u00f8n \u0246\u0279\u0279\u00f8\u0279", "Validation Error While Saving": "V\u0250l\u1d09d\u0250\u0287\u1d09\u00f8n \u0246\u0279\u0279\u00f8\u0279 W\u0265\u1d09l\u01dd S\u0250\u028c\u1d09n\u0183", + "Value": "V\u0250ln\u01dd", "Verification Checkpoint": "V\u01dd\u0279\u1d09\u025f\u1d09\u0254\u0250\u0287\u1d09\u00f8n \u023b\u0265\u01dd\u0254\u029ed\u00f8\u1d09n\u0287", "Verification Deadline": "V\u01dd\u0279\u1d09\u025f\u1d09\u0254\u0250\u0287\u1d09\u00f8n \u0110\u01dd\u0250dl\u1d09n\u01dd", "Verification checkpoint to be completed": "V\u01dd\u0279\u1d09\u025f\u1d09\u0254\u0250\u0287\u1d09\u00f8n \u0254\u0265\u01dd\u0254\u029ed\u00f8\u1d09n\u0287 \u0287\u00f8 b\u01dd \u0254\u00f8\u026fdl\u01dd\u0287\u01ddd", @@ -1652,6 +1668,7 @@ "Will Be Visible To:": "W\u1d09ll \u0243\u01dd V\u1d09s\u1d09bl\u01dd \u0166\u00f8:", "Words: {0}": "W\u00f8\u0279ds: {0}", "Would you like to sign in using your %(providerName)s credentials?": "W\u00f8nld \u028e\u00f8n l\u1d09\u029e\u01dd \u0287\u00f8 s\u1d09\u0183n \u1d09n ns\u1d09n\u0183 \u028e\u00f8n\u0279 %(providerName)s \u0254\u0279\u01ddd\u01ddn\u0287\u1d09\u0250ls?", + "XSeries Program Certificates": "XS\u01dd\u0279\u1d09\u01dds \u2c63\u0279\u00f8\u0183\u0279\u0250\u026f \u023b\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds", "Year of Birth": "\u024e\u01dd\u0250\u0279 \u00f8\u025f \u0243\u1d09\u0279\u0287\u0265", "Yes, allow edits to the active Certificate": "\u024e\u01dds, \u0250ll\u00f8\u028d \u01ddd\u1d09\u0287s \u0287\u00f8 \u0287\u0265\u01dd \u0250\u0254\u0287\u1d09\u028c\u01dd \u023b\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd", "Yes, delete this %(xblock_type)s": "\u024e\u01dds, d\u01ddl\u01dd\u0287\u01dd \u0287\u0265\u1d09s %(xblock_type)s", @@ -1664,6 +1681,7 @@ "You are currently sharing a limited profile.": "\u024e\u00f8n \u0250\u0279\u01dd \u0254n\u0279\u0279\u01ddn\u0287l\u028e s\u0265\u0250\u0279\u1d09n\u0183 \u0250 l\u1d09\u026f\u1d09\u0287\u01ddd d\u0279\u00f8\u025f\u1d09l\u01dd.", "You are enrolling in: {courseName}": "\u024e\u00f8n \u0250\u0279\u01dd \u01ddn\u0279\u00f8ll\u1d09n\u0183 \u1d09n: {courseName}", "You are not currently a member of any team.": "\u024e\u00f8n \u0250\u0279\u01dd n\u00f8\u0287 \u0254n\u0279\u0279\u01ddn\u0287l\u028e \u0250 \u026f\u01dd\u026fb\u01dd\u0279 \u00f8\u025f \u0250n\u028e \u0287\u01dd\u0250\u026f.", + "You are not enrolled in any XSeries Programs yet.": "\u024e\u00f8n \u0250\u0279\u01dd n\u00f8\u0287 \u01ddn\u0279\u00f8ll\u01ddd \u1d09n \u0250n\u028e XS\u01dd\u0279\u1d09\u01dds \u2c63\u0279\u00f8\u0183\u0279\u0250\u026fs \u028e\u01dd\u0287.", "You are now enrolled as a verified student for:": "\u024e\u00f8n \u0250\u0279\u01dd n\u00f8\u028d \u01ddn\u0279\u00f8ll\u01ddd \u0250s \u0250 \u028c\u01dd\u0279\u1d09\u025f\u1d09\u01ddd s\u0287nd\u01ddn\u0287 \u025f\u00f8\u0279:", "You are upgrading your enrollment for: {courseName}": "\u024e\u00f8n \u0250\u0279\u01dd nd\u0183\u0279\u0250d\u1d09n\u0183 \u028e\u00f8n\u0279 \u01ddn\u0279\u00f8ll\u026f\u01ddn\u0287 \u025f\u00f8\u0279: {courseName}", "You can now enter your payment information and complete your enrollment.": "\u024e\u00f8n \u0254\u0250n n\u00f8\u028d \u01ddn\u0287\u01dd\u0279 \u028e\u00f8n\u0279 d\u0250\u028e\u026f\u01ddn\u0287 \u1d09n\u025f\u00f8\u0279\u026f\u0250\u0287\u1d09\u00f8n \u0250nd \u0254\u00f8\u026fdl\u01dd\u0287\u01dd \u028e\u00f8n\u0279 \u01ddn\u0279\u00f8ll\u026f\u01ddn\u0287.", @@ -1759,6 +1777,8 @@ "asset_path is required": "\u0250ss\u01dd\u0287_d\u0250\u0287\u0265 \u1d09s \u0279\u01ddbn\u1d09\u0279\u01ddd", "bytes": "b\u028e\u0287\u01dds", "certificate": "\u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd", + "certificate.credential_url": "\u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd.\u0254\u0279\u01ddd\u01ddn\u0287\u1d09\u0250l_n\u0279l", + "certificate.display_name": "\u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd.d\u1d09sdl\u0250\u028e_n\u0250\u026f\u01dd", "close": "\u0254l\u00f8s\u01dd", "content group": "\u0254\u00f8n\u0287\u01ddn\u0287 \u0183\u0279\u00f8nd", "correct": "\u0254\u00f8\u0279\u0279\u01dd\u0254\u0287", @@ -1794,6 +1814,7 @@ "marked as answer %(time_ago)s": "\u026f\u0250\u0279\u029e\u01ddd \u0250s \u0250ns\u028d\u01dd\u0279 %(time_ago)s", "marked as answer %(time_ago)s by %(user)s": "\u026f\u0250\u0279\u029e\u01ddd \u0250s \u0250ns\u028d\u01dd\u0279 %(time_ago)s b\u028e %(user)s", "message": "\u026f\u01ddss\u0250\u0183\u01dd", + "minutes": "\u026f\u1d09nn\u0287\u01dds", "name": "n\u0250\u026f\u01dd", "off": "\u00f8\u025f\u025f", "on": "\u00f8n", diff --git a/lms/static/js/i18n/fr/djangojs.js b/lms/static/js/i18n/fr/djangojs.js index a03e281f7c..34f74e9ec6 100644 --- a/lms/static/js/i18n/fr/djangojs.js +++ b/lms/static/js/i18n/fr/djangojs.js @@ -125,7 +125,6 @@ "Account Settings page.": "Param\u00e8tres du compte", "Actions": "Actions", "Activate Your Account": "Activez votre compte", - "Activating an item in this group will spool the video to the corresponding time point. To skip transcript, go to previous item.": "L'activation d'un \u00e9l\u00e9ment de ce groupe jouera la vid\u00e9o \u00e0 partir de ce point. Pour passer la transcription, allez \u00e0 l'\u00e9l\u00e9ment pr\u00e9c\u00e9dent.", "Active Uploads": "T\u00e9l\u00e9chargement Actifs", "Add Cohort": "Ajouter une cohorte", "Add Component:": "Ajouter un composant :", @@ -649,14 +648,12 @@ "Only <%= fileTypes %> files can be uploaded. Please select a file ending in <%= fileExtensions %> to upload.": "Seuls les fichiers de type <%= fileTypes %> peuvent \u00eatre envoy\u00e9s. Merci de s\u00e9lectionner un fichier se terminant par <%= fileExtensions %> pour l'envoyer.", "Only properly formatted .csv files will be accepted.": "Seuls les fichiers au format .csv seront accept\u00e9s.", "Open Calculator": "Afficher la calculatrice", - "Open language menu": "Ouvrir le menu des langues", "Open/download this file": "Ouvrir/T\u00e9l\u00e9charger ce fichier", "OpenAssessment Save Error": "Erreur de la sauvegarde d'OpenAssessment", "Order No.": "Commande N\u00b0", "Organization": "Organisation", "Other": "Autre", "Page break": "Saut de page", - "Page number": "Num\u00e9ro de page", "Paragraph": "Paragraphe", "Password": "Mot de passe", "Password Reset Email Sent": "L'email de r\u00e9initialisation du mot de passe a \u00e9t\u00e9 envoy\u00e9", @@ -890,7 +887,6 @@ "Text": "Texte", "Text color": "Couleur du texte", "Text to display": "Texte \u00e0 afficher", - "Thank you! We have received your payment for %(courseName)s.": "Merci ! Nous avons re\u00e7u votre paiement pour %(courseName)s.", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre une adresse e-mail. Voulez-vous ajouter le prefix requis mailto: ?", "The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre un lien externe. Voulez-vous ajouter le pr\u00e9fixe http:// requis ?", "The cohort cannot be added": "La cohorte ne peut pas \u00eatre ajout\u00e9e", @@ -958,7 +954,6 @@ ], "This browser cannot play .mp4, .ogg, or .webm files.": "Ce navigateur ne peut pas lire les fichiers .mp4, .ogg, ou .webm", "This component has validation issues.": "Ce composant a des probl\u00e8mes de validation.", - "This edX learner is currently sharing a limited profile.": "Cette utilisateur partage actuellement un profil restreint.", "This learner will be removed from the team, allowing another learner to take the available spot.": "Cet apprenant sera supprim\u00e9 de l'\u00e9quipe, permettant \u00e0 un nouvel apprenant de prendre la place vacante.", "This link will open in a modal window": "Ce lien s'ouvrira dans une nouvelle fen\u00eatre contextuelle", "This link will open in a new browser window/tab": "Ce lien s'ouvrira dans une nouvelle fen\u00eatre ou onglet de votre navigateur", @@ -1096,7 +1091,6 @@ "You are about to send an email titled '<%= subject %>' to everyone who is staff or instructor on this course. Is this OK?": "Vous \u00eates sur le point d'envoyer un e-mail intitul\u00e9 '<%= subject %>' \u00e0 tous les membres du staff et enseignants. Voulez-vous continuer ?", "You are about to send an email titled '<%= subject %>' to yourself. Is this OK?": "Vous \u00eates sur le point d'envoyer un e-mail intitul\u00e9 '<%= subject %>' \u00e0 vous-m\u00eame. Voulez-vous continuer ?", "You are currently sharing a limited profile.": "Vous partagez actuellement votre profil restreint.", - "You are enrolling in: %(courseName)s": "Vous vous inscrivez \u00e0 : %(courseName)s", "You are not currently a member of any team.": "Actuellement, vous n'\u00eates membre d'aucune \u00e9quipe.", "You are now enrolled as a verified student for:": "Vous vous \u00eates maintenant engag\u00e9 en tant qu'\u00e9tudiant v\u00e9rifi\u00e9 pour :", "You can now enter your payment information and complete your enrollment.": "Vous pouvez maintenant entrer vos informations de paiement et terminer votre inscription.", @@ -1151,7 +1145,6 @@ "Your request could not be completed. Reload the page and try again.": "Votre demande n'a pas pu \u00eatre r\u00e9alis\u00e9e. Rafra\u00eechissez la page et r\u00e9essayez.", "Your upload of '{file}' failed.": "Le chargement de '{file}' a \u00e9chou\u00e9.", "Your upload of '{file}' succeeded.": "Chargement de '{file}' r\u00e9ussi.", - "Your verification status is good until %(verificationGoodUntil)s.": "Votre v\u00e9rification est valable jusqu'au %(verificationGoodUntil)s.", "Zoom In": "Zoomer", "Zoom Out": "D\u00e9zoomer ", "[no tags]": "[aucun tag]", diff --git a/lms/static/js/i18n/ko-kr/djangojs.js b/lms/static/js/i18n/ko-kr/djangojs.js index 9adef59bb6..d6dd0c42c2 100644 --- a/lms/static/js/i18n/ko-kr/djangojs.js +++ b/lms/static/js/i18n/ko-kr/djangojs.js @@ -79,7 +79,6 @@ "About me": "\uc790\uae30\uc18c\uac1c", "Account Settings": "\uacc4\uc815 \uc124\uc815", "Account Settings page.": "\uacc4\uc815 \uc124\uc815 \ud398\uc774\uc9c0", - "Activating an item in this group will spool the video to the corresponding time point. To skip transcript, go to previous item.": "\uc774 \uadf8\ub8f9\uc758 \ud56d\ubaa9 \ud65c\uc131\ud654\uac00 \uc77c\uce58\ud558\ub294 \uc2dc\uac04 \uc9c0\uc810\uc5d0 \ub3d9\uc601\uc0c1\uc744 \uc2a4\ud480\ud560 \uac83\uc785\ub2c8\ub2e4. \uc790\ub9c9\uc744 \ub118\uae30\ub824\uba74, \uc774\uc804 \ud56d\ubaa9\uc73c\ub85c \uac00\uc138\uc694. ", "Add Cohort": "\ud559\uc2b5\uc9d1\ub2e8 \ucd94\uac00\ud558\uae30", "Add Country": "\uad6d\uac00 \ucd94\uac00", "Add Students": "\ud559\uc2b5\uc790 \ucd94\uac00", diff --git a/lms/static/js/i18n/pt-br/djangojs.js b/lms/static/js/i18n/pt-br/djangojs.js index f5ee13448c..c5a397ee16 100644 --- a/lms/static/js/i18n/pt-br/djangojs.js +++ b/lms/static/js/i18n/pt-br/djangojs.js @@ -129,7 +129,6 @@ "- Sortable": "- Classific\u00e1veis", "": "", "%s": "%s", - "
  • Transcript will be displayed when ": "
  • Transcri\u00e7\u00e3o ser\u00e1 exibida quando", "A driver's license, passport, or government-issued ID with your name and photo.": "Uma carteira de motorista, um passaporte ou um documento de identidade oficial com o seu nome e foto.", "A driver's license, passport, or other government-issued ID with your name and photo": "Uma carteira de motorista, um passaporte ou outro documento de identidade oficial com o seu nome e foto", "A list of courses you have just enrolled in as a verified student": "Lista de cursos para quais voc\u00ea se inscreveu como um aluno verificado", @@ -147,7 +146,6 @@ "Actions": "A\u00e7\u00f5es", "Activate": "Ativar", "Activate Your Account": "Ativar a sua conta", - "Activating an item in this group will spool the video to the corresponding time point. To skip transcript, go to previous item.": "Ativar um item nesse grupo vai mover o v\u00eddeo para o ponto no tempo correspondente. Para pular a transcri\u00e7\u00e3o, v\u00e1 at\u00e9 o item anterior.", "Active Threads": "T\u00f3picos ativos", "Active Uploads": "Uploads ativos", "Add": "Adicionar", @@ -310,7 +308,6 @@ "Change My Email Address": "Alterar meu endere\u00e7o de E-mail", "Change image": "Trocar imagem", "Change the settings for %(display_name)s": "Alterar configura\u00e7\u00f5es para %(display_name)s", - "Chapter %s": "Cap\u00edtulo %s", "Chapter Asset": "Ativo do Cap\u00edtulo", "Chapter Name": "Nome do Cap\u00edtulo", "Chapter information": "Informa\u00e7\u00e3o do cap\u00edtulo", @@ -654,7 +651,6 @@ "General": "Geral", "Generate": "Emitir", "Generate Exception Certificates": "Gerar certificados de exce\u00e7\u00e3o", - "Generate a Certificate for all ": "Gerar um Certificado para todos", "Generate a Certificate for all users on the Exception list": "Gerar um certificado para todos os usu\u00e1rios na lista de exce\u00e7\u00f5es", "Generate the user's certificate": "Emitir certificado do usu\u00e1rio", "Get Credit": "Obter Cr\u00e9dito", @@ -774,7 +770,6 @@ "Keywords": "Palavras-chave", "LEARN MORE": "APRENDER MAIS", "Language": "Idioma", - "Language: Press the UP arrow key to enter the language menu, then use UP and DOWN arrow keys to navigate language options. Press ENTER to change to the selected language.": "Idioma: Pressione a tecla UP para entrar no menu de idioma, ent\u00e3o pressione as teclas UP e DOWN para navegar nas op\u00e7\u00f5es de idioma. Pressione ENTER para mudar para o idioma selecionado.", "Large": "Grande", "Last Activity %(date)s": "\u00daltima atividade %(date)s", "Last Edited:": "\u00daltima Edi\u00e7\u00e3o:", @@ -862,7 +857,6 @@ "Name of the signatory": "Nome da assinatura", "Name or short description of the configuration": "Nome ou descri\u00e7\u00e3o curta da configura\u00e7\u00e3o", "Never published": "Nunca publicado", - "New": "Novo", "New %(component_type)s": "Novos %(component_type)s", "New %(item_type)s": "Novo %(item_type)s", "New Address": "Novo Endere\u00e7o", @@ -911,13 +905,10 @@ "Numbered list": "Lista numerada", "OK": "OK", "Ok": "Ok", - "Once in position, use the camera button %(icon)s to capture your ID": "Uma vez em posi\u00e7\u00e3o, utilize o bot\u00e3o da c\u00e2mera %(icon)s para tirar a foto da sua identidade.", - "Once in position, use the camera button %(icon)s to capture your photo": "Quando estiver na posi\u00e7\u00e3o, use o bot\u00e3o da c\u00e2mera %(icon)s para capturar a sua foto", "Only <%= fileTypes %> files can be uploaded. Please select a file ending in <%= fileExtensions %> to upload.": "Apenas arquivos <%= fileTypes %> podem ser enviados. Por favor selecione uma extens\u00e3o de arquivo finalizando em <%= fileExtensions %> para enviar.", "Only properly formatted .csv files will be accepted.": "Apenas arquivos .csv formatados corretamente ser\u00e3o aceitos.", "Open": "Abrir", "Open Calculator": "Abrir calculadora", - "Open language menu": "Abrir menu de idiomas", "Open/download this file": "Abrir/baixar este arquivo", "OpenAssessment Save Error": "Erro ao salvar o OpenAssessment", "Optional Characteristics": "Caracter\u00edsticas Opcionais", @@ -929,7 +920,6 @@ "Organization of the signatory": "Organiza\u00e7\u00e3o do signat\u00e1rio", "Other": "Outro", "Page break": "Quebra de p\u00e1gina", - "Page number": "N\u00famero da p\u00e1gina", "Paragraph": "Par\u00e1grafo", "Password": "Senha", "Password Reset Email Sent": "O e-mail para redefinir a senha foi enviado", @@ -1007,7 +997,6 @@ "Proctored": "Supervisionado", "Proctored Exam": "Exame supervisionado", "Proctored exams are timed and they record video of each learner taking the exam. The videos are then reviewed to ensure that learners follow all examination rules.": "Exames supervisionados s\u00e3o cronometrados e eles gravam um v\u00eddeo de cada aluno fazendo a prova. Os v\u00eddeos s\u00e3o ent\u00e3o revisados para garantir que os alunos sigam as regras do exame.", - "Professional Certificate for %(courseName)s": "Certificado profissional para %(courseName)s", "Professional Education": "Educa\u00e7\u00e3o Profissional", "Professional Education Verified Certificate": "Certificado verificado de profissional de educa\u00e7\u00e3o", "Profile Image": "Imagem do perfil", @@ -1260,9 +1249,7 @@ "Textbook name is required": "O nome do livro texto \u00e9 obrigat\u00f3rio", "Thank you for submitting your financial assistance application for {course_name}! You can expect a response in 2-4 business days.": "Agradecemos por nos enviar o seu pedido de assist\u00eancia financeira para {course_name}! Voc\u00ea pode esperar uma resposta entre 2-4 dias \u00fateis.", "Thank you for submitting your photos. We will review them shortly. You can now sign up for any %(platformName)s course that offers verified certificates. Verification is good for one year. After one year, you must submit photos for verification again.": "Obrigado por enviar suas fotos. N\u00f3s vamos analis\u00e1-las rapidamente. Voc\u00ea pode inscrever-se para qualquer curso da plataforma %(platformName)s que ofere\u00e7a certificados verificados. A verifica\u00e7\u00e3o \u00e9 v\u00e1lida por um ano. Depois disso, voc\u00ea precisa enviar fotos para verificar novamente.", - "Thank you! We have received your payment for %(courseName)s.": "Obrigado! N\u00f3s recebemos o seu pagamento para o curso %(courseName)s.", "Thank you! We have received your payment for %(course_name)s.": "Obrigado! Recebemos o seu pagamento para %(course_name)s.", - "Thanks for returning to verify your ID in: %(courseName)s": "Obrigado por retornar para verificar sua identidade em: %(courseName)s", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "A URL que voc\u00ea inseriu parece ser um endere\u00e7o de e-mail. Deseja adicionar o prefixo obrigat\u00f3rio mailto:? ", "The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "A URL que voc\u00ea inseriu parece ser um link externo. Deseja adicionar o prefixo obrigat\u00f3rio http://?", "The cohort cannot be added": "O grupo n\u00e3o pode ser adicionado", @@ -1351,7 +1338,6 @@ "This configuration is currently used in content experiments. If you make changes to the groups, you may need to edit those experiments.": "Essa configura\u00e7\u00e3o est\u00e1 sendo usada em experimentos de conte\u00fado. Se fizer altera\u00e7\u00f5es aos grupos, voc\u00ea vai precisar editar os experimentos.", "This content group is used in one or more units.": "Este grupo de conte\u00fado \u00e9 utilizado em uma ou mais unidades.", "This content group is used in:": "Esse grupo de conte\u00fado \u00e9 utilizado em:", - "This edX learner is currently sharing a limited profile.": "Este estudante da edX est\u00e1 atualmente compartilhando um perfil limitado.", "This is the Description of the Group Configuration": "Esta \u00e9 a Descri\u00e7\u00e3o da Configura\u00e7\u00e3o do Grupo", "This is the Name of the Group Configuration": "Este \u00e9 o Nome da Configura\u00e7\u00e3o do Grupo", "This is the name of the group": "Esse \u00e9 o nome do grupo", @@ -1385,7 +1371,6 @@ "To receive a certificate, you must also verify your identity before %(date)s.": "Para receber um certificado, voc\u00ea tamb\u00e9m deve verificar sua identidade antes de %(date)s.", "To receive a certificate, you must also verify your identity.": "Para receber um certificado, voc\u00ea tamb\u00e9m deve verificar a sua identidade.", "To take a successful photo, make sure that:": "Para tirar uma foto corretamente, certifique-se que:", - "To use the current photo, select the camera button %(icon)s. To take another photo, select the retake button %(icon)s.": "Para usar a foto atual, selecione o %(icon)s do bot\u00e3o da c\u00e2mera. Para tirar outra foto, selecione o %(icon)s do bot\u00e3o tirar novamente.", "To verify your identity, you need a webcam and a government-issued photo ID.": "Para verificar sua identidade, voc\u00ea precisa de uma webcam e um documento com foto emitido pelo governo.", "Toggle Notifications Setting": "Alterar Configura\u00e7\u00f5es de Notifica\u00e7\u00e3o", "Tools": "Ferramentas", @@ -1397,7 +1382,6 @@ "Total Number": "N\u00famero Total", "Try the transaction again in a few minutes.": "Tente fazer esta transa\u00e7\u00e3o novamente em alguns minutos.", "Try using a different browser, such as Google Chrome.": "Tente usar um navegador diferente, como o Google Chrome.", - "Turn off transcript": "Desativar transcri\u00e7\u00f5es", "Turn off transcripts": "Desligar legendas", "Turn on closed captioning": "Ativar as legendas ocultas", "Turn on transcripts": "Ativar legendas", @@ -1433,7 +1417,6 @@ "Update team.": "Atualizar equipe.", "Updating with latest library content": "Atualizando com o conte\u00fado mais recente da biblioteca", "Upgrade Deadline": "Prazo final para atualiza\u00e7\u00e3o", - "Upgrade to a Verified Certificate for %(courseName)s": "Atualizar para um Certificado Verificado de %(courseName)s", "Upload": "Enviar", "Upload File": "Carregar arquivo", "Upload File and Assign Students": "Fa\u00e7a o upload do arquivo e a atribui\u00e7\u00e3o de Alunos.", @@ -1482,7 +1465,6 @@ "Verification Deadline": "Prazo de verifica\u00e7\u00e3o", "Verification checkpoint to be completed": "Ponto de verifica\u00e7\u00e3o a completar", "Verified Certificate": "Certificado Verificado", - "Verified Certificate for %(courseName)s": "Certificado verificado para %(courseName)s", "Verified Certificate upgrade": "Atualiza\u00e7\u00e3o do certificado verificado", "Verified Status": "Status verificado", "Verified mode price": "Pre\u00e7o de modo verificado", @@ -1558,7 +1540,6 @@ "What does %(platformName)s do with this photo?": "O que %(platformName)s faz com esta foto?", "What does this mean?": "O que isso significa?", "When you click \"Reset Password\", a message will be sent to your email address. Click the link in the message to reset your password.": "Quando voc\u00ea clicar em \"Redefinir senha\", uma mensagem ser\u00e1 enviada para o seu endere\u00e7o de e-mail. Clique no link na mensagem para redefinir sua senha.", - "When your face is in position, use the camera button %(icon)s below to take your photo.": "Quando seu rosto estiver posicionado, use o %(icon)s do bot\u00e3o da c\u00e2mera abaixo para tirar sua foto.", "Which timed transcript would you like to use?": "Qual transcri\u00e7\u00e3o sincronizada voc\u00ea gostaria de utilizar?", "Whole words": "Palavras completas", "Why does %(platformName)s need my photo?": "Por que %(platformName)s precisa da minha foto?", @@ -1576,11 +1557,8 @@ "You are about to send an email titled '<%= subject %>' to everyone who is staff or instructor on this course. Is this OK?": "Voc\u00ea est\u00e1 prestes a enviar um email com o t\u00edtulo '<%= subject %>' para todos da equipe ou os instrutores deste curso. Tem certeza?", "You are about to send an email titled '<%= subject %>' to yourself. Is this OK?": "Voc\u00ea est\u00e1 prestes a enviar um email com o t\u00edtulo '<%= subject %>' para si mesmo. Tem certeza?", "You are currently sharing a limited profile.": "Voc\u00ea est\u00e1 compartilhando um perfil limitado no momento.", - "You are enrolling in %(courseName)s": "Voc\u00ea est\u00e1 se matriculando em %(courseName)s", - "You are enrolling in: %(courseName)s": "Voc\u00ea est\u00e1 se inscrevendo em: %(courseName)s", "You are not currently a member of any team.": "No momento, voc\u00ea n\u00e3o \u00e9 membro de nenhuma equipe. ", "You are now enrolled as a verified student for:": "Voc\u00ea est\u00e1 inscrito como aluno verificado para:", - "You are upgrading your enrollment for: %(courseName)s": "Voc\u00ea est\u00e1 atualizando sua matr\u00edcula para: %(courseName)s", "You can now enter your payment information and complete your enrollment.": "Voc\u00ea pode preencher agora as informa\u00e7\u00f5es sobre o pagamento e completar a sua matr\u00edcula", "You can pay now even if you don't have the following items available, but you will need to have these by %(date)s to qualify to earn a Verified Certificate.": "Voc\u00ea pode pagar agora, mesmo que n\u00e3o tenha nenhum dos seguintes itens dispon\u00edveis, mas voc\u00ea ter\u00e1 que t\u00ea-los at\u00e9 %(date)s para se qualificar para um Certificado Verificado.", "You can pay now even if you don't have the following items available, but you will need to have these to qualify to earn a Verified Certificate.": "Voc\u00ea pode pagar agora, mesmo n\u00e3o tendo nenhum dos seguintes itens dispon\u00edveis, mas voc\u00ea ter\u00e1 que t\u00ea-los para se qualificar para um Certificado Verificado.", @@ -1652,7 +1630,6 @@ "Your team could not be updated.": "Sua equipe n\u00e3o p\u00f4de ser atualizada.", "Your upload of '{file}' failed.": "O carregamento do arquivo '{file}' falhou.", "Your upload of '{file}' succeeded.": "O carregamento do arquivo '{file}' foi conclu\u00eddo com sucesso.", - "Your verification status is good until %(verificationGoodUntil)s.": "Seu status de verifica\u00e7\u00e3o \u00e9 v\u00e1lido at\u00e9 %(verificationGoodUntil)s.", "Your video uploads are not complete.": "Os seus uploads de v\u00eddeo n\u00e3o est\u00e3o completos.", "Zoom In": "Aumentar a tela", "Zoom Out": "Diminuir a tela", @@ -1666,7 +1643,6 @@ "about a month": "aproximadamente um m\u00eas", "about a year": "aproximadamente um ano", "about an hour": "aproximadamente uma hora", - "additions to the Exception list": "adi\u00e7\u00f5es \u00e0 lista de exce\u00e7\u00e3o", "and others": "e outros", "anonymous": "an\u00f4nimo", "answer": "resposta", @@ -1713,7 +1689,6 @@ "or": "ou", "or create a new one here": "ou criar uma nova aqui", "or sign in with": "ou entrar com", - "path/to/introductionToCookieBaking-CH%d.pdf": "path/to/introductionToCookieBaking-CH%d.pdf", "post anonymously": "publicar anonimamente", "post anonymously to classmates": "publicar anonimamente para os colegas da turma", "posted %(time_ago)s by %(author)s": "postado %(time_ago)s por %(author)s", diff --git a/lms/static/js/i18n/ru/djangojs.js b/lms/static/js/i18n/ru/djangojs.js index b43e9dca0e..50ec9e152e 100644 --- a/lms/static/js/i18n/ru/djangojs.js +++ b/lms/static/js/i18n/ru/djangojs.js @@ -177,7 +177,6 @@ "<%= user %> has been successfully added to the exception list. Click Generate Exception Certificate below to send the certificate.": "<%= user %> \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d. \u0414\u043b\u044f \u0432\u044b\u0434\u0430\u0447\u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u00ab\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0434\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432\u00bb.", "": "", "%s": "%s", - "
  • Transcript will be displayed when ": "
  • \u041e\u0446\u0435\u043d\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b, \u043a\u043e\u0433\u0434\u0430", "A driver's license, passport, or government-issued ID with your name and photo.": "\u0412\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d\u0438\u0435, \u043f\u0430\u0441\u043f\u043e\u0440\u0442 \u0438\u043b\u0438 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d\u0438\u0435 \u043b\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0446\u0430 \u0441 \u0432\u0430\u0448\u0438\u043c\u0438 \u0438\u043c\u0435\u043d\u0435\u043c \u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0435\u0439.", "A driver's license, passport, or other government-issued ID with your name and photo": "\u0412\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d\u0438\u0435, \u043f\u0430\u0441\u043f\u043e\u0440\u0442 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0446\u0430 \u0441 \u0432\u0430\u0448\u0438\u043c\u0438 \u0438\u043c\u0435\u043d\u0435\u043c \u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0435\u0439", "A list of courses you have just enrolled in as a verified student": "\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u0443\u0440\u0441\u043e\u0432, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u0447\u0438\u0441\u043b\u0435\u043d\u044b", @@ -196,7 +195,6 @@ "Actions": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f", "Activate": "\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c", "Activate Your Account": "\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0439\u0442\u0435 \u0421\u0432\u043e\u044e \u0423\u0447\u0451\u0442\u043d\u0443\u044e \u0417\u0430\u043f\u0438\u0441\u044c", - "Activating an item in this group will spool the video to the corresponding time point. To skip transcript, go to previous item.": "\u041f\u0440\u0438 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u043f\u0443\u043d\u043a\u0442\u0430 \u0432 \u044d\u0442\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u043f\u0435\u0440\u0435\u043c\u043e\u0442\u043a\u0430 \u0432\u0438\u0434\u0435\u043e \u043a \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u0435. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0442\u0438\u0442\u0440\u044b, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u043f\u0443\u043d\u043a\u0442\u0443.", "Active Threads": "\u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0442\u0435\u043c\u044b", "Active Uploads": "\u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438", "Add": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c", @@ -363,7 +361,6 @@ "Change My Email Address": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b", "Change image": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435", "Change the settings for %(display_name)s": "%(display_name)s: \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 ", - "Chapter %s": "\u0413\u043b\u0430\u0432\u0430 %s", "Chapter Asset": "\u0410\u043a\u0442\u0438\u0432 \u0433\u043b\u0430\u0432\u044b", "Chapter Name": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0433\u043b\u0430\u0432\u044b", "Chapter information": "\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0433\u043b\u0430\u0432\u0435", @@ -720,7 +717,6 @@ "General": "\u041e\u0431\u0449\u0435\u0435", "Generate": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c", "Generate Exception Certificates": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0434\u043b\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432", - "Generate a Certificate for all ": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0434\u043b\u044f \u0432\u0441\u0435\u0445", "Generate a Certificate for all users on the Exception list": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439", "Generate the user's certificate": "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442", "Get Credit": "\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u0430\u0447\u0451\u0442", @@ -843,7 +839,6 @@ "Keywords": "\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430", "LEARN MORE": "\u041f\u041e\u0414\u0420\u041e\u0411\u041d\u0415\u0415", "Language": "\u042f\u0437\u044b\u043a", - "Language: Press the UP arrow key to enter the language menu, then use UP and DOWN arrow keys to navigate language options. Press ENTER to change to the selected language.": "\u042f\u0437\u044b\u043a: \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u0441\u043e \u0441\u0442\u0440\u0435\u043b\u043a\u043e\u0439 \u0432\u0432\u0435\u0440\u0445 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u044f\u0437\u044b\u043a\u0430, \u0437\u0430\u0442\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u0432\u0432\u0435\u0440\u0445 \u0438 \u0432\u043d\u0438\u0437 \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043f\u043e \u043c\u0435\u043d\u044e. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 ENTER \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u0430.", "Large": "\u0411\u043e\u043b\u044c\u0448\u043e\u0439", "Last Activity %(date)s": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c %(date)s", "Last Edited:": "\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f", @@ -937,7 +932,6 @@ "Name of the signatory": "\u0418\u043c\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f, \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442", "Name or short description of the configuration": "\u0418\u043c\u044f \u0438 \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0433\u0440\u0443\u043f\u043f", "Never published": "\u0420\u0430\u043d\u0435\u0435 \u043d\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u043e\u0441\u044c", - "New": "\u041d\u043e\u0432\u044b\u0439", "New %(component_type)s": "\u041d\u043e\u0432\u044b\u0439 %(component_type)s", "New %(item_type)s": "\u041d\u043e\u0432\u0430\u044f %(item_type)s", "New Address": "\u041d\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441", @@ -987,13 +981,10 @@ "Numbered list": "\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a", "OK": "\u041e\u041a", "Ok": "\u041e\u043a", - "Once in position, use the camera button %(icon)s to capture your ID": "\u041a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442\u0435 \u0433\u043e\u0442\u043e\u0432\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u043a\u0430\u043c\u0435\u0440\u044b %(icon)s, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a \u0441\u0432\u043e\u0435\u0433\u043e \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d\u0438\u044f \u043b\u0438\u0447\u043d\u043e\u0441\u0442\u0438", - "Once in position, use the camera button %(icon)s to capture your photo": "\u041a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442\u0435 \u0433\u043e\u0442\u043e\u0432\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u043a\u0430\u043c\u0435\u0440\u044b %(icon)s, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a", "Only <%= fileTypes %> files can be uploaded. Please select a file ending in <%= fileExtensions %> to upload.": "\u0422\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u044b \u0442\u0438\u043f\u043e\u0432 <%= fileTypes %> \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c <%= fileExtensions %>.", "Only properly formatted .csv files will be accepted.": "\u0422\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b .csv \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u043d\u044f\u0442\u044b.", "Open": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c", "Open Calculator": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440", - "Open language menu": "\u0412\u044b\u0431\u043e\u0440 \u044f\u0437\u044b\u043a\u0430", "Open/download this file": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c/\u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0444\u0430\u0439\u043b", "OpenAssessment Save Error": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f OpenAssessment", "Optional Characteristics": "\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b", @@ -1005,7 +996,6 @@ "Organization of the signatory": "\u041c\u0435\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f, \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442", "Other": "\u0414\u0440\u0443\u0433\u043e\u0435", "Page break": "\u041a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b", - "Page number": "\u041d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b", "Paragraph": "\u0410\u0431\u0437\u0430\u0446", "Password": "\u041f\u0430\u0440\u043e\u043b\u044c", "Password Reset Email Sent": "\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e \u0441\u0431\u0440\u043e\u0441\u0443 \u043f\u0430\u0440\u043e\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b", @@ -1088,7 +1078,6 @@ "Proctored": "\u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u043e\u0435", "Proctored Exam": "\u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u043e\u0435 \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0435", "Proctored exams are timed and they record video of each learner taking the exam. The videos are then reviewed to ensure that learners follow all examination rules.": "\u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u0435 \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u043c \u0438\u0437 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u0432\u0435\u0434\u0451\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u043e\u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435. \u0417\u0430\u0442\u0435\u043c \u0432\u0438\u0434\u0435\u043e\u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0438 \u043f\u0440\u0430\u0432\u0438\u043b.", - "Professional Certificate for %(courseName)s": "\u0421\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 %(courseName)s", "Professional Education": "\u041f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435", "Professional Education Verified Certificate": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u043e \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438", "Profile Image": "\u0424\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f", @@ -1350,9 +1339,7 @@ "Textbook name is required": "\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u0430", "Thank you for submitting your financial assistance application for {course_name}! You can expect a response in 2-4 business days.": "\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u043c \u0432\u0430\u0441 \u0437\u0430 \u043f\u043e\u0434\u0430\u0447\u0443 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0433\u0440\u0430\u043d\u0442 \u043f\u043e \u043a\u0443\u0440\u0441\u0443 {course_name}! \u0412\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043e\u0442\u0432\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 2-4 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0434\u043d\u044f.", "Thank you for submitting your photos. We will review them shortly. You can now sign up for any %(platformName)s course that offers verified certificates. Verification is good for one year. After one year, you must submit photos for verification again.": "\u0421\u043f\u0430\u0441\u0438\u0431\u043e, \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0444\u043e\u0442\u043e! \u041c\u044b \u0441\u043a\u043e\u0440\u043e \u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c. \u0421\u0435\u0439\u0447\u0430\u0441 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 \u043a\u0443\u0440\u0441\u043e\u0432 %(platformName)s, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u044b\u0435 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b. \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043b\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0434\u0438\u043d \u0433\u043e\u0434. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0444\u043e\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e.", - "Thank you! We have received your payment for %(courseName)s.": "\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u043c \u0432\u0430\u0441! \u0412\u0430\u0448 \u043f\u043b\u0430\u0442\u0451\u0436 \u0437\u0430 \u043a\u0443\u0440\u0441 %(courseName)s \u043f\u043e\u043b\u0443\u0447\u0435\u043d.", "Thank you! We have received your payment for %(course_name)s.": "\u0421\u043f\u0430\u0441\u0438\u0431\u043e! \u0412\u0430\u0448 \u043f\u043b\u0430\u0442\u0451\u0436 \u043f\u043e \u043a\u0443\u0440\u0441\u0443 \u00ab%(course_name)s\u00bb \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d.", - "Thanks for returning to verify your ID in: %(courseName)s": "\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u043c \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432\u044b \u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0438 \u0441\u0432\u043e\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043a\u0443\u0440\u0441\u0435: %(courseName)s", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0410\u0434\u0440\u0435\u0441 URL, \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u0432\u0430\u043c\u0438, \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u00abmailto:\u00bb?", "The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "\u0410\u0434\u0440\u0435\u0441 URL, \u0432\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u0432\u0430\u043c\u0438, \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u0441\u044b\u043b\u043a\u0443. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u00abhttp://\u00bb?", "The certificate for this learner has been re-validated and the system is re-running the grade for this learner.": "\u0421\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043f\u0435\u0440\u0435\u0441\u0447\u0451\u0442 \u043e\u0446\u0435\u043d\u043a\u0438.", @@ -1447,7 +1434,6 @@ "This configuration is currently used in content experiments. If you make changes to the groups, you may need to edit those experiments.": "\u042d\u0442\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430.\u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u0433\u0440\u0443\u043f\u043f\u044b, \u0432\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b", "This content group is used in one or more units.": "\u042d\u0442\u0430 \u0433\u0440\u0443\u043f\u043f\u0430 \u043f\u043e \u0438\u0437\u0443\u0447\u0430\u0435\u043c\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u043c \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0431\u043b\u043e\u043a\u0430\u0445", "This content group is used in:": "\u042d\u0442\u0430 \u0433\u0440\u0443\u043f\u043f\u0430 \u043f\u043e \u0438\u0437\u0443\u0447\u0430\u0435\u043c\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0431\u043b\u043e\u043a\u0430\u0445:", - "This edX learner is currently sharing a limited profile.": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043b \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0432\u043e\u0435\u043c\u0443 \u043f\u0440\u043e\u0444\u0438\u043b\u044e.", "This image is for decorative purposes only and does not require a description.": "\u042d\u0442\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0446\u0435\u043b\u0435\u0439 \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f.", "This is the Description of the Group Configuration": "\u042d\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0433\u0440\u0443\u043f\u043f", "This is the Name of the Group Configuration": "\u042d\u0442\u043e \u0438\u043c\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0433\u0440\u0443\u043f\u043f", @@ -1483,7 +1469,6 @@ "To receive a certificate, you must also verify your identity.": "\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u043b\u0438\u0447\u043d\u043e\u0441\u0442\u044c.", "To receive credit on a problem, you must click \"Check\" or \"Final Check\" on it before you select \"End My Exam\".": "\u0427\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u0430 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u0447\u0451\u0442\u043d\u044b\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b, \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0436\u0430\u0442\u0438\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u00ab\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0441\u0434\u0430\u0447\u0443 \u044d\u043a\u0437\u0430\u043c\u0435\u043d\u0430\u00bb \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0436\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443 \u00ab\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u00bb \u0438\u043b\u0438 \u00ab\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c/\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u00bb \u0432 \u044d\u0442\u043e\u043c \u0437\u0430\u0434\u0430\u043d\u0438\u0438.", "To take a successful photo, make sure that:": "\u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u0434\u0430\u0447\u043d\u044b\u0439 \u0441\u043d\u0438\u043c\u043e\u043a, \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044c\u0442\u0435\u0441\u044c, \u0447\u0442\u043e:", - "To use the current photo, select the camera button %(icon)s. To take another photo, select the retake button %(icon)s.": "\u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044e, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043a\u0430\u043c\u0435\u0440\u044b %(icon)s. \u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044e, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u043f\u0435\u0440\u0435\u0441\u044a\u0451\u043c\u043a\u0438 %(icon)s.", "To verify your identity, you need a webcam and a government-issued photo ID.": "\u0414\u043b\u044f \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f, \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0432\u0435\u0431-\u043a\u0430\u043c\u0435\u0440\u0430 \u0438 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d\u0438\u0435 \u043b\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u0441 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0435\u0439: \u043f\u0430\u0441\u043f\u043e\u0440\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442.", "Toggle Notifications Setting": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439", "Tools": "\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b", @@ -1495,7 +1480,6 @@ "Total Number": "\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e", "Try the transaction again in a few minutes.": "\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0451 \u0440\u0430\u0437 \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043f\u043b\u0430\u0442\u0451\u0436 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435.", "Try using a different browser, such as Google Chrome.": "\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Google Chrome.", - "Turn off transcript": "\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043a\u0440\u0438\u043f\u0442", "Turn off transcripts": "\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043a\u0440\u0438\u043f\u0442\u044b", "Turn on closed captioning": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u044b", "Turn on transcripts": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043a\u0440\u0438\u043f\u0442\u044b", @@ -1532,7 +1516,6 @@ "Update team.": "\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b", "Updating with latest library content": "\u041f\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438", "Upgrade Deadline": "\u041f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0440\u043e\u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f", - "Upgrade to a Verified Certificate for %(courseName)s": "\u041f\u043e\u0432\u044b\u0441\u044c\u0442\u0435 \u0434\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 %(courseName)s", "Upload": "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c", "Upload File": "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0430\u0439\u043b", "Upload File and Assign Students": "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0430\u0439\u043b \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0445\u0441\u044f", @@ -1583,7 +1566,6 @@ "Verification Deadline": "\u0421\u0440\u043e\u043a \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f", "Verification checkpoint to be completed": "\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0439\u0442\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043b\u0438\u0447\u043d\u043e\u0441\u0442\u0438", "Verified Certificate": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442", - "Verified Certificate for %(courseName)s": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 %(courseName)s", "Verified Certificate upgrade": "\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430", "Verified Status": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0443\u0441", "Verified mode price": "\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430", @@ -1662,7 +1644,6 @@ "What does %(platformName)s do with this photo?": "\u0414\u043b\u044f \u0447\u0435\u0433\u043e %(platformName)s \u043d\u0443\u0436\u0435\u043d \u044d\u0442\u043e\u0442 \u0441\u043d\u0438\u043c\u043e\u043a?", "What does this mean?": "\u0427\u0442\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442?", "When you click \"Reset Password\", a message will be sent to your email address. Click the link in the message to reset your password.": "\u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u00ab\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c\u00bb \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0432\u0430\u0448\u0435\u0439 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u043b\u0430\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0432 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438.", - "When your face is in position, use the camera button %(icon)s below to take your photo.": "\u041a\u043e\u0433\u0434\u0430 \u0432\u0430\u0448\u0435 \u043b\u0438\u0446\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u043f\u0430\u0434\u0451\u0442 \u0432 \u043a\u0430\u0434\u0440, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u043d\u0438\u0436\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043a\u0430\u043c\u0435\u0440\u044b %(icon)s, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a.", "Which timed transcript would you like to use?": "\u041a\u0430\u043a\u0438\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u044b \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c?", "Whole words": "\u0421\u043b\u043e\u0432\u0430 \u0446\u0435\u043b\u0438\u043a\u043e\u043c", "Why does %(platformName)s need my photo?": "\u0417\u0430\u0447\u0435\u043c %(platformName)s \u043d\u0443\u0436\u043d\u0430 \u043c\u043e\u044f \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f?", @@ -1680,11 +1661,8 @@ "You are about to send an email titled '<%= subject %>' to everyone who is staff or instructor on this course. Is this OK?": "\u0412\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c '<%= subject %>' \u0432\u0441\u0435\u043c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c \u0438 \u043f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043a\u0443\u0440\u0441\u0430. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c?", "You are about to send an email titled '<%= subject %>' to yourself. Is this OK?": "\u0412\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c '<%= subject %>' \u043d\u0430 \u0441\u0432\u043e\u0439 \u0430\u0434\u0440\u0435\u0441. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c?", "You are currently sharing a limited profile.": "\u0421\u0435\u0439\u0447\u0430\u0441 \u0441\u043e\u043a\u0443\u0440\u0441\u043d\u0438\u043a\u0430\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0432\u0430\u0448\u0435\u043c\u0443 \u043f\u0440\u043e\u0444\u0438\u043b\u044e.", - "You are enrolling in %(courseName)s": "\u0412\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0435\u0441\u044c \u043d\u0430 \u043a\u0443\u0440\u0441: %(courseName)s", - "You are enrolling in: %(courseName)s": "\u0412\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0435\u0441\u044c \u043d\u0430 \u043a\u0443\u0440\u0441: %(courseName)s", "You are not currently a member of any team.": "\u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b \u043d\u0435 \u0432\u0445\u043e\u0434\u0438\u0442\u0435 \u0432 \u0441\u043e\u0441\u0442\u0430\u0432 \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.", "You are now enrolled as a verified student for:": "\u0412\u044b \u0437\u0430\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u0443\u0440\u0441\u044b:", - "You are upgrading your enrollment for: %(courseName)s": "\u0412\u044b \u043c\u0435\u043d\u044f\u0435\u0442\u0435 \u0444\u043e\u0440\u043c\u0443 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0430 \u043a\u0443\u0440\u0441: %(courseName)s", "You can now enter your payment information and complete your enrollment.": "\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0432\u0435\u0441\u0442\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043b\u0430\u0442\u0435\u0436\u0435 \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e.", "You can pay now even if you don't have the following items available, but you will need to have these by %(date)s to qualify to earn a Verified Certificate.": "\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0441\u0435\u0439\u0447\u0430\u0441, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438 \u0432\u0441\u0435 \u0448\u0430\u0433\u0438. \u041d\u043e \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0438\u0445 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043d\u0435 \u043f\u043e\u0437\u0434\u043d\u0435\u0435 %(date)s , \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442.", "You can pay now even if you don't have the following items available, but you will need to have these to qualify to earn a Verified Certificate.": "\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0441\u0435\u0439\u0447\u0430\u0441, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438 \u0432\u0441\u0435 \u0448\u0430\u0433\u0438. \u041d\u043e \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0438\u0445 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442.", @@ -1756,7 +1734,6 @@ "Your team could not be updated.": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0432\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.", "Your upload of '{file}' failed.": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 '{file}'", "Your upload of '{file}' succeeded.": "\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 '{file}' \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430", - "Your verification status is good until %(verificationGoodUntil)s.": "\u0412\u0430\u0448 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u043e %(verificationGoodUntil)s.", "Your video uploads are not complete.": "\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u0438\u0434\u0435\u043e \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430.", "Zoom In": "\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c", "Zoom Out": "\u041e\u0442\u0434\u0430\u043b\u0438\u0442\u044c", @@ -1772,7 +1749,6 @@ "about a month": "\u043e\u043a\u043e\u043b\u043e \u043c\u0435\u0441\u044f\u0446\u0430", "about a year": "\u043e\u043a\u043e\u043b\u043e \u0433\u043e\u0434\u0430", "about an hour": "\u043e\u043a\u043e\u043b\u043e \u0447\u0430\u0441\u0430", - "additions to the Exception list": "\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439", "and others": "\u0438 \u0434\u0440\u0443\u0433\u0438\u0435", "anonymous": "\u0430\u043d\u043e\u043d\u0438\u043c", "answer": "\u043e\u0442\u0432\u0435\u0442", @@ -1822,7 +1798,6 @@ "or": "\u0438\u043b\u0438", "or create a new one here": "\u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0432 \u044d\u0442\u043e\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u0435", "or sign in with": "\u0438\u043b\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e", - "path/to/introductionToCookieBaking-CH%d.pdf": "\u043f\u0443\u0442\u044c/\u043a/\u0432\u0432\u043e\u0434\u043d\u0430\u044f\u041f\u043e\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u044eCookie-\u0413\u041b%d.pdf", "post anonymously": "\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u043e", "post anonymously to classmates": "\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u0438\u043a\u043e\u0432", "posted %(time_ago)s by %(author)s": "\u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043e %(time_ago)s \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c %(author)s", diff --git a/lms/static/js/i18n/zh-cn/djangojs.js b/lms/static/js/i18n/zh-cn/djangojs.js index a21596d8db..768bd7d326 100644 --- a/lms/static/js/i18n/zh-cn/djangojs.js +++ b/lms/static/js/i18n/zh-cn/djangojs.js @@ -521,8 +521,6 @@ "Numbered list": "\u7f16\u53f7\u5217\u8868", "OK": "\u662f\u7684", "Ok": "\u786e\u5b9a", - "Once in position, use the camera button %(icon)s to capture your ID": "\u4e00\u65e6\u4f60\u5c06\u8eab\u4efd\u8bc1\u4ef6\u6446\u653e\u59a5\u5f53\uff0c\u8bf7\u7528\u76f8\u673a\u6309\u94ae%(icon)s\u6765\u62cd\u7167", - "Once in position, use the camera button %(icon)s to capture your photo": "\u4e00\u4f46\u4f60\u5df2\u7ecf\u5c31\u4f4d\uff0c\u8bf7\u7528\u76f8\u673a\u6309\u94ae%(icon)s\u6765\u62cd\u7167", "Only <%= fileTypes %> files can be uploaded. Please select a file ending in <%= fileExtensions %> to upload.": "\u53ea\u6709 <%= fileTypes %> \u683c\u5f0f\u7684\u6587\u4ef6\u53ef\u4ee5\u4e0a\u4f20\u3002\u8bf7\u9009\u62e9\u4e00\u4e2a\u4ee5 <%= fileExtensions %> \u7ed3\u5c3e\u7684\u6587\u4ef6\u4e0a\u4f20\u3002", "Only properly formatted .csv files will be accepted.": "\u53ea\u6709\u6807\u51c6\u7684CSV\u683c\u5f0f\u6587\u4ef6\u4f1a\u88ab\u63a5\u53d7\u3002", "Open Calculator": "\u6253\u5f00\u8ba1\u7b97\u5668", @@ -717,8 +715,6 @@ "Text color": "\u6587\u672c\u989c\u8272", "Text to display": "\u8981\u663e\u793a\u7684\u6587\u5b57", "Thank you for submitting your photos. We will review them shortly. You can now sign up for any %(platformName)s course that offers verified certificates. Verification is good for one year. After one year, you must submit photos for verification again.": "\u611f\u8c22\u4f60\u63d0\u4ea4\u7167\u7247\uff0c\u6211\u4eec\u5c06\u4e8e\u7a0d\u540e\u8fdb\u884c\u5ba1\u6838\u3002\u4f60\u73b0\u5728\u5c31\u53ef\u4ee5\u6ce8\u518c%(platformName)s\u4e0a\u4efb\u610f\u63d0\u4f9b\u8ba4\u8bc1\u8bc1\u4e66\u7684\u8bfe\u7a0b\u3002\u8ba4\u8bc1\u53ea\u5728\u4e00\u5e74\u5185\u6709\u6548\uff0c\u4e00\u5e74\u540e\uff0c\u4f60\u5fc5\u987b\u8981\u63d0\u4ea4\u7167\u7247\u91cd\u65b0\u8ba4\u8bc1\u3002", - "Thank you! We have received your payment for %(courseName)s.": "\u8c22\u8c22\uff01\u6211\u4eec\u5df2\u7ecf\u6536\u5230\u4f60\u5bf9%(courseName)s\u7684\u4ed8\u6b3e\u3002", - "Thanks for returning to verify your ID in: %(courseName)s": "\u611f\u8c22\u4f60\u56de\u6765\u4e3a%(courseName)s\u9a8c\u8bc1\u4f60\u7684\u8eab\u4efd\u8bc1\u4ef6", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u8f93\u5165\u7684URL\u4f3c\u4e4e\u662f\u4e00\u4e2a\u7535\u5b50\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0a\u201cmailto:\u201d\u524d\u7f00\u5417\uff1f", "The URL you entered seems to be an external link. Do you want to add the required http:// prefix?": "\u8f93\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0a\u201chttp://\u201d\u524d\u7f00\u5417\uff1f", "The cohort cannot be added": "\u8be5\u7fa4\u7ec4\u4e0d\u80fd\u6dfb\u52a0", @@ -877,9 +873,7 @@ "You are about to send an email titled '<%= subject %>' to ALL (everyone who is enrolled in this course as student, staff, or instructor). Is this OK?": "\u60a8\u5373\u5c06\u5411\u9009\u4fee\u8be5\u8bfe\u7a0b\u7684\u6240\u6709\u4eba(\u9009\u8bfe\u7684\u5b66\u751f\u3001\u6559\u5458\u548c\u4e3b\u8bb2\u6559\u5e08)\u53d1\u9001\u4e00\u5c01\u6807\u9898\u4e3a\u201c<%= subject %>\u201d\u7684\u90ae\u4ef6\uff0c\u786e\u8ba4\u5417\uff1f", "You are about to send an email titled '<%= subject %>' to everyone who is staff or instructor on this course. Is this OK?": "\u60a8\u51c6\u5907\u5411\u8be5\u8bfe\u7a0b\u7684\u6240\u6709\u6559\u5458\u548c\u4e3b\u8bb2\u6559\u5e08\u53d1\u9001\u4e00\u5c01\u6807\u9898\u4e3a\u201c<%= subject %>\u201d\u7684\u90ae\u4ef6\uff0c\u786e\u8ba4\u5417\uff1f", "You are about to send an email titled '<%= subject %>' to yourself. Is this OK?": "\u4f60\u51c6\u5907\u5411\u81ea\u5df1\u53d1\u9001\u4e00\u5c01\u6807\u9898\u4e3a\u201c<%= subject %>\u201d\u7684\u90ae\u4ef6\uff0c\u786e\u8ba4\u5417\uff1f", - "You are enrolling in: %(courseName)s": "\u4f60\u5373\u5c06\u9009\u4fee\uff1a%(courseName)s", "You are now enrolled as a verified student for:": "\u4f60\u73b0\u5728\u6b63\u4ee5\u5df2\u8ba4\u8bc1\u5b66\u751f\u7684\u8eab\u4efd\u9009\u4fee\uff1a", - "You are upgrading your enrollment for: %(courseName)s": "\u4f60\u6b63\u5728\u4e3a%(courseName)s\u5347\u7ea7\u4f60\u7684\u9009\u8bfe\u7c7b\u578b", "You can now enter your payment information and complete your enrollment.": "\u4f60\u53ef\u4ee5\u73b0\u5728\u5c31\u8f93\u5165\u652f\u4ed8\u4fe1\u606f\u5e76\u5b8c\u6210\u9009\u8bfe\u3002", "You can pay now even if you don't have the following items available, but you will need to have these by %(date)s to qualify to earn a Verified Certificate.": "\u5373\u4f7f\u4f60\u6ca1\u6709\u6ee1\u8db3\u4e0b\u9762\u8fd9\u4e9b\u8981\u6c42\uff0c\u4f60\u4e5f\u53ef\u4ee5\u73b0\u5728\u5c31\u4ed8\u6b3e\uff1b\u4f46\u662f\u4f60\u53ea\u6709\u5728%(date)s\u4e4b\u524d\u6ee1\u8db3\u8fd9\u4e9b\u8981\u6c42\u624d\u6709\u8d44\u683c\u83b7\u5f97\u4e00\u4efd\u5df2\u8ba4\u8bc1\u7684\u8bc1\u4e66\u3002", "You can pay now even if you don't have the following items available, but you will need to have these to qualify to earn a Verified Certificate.": "\u5373\u4f7f\u4f60\u6ca1\u6709\u6ee1\u8db3\u4e0b\u9762\u8fd9\u4e9b\u8981\u6c42\uff0c\u4f60\u4e5f\u53ef\u4ee5\u73b0\u5728\u5c31\u4ed8\u6b3e\uff1b\u4f46\u662f\u4f60\u53ea\u6709\u6ee1\u8db3\u4e86\u8fd9\u4e9b\u8981\u6c42\u624d\u6709\u8d44\u683c\u83b7\u5f97\u4e00\u4efd\u5df2\u8ba4\u8bc1\u7684\u8bc1\u4e66\u3002", @@ -923,7 +917,6 @@ "Your post will be discarded.": "\u60a8\u7684\u5e16\u5b50\u5c06\u88ab\u64a4\u9500\u3002", "Your upload of '{file}' failed.": "\u4f60\u7684\u6587\u4ef6\u201c{file}\u201d\u4e0a\u4f20\u5931\u8d25\u3002", "Your upload of '{file}' succeeded.": "\u4f60\u7684\u6587\u4ef6\u201c{file}\u201d\u4e0a\u4f20\u6210\u529f\u3002", - "Your verification status is good until %(verificationGoodUntil)s.": "\u5728%(verificationGoodUntil)s\u4e4b\u524d\u60a8\u7684\u9a8c\u8bc1\u72b6\u6001\u90fd\u6709\u6548\u3002", "a day": "\u4e00\u5929", "about %d hour": [ "\u5927\u7ea6 %d \u5c0f\u65f6" From 002ad84d4da203670596594e0464adea010636a8 Mon Sep 17 00:00:00 2001 From: attiyaishaque Date: Wed, 6 Apr 2016 16:04:13 +0500 Subject: [PATCH 40/70] Safe Templates --- cms/templates/edit-tabs.html | 9 +++++---- cms/templates/error.html | 13 +++++++------ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/cms/templates/edit-tabs.html b/cms/templates/edit-tabs.html index 04255d8b9b..b08802d3a7 100644 --- a/cms/templates/edit-tabs.html +++ b/cms/templates/edit-tabs.html @@ -1,3 +1,4 @@ +<%page expression_filter="h"/> <%inherit file="base.html" /> <%def name="online_help_token()"><% return "pages" %> <%namespace name='static' file='static_content.html'/> @@ -5,7 +6,7 @@ from django.utils.translation import ugettext as _ from django.core.urlresolvers import reverse from xmodule.tabs import StaticTab - from django.template.defaultfilters import escapejs + from openedx.core.djangolib.js_utils import js_escaped_string %> <%block name="title">${_("Pages")} <%block name="bodyclass">is-signedin course view-static-pages @@ -20,7 +21,7 @@ <%block name="requirejs"> require(["js/factories/edit_tabs"], function (EditTabsFactory) { - EditTabsFactory("${context_course.location | escapejs}", "${reverse('contentstore.views.tabs_handler', kwargs={'course_key_string': context_course.id})}"); + EditTabsFactory("${context_course.location | n, js_escaped_string}", "${reverse('contentstore.views.tabs_handler', kwargs={'course_key_string': context_course.id})}"); }); @@ -30,7 +31,7 @@

    ${_("Content")} ## Translators: Pages refer to the tabs that appear in the top navigation of each course. - > ${_("Pages")} + > ${_("Pages")}

  • Z1|qX4ol0xe-@qzJJU~YZ>``g#X!*jDYFvDDQ;`bpn+BrpINd^b+UW!AdCKg4}tW zD36hp^nZonSvXu8gHK>=+GZdZ%(asIBSl;GOH&AAN7m2IPcoDp#7H?J(7-xyj{JA( z4$~(la*I%`l!^M480$&-7RE!Sj5dO*yN}_WR{ucqO5UR=ylX2@W2g!v8jqq6T#peb zh2lQsV^OcP!BY8ET)UJZRb<2$?D|nT5{|4#-z@SEty8pE7RDR(KVocV91W-|Jt=O zl=e(qd-VB_ATm)<8qRv9KB0)n6OR7LoGOV!;d#fl7H4Y0Ik$F@k^=C;~!BVAu|2(q*RZ&Nh}>3W;KP zm_h}YQbZ*3YJ@5%H((HT;~zr#hk^nUDrlr21}WhYMeuj&t$~x=z4xB;ecyRZyXhlM zw}8uq+YR4p1f`whJeFh^;Sc4U4Mu*AF@U`WogS*FOA4<({`q_dT#aZ0B3)GQ3w-$y zeH0}vn*y#O=5p`By;e))F)&O3o;9csm=BX+DK_Oe^&wr$y1H1x2 zBL(baT_kZKq@%=+P<0FO4^`#+5xA~ICgH!v`3wo8D#3p6)8Xggdz&ewv)8qC4fc0* zQ{?Ee8u|V|9)Prd2+UN%^4>z{S6Q{31Bx&kVH<%$B`9&yEQ;Q%xZA;$a=*>m4K5vx zrdC+omvEOcz1bAmC@0i5|L0T!i5o(o3gC7?|Ik4vd}|Sr_8a2Tb|7*>`Q-gF*qLDO zP(%d{)pM^$b2MikkER=X&(mNvYcm>mDNb5tI=}_2VlI!VNvz^L8NzBn`4n@RL_c!w zgiqS})-CQ+#QMoDurtKgw;un0y-z{UP{bqD%^2mC)(cs zvvH1msIrZ8e46zYghclC2=s+eOVTFp9@uFl+Q(ViB-Q{5eUJM=mHcJ)95|O)M~Gci zg>PZXB{a7V-{+#Qk6v6)nBJVJfy~Of}omS!! z-&ww3qrt`0Bb`PA>FBp`zs2st%OY>(Kn|`-_ypod>8ybLBSt!&1iM&2K~5q;4vEI7 zqVDo2MsaVm{_u{eWUnFo3;ciKU6B~DAv7nD>xybt@`lO3|2<7LlUWxK?g!|G5}i-t zL5Qx!Kb5^15otR)w?pV*+k@x;l3yojD!elJm`I+ZK<(hnLFW)F70hQU$0GUv*N@^{ zPItM8ETe#p2uNF~K(z>;LF^RwJjg$QIYs;woMZ}r0e%DidR1Tp$=?Kf7~T;4zp|v+ z_-~@~IQq?MQtjn0ni^C>3A(4ovjo6uRe76Y zrSW}yk&<5Go96h^S43l$wm}@DjE%j3U?YT%$Z_JH_+D zo*D8gqKAehK9$_+v7EvRF@J>CF-cU7)2=3n_a|tvzM?v)E%%H3ur^T>7b4m=zvxq; znPbJ8ueDcu=o1|zqfKYE)aZz_T1Rp6tY)XCO?2X>+eMD?AZnC{y-1<$&U4JgR)xs9 zq1E}s@Y~wXmT2bSglVB}jxu{~igWQDC>qAE+DHCGf@>nXl5 zrB=wWorP{_u^F&q`yIn{%wTK}Gct`r%Lqq|0Ml_Zj8Z#nd)A}lxxUVq)?T?D%*WfH z-$@qLTlFHpDA=W!Ju5OA^&^QQ`)B>ICZ?R%N3;_oFX?qtMbb$Bl-|+qxAc@0%XxGL z9~Ag|iq{MLbx%i&Z|Z$IJUXEGCI0+`cMmM}ivvp&2lnhaZjl=@GmJ>svkDC>Y*<0N n$X*b%j1n_sM(1rxe6kDE`|jiM1Om24m#$-lMN@6!rd9s|6eNKT delta 84232 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 z�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 diff --git a/conf/locale/es_419/LC_MESSAGES/django.po b/conf/locale/es_419/LC_MESSAGES/django.po index 32a027c06a..147d15d066 100644 --- a/conf/locale/es_419/LC_MESSAGES/django.po +++ b/conf/locale/es_419/LC_MESSAGES/django.po @@ -185,7 +185,7 @@ msgid "" msgstr "" "Project-Id-Version: edx-platform\n" "Report-Msgid-Bugs-To: openedx-translation@googlegroups.com\n" -"POT-Creation-Date: 2016-03-30 19:39+0000\n" +"POT-Creation-Date: 2016-04-15 11:05+0000\n" "PO-Revision-Date: 2016-01-19 20:04+0000\n" "Last-Translator: Laura Silva \n" "Language-Team: Spanish (Latin America) (http://www.transifex.com/open-edx/edx-platform/language/es_419/)\n" @@ -453,6 +453,10 @@ msgstr "" "Los modos de educación profesional no pueden tener configuradas fechas y " "horas de expiración." +#: common/djangoapps/course_modes/models.py +msgid "Verified modes cannot be free." +msgstr "" + #: common/djangoapps/course_modes/models.py msgid "" "The time period before a course ends in which a course mode will expire" @@ -495,6 +499,7 @@ msgid "Student" msgstr "Estudiante" #: common/djangoapps/embargo/forms.py +#: lms/djangoapps/verified_track_content/forms.py msgid "COURSE NOT FOUND. Please check that the course ID is valid." msgstr "CURSO NO ENCONTRADO. Por favor revise que el ID del curso sea válido." @@ -4532,6 +4537,84 @@ msgstr "Todas las posibles palabras, de todos los estudiantes." msgid "Top num_top_words words for word cloud." msgstr "Top de num_top_words para la nube de palabras." +#: lms/djangoapps/badges/events/course_complete.py +msgid "" +"Completed the course \"{course_name}\" ({course_mode}, {start_date} - " +"{end_date})" +msgstr "" +"Completó el curso \"{course_name}\" ({course_mode}, {start_date} - " +"{end_date})" + +#: lms/djangoapps/badges/events/course_complete.py +msgid "Completed the course \"{course_name}\" ({course_mode})" +msgstr "Completó el curso \"{course_name}\" ({course_mode})" + +#: lms/djangoapps/badges/models.py +msgid "The badge image must be square." +msgstr "La imagen de la insignia debe ser cuadrada." + +#: lms/djangoapps/badges/models.py +msgid "The badge image file size must be less than 250KB." +msgstr "El archivo de imagen de la insignia debe de menos de 250KB." + +#: lms/djangoapps/badges/models.py +msgid "This value must be all lowercase." +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "The course mode for this badge image. For example, \"verified\" or \"honor\"." +msgstr "" +"Modo de curso para esta imagen de insignia. Por ejemplo, \"Verificado\" o " +"\"Código de honor\"." + +#: lms/djangoapps/badges/models.py +msgid "" +"Badge images must be square PNG files. The file size should be under 250KB." +msgstr "" +"Las imágenes de las insignias deben ser cuadradas y en formato PNG. El " +"tamaño debe ser menor a 250KB." + +#: lms/djangoapps/badges/models.py +msgid "" +"Set this value to True if you want this image to be the default image for " +"any course modes that do not have a specified badge image. You can have only" +" one default image." +msgstr "" +"Configure el valor en True si desea que esta sea la imagen por defecto para " +"cualquier modo del curso que no tenga una imagen de insignia específica. " +"Solo puede tener una imagen por defecto." + +#: lms/djangoapps/badges/models.py +msgid "There can be only one default image." +msgstr "Solo puede tener una imagen por defecto." + +#: lms/djangoapps/badges/models.py +msgid "" +"On each line, put the number of completed courses to award a badge for, a " +"comma, and the slug of a badge class you have created that has the issuing " +"component 'openedx__course'. For example: 3,enrolled_3_courses" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"On each line, put the number of enrolled courses to award a badge for, a " +"comma, and the slug of a badge class you have created that has the issuing " +"component 'openedx__course'. For example: 3,enrolled_3_courses" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "" +"Each line is a comma-separated list. The first item in each line is the slug" +" of a badge class you have created that has an issuing component of " +"'openedx__course'. The remaining items in each line are the course keys the " +"learner needs to complete to be awarded the badge. For example: " +"slug_for_compsci_courses_group_badge,course-v1:CompSci+Course+First,course-v1:CompsSci+Course+Second" +msgstr "" + +#: lms/djangoapps/badges/models.py +msgid "Please check the syntax of your entry." +msgstr "" + #. Translators: 'EdX', 'edX', and 'Open edX' are trademarks of 'edX Inc.'. #. Please do not translate any of these trademarks and company names. #: lms/djangoapps/branding/api.py @@ -4658,18 +4741,6 @@ msgstr "" "No puede crear un CCX desde un curso usando un id caducado. Por favor cree " "una nueva versión del curso en studio para poder realizar esta acción." -#: lms/djangoapps/certificates/badge_handler.py -msgid "" -"Completed the course \"{course_name}\" ({course_mode}, {start_date} - " -"{end_date})" -msgstr "" -"Completó el curso \"{course_name}\" ({course_mode}, {start_date} - " -"{end_date})" - -#: lms/djangoapps/certificates/badge_handler.py -msgid "Completed the course \"{course_name}\" ({course_mode})" -msgstr "Completó el curso \"{course_name}\" ({course_mode})" - #: lms/djangoapps/certificates/models.py wiki/admin.py wiki/models/article.py msgid "created" msgstr "creada" @@ -4746,41 +4817,6 @@ msgstr "El motivo del error ocurrido durante la generación del certificado." msgid "The download URL for the generated certificate." msgstr "El link de descarga para el certificado generado." -#: lms/djangoapps/certificates/models.py -msgid "The badge image must be square." -msgstr "La imagen de la insignia debe ser cuadrada." - -#: lms/djangoapps/certificates/models.py -msgid "The badge image file size must be less than 250KB." -msgstr "El archivo de imagen de la insignia debe de menos de 250KB." - -#: lms/djangoapps/certificates/models.py -msgid "The course mode for this badge image. For example, \"verified\" or \"honor\"." -msgstr "" -"Modo de curso para esta imagen de insignia. Por ejemplo, \"Verificado\" o " -"\"Código de honor\"." - -#: lms/djangoapps/certificates/models.py -msgid "" -"Badge images must be square PNG files. The file size should be under 250KB." -msgstr "" -"Las imágenes de las insignias deben ser cuadradas y en formato PNG. El " -"tamaño debe ser menor a 250KB." - -#: lms/djangoapps/certificates/models.py -msgid "" -"Set this value to True if you want this image to be the default image for " -"any course modes that do not have a specified badge image. You can have only" -" one default image." -msgstr "" -"Configure el valor en True si desea que esta sea la imagen por defecto para " -"cualquier modo del curso que no tenga una imagen de insignia específica. " -"Solo puede tener una imagen por defecto." - -#: lms/djangoapps/certificates/models.py -msgid "There can be only one default image." -msgstr "Solo puede tener una imagen por defecto." - #: lms/djangoapps/certificates/models.py msgid "Name of template." msgstr "Nombre de la plantilla." @@ -5295,6 +5331,10 @@ msgstr "" "Para recibir un certificado, debe completar todos los requerimientos antes " "de esta fecha." +#: lms/djangoapps/courseware/date_summary.py +msgid "After this date, course content will be archived." +msgstr "" + #: lms/djangoapps/courseware/date_summary.py msgid "" "This course is archived, which means you can review course content but it is" @@ -6340,15 +6380,8 @@ msgstr "" "nuevamente." #: lms/djangoapps/instructor/views/api.py -msgid "Invalid Json data, Please refresh the page and then try again." +msgid "Invalid data, generate_for must be \"new\" or \"all\"." msgstr "" -"Datos Json inválidos. Por favor recargue la página e intente nuevamente." - -#: lms/djangoapps/instructor/views/api.py -msgid "Invalid data, user_id must be present for all certificate exceptions." -msgstr "" -"Datos inválidos, el user_id debe estar presente para todos los certificados " -"de excepción." #: lms/djangoapps/instructor/views/api.py msgid "Certificate generation started for white listed students." @@ -6711,6 +6744,7 @@ msgid "Last Name" msgstr "Apellido" #: lms/djangoapps/instructor_task/tasks_helper.py +#: openedx/core/djangoapps/api_admin/forms.py #: lms/templates/shoppingcart/receipt.html msgid "Company Name" msgstr "Nombre de la organización" @@ -8315,6 +8349,10 @@ msgid "" msgstr "" "El usuario {username} no está inscrito en el curso asociado con este equipo." +#: lms/djangoapps/verified_track_content/models.py +msgid "The course key for the course we would like to be auto-cohorted." +msgstr "" + #: lms/djangoapps/verify_student/models.py msgid "Your {platform_name} verification has expired." msgstr "Su verificación en {platform_name} ha expirado." @@ -9155,6 +9193,26 @@ msgstr "Esta revisión se ha eliminado." msgid "Restoring to this revision will mark the article as deleted." msgstr "La restauración de esta revisión marcará el artículo como eliminado." +#: openedx/core/djangoapps/api_admin/forms.py +msgid "Company Address" +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "Describe what your application does." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The URL of your company's website." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The name of your company." +msgstr "" + +#: openedx/core/djangoapps/api_admin/forms.py +msgid "The contact address of your company." +msgstr "" + #: openedx/core/djangoapps/api_admin/models.py cms/templates/index.html msgid "Denied" msgstr "Denegado" @@ -9175,6 +9233,27 @@ msgstr "El URL del sitio web asociado con este usuario de la API." msgid "The reason this user wants to access the API." msgstr "La razón por la cual este usuario quiere acceder a la API." +#: openedx/core/djangoapps/api_admin/models.py +msgid "API access request from {company}" +msgstr "" + +#: openedx/core/djangoapps/api_admin/models.py +msgid "API access request" +msgstr "" + +#: openedx/core/djangoapps/api_admin/views.py +msgid "TODO" +msgstr "" + +#. Translators: link_start and link_end are HTML tags for a link to the terms +#. of service. +#. platform_name is the name of this Open edX installation. +#: openedx/core/djangoapps/api_admin/widgets.py +msgid "" +"I, and my company, accept the {link_start}{platform_name} API Terms of " +"Service{link_end}." +msgstr "" + #: openedx/core/djangoapps/bookmarks/views.py msgid "An error has occurred. Please try again." msgstr "Ocurrió un error. Por favor intente nuevamente." @@ -9207,6 +9286,10 @@ msgstr "" msgid "Bookmark with usage_id: {usage_id} does not exist." msgstr "El marcador con usage_id {usage_id} no existe." +#: openedx/core/djangoapps/course_groups/cohorts.py +msgid "Default Group" +msgstr "" + #: openedx/core/djangoapps/course_groups/cohorts.py msgid "You cannot create two cohorts with the same name" msgstr "No puede crear dos cohortes con el mismo nombre" @@ -9481,6 +9564,14 @@ msgstr "" "Al solicitar que se emitan los certificados, haga como máximo este número de" " reintentos por pedido fallido." +#: openedx/core/djangoapps/programs/models.py +msgid "Do we want to show xseries program advertising" +msgstr "" + +#: openedx/core/djangoapps/programs/models.py +msgid "Do we want to show program listing page" +msgstr "" + #: openedx/core/djangoapps/self_paced/models.py msgid "Enable course home page improvements." msgstr "Habilitar las mejoras a la página de inicio del curso." @@ -10224,26 +10315,34 @@ msgstr "Número de curso:" #: lms/templates/sysadmin_dashboard.html #: lms/templates/sysadmin_dashboard_gitlogs.html #: lms/templates/courseware/courses.html +#: themes/edx.org/lms/templates/header.html #: themes/red-theme/lms/templates/header.html msgid "Courses" msgstr "Cursos" +#: cms/templates/index.html cms/templates/widgets/header.html +#: lms/templates/navigation.html lms/templates/learner_dashboard/programs.html +#: themes/edx.org/lms/templates/header.html +#: themes/red-theme/lms/templates/header.html +msgid "Programs" +msgstr "Programas" + #: cms/templates/login.html cms/templates/widgets/header.html #: themes/red-theme/cms/templates/login.html msgid "Sign In" -msgstr "" +msgstr "Iniciar sesión" #: cms/templates/login.html themes/red-theme/cms/templates/login.html msgid "Sign In to {studio_name}" -msgstr "" +msgstr "Iniciar sesión en {studio_name}" #: cms/templates/login.html themes/red-theme/cms/templates/login.html msgid "Don't have a {studio_name} Account? Sign up!" -msgstr "" +msgstr "¿No tiene una cuenta de {studio_name} aún? Regístrese!" #: cms/templates/login.html themes/red-theme/cms/templates/login.html msgid "Required Information to Sign In to {studio_name}" -msgstr "" +msgstr "Información requerida para iniciar sesión en {studio_name}" #: cms/templates/login.html cms/templates/register.html #: lms/templates/help_modal.html lms/templates/login.html @@ -10664,30 +10763,23 @@ msgstr "Ayuda de {platform_name}" #: lms/templates/help_modal.html msgid "" -"For questions on course lectures, homework, tools, or materials for " -"this course, post in the {link_start}course discussion " -"forum{link_end}." +"For {strong_start}questions on course lectures, homework, tools, or " +"materials for this course{strong_end}, post in the {link_start}course " +"discussion forum{link_end}." msgstr "" -"Para preguntas sobre las clases, tareas o materiales del " -"curso, utilice el{link_start}foro de discusión{link_end}." #: lms/templates/help_modal.html msgid "" -"Have general questions about {platform_name}? You can find " -"lots of helpful information in the {platform_name} " +"Have {strong_start}general questions about {platform_name}{strong_end}? You " +"can find lots of helpful information in the {platform_name} " "{link_start}FAQ{link_end}." msgstr "" -"¿Tiene preguntas generales sobre la plataforma " -"{platform_name}? Puede encontrar mucha información valiosa en la " -"sección de {link_start}Preguntas Frecuentes{link_end} de {platform_name}." #: lms/templates/help_modal.html msgid "" -"Have a question about something specific? You can contact " -"the {platform_name} general support team directly:" +"Have a {strong_start}question about something specific{strong_end}? You can " +"contact the {platform_name} general support team directly:" msgstr "" -"¿Tiene preguntas sobre algo más específico? Puede contactar" -" directamente al equipo de soporte de la plataforma {platform_name}:" #: lms/templates/help_modal.html msgid "Report a problem" @@ -10763,14 +10855,10 @@ msgid "Brief description of the problem" msgstr "Breve descripción del problema" #: lms/templates/help_modal.html -msgid "Details of the problem you are encountering" -msgstr "Detalle el problema que ha encontrado" - -#: lms/templates/help_modal.html -msgid "Include error messages, steps which lead to the issue, etc." +msgid "" +"Details of the problem you are encountering{asterisk}{begin_span}Include " +"error messages, steps which lead to the issue, etc.{end_span}" msgstr "" -"Incluya los mensajes de error, los pasos realizados que llevaron al " -"inconveniente, etc." #: lms/templates/help_modal.html msgid "suggestion" @@ -10970,8 +11058,6 @@ msgstr "" msgid "Account Preferences" msgstr "Preferencias de la Cuenta" -#. Translators: provider_name is the name of an external, third-party user -#. authentication provider (like Google or LinkedIn). #: lms/templates/login.html msgid "Sign in with {provider_name}" msgstr "Iniciar sesión con {provider_name}" @@ -11149,14 +11235,10 @@ msgid "Register" msgstr "Registrarse" #: lms/templates/navigation-edx.html lms/templates/navigation.html -#: themes/edx.org/lms/templates/header.html -#: themes/red-theme/lms/templates/header.html msgid "" -"Warning: Your browser is not fully supported. We strongly " -"recommend using {chrome_link} or {ff_link}." +"{begin_strong}Warning:{end_strong} Your browser is not fully supported. We " +"strongly recommend using {chrome_link} or {ff_link}." msgstr "" -"Atención: El navegador que está utilizando no está " -"completamente soportado. Se recomienda el uso de {chrome_link} o {ff_link}." #: lms/templates/navigation.html themes/red-theme/lms/templates/header.html msgid "Global" @@ -11236,8 +11318,6 @@ msgstr "" msgid "The following errors occurred while processing your registration:" msgstr "Ocurrieron los siguientes errores al procesar su registro:" -#. Translators: provider_name is the name of an external, third-party user -#. authentication service (like Google or LinkedIn). #: lms/templates/register-form.html #: themes/stanford-style/lms/templates/register-form.html msgid "Sign up with {provider_name}" @@ -11858,10 +11938,6 @@ msgstr "" "los navegadores para aumenta o disminuir el tamaño. En Google Chrome, esto " "se hace pulsando ctrl +, o ctrl - al mismo tiempo." -#: lms/templates/video.html -msgid "Skip to a navigable version of this video's transcript." -msgstr "Cambiar a la versión navegable de la transcripción del video" - #: lms/templates/video.html msgid "Loading video player" msgstr "Cargando reproductor de video" @@ -11874,14 +11950,6 @@ msgstr "Reproducir video" msgid "No playable video sources found." msgstr "No se han encontrado los ficheros de video" -#: lms/templates/video.html -msgid "Skip to end of transcript." -msgstr "Mover al final de la transcripción" - -#: lms/templates/video.html -msgid "Go back to start of transcript." -msgstr "Volver al inicio de la transcripción" - #: lms/templates/video.html msgid "Download video" msgstr "Descargar video" @@ -11902,6 +11970,476 @@ msgstr "Tus palabras:" msgid "Total number of words:" msgstr "Número total de palabras:" +#: lms/templates/api_admin/api_access_request_form.html +msgid "API Access Request" +msgstr "" + +#: lms/templates/api_admin/api_access_request_form.html +#: lms/templates/api_admin/status.html +msgid "{platform_name} API Access Request" +msgstr "" + +#: lms/templates/api_admin/api_access_request_form.html +msgid "Request API Access" +msgstr "" + +#. Translators: "platform_name" is the name of this Open edX installation. +#. "link_start" and "link_end" are the HTML for a link to the API +#. documentation. "api_support_email_link" is HTML for a link to email the API +#. support staff. +#: lms/templates/api_admin/status.html +msgid "" +"Your request to access the {platform_name} Course Catalog API is being " +"processed. You will receive a message at the email address in your profile " +"when processing is complete. You can also return to this page to see the " +"status of your API access request. To learn more about the {platform_name} " +"Course Catalog API, visit {link_start}our API documentation page{link_end}. " +"For questions about using this API, visit our FAQ page or contact " +"{api_support_email_link}." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Terms of Service for {platform_name} APIs" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Effective Date: April 12th, 2016" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Welcome to {platform_name}. Thank you for using {platform_name}'s Course " +"Discovery API and any additional APIs that we may offer from time to time " +"(collectively, the \"APIs\"). Please read these Terms of Service prior to " +"accessing or using the APIs. These Terms of Service, any additional terms " +"within accompanying API documentation, and any applicable policies and " +"guidelines that {platform_name} makes available and/or updates from time to " +"time are agreements (collectively, the \"Terms\") between you and " +"{platform_name}. By accessing or using the APIs, you accept and agree to be " +"legally bound by the Terms, whether or not you are a registered user. If you" +" do not understand or do not wish to be bound by the Terms, you should not " +"use the APIs." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "API Access" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To access the APIs, you will need to create an {platform_name} user account " +"for your application (not for personal use). This account will provide you " +"with access to our API request page at {request_url}. On that page, you must" +" complete the API request form including a description of your proposed uses" +" for the APIs. Any account and registration information that you provide to " +"{platform_name} must be accurate and up to date, and you agree to inform us " +"promptly of any changes. {platform_name} will review your API request form " +"and, upon approval in {platform_name}'s sole discretion, will provide you " +"with instructions for obtaining your API shared secret and client ID." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Permissible Use" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to use the APIs solely for the purpose of delivering content that " +"is accessed through the APIs (the \"API Content\") to your own website, " +"mobile site, app, blog, email distribution list, or social media property or" +" for another commercial use that you described in your request for access " +"and that {platform_name} has approved on a case-by-case basis. " +"{platform_name} may monitor your use of the APIs for compliance with the " +"Terms and may deny your access or shut down your integration if you try to " +"go around or exceed the requirements and limitations set by {platform_name}." +" Your Application or other approved use of the API or the API Content must " +"not prompt your end users to provide their {platform_name} username, " +"password or other {platform_name} user credentials anywhere other than the " +"{platform_name} website at {platform_url}." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Prohibited Uses and Activities" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} shall have the sole right to determine whether or not any " +"given use of the APIs is acceptable, and {platform_name} reserves the right " +"to revoke API access for any use that {platform_name} determines at any " +"time, in its sole discretion, does not benefit or serve the best interests " +"of {platform_name}, its users and its partners." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The following activities are not acceptable when using the APIs (this is not" +" an exhaustive list):" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"collecting or storing the names, passwords, or other credentials of " +"{platform_name} users;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"scraping or similar techniques to aggregate or otherwise create permanent " +"copies of API Content;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"violating, misappropriating or infringing any copyright, trademark rights, " +"rights of privacy or publicity, confidential information or any other right " +"of any third party;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"altering or removing any trademark, copyright or other proprietary or legal " +"notices contained in, or appearing on, the APIs or any API Content;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "altering or editing any content or graphics in the API Content" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"sublicensing, re-distributing, renting, selling or leasing access to the " +"APIs or your client secret to any third party;" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"distributing any virus, Trojan horse, spyware, adware, malware, bot, time " +"bomb, worm, or other harmful or malicious component; or" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"using the APIs for any purpose which or might overburden, impair or disrupt " +"the {platform_name} platform, servers or networks." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Usage and Quotas" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} reserves the right, in its discretion, to impose " +"restrictions and limitations on the number and frequency of calls made by " +"you or your Application to the APIs. You must not attempt to circumvent any " +"restrictions or limitations that we impose." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Compliance" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to comply with all applicable law, regulation, and third party " +"rights (including without limitation laws regarding the import or export of " +"data or software, privacy, copyright, and local laws). You will not use the " +"APIs to encourage or promote illegal activity or violation of third party " +"rights. You will not violate any other terms of service with " +"{platform_name}. You will only access (or attempt to access) an API by the " +"means described in the documentation of that API. You will not misrepresent " +"or mask either your identity or yourApplication's identity when using the " +"APIs." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Ownership" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You acknowledge and agree that the APIs and all API Content contain valuable" +" intellectual property of {platform_name} and its partners. The APIs and all" +" API Content are protected by United States and foreign copyright, " +"trademark, and other laws. All rights in the APIs and the API Content, if " +"not expressly granted, are reserved. By using the APIs or any API Content, " +"you do not acquire ownership of any rights in the APIs or API Content. You " +"must not claim or attempt to claim ownership in the APIs or any API Content " +"or misrepresent yourself or your company or your Application as being the " +"source of any API Content. You may not modify, create derivative works of, " +"or attempt to use, license, or in any way exploit any API Content in whole " +"or in part on your own behalf or on behalf of any third party. You may not " +"distribute or modify the APIs or any API Content (including adaptation, " +"editing, excerpting, or creating derivative works)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"All names, logos and seals (\"Trademarks\") that appear in the APIs, API " +"Content, or on or through the services made available on or through the " +"APIs, if any, are the property of their respective owners. You may not " +"remove, alter, or obscure any copyright, Trademark, or other proprietary " +"rightrs notices incorporated in or accompanying the API Content. If any " +"third party revokes access to API Content owned or controlled by that third " +"party, including without limitation any Trademarks, you must ensure that all" +" API Content pertaining to that third party is deleted from your app, " +"networks, systems and servers as soon as reasonably possible. If you stop " +"using the APIs altogether or if your API access is revoked, you must delete " +"all API Content in the same way." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To the extent that you submit any content to {platform_name} in connection " +"with your use of the APIs or any API Content, you hereby grant to " +"{platform_name} a worldwide, non-exclusive, transferable, assignable, sub " +"licensable, 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 such " +"content, in whole or in part, in any form and in any media formats and " +"through any media channels (now known or hereafter developed)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Privacy" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree to comply with all applicable privacy laws and regulations and to " +"be transparent with respect to any collection and use of end user data. You " +"will provide and adhere to a privacy policy for your Application that " +"clearly and accurately describes to your end users what user information you" +" collect and how you may use and share such information (including for " +"advertising) with {platform_name} and other third parties." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Right to Charge" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} reserves the right to modify the Terms at any time without " +"advance notice. Any changes to the Terms will be effective immediately upon " +"posting on this page, with an updated effective date. By accessing or using " +"the APIs after any changes have been made, you signify your agreement on a " +"prospective basis to the modified Terms and all of the changes. Be sure to " +"return to this page periodically to ensure familiarity with the most current" +" version of the Terms." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} may also update or modify the APIs from time to time without" +" advance notice. These changes may affect your use of the APIs or the way " +"your integration interacts with the API. If we make a change that is " +"unacceptable to you, you should stop using the APIs. Continued use of the " +"APIs means you accept the change." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Confidentiality" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Your credentials (such as client secret and IDs) are intended to be used " +"solely by you. You will keep your credentials confidential and discourage " +"others from using your credentials. Your credentials may not be embedded in " +"open source projects." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"In the event that {platform_name} provides you with access to information " +"specific to {platform_name} and/or the APIs that is either marked as " +"\"Confidential\" or which a reasonable person would assume to be " +"confidential or proprietary given the terms of its disclosure " +"(\"Confidential Information\"), you agree to use this information only to " +"use and build with the APIs. You may not disclose the Confidential " +"Information to anyone without {platform_name}'s prior written consent, and " +"you agree to protect the Confidential Information from unauthorized use and " +"disclosure in the same way that you would protect your own confidential " +"information. Confidential information does not include information that you " +"independently developed, that was rightfully given to you by a third party " +"without confidentiality obligation, or that becomes public through no fault " +"of your own. You may disclose Confidential Information when compelled to do " +"so by law if you provide {platform_name} with reasonable prior notice, " +"unless a court orders that {platform_name} not receive notice." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Disclaimer of Warranty / Limitation of Liabilities" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"THE APIS AND ANY INFORMATION, API CONTENT OR SERVICES MADE AVAILABLE ON OR " +"THROUGH THE APIS 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." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} AND THE {platform_name} PARTICIPANTS (AS HERINAFTER DEFINED)" +" DO NOT WARRANT THAT THE APIS WILL OPERATE IN AN UNINTERRUPTED OR ERROR-FREE" +" MANNER, THAT THE APIS ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS, OR " +"THAT THE APIS OR API CONTENT PROVIDED WILL MEET YOUR NEEDS OR EXPECTATIONS. " +"{platform_name} AND THE {platform_name} PARTICIPANTS ALSO MAKE NO WARRANTY " +"ABOUT THE ACCURACY, COMPLETENESS, TIMELINESS, OR QUALITY OF THE APIS OR ANY " +"API CONTENT, OR THAT ANY PARTICULAR API CONTENT WILL CONTINUE TO BE MADE " +"AVAILABLE. \"{platform_name} PARTICIPANTS\" MEANS MIT, HARVARD, THE OTHER " +"MEMBERS, THE ENTITIES PROVIDING INFORMATION, API CONTENT OR SERVICES FOR THE" +" APIS, THE COURSE INSTRUCTORS AND THEIR STAFFS." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"USE OF THE APIS, AND THE API CONTENT AND ANY SERVICES OBTAINED FROM OR " +"THROUGH THE APIS, IS AT YOUR OWN RISK. YOUR ACCESS TO OR DOWNLOAD OF " +"INFORMATION, MATERIALS OR DATA THROUGH THE APIS 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, UNLESS OTHERWISE EXPRESSLY " +"PROVIDED FOR IN THE {platform_name} PRIVACY POLICY." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, YOU AGREE THAT NEITHER " +"{platform_name} NOR ANY OF THE {platform_name} PARTICIPANTS WILL BE LIABLE " +"TO YOU FOR ANY LOSS OR DAMAGES, EITHER ACTUAL OR CONSEQUENTIAL, ARISING OUT " +"OF OR RELATING TO THESE TERMS, OR YOUR (OR ANY THIRD PARTY'S) USE OF OR " +"INABILITY TO USE THE APIS OR ANY API CONTENT, OR YOUR RELIANCE UPON " +"INFORMATION OBTAINED FROM OR THROUGH THE APIS, WHETHER YOUR CLAIM IS BASED " +"IN CONTRACT, TORT, STATUTORY OR OTHER LAW." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"IN PARTICULAR, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, NEITHER " +"{platform_name} NOR ANY OF THE {platform_name} PARTICIPANTS WILL HAVE ANY " +"LIABILITY FOR ANY CONSEQUENTIAL, INDIRECT, PUNITIVE, SPECIAL, EXEMPLARY OR " +"INCIDENTAL DAMAGES, WHETHER FORESEEABLE OR UNFORESEEABLE AND WHETHER OR NOT " +"{platform_name} OR ANY OF THE {platform_name} 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)." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"CERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE " +"EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME" +" OR ALL OF THE ABOVE DISCLAIMERS, EXCLUSIONS, OR LIMITATIONS MAY NOT APPLY " +"TO YOU, AND YOU MIGHT HAVE ADDITIONAL RIGHTS." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The APIs and API Content may include hyperlinks to sites maintained or " +"controlled by others. {platform_name} and the {platform_name} 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 " +"websites, you do so at your own risk." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"To the maximum extent permitted by applicable law, you agree to defend, hold" +" harmless and indemnify {platform_name} and the {platform_name} " +"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 APIs and any API " +"Content, 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, " +"{platform_name} or one of the {platform_name} Participants will provide you " +"with written notice of such claim, suit or action." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "General Legal Terms" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"The Terms constitute the entire agreement between you and {platform_name} " +"with respect to your use of the APIs and API Content, superseding any prior " +"agreements between you and {platform_name} regarding your use of the APIs " +"and API Content. The failure of {platform_name} to exercise or enforce any " +"right or provision of the Terms shall not constitute a waiver of such right " +"or provision. If any provision of the Terms 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 the Terms shall remain in full " +"force and effect. The Terms do not create any third party beneficiary rights" +" or any agency, partnership, or joint venture. For any notice provided to " +"you by {platform_name} under these Terms, {platform_name} may notify you via" +" the email address associated with your {platform_name} account." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You agree that the Terms, the APIs, and any claim or dispute arising out of " +"or relating to the Terms or the APIs 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). Notwithstanding the foregoing, you agree that {platform_name} shall " +"still be allowed to apply to injunctive remedies (or an equivalent type of " +"urgent legal relief) in any jursdiction." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "Termination" +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"You may stop using the APIs at any time. You agree that {platform_name}, in " +"its sole discretion and at any time, may terminate your use of the APIs or " +"any API Content for any reason or no reason, without prior notice or " +"liabiliy." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"{platform_name} and the {platform_name} Participants reserve the right at " +"any time in their sole discretion to cancel, delay, reschedule or alter the " +"format of any API or API Content offered through {platform_name}, or to " +"cease providing any part or all of the APIs or API Content or related " +"services, and you agree that neither {platform_name} nor any of the " +"{platform_name} Participants will have any liability to you for such an " +"action." +msgstr "" + +#: lms/templates/api_admin/terms_of_service.html +msgid "" +"Upon any termination of the Terms or discontinuation of your access to an " +"API for any reason, your right to use any API and API Content will " +"immediately cease. You will immediately stop using the APIs and delete any " +"cached or stored API Content. All provisions of the Terms that by their " +"nature should survive termination shall survive termination, including, " +"without limitation, ownership provisions, warranty disclaimers, and " +"limitation of liability. Termination of your access to and use of the APIs " +"and API Content shall not relieve you of any obligations arising or " +"accrusing prior to such termination or limit any liability that you " +"otherwise may have to {platform_name}, including without limitation any " +"indemnification obligations contained herein." +msgstr "" + #: lms/templates/calculator/toggle_calculator.html msgid "Open Calculator" msgstr "Abrir Calculadora" @@ -12133,24 +12671,17 @@ msgid "Auto Enroll" msgstr "Auto inscribirse" #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is checked, users who have not yet registered for " -"{platform_name} will be automatically enrolled." +"If this option is {em_start}checked{em_end}, users who have not yet " +"registered for {platform_name} will be automatically enrolled." msgstr "" -"Si esta opción está marcada, los usuarios que aún no se han " -"registrado en {platform_name} serán inscritos automáticamente." #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is left unchecked, users who have not yet registered" -" for {platform_name} will not be enrolled, but will be allowed to enroll " -"once they make an account." +"If this option is left {em_start}unchecked{em_end}, users who have not yet " +"registered for {platform_name} will not be enrolled, but will be allowed to " +"enroll once they make an account." msgstr "" -"Si esta opción está sin marcar, los usuarios que aún no se han " -"registrado en {platform_name} no serán inscritos, pero se les permitirá la " -"inscripción al curso una vez hayan creado su cuenta." #: lms/templates/ccx/enrollment.html #: lms/templates/instructor/instructor_dashboard_2/membership.html @@ -12165,13 +12696,10 @@ msgid "Notify users by email" msgstr "Notificar a los usuarios por correo electrónico" #: lms/templates/ccx/enrollment.html -#: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "" -"If this option is checked, users will receive an email " +"If this option is {em_start}checked{em_end}, users will receive an email " "notification." msgstr "" -"Si esta opción está marcada, los usuarios recibirán una " -"notificación por correo electrónico." #: lms/templates/ccx/enrollment.html #: lms/templates/courseware/course_about.html @@ -12603,6 +13131,10 @@ msgstr "" msgid "{chapter} current chapter" msgstr "{chapter} capítulo actual" +#: lms/templates/courseware/accordion.html +msgid "{span_start}current section{span_end}" +msgstr "" + #: lms/templates/courseware/accordion.html #: lms/templates/courseware/progress.html msgid "due {date}" @@ -13034,8 +13566,8 @@ msgid "Verification Declined" msgstr "Verificación rechazada" #: lms/templates/courseware/progress.html -msgid "Completed" -msgstr "Finalizado" +msgid "Completed by" +msgstr "" #: lms/templates/courseware/progress.html msgid "Upcoming" @@ -13423,12 +13955,9 @@ msgstr "" #: lms/templates/dashboard/_dashboard_course_listing.html msgid "" "It's official. It's easily shareable. It's a proven motivator to complete " -"the course.
    {link_start}Learn more about the verified " +"the course. {line_break}{link_start}Learn more about the verified " "{cert_name_long}{link_end}." msgstr "" -"Es oficial. Es fácil de compartir. Es un motivador probado para completar el" -" curso.
    {link_start}Aprender más sobre los certificados verificados " -"{cert_name_long}{link_end}." #: lms/templates/dashboard/_dashboard_course_listing.html msgid "Upgrade to Verified" @@ -13459,6 +13988,7 @@ msgstr "" #: lms/templates/dashboard/_dashboard_credit_info.html msgid "You are now eligible for credit from {provider}. Congratulations!" msgstr "" +"Ahora, usted es eligible para créditos de {provider}. ¡Felicitaciones!" #: lms/templates/dashboard/_dashboard_credit_info.html msgid "Get Credit" @@ -15673,6 +16203,8 @@ msgid "" "For analytics about your course, go to " "{link_start}{analytics_dashboard_name}{link_end}." msgstr "" +"Para ver información analítica de su curso, visite {link_start} " +"{analytics_dashboard_name} {link_end}." #: lms/templates/instructor/instructor_dashboard_2/instructor_dashboard_2.html msgid "Instructor Dashboard" @@ -15722,6 +16254,32 @@ msgstr "Por favor suministre los detalles suficientes para esta acción." msgid "Reason" msgstr "Razón" +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is checked, users who have not yet registered for " +"{platform_name} will be automatically enrolled." +msgstr "" +"Si esta opción está marcada, los usuarios que aún no se han " +"registrado en {platform_name} serán inscritos automáticamente." + +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is left unchecked, users who have not yet registered" +" for {platform_name} will not be enrolled, but will be allowed to enroll " +"once they make an account." +msgstr "" +"Si esta opción está sin marcar, los usuarios que aún no se han " +"registrado en {platform_name} no serán inscritos, pero se les permitirá la " +"inscripción al curso una vez hayan creado su cuenta." + +#: lms/templates/instructor/instructor_dashboard_2/membership.html +msgid "" +"If this option is checked, users will receive an email " +"notification." +msgstr "" +"Si esta opción está marcada, los usuarios recibirán una " +"notificación por correo electrónico." + #: lms/templates/instructor/instructor_dashboard_2/membership.html msgid "Register/Enroll Students" msgstr "Registrar/Inscribir estudiantes" @@ -17318,16 +17876,11 @@ msgstr "Requerimientos Técnicos" #: lms/templates/verify_student/pay_and_verify.html msgid "" -"Please make sure your browser is updated to the {a_start}most recent version" -" possible{a_end}. Also, please make sure your webcam is plugged in, " -"turned on, and allowed to function in your web browser (commonly adjustable " -"in your browser settings)." +"Please make sure your browser is updated to the {strong_start}{a_start}most " +"recent version possible{a_end}{strong_end}. Also, please make sure your " +"{strong_start}webcam is plugged in, turned on, and allowed to function in " +"your web browser (commonly adjustable in your browser settings).{strong_end}" msgstr "" -"Por favor asegúrese de que su navegador este actualizado a la " -"{a_start}versión más reciente posible{a_end}. También asegúrese de que " -"su cámara web este conectada, encendida y permita funcionar en su " -"navegador (normalmente esto se configura en los ajustes del " -"navegador)." #: lms/templates/verify_student/reverify.html msgid "Re-Verification" @@ -17412,6 +17965,15 @@ msgstr "" "Open edX, y los logos de edX y Open edX son marcas registradas o marcas de " "edX Inc." +#: themes/edx.org/lms/templates/header.html +#: themes/red-theme/lms/templates/header.html +msgid "" +"Warning: Your browser is not fully supported. We strongly " +"recommend using {chrome_link} or {ff_link}." +msgstr "" +"Atención: El navegador que está utilizando no está " +"completamente soportado. Se recomienda el uso de {chrome_link} o {ff_link}." + #: themes/edx.org/lms/templates/course_modes/choose.html msgid "" "{b_start}Support our Mission: {b_end} EdX, a non-profit, relies on verified " @@ -19483,10 +20045,6 @@ msgstr "" msgid "Libraries" msgstr "Librerías" -#: cms/templates/index.html cms/templates/widgets/header.html -msgid "Programs" -msgstr "Programas" - #: cms/templates/index.html msgid "Re-run Course" msgstr "Reabrir Curso" diff --git a/conf/locale/es_419/LC_MESSAGES/djangojs.mo b/conf/locale/es_419/LC_MESSAGES/djangojs.mo index 8ae175117aae68eeba53c1dcc21a4bbb7cf04f63..e0baf6e9eb8aac30824dc6be3cd89277d2629a43 100644 GIT binary patch delta 36320 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 delta 39112 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�chMGa}n1I8?<6D==l(G|lQ*Z}o8KLPdJSEx7N zi&|tC&^t2Un*402^Pm`NWIA~WsNn$AoDV}aFd6mZ_*#s_JO|Bht>$1s;!m(HW;$dR zQ)g7gi_wiIQT0AXjX>h>%*dofy}28e?(ri~m_T_{&wHSzVi0Q4OhP>{&$`Cu??g@2 zanw{iMop#Tuz5ZmYM120W?0{*&qIB&`3mWP$MFLJJ$M0i4%|l#+25!+&2Yr&{WGE> zsMWg+RsJ}t!&hzm4^&58N6k5r9#yU+sslAqFFGCdV!JV;zW*O3po8Tas)9GDMU>>2 zsUQbxu8N@^EQ4A^HBduXA2oGNQ6tv{^&(-YH8ciQ?{w7j%TSAR118q~KTn_*UPTRA zj_=I~)IhE74yXotp(=<$9XKOVyW&3TAo>Hf7}Fd#2T)1WHV!~7&M#0Mn~hpy>(HY& zKT1H`<1TK%$2be)PMBXR6**}>Ui+guv=`Oz3DomHp*r>wH6s6@Mk3KEV;0m%6voL| z7WEl&@D%%Bi{~y03GfZ7hwrdCraNuEUI(ClDqfE5aSv9&^goypYlNeThoL&~0vq99 zsBP3y&q@!_bU-j0*-5o#o3E}Id%fqKqy#l&-?UZ6JCz#t6K{$EW%6{WsvMxriu zB;E_P*bbr=Rn}{!!rZ7;UlmJZM=XLmsurKj%u!;7+ z&rS1-gHY^5{0uh4!atioQjNkg#8clgCs=KqM?4e{VuIV|q&$N4h+ju_Fz+4ngGvqD zN&Ez6SIYyqFgriX>CRnYsPg6c>Y z)SC=K?dLC0yJRA2|1Y&}M!o3)RQa>kE7senDftyOf}WJWn>i_pdb4m;1+!3Zw%WQE z^^N8{R>6NzQ&r`O=|Dr&8+Jr>yf3PwgHatBWu1gtE3=UH`1}6^wEyp*8c6=sG+Y67 z)`z!l5958}-@So